def get_basis_lsc(p): """Возвращает результат проверки левого базиса панели""" try: cp = k3.getattr(p, 'commonpos', 0) k3.getsnap() k3.setucs(k3.k_lcs, k3.k_partly, p) k3.initarray(ARRGAB, 0) k3.selbyattr('FurnType==\"010000\"', k3.k_child, p) ps = k3.getselnum(1) k3.objgab3(ps, ARRGAB) h_difference = lambda v1, v2: (max(v1, v2) - min(v1, v2)) / 2.0 + min( v1, v2) log_minus = lambda v: v < 0 agab = [a.value for a in ARRGAB] lpcen = list(map(h_difference, agab[:3], agab[3:])) result = True in map(log_minus, lpcen) if result: k3.putmsg(str(cp) + ' Это номер с левой базой', 0) llbasis.append(p) k3.resnap() except: result = False k3.putmsg(str(cp) + ' Это номер скорее всего погашен.') return result
def sortapanelstocommonpos(params): ''' Cортирует массив содержащий ссылки на полотно панели по возрастанию атрибута CommonPos. Параметр: params - кортеж + Число панелей params[0] - k3.VarArray(). + Cсылки на полотно панели params[1] - k3.Var() ''' nEl = params[0] # Передаем переменную К3 внутрь Python aPanels = params[1] cp_save = params[2] if len(params) > 2 else -1 lPanels = [aPanels[a].value for a in range(int(nEl))] dPan = {} for pan in lPanels: i = 0 err = 1.0 h = k3.Var() hd = k3.Var() h.value = pan while err == 1.0 and i < 10: i += 1 err = k3.getobjhold(h, hd) cp = k3.getattr(hd.value, "FurnType", '010000') if cp != '010000': break h = k3.Var() h.value = hd.value cp = k3.getattr(hd.value, "Commonpos", -99) if cp != -99: if (cp not in list(dPan.keys())): dPan[cp] = [] dPan[cp].append(pan) keys_dPan = list(dPan.keys()) keys_dPan.sort() i = 0 for pan in keys_dPan: for s in dPan[pan]: aPanels[i].value = s i += 1
def __init__(self, obj=None, l_commonpos=[]): self.handle = obj self.l_commonpos=l_commonpos if obj is not None: self.commonpos = k3.getattr(obj, "UDetNumber", -1) self.unicid = k3.getattr(obj, "UnitPos", 0) self.ft = k3.getattr(obj, "FufrnType", '') self.karkasnumb = k3.getattr(obj,"KarkasNumb",-1) if self.commonpos > 0: if self.commonpos in l_commonpos: # print("Панель уже указана ", self.commonpos) self.raster = Raster() self.raster.raster_procent = -10 else: self.raster = Raster(self.handle) print("Панель ", self.commonpos) if self.raster.raster_procent == -1 or self.raster.num_pixeles_in_zone_visible < 1: pass else: l_commonpos.append(self.commonpos)
ArrPans = Ut.getListArrayAllObjectsScene( AttrFilter='left(furntype,2)==\"01\"') ArrBoxs = Ut.getListArrayAllObjectsScene( AttrFilter='left(furntype,4)==\"3101\"') ArrDsys = Ut.getListArrayAllObjectsScene(AttrFilter='furntype==\"210000\"') ArrRubb = Ut.getListArrayAllObjectsScene( AttrFilter='left(furntype,5)==\"10001\"') psc = k3.Var('psc') # Панели for elem in [elem for Arr in ArrPans for elem in Arr]: obj = elem.value if isinstance(obj, k3.K3Obj): if k3.isassign("FurnType", obj): tt = k3.getattr(obj, "FurnType", "") else: tt = 'xxxxxx' # находим панели, но не полотна панелей if tt[:2] == '01' and tt[2:] in ['0000', '1000']: continue Number = k3.getattr(obj, "Number", "") # Pans[obj] = Number if Number in Pans: Pans[Number].append(obj) else: Pans[Number] = [obj] # Ящики Boxs = GetChildPans(ArrBoxs)
NameAtrPos="CommonPos" Pans = {} Dsys = {} ArrPans = Ut.getListArrayAllObjectsScene(AttrFilter='left(furntype,2)==\"01\"') ArrBoxs = Ut.getListArrayAllObjectsScene(AttrFilter='left(furntype,4)==\"3101\"') ArrDsys = Ut.getListArrayAllObjectsScene(AttrFilter='furntype==\"210000\"') ArrRubb = Ut.getListArrayAllObjectsScene(AttrFilter='left(furntype,5)==\"10001\"') psc=k3.Var('psc') num = 0 # Панели for obj in [elem.value for Arr in ArrPans for elem in Arr if isinstance(elem.value, k3.K3Obj)]: if k3.isassign("FurnType", obj): tt = k3.getattr(obj, "FurnType", "") else: tt = 'xxxxxx' # находим панели, но не полотна панелей if tt[:2] == '01' and tt[2:] in ['0000', '1000']: continue Number = k3.getattr(obj, "Number", "") if Number in Pans: Pans[Number].append(obj) else: Pans[Number] = [obj] # Ящики BxUn = {} # Находим одинаковые по составу панелей ящики Boxs = GetChildPans(ArrBoxs)
Возвращает строку pl_pnt полученную в результате выполнения операций с первыми nElStr элементами массива aNAtr Выполняет expression для строки с разделителями ; Например: '{a=getattr(0,"priceid",0);priceinfo(a,"MATTYPENAM",1)+" "+STR(priceinfo(a,"THICKNESS",1))+" мм"' ''' #import wingdbstub import k3 # Подключаем модуль k3 params=k3.getpar() pl_pnt,nElStr,aNAtr = params[0],params[1],params[2] S_val = '' v_result,v_error = k3.Var(), k3.Var() for i in range(int(nElStr)): elem = aNAtr[i] vv = elem.value if type(elem.value)==float else k3.getattr(0,elem.value,elem.value) if type(vv) in [int, float]: if abs(vv-int(vv))<0.0001: vv = int(vv) else: pos = k3.instr(1,vv,"{",1) if pos>0: l_vv=len(vv) cod = k3.right(vv,l_vv-pos) lcod=cod.split(';') if len(lcod)>0: for cod in lcod: k3.expression(cod,v_result,v_error) if len(v_error.value)>1: print ('Stamp.dbf ' + v_error.value + ' в выражении: '+cod)
'Т' if res == (True, True) or res == (False, False) else 'Л', dictSlot[int(k3.findinarray(mask, int(s.Side)))], int(round(s.Shift, 0)), int(s.Width), int(s.Depth)) if len(pazcom) > 0: pazcom += ';' pars[3].value = 1 if FrontF == True else 0 lUnitCodeOut = [ '3102', # Боковые стенки ящиков '3101', '2101', # Фасад ящика ] # Нужно убирать см.эскиз и примечание паза для исключаемых if k3.getattr(pan,"UnitCode",'') in lUnitCodeOut and \ k3.getattr(pan,"ParentPos",0) and \ k3.getattr(pan,"TopParentPos",0): isEskis.value = 0 else: slt += pazcom PathIn = 0 InfoPoly = Panel.getPanelPathInfo( pan, PathIn, IsCuts=False) # Получаем информацию по результирующему полилайну dBand = {'D': 0, 'C': 0, 'E': 0, 'B': 0} for i, pp in enumerate(InfoPoly.paths): # пошли по контурам dictT = { 'D': '',
#print LayName KeyOnLay = True if arrprop[i].value==1: k3.layers(k3.k_on, LayName) break if KeyOnLay == False: k3.layers(k3.k_new, LayName) k3.layers(k3.k_on, LayName) lObj = {} k3.selbyattr('Posit==999',k3.k_partly,k3.k_all,k3.k_done) n = int(k3.sysvar(61)) print(n) if n == 0: bx = k3.box(0,0,0,10,10,10) GUID = str(uuid.uuid4()) k3.attrobj(k3.k_attach, 'ElemName', k3.k_done, k3.k_partly, bx, GUID) k3.attrobj(k3.k_attach, 'Posit', k3.k_done, k3.k_partly, bx, 999) k3.chprop(k3.k_layer, k3.k_partly, bx, k3.k_done, LayName) bx = bx[0] # k3.box возвращает tuple if n > 0: bx = k3.getselnum(1) GUID = k3.getattr(bx,"ElemName",'') k3.layers(k3.k_off, LayName) params[0].value = GUID params[1].value = bx
def __init__(self, Name=None, Hold=None, Diameter=None, Hohe=None, MX=[], MY=[], MZ=[], Side='X', Panel=None): self.Name = Name self.Hold = Hold self.Diameter = delZero(Diameter) self.counter = Counter() self.MX = MX self.MY = MY self.MZ = MZ self.XV = MX[2] self.YV = MY[2] self.ZV = MZ[2] self.Xc = MX[3] self.Yc = MY[3] self.Zc = MZ[3] self.objs = [] self.list_of_entries = [] self.DrawDim = True self.DrawNote = True if 0 <= abs(MX[2] - 1.0) < 0.001: self.Side = 'B' elif 0 <= abs(MX[2] + 1.0) < 0.001: self.Side = 'C' elif 0 <= abs(MY[2] - 1.0) < 0.001: self.Side = 'D' elif 0 <= abs(MY[2] + 1.0) < 0.001: self.Side = 'E' elif 0 <= abs(MZ[2] - 1.0) < 0.001: self.Side = 'F' elif 0 <= abs(MZ[2] + 1.0) < 0.001: self.Side = 'A' else: self.Side = 'X' # Если отверстие висит в воздухе над панелью # Требуется посчиать реальную глубину сверловки if self.Side in ['A', 'F']: if self.Zc < 0.1: Hohe = round(Hohe + self.Zc + 0.1) elif self.Zc > Panel.panelThickness + 0.1: th_cover = 0 if Panel.cover_count > 0: for th_c in Panel.cover_info.keys(): th_cover = th_cover + Panel.cover_info[th_c][2] Hohe = round(Panel.panelThickness + th_cover - (self.Zc - Hohe) + 0.1) self.Hohe = delZero(Hohe) if (Panel.panelThickness - Hohe) < 0.01 and (self.Side in ['A', 'F']): self.Through = True else: self.Through = False if self.Side == 'F': self.counter.drill_F = True elif self.Side == 'A': self.counter.drill_A = True self.HolTypes = k3.getattr(Hold, 'priceid', 0) sVal = k3.priceinfo(self.HolTypes, 'MatName', '', 1) self.Name = str(sVal) sVal = k3.priceinfo(self.HolTypes, 'Alias', '', 1) self.Alias = str(sVal)
obj_k3 = k3.Var() k3.switch(k3.k_autosingle,k3.k_on) #k3.selbyattr('left(FurnType,2)==\"10\"&&Posit!=10',k3.k_prompt,str('Выберите изделие'),k3.k_interact) #3.selbyattr('Posit!=10',k3.k_prompt,str('Выберите изделие'),k3.k_interact) k3.selbyattr('IsAssign(\"FurnType\")',k3.k_prompt,str('Выберите изделие'),k3.k_stayblink,k3.k_interact,k3.k_done) sel = k3.sysvar(61) if sel==0: Arr = Ut.getListArrayAllObjectsScene(AttrFilter='IsAssign(\"FurnType\")') # k3.cancel listUP = [] listUN = [] for i in range(int(sel)): obj_k3.value = k3.getselnum(i+1) # UnitPosObj = k3.getattr(obj_k3,'UnitPos',0) listUP.append(int(k3.getattr(obj_k3,'UnitPos',0))) UnitName = k3.getattr(obj_k3,'UnitName','') # listUN.append(k3.getattr(obj_k3,'UnitPos',0)) if len(UnitName) == 0: UnitName = k3.getattr(obj_k3,'ElemName','') listUN.append(UnitName) # if sel>0.: # obj_k3.value = k3.getselnum(1) # # UnitPosObj = k3.getattr(obj_k3,'UnitPos',0) # # listUP.append(k3.getattr(obj_k3,'UnitPos',0)) # UnitName = k3.getattr(obj_k3,'UnitName','') # listUN.append(k3.getattr(obj_k3,'UnitPos','')) # if len(UnitName) == 0: # UnitName = k3.getattr(obj_k3,'ElemName','') listArrAllObjects=Ut.getListArrayAllObjectsScene() # Заполнение всеми элементами сцены
339.: 'DecTPrint', 340.: 'DecWork', 341.: 'DecPatina', } # Было нужно для сверки наличия лака глянцевого dCheck = { 338: 9302 # Глянцевый } ArrPans = Ut.getListArrayAllObjectsScene(AttrFilter='left(furntype,2)==\"01\"') # Панели for Arr in ArrPans: for elem in Arr: obj = elem.value if isinstance(obj, k3.K3Obj): if k3.isassign("FurnType", obj): tt = k3.getattr(obj, "FurnType", "") else: tt = 'xxxxxx' # находим панели, но не полотна панелей if tt[:2] == '01' and tt[2:] in ['0000', '1000']: continue Panel.panelInit(obj) Panel.getPanelProperty(obj) KeyMenu = False lMenu = [] lGDecA = [] lGDecF = [] lIDDecA = {} lIDDecF = {} dPans = {}