def draw_rectangle_scene(self, k=0.2): """ Область вокруг сцены """ nnn = k3.getsnap() k3.setucs(k3.k_vcs) gabs = self.gab_scene_vsc t = min([abs(gabs[0]) * k, abs(gabs[1]) * k, abs(gabs[3]) * k, abs(gabs[4]) * k]) # rect = k3.rectangle(k3.k_3points, gabs[0] - t, gabs[1] - t, max([gabs[2], gabs[5]]) + t, # gabs[3] + t, gabs[1] - t, max([gabs[2], gabs[5]]) + t, # gabs[0] - t, gabs[4] + t, max([gabs[2], gabs[5]]) + t # ) length_x = 2 * (abs(gabs[0] - gabs[3]) + 2 * t) length_y = 2 * (abs(gabs[4] - gabs[1]) + 2 * t) tnote = Note() ht = tnote.getrealsizetext() wt = 2 * ht npoint_y = int(int(length_y / ht) / 2) npoint_x = int(int(length_x / wt) / 2) dy = length_y / 2 / npoint_y dx = length_x / 2 / npoint_x self.based_label=Based_label_rectangle() for i in range(npoint_y+1): self.based_label.childobjects.append(Based_point_label(gabs[0] - t, (gabs[1] - t) + i * dy, max([gabs[2], gabs[5]]) + t)) for i in range(npoint_y+1): self.based_label.childobjects.append(Based_point_label(gabs[3] + t, (gabs[1] - t) + i * dy, max([gabs[2], gabs[5]]) + t)) for i in range(1,npoint_x,): self.based_label.childobjects.append(Based_point_label(gabs[0] - t + i * dx, (gabs[1] - t), max([gabs[2], gabs[5]]) + t)) for i in range(1,npoint_x,): self.based_label.childobjects.append(Based_point_label(gabs[0] - t + i * dx, (gabs[4] + t), max([gabs[2], gabs[5]]) + t)) nnn = k3.resnap()
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 get_gab_sene(self): """ Определяет габарит сцены в ВСК """ if len(self.lstobj) > 0: nnn = k3.getsnap() k3.setucs(k3.k_vcs) self.gab_scene_vsc = obj_k3_gab3(self.lstobj) nnn = k3.resnap()
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
if data.find(pattern) != -1: print(name) filesT.append(name) else: filesT.append(name) except: pass tree = os.walk('d:\\tmp\\caddata_DAE\\') for t in tree: walk(t[0], t[2]) i = 0 for nfile in filesT[2090:]: k3.new() k3.open(nfile) k3.setucs(k3.k_gcs) k3.setucs(0, 0, 0, -1, 0, 0, 0, 0, 1) tg = k3.group(k3.k_all, k3.k_done) k3.setucs(k3.k_gcs) k3.place(tg[0]) k3.explode(tg[0]) k3.vport(4) k3.rendmode(4, 2) k3.picture(4, k3.k_yes) k3.save(k3.k_all, nfile, k3.k_overwrite) print('Сохранили: ', i, nfile) i = i + 1
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