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 Central(xc1, yc1, zc1, xc2, yc2, zc2): '''-- Процедура построения осевой линии //-- Входные параметры: //-- xc1, yc1, zc1, xc2, yc2, zc2 - координаты концов линии //-- colcen - цвет линии ''' userproperty = Userproperty() from DrawingSupp import Drawing drawing = Drawing() if (xc1, yc1, zc1) != (xc2, yc2, zc2) and ( (xc1, yc1, zc1) not in drawing.gab and (xc2, yc2, zc2) not in drawing.gab): lineObj = k3.line(xc1, yc1, zc1, xc2, yc2, zc2, k3.k_done)[0] if userproperty.colorCentralLine is not None: k3.chprop(k3.k_color, k3.k_last, 1, k3.k_done, userproperty.colorCentralLine) #k3.chprop(k3.k_lwidth,k3.k_last,1,k33.k_done,TilOs) k3.chprop(k3.k_ltype, k3.k_last, 1, k3.k_done, 5) #k3.chprop(k3.k_grfcoeff,k3.k_last,1,k3.k_done,1) return lineObj else: return None
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 Change(self, obj, Name): '''Изменяет слой объекта <obj>''' self.New(Name) k3.chprop(k3.k_layer, obj, k3.k_done, Name)
#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 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
"Данная вариация отсутствует в списке допустимых" ) 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, "Да", "Нет", "Изменить цвет", 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)