コード例 #1
0
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)
コード例 #2
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)
コード例 #3
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
コード例 #4
0
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)
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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)
コード例 #9
0
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)
コード例 #10
0
 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
コード例 #11
0
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 возникли ошибки!')
コード例 #12
0
# -*- 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))
コード例 #13
0
ファイル: toWmf.py プロジェクト: AlexandrDragunkin/ARLN_PROTO
# 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)
コード例 #14
0
 def __init__(self):
     self.geti()
     self.id_order = k3.sysvar(2).split('\\')[-2]
     self.path_order = k3.mpathexpand("<PROJECTS>")
コード例 #15
0
ファイル: toWmf.py プロジェクト: AlexandrDragunkin/ARLN_PROTO
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
コード例 #16
0
    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)  #
コード例 #17
0
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
コード例 #18
0
def ref_drafts():
    nm_file = k3.sysvar(2)
    subname = 'K3_Drafts'
    j_name = '\\WMF_Drafts\\'
    ref_pictures(subname, nm_file, j_name)
コード例 #19
0
def ref_complex():
    nm_file = k3.sysvar(2)
    subname = 'K3_Complex'
    j_name = '\\WMF_Complex\\'
    ref_pictures(subname, nm_file, j_name)
コード例 #20
0
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)
コード例 #21
0
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)