def test(): pan = k3.Var() k3.objident(k3.k_prompt, 'Укажите панель', k3.k_interact, pan) pat = k3.Var() k3.objident(k3.k_prompt, 'Укажите контур выреза', k3.k_interact, pat) putcutrex(Panel=pan.value, Pat=pat, Dept=12) k3.mbpanel(k3.k_execute,pan.value )
def ptransGcsToPsc(args=[]): ''' Принимает на вход список кратный 3 и преобразует точки из ГСК системы в ПСК. :: ...point = ptransGcsToPsc(args) ,где На входе args - список вида [Real,Real,Real,Real,Real,Real,....,Real,Real,Real,] На выходе args - список вида [Real,Real,Real,Real,Real,Real,....,Real,Real,Real,] ''' result = [] Xc, Yc, Zc = k3.Var(), k3.Var(), k3.Var() while len(args) > 0: point, args = PointOutListPoint(args) k3.ptranscs(3, 0, point, Xc, Yc, Zc) result.append(Xc.value) result.append(Yc.value) result.append(Zc.value) return list(map(f_round, result))
def udgetinfo(self, pos): '''Получить информацию о категории или свойствею Возвращает: Имя, Идентификатор, Тип''' Name, Variable, ValType = k3.Var(), k3.Var(), k3.Var() Name.value, Variable.value, ValType.value = '', '', 0 result = _udgetinfo(pos, Name, Variable, ValType) return Name.value, Variable.value, ValType.value
def g(nm): ValType = k3.Var() PrM = k3.Var() PrM.value = 0 sVal = k3.Var() k3.udgetentity(nm[0], ValType, PrM, sVal) # print(PrM.value) nm[2] = PrM.value
def getExistsLayerAll(self): '''Возвращает словарь , где ключом является имя существующего слоя, а значением является кортеж состояний погашен, блокирован''' layer_c=self.getNameLayersAll() layer_d = {} keyOFF, keyLOCK = k3.Var(), k3.Var() f = lambda name: int(k3.existslayer(name, keyOFF, keyLOCK)) fIB = lambda I: False if abs(I-0.01) > 0.02 else True for l in layer_c[0]: if f(l) > 0: layer_d[l] = (fIB(keyOFF.value), fIB(keyLOCK.value)) return layer_d
def ud_get(self): try: vType = k3.Var() sVal = k3.Var() rVal = k3.Var() res = k3.udgetentity("u69_CRTPan_1", vType, rVal, sVal) self.mask = int(rVal.value) except Exception as inst: print(type(inst)) # the exception instance print(inst.args) # arguments stored in .args print(inst)
def udgetentity(self, pos): '''Получить значение свойства по переменной или по позиции''' def _isint(val): if isinstance(val, float): if abs(val - int(val)) < 0.0001: return int(val) return val ValType, dVal, sVal = k3.Var(), k3.Var(), k3.Var() ValType.value, sVal.value, dVal.value = '', '', 0 if pos > 0: _udgetentity(pos, ValType, dVal, sVal) return sVal.value if ValType.value in (4, 11) else _isint(dVal.value)
def start_object_raster(): obj = k3.Var() k3.objident(k3.k_interact, obj) start_time = time.time() p = Raster(obj.value) end_time = time.time() - start_time print(str(datetime.timedelta(seconds=end_time)))
def PropInfo(self,ID,Name, defVal=0, Typ=1): '''возвращает значение свойство Name изделия с ID из базы''' result=None #try: result=k3.Var() result=k3.priceinfo(ID,Name,defVal,Typ) #except KeyError, ID,Name: #raise AttributeError, ID return result
def findgabscene(params=[]): """ :param params: Список указателей на объекты сцены. :return: Возвращает массив из 6-ти элементов или 6 координат минимальных и максимальных габаритов сцены. .. hint:: **Варианты вызова из K3Mebel:** :: ...macro protopath+"Utilites_K3.py" "FindGabScene" byref x1 byref y1 byref z1 byref x2 byref y2 byref z2 done ; или :: ...defarr xm[6]; ...macro protopath+"Utilites_K3.py" "FindGabScene" byref xm done; """ if len(params) not in [1, 6]: raise BaseException( '\nНеверное число аргументов\nТребуется передать массив из 6-ти элементов или 6 переменных в качестве аргументов' + str(len(params))) maxPoint = [k3.Var() for i in range(6)] for i in range(6): maxPoint[i].value = 999999999 if i < 3 else -999999999 xm = k3.VarArray(6) nobj = k3.sysvar(62) m = getListArrayAllObjectsScene() tobj = [] for mi in m: try: for a in mi: tobj.append(a.value) except: k3.putmsg('Число ' + str(len(tobj)) + ' из ' + str(int(nobj))) pass for i in tobj: try: err = k3.objgab3(i, xm) for j in range(6): maxPoint[j].value = min(maxPoint[j].value, xm[j].value) if j < 3 else max( maxPoint[j].value, xm[j].value) except: pass if type(params[0]) == k3.VarArray: for i in range(6): params[0][i].value = maxPoint[i].value elif type(params[0]) == k3.Var: for i in range(6): params[i].value = maxPoint[i].value else: for i in range(6): params[i] = maxPoint[i].value return params
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 get_pnt_interact(): """Возвращает указатель на мебельную панель в интерактиве""" try: pnt = k3.Var() k3.fltrparamobj(1, 61) k3.objident(k3.k_partly, k3.k_interact, pnt) pan = pnt.value except: pan = None k3.fltrparamobj(0) return pan
def GetData(ScrMod, ParGroup): # Чтение скрэйтча Data=''; CurIDM=k3.Var('CurIDM'); numpar=k3.cntvarscr(ScrMod,ParGroup) if numpar>0: DSArr = k3.VarArray(int(numpar)) numP = k3.namevarscr(ScrMod,ParGroup,DSArr) for ScrPar in DSArr: nullout=k3.getscratch(ScrMod,ParGroup,ScrPar,CurIDM,psc); Data += "#"+str(CurIDM.value) return Data
def dialog(): vFailColor = k3.Var() k3.getvarinst(2, "FailColor", vFailColor, 12) FailColor = vFailColor.value k3.select(k3.k_stayblink, k3.k_partly, llbasis, k3.k_done) ok_flag = k3.alternative( "Поиск панелей с левой базой", k3.k_msgbox, k3.k_picture, 1, k3.k_beep, 1, k3.k_text, k3.k_left, "Панели с левой базой выделены мерцанием", "", "Отключить мерцание найденных объектов?", k3.k_done, "Да", "Нет", "Изменить цвет", k3.k_done) if (ok_flag[0] == 1): k3.select(k3.k_all, k3.k_done) elif (ok_flag[0] == 3): k3.chprop(k3.k_color, k3.k_partly, k3.k_previous, k3.k_done, FailColor)
def _lset(v): t = k3.Var() # print(type(v)) if type(v) in [str, int, float]: t.value = v return (k3.k_byref, t) elif type(v) == k3.VarArray: t = v #return t return (k3.k_byref, t) elif isinstance(v, k3.K3Obj): t.value = v return (k3.k_byref, t) elif type(v) == k3.Var: t = v return (k3.k_byref, t) else: return None
def get_all_child_by_attr(obj, attrname=None): pnt = k3.Var() lchild = [] n_list = k3.getcntobjga(obj) a_list = k3.VarArray(int(n_list)) k3.scang(obj, a_list) for e in a_list: lchild.append(e.value) for e in lchild: if k3.getobjhold(e, pnt) > 0: if k3.compareobj(panel, obj) > 0: pass elif e not in lchild: lchild.append(e) lresult = [] if not attrname is None: for e in lchild: if k3.isassign(attrname, e) > 0: lresult.append(e) else: lresult = lchild return lresult
if k3.findinarray(tAK3, pid, 1, nG) == 0: KeyMenu = menu_append( PropInfo(priceid, "MATNAME", 1, "") + " нельзя использовать для данной вариации отделок" ) else: KeyMenu = menu_append( "Данная вариация отсутствует в списке допустимых" ) if KeyMenu: if Shpon: type = "ШПОН" if isMDF: type = "МДФ" if isDSP: type = "ДСП" vFailColor = k3.Var() k3.getvarinst(2, "FailColor", vFailColor, 12) FailColor = vFailColor.value k3.select(k3.k_stayblink, k3.k_partly, obj, k3.k_done) ok_flag = k3.alternative( "Предупреждение", k3.k_msgbox, k3.k_picture, 1, k3.k_beep, 1, k3.k_text, k3.k_left, "Панель выделена мерцанием", "Тип проверки: " + type, "У выделенной панели на пласти <'{}'> назначены группы:" .format(side), ', '.join( map(lambda x: nGroups[x], dPans[side])), "", ', '.join(lMenu), "", "Отключить мерцание найденных объектов?", k3.k_done, "Да", "Нет", "Изменить цвет",
# -*- coding: cp1251 -*- import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) import k3 #import wingdbstub from tkinter import * from tkinter.ttk import * import Utilites_K3 as Ut NULL=k3.renumerate() sy = k3.sysvar(62) 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))
def Draw(self, Side="F", PathIn=1, IsOBJDXF=True, LAYERTODXF=False, OBJ_DXF=None): '''Изображение отверстия''' userproperty = Userproperty() cir = k3.Var() list_objs = [] g_upr = k3.GlobalVar('g_upr') gupr = g_upr.value #-- Нормируем вектор направления #self.getNormal() result = False issign = lambda S: 1 if S == 'A' else -1 if self.Side == Side or self.Through == True: holesPath = k3.mpathexpand("<k3files>") + '\Holes\\' nm = holesPath + str(self.Diameter) + ( '_' + str(self.Hohe) if not self.Through else '') + '.k3' cir = k3.circle(self.Xc, self.Yc, 0., k3.k_normal, (0., 0., 1.), self.Diameter / 2.0)[0] ct = cir # ставим особый символ для идентификации отверстий try: if IsOBJDXF: if LAYERTODXF: self.Change(cir, self.set_name_layer_drill()) OBJ_DXF.addCounterHandle(cir) if gupr != 1.0: print(gupr) ct = k3.scale(k3.k_copy, cir, k3.k_done, self.Xc, self.Yc, 0., gupr) else: if gupr != 1.0: print(gupr) k3.scale(k3.k_nocopy, cir, k3.k_done, self.Xc, self.Yc, 0., gupr) if k3.fileexist(nm) > 0: tt = k3.append(nm, self.Xc, self.Yc, 0.) if len(tt) > 0: tt = k3.group(tt) if gupr != 1.0: k3.scale(k3.k_nocopy, tt[0], k3.k_done, self.Xc, self.Yc, 0., gupr) self.objs.append(tt[0]) except: pass result = True self.objs.append(cir) #k3.objident(k3.k_last,1,cir) k3.chprop(k3.k_lwidth, cir, k3.k_done, userproperty.DrawLineS) if self.Through: dss = '' else: dss = "x" + str(self.Hohe) elif self.Side in ['B', 'C', 'D', 'E', 'X']: # Торцевые отверстия #-- Внутренняя линия отверстия chkn = 0 xc1 = self.Xc yc1 = self.Yc xc2, yc2 = self.getEndPointTHole() colcen = 60 lineCen = Central(xc1, yc1, 0, xc2, yc2, 0) #k3.chprop(k3.k_grfcoeff,k3.k_last,1,k3.k_done,1) k3.setucs(xc1, yc1, 0, xc2, yc2, 0, xc2 * 1.5, yc2 * 1.5, 0) recObj = k3.rectangle(k3.k_3points, 0, self.Diameter / 2.0, 0, self.Hohe, self.Diameter / 2.0, 0, 0, -self.Diameter / 2.0)[0] k3.setucs(k3.k_previous) self.objs.extend([lineCen, recObj]) if IsOBJDXF: if LAYERTODXF: self.Change(recObj, self.set_name_layer_drill()) OBJ_DXF.addCounterHandle(recObj) OBJ_DXF.addCounterHandle(lineCen) result = True return result
k3.k_text, k3.k_left, "В процессе создания отчета произошла ошибка", "Отчет '{0}' не создан!".format(rep_name), k3.k_done, " OK ", k3.k_done, ) if __name__ == "__main__": import k3 pic_dir = k3.mpathexpand("<Pictures>") cnt_scrap = k3.Var() scrap_rate = k3.Var() margin = k3.Var() block_res = k3.Var() client = k3.Var() joiners = k3.Var() cnt_scrap.value = 50 scrap_rate.value = 2 margin.value = 3.0 block_res.value = False client.value = False joiners.value = False over_percent = 10 ParList = []
# -*- coding: utf-8 -*- import k3 n_scrFas = k3.Var() # Количество групп отделок nullout = k3.getvarinst(2, "n_scrFas", n_scrFas, 0) n_scrFas = int(n_scrFas.value) SrcFasGroup = k3.VarArray(n_scrFas) # ID группы отделки nullout = k3.getarrinst(2, "SrcFasGroup", SrcFasGroup) SrcFasName = k3.VarArray(n_scrFas) # Название группы отделки nullout = k3.getarrinst(2, "SrcFasName", SrcFasName) SrcFasEntF = k3.VarArray(n_scrFas) # Названия переменных для Тыла nullout = k3.getarrinst(2, "SrcFasEntF", SrcFasEntF) SrcFasEntA = k3.VarArray(n_scrFas) # Названия переменных для Лица nullout = k3.getarrinst(2, "SrcFasEntA", SrcFasEntA) def CheckVar(NameVar, ir): return (str(int(k3.GlobalVar(NameVar + str(ir)).value)) if k3.isvardef(NameVar + str(ir)) > 0 else "0") Namescr = "FasadPar" g_Scratch = k3.GlobalVar('g_Scratch') params = k3.getpar() pnt, FasCode = params res = k3.calcvarscr(g_Scratch.value, FasCode.value) # Читаем из скретча nulldf, nulldf1 = k3.Var(), k3.Var() gs_Nfasad = int(k3.GlobalVar('Nfas').value)
def getprotoval(h, name): v = k3.Var() if k3.getprotoval(h, name, v) > 0: return v.value else: return None
for ScrPar in DSArr: nullout=k3.getscratch(ScrMod,ParGroup,ScrPar,CurIDM,psc); Data += "#"+str(CurIDM.value) return Data 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:
def udGetEntity(self, Name=None): '''читает свойство из пользовательских умолчаний''' ValType, sVal, rVal = k3.Var(), k3.Var(), k3.Var() ValType.value, sVal.value, rVal.value = 0, '', 0 err = k3.udgetentity(Name, ValType, rVal, sVal) return err, ValType.value, rVal.value, sVal.value
def getObj(): k3.selbyattr('dsview',k3.k_partly,k3.k_all,k3.k_done) if k3.sysvar(61)>0: obj=k3.getselnum(1) return True, obj return False, None Params = k3.getpar() vnumWmf = Params[0] #k3.Var('vnumWmf') k3.select(k3.k_all) lobj=[] for i in range(int(k3.sysvar(61))): lobj.append(k3.getselnum(i+1)) rs = getObj() if rs[0]: hold=k3.Var() err=k3.getobjhold(rs[1],hold) holdo = hold.value k3.line(0., 0., 0., 100., 0., 0., k3.k_done) ls = k3.Var() k3.objident(k3.k_last, 1, ls) k3.add(k3.k_partly, holdo, ls.value) k3.extract(k3.k_partly, holdo, rs[1]) k3.invisible(k3.k_wholly, lobj) k3.zoom(k3.k_oneview,k3.k_extents) k3.exp2d(k3.k_wmf, k3.k_yes, k3.k_optimized, k3.k_yes, k3.k_fit, k3.k_yes, k3.k_height, 9500, k3.k_width,9500, k3.k_inscribe, k3.k_yes, vnumWmf.value, k3.k_overwrite ) k3.visible(k3.k_wholly, lobj) rs = getObj() k3.add(k3.k_partly, holdo, rs[1]) k3.delete(k3.k_partly, ls.value)
FrontF, NeedEskisA, NeedEskisF = isFront.isfront( Panel) # Является ли пласть F лицом if NeedEskisA: k3.setvarinst(1, "NeedEskisA", 1) if NeedEskisF: k3.setvarinst(1, "NeedEskisF", 1) k3.selbyattr('furntype==\"010000\"', k3.k_child, Panel.holder) p = k3.getselnum(1) nH = k3.getholes(p) if nH > 0: k3.VarArray(int(nH * 15), 'aHoles') nHH = k3.getholes(p, 'aHoles') aHoles = k3.VarArray(int(nHH), 'aHoles') nh = k3.Var() nh.value = int(nH) drs.drill_finder([aHoles, nh], Panel) result = (Panel.rectangle_forma, max(len(Panel.slots), len(Panel.pSlots)), 'holes' in Panel.__dict__.keys()) isEskis.value = 1 if result == (True, 0, False): isEskis.value = 0 dictSlot = {1: 'D', 3: 'C', 5: 'E', 7: 'B', 9: 'X', 0: 'X'} # FrontF = False # True - Лицо по пласти F # if Panel.cover_count > 0:
# Licence: FREE #------------------------------------------------------------------------------- ''' Возвращает строку 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)
NameAtrPos = "CommonPos" Pans = {} # Boxs = {} Dsys = {} # Rubb = {} 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:
def CheckVar(NameVar, ir): # print(str(int(k3.GlobalVar(NameVar+str(ir+1)).value))) return (str(int(k3.GlobalVar(NameVar + str(ir)).value)) if k3.isvardef(NameVar + str(ir)) > 0 else '') Namescr = "FasadPar" g_Scratch = k3.GlobalVar('g_Scratch') params = k3.getpar() pnt = params[0] FasCode = params[1] res = k3.calcvarscr(g_Scratch.value, FasCode.value) # Читаем из скретча # print(res) # print(FasCode.value) n = 7 nulldf, nulldf1 = k3.Var(), k3.Var() aDecor1, aDecor2, aDecor3, aDecor4, aDecor5 = k3.VarArray(n), k3.VarArray( n), k3.VarArray(n), k3.VarArray(n), k3.VarArray(n) fDecor1, fDecor2, fDecor3, fDecor4, fDecor5 = k3.VarArray(n), k3.VarArray( n), k3.VarArray(n), k3.VarArray(n), k3.VarArray(n) aDecor6, aDecor7, aDecor8, aDecor9 = k3.VarArray(n), k3.VarArray( n), k3.VarArray(n), k3.VarArray(n) fDecor6, fDecor7, fDecor8, fDecor9 = k3.VarArray(n), k3.VarArray( n), k3.VarArray(n), k3.VarArray(n) #KCur=0; gs_Nfasad = int(k3.GlobalVar('Nfas').value) # print('scrDialog.py',gs_Nfasad) lNfasad = list(range(gs_Nfasad)) lNfasad.reverse() ok_flag = k3.setvar(