def ref_pictures(subname, nm_file, j_name): if subname in nm_file: abs_ph = k3.sysvar(2).split('\\' + subname + '\\')[0] + j_name abs_nm = k3.sysvar(2).split('\\' + subname + '\\')[-1].split('.')[:-1][0] full_nm = abs_ph + abs_nm + ".jpg" if k3.fileexist(full_nm) > 0: k3.removefile(full_nm) e = k3.exp2d(k3.k_jpeg, k3.k_mono, k3.k_inscribe, k3.k_yes, k3.k_vport, 3, k3.k_size, 2500, 1500, k3.k_continue, full_nm, k3.k_overwrite) else: k3.putmsg( 'Ошибка размещения файла! Доступно только для файлов чертежей в папке ' + subname, 0)
def allnoteed(): """""" try: nl = k3.fltrtype('Note') k3.select(k3.k_partly, k3.k_all, k3.k_done) n = k3.sysvar(61) note = Note() lsobj = [] info = k3.VarArray(54) if n > 0: for i in range(int(n)): lsobj.append(k3.getselnum(i + 1)) for i in lsobj: note.holder = i note.getinfo() #lr = sf(note) #note.info[19] = '(' + str(lr) + ') ' + str(note.info[12]) #for j in range(len(note.info)): #info[j].value = note.info[j] #k3.putnoteinfo(note.holder, info) gi = 0 while revisor(note) and gi < 3: note.info[12] = abs(note.info[12] - 1.0) for j in range(len(note.info)): info[j].value = note.info[j] k3.putnoteinfo(note.holder, info) note.getinfo() gi += 1 except: nl = k3.fltrtype(0) finally: nl = k3.fltrtype(0)
def get_allPanel(): #pnt = k3.Var() try: allp = GetListAllPanel() return allp except: try: # включаем фильтр по панелям k3.fltrparamobj(1, 61) # выбираем панель (для демонстрации) и помещаем в pnt #k3.objident(k3.k_interact, pnt) #panel = pnt.value k3.select(k3.k_partly, k3.k_all) allp = [] n = k3.sysvar(61) # выключаем фильтр k3.fltrparamobj(0) if n > 0: for i in range(int(n)): allp.append(k3.getselnum(i + 1)) return allp except Exception as inst: print(type(inst)) # the exception instance print(inst.args) # arguments stored in .args print(inst) fltrparamobj(0) # сбрасываем фильтр return None
def invisible_list_panhole(allp, get_all_child_by_attr): if not allp is None: for panel in allp: # Ищем полотно панели k3.selbyattr('FurnType=="010000"', k3.k_child, panel) # Если нашли if k3.sysvar(61) > 0: polotno = k3.getselnum(1) n = k3.getholes(polotno) arr = k3.VarArray(int(n * 15), 'arr') n = k3.getholes(polotno, 'arr') # Список всех отверстий панели lholes = [a.value for a in arr] # Список всех деталей крепежа, которым принадлежат отверстия lfix = [lholes[i] for i in range(2, len(lholes), 15)] # Реальные дети панели # Крепеж child_pan_fix = [] for e in lfix: if (k3.findobjholdg(panel, e)) > 0: child_pan_fix.append(e) if len(child_pan_fix) > 0: l_hole_rem = [] for e in child_pan_fix: # список отверстий крепежа c_hole_rem = get_all_child_by_attr(e, attrname='HoleType') for h in c_hole_rem: if not h in lfix: l_hole_rem.append(h) for e in l_hole_rem: if k3.penetrate(e, polotno) == 2: k3.invisible(k3.k_partly, e)
def getListArrayAllObjectsScene(AttrFilter=''): ''' Возвращает список массивов к3 заполненных всеми объектами сцены ''' listArr = [] ng = k3.sysvar(62) if ng > 0: nn = 32767 if ng > 32767 else int(ng) arr = k3.VarArray(nn) if len(AttrFilter) < 3: m = k3.scanscene(arr) else: m = k3.scan_scene(arr, AttrFilter)[0] # print(m) if m > 0: arr_1 = k3.VarArray(int(m)) k3.copyarray(arr_1, 1, arr, 1, int(m)) listArr.append(arr_1) m1 = 0 i = 0 while ng > nn: i = i + 1 nt = ng - nn nt = 32767 if nt > 32767 else nt arr = k3.VarArray(int(nt)) m1 = k3.scanscene(arr, m + 1) nn = nt + nn m = m + m1 listArr.append(arr) return listArr
def getListObjVisual(): '''Возвращает список видимых объектов''' lObj = [] k3.select(k3.k_all, k3.k_done) n = int(k3.sysvar(61)) if n > 0: for i in range(1, n + 1): lObj.append(k3.getselnum(i)) return lObj
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 sDimLayer(): if k3.isattrdef("AutoPlace")<1: k3.attribute( k3.k_create, "AutoPlace", "Номер вида на котором определен размер", k3.k_real, 5, 0 ) if k3.isattrdef("VidDimPlace")<1: k3.attribute( k3.k_create, "VidDimPlace", "Номер вида на котором определен размер", k3.k_real, 5, 0 ) if k3.isattrdef("NumType")<1: k3.attribute( k3.k_create, "NumType", "NumType", k3.k_real, 5, 0 ) k3.layers(k3.k_new, "VidDim_1") k3.layers(k3.k_new, "VidDim_2") k3.layers(k3.k_new, "VidDim_3") k3.layers(k3.k_new, "VidDim_4") k3.selbyattr( "NumType!="+str(-999), k3.k_all, k3.k_done ) if k3.sysvar(61): #-- Удаляем старые номера объектов k3.delete(k3.k_previous, k3.k_done)
def start_ppi(): PANEL = PanelRectangle() k3.switch(k3.k_autosingle, k3.k_on) try: k3.selbyattr('FurnType=="010100"', k3.k_interact) k3.switch(k3.k_autosingle, k3.k_off) if k3.sysvar(61) > 0: el = k3.getselnum(1) start_time = time.time() pInfo = PANEL.getPanelPathInfo(el) end_time = time.time() - start_time print(str(datetime.timedelta(seconds=end_time))) except: k3.switch(k3.k_autosingle, k3.k_off)
def get_obj_scene(self, fun=None): """Заполняет список объектов сцены. Возврашает Истина если объекты есть и список составлен и Ложь если объектов сцены нет fun - функция возвращаеющая список нужных объектов """ n = 0 self.l_note=[] if fun is None: k3.select(k3.k_all) n = k3.sysvar(61) if n > 0: self.lstobj = [] for i in range(int(n)): self.lstobj.append(k3.getselnum(i + 1)) else: self.lstobj = [a for a in fun()] self.nnote = len(self.lstobj) n = len(self.lstobj) if n > 0: return True else: return False
def isorder(params): ''' Возвращает информацио текущем состоянии сцены. + 0 - текущее состояние ФАЙЛ + 1 - текущее состояние ЗАКАЗ Варианты вызова из K3Mebel: macro protopath+"Utilites_K3.py" "isorder" byref err done ; ''' if len(params) != 1: raise BaseException( '\nНеверное число аргументов\nТребуется передать перменную в качестве аргумента' + str(len(params))) if type(params[0]) != k3.Var: raise BaseException( '\nНеверный тип аргументов\nТребуется передать перменную в качестве аргумента' + str(len(params))) try: curfile = k3.sysvar(2) basedate = 0 if curfile[-2:] == 'k3': if k3.fileexist(curfile) == 1: basedate = os.stat(curfile).st_mtime bx = k3.box(0, 0, 0, 1, 1, 1) k3.delete(bx, k3.k_done) time.sleep(0.1) k3.saveorder(0) curdate = os.stat(curfile).st_mtime if basedate != curdate: params[0].value = 1.0 else: params[0].value = 0.0 else: params[0].value = 0.0 except: raise BaseException('При выполнении ISORDER возникли ошибки!')
# -*- 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))
# import wingdbstub import k3 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)
def __init__(self): self.geti() self.id_order = k3.sysvar(2).split('\\')[-2] self.path_order = k3.mpathexpand("<PROJECTS>")
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
def get_raster_domain(self): try: a = k3.VarArray(10) n = k3.sysvar(60) delta_raster_k = 300 result = False nnn = k3.getsnap() for i in range(2): a[0].value = (i + 1) * delta_raster_k # Размер растра a[1].value = self.handle # Объект a[2].value = 5 # глубина расчета k3.setucs(k3.k_vcs) self.raster_procent = k3.rasterdomain(1, a) # Процент видимости # print('Процент видимости =', self.raster_procent) if self.raster_procent > 0: a[0].value = 2 # self.num_pixeles_in_zone_visible = k3.rasterdomain(3, a) # узнать число пикселей внутри зоны видимости с расстоянием от границы больше равному a[0] # print('число пикселей внутри зоны видимости =', self.num_pixeles_in_zone_visible) if self.num_pixeles_in_zone_visible > 0: for j in range(10): a[0].value = 10-j # расстояние от границы в пикселях # print('расстояние от границы в пикселях ',a[0].value) a[1].value = 0 # 1-В гск 0-вск a[2].value = 1 # 1 - только граница 0 - все lpoint = [] while k3.rasterdomain(4, a) > 0: # Получить очередную видимую точку lpoint.append(Based_point_label(a[3].value, a[4].value, a[5].value)) if len(lpoint) > 3: s = [i for i in range(0, len(lpoint), int(len(lpoint)/3))] for i in s: self.lpoint.append(lpoint[i]) else: self.lpoint = lpoint if len(lpoint)>0: self.visible = True break break else: pass nv = k3.rasterdomain(2, a) # print("---- Попытка ------- ", i) self.keyzoom = True self.fo_zoom() else: if self.keyzoom: print('Панель невидна, выходим.') self.visible = False break else: self.keyzoom = True self.fo_zoom() nv = k3.rasterdomain(2, a) # self.fo_zoom() nnn = k3.resnap() except: self.fo_zoom() nnn = k3.resnap() nv = k3.rasterdomain(2, a) #
def start_scene_raster(): start_time = time.time() s = Scene(fun=GetListAllPanel) s.draw_rectangle_scene() print('Число панелей = ', len(s.lstobj)) l_commonpos=[] list_not_vis = [] list_vis = [] objects_scene = [Object_scene(obj,l_commonpos) for obj in s.lstobj] for obj in objects_scene: if ((not obj.raster.visible) and not (obj.commonpos in list_vis) and not (obj.commonpos in list_not_vis)): list_not_vis.append(obj.commonpos) elif obj.raster.visible: if not (obj.commonpos in list_vis): list_vis.append(obj.commonpos) if obj.commonpos in list_not_vis: list_not_vis.remove(obj.commonpos) s.list_not_vis=list_not_vis s.list_vis=list_vis # Сначала надо взять те у которых меньше всего точек # Сортируем по возрастанию obj.raster_procent при условии , что в obj.lpoint есть хотя бы одна точка key_fun = lambda v: len(v.raster.lpoint) if v.raster.raster_procent>0 else -1 sqr_fun = lambda v1, v2: (v1 - v2) ** 2 sqrt_fun = lambda a, b: k3.sqrt(sum(map(sqr_fun, a, b))) objects_scene.sort(key=key_fun) while objects_scene[0].raster.raster_procent<0: objects_scene.pop(0) for obj in objects_scene: # Ищем положение точек # Найти ближайшую psn = None for iv, v in enumerate(obj.raster.lpoint): for ipb, pb in enumerate(s.based_label.childobjects): #ps=k3.distance(v.basedpoint, pb.basedpoint) ps = sqrt_fun(v.basedpoint, pb.basedpoint) if psn is None: psn = ps elif ps < psn: obj.ds = (ps, iv, ipb, s.based_label.childobjects[ipb]) psn = ps try: if len(obj.ds) > 0: s.based_label.childobjects.pop(obj.ds[2]) # print(obj.ds, objects_scene.index(obj), len(objects_scene)) except: pass end_time = time.time() - start_time print(str(datetime.timedelta(seconds=end_time))) k3.getsnap() ffun = lambda v1, v2: v2 - v1 k3.setucs(k3.k_vcs) for obj in objects_scene: try: if obj.raster.visible: tp = [list(obj.raster.lpoint[obj.ds[1]].basedpoint), list(obj.ds[3].basedpoint)] tp[0][2] = max(tp[0][2], tp[1][2]) tp[1][2] = tp[0][2] dd = list(map(ffun, tp[0], tp[1])) dx_2 = -1 if dd[0] < 0 else + 1 #k3.line(tp) #n = Note(Text1=str(obj.commonpos)) note = Note(normal=(0, 0, 1), Text1= str(delZero(round(obj.commonpos, 1))), Text2="", point1=tp[0], relativ1=dd, relativ2=(dx_2, 0, 0)) note.flip=False note.draw() nmac='\\complexlabeldraw\\complexlabel.py' CurrVi = int(k3.sysvar(51)) CV = "VidDim_"+str(CurrVi) k3.attrobj( k3.k_attach, "AutoPlace", k3.k_done, note.holder, 1) k3.attrobj( k3.k_attach, "VidDimPlace", k3.k_done, note.holder, CurrVi) if obj.karkasnumb!=-1 : k3.attrobj( k3.k_attach, "KarkasNumb", k3.k_done, note.holder, obj.karkasnumb) k3.chprop( k3.k_layer, note.holder,k3.k_done, CV) k3.attrobj( k3.k_attach, "NumType", "NumHolder", "NmMacNums", "FT_Holder", k3.k_done, note.holder, 1, obj.unicid, nmac, obj.ft) s.l_note.append(note) except: print("Ошибка данных:", sys.exc_info()[0]) k3.resnap() return s
def ref_drafts(): nm_file = k3.sysvar(2) subname = 'K3_Drafts' j_name = '\\WMF_Drafts\\' ref_pictures(subname, nm_file, j_name)
def ref_complex(): nm_file = k3.sysvar(2) subname = 'K3_Complex' j_name = '\\WMF_Complex\\' ref_pictures(subname, nm_file, j_name)
import os import fnmatch import k3 import glob import shutil from sp_fsys import * class File_CNC: def __init__(self, fnm): self.fulname = fnm self.filename = k3.getfiletitle(fnm)[:-4] self.filetype = k3.getfiletitle(fnm)[-3:] ProjPath = k3.getfilepath(k3.sysvar(2)) CNCPATH = ProjPath + 'CNC\\' LISTSUBPATH = [ 'Livra-5', 'Livra-5\\Выполнено', 'Livra-5\\Доп', 'Livra-5\\Доп\\Выполнено', 'Rover-20', 'Rover-20\\Выполнено', 'Rover-20\\Доп', 'Rover-20\\Доп\\Выполнено', 'Документы', 'Задание' ] # удаляем директории # каталоги исключения exclude = set(('photo', 'report', 'сотрудники')) dirs = (d for d in glob.iglob(os.path.join(CNCPATH, '*')) if os.path.isdir(d) and os.path.basename(d) not in exclude) for f in dirs: shutil.rmtree(f)
for i in range(countr): if arrname[i].value == LayName: #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)