예제 #1
0
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
예제 #2
0
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
예제 #3
0
 def __init__(self, obj=None, l_commonpos=[]):
     self.handle = obj
     self.l_commonpos=l_commonpos
     if obj is not None:
         self.commonpos = k3.getattr(obj, "UDetNumber", -1)
         self.unicid =  k3.getattr(obj, "UnitPos", 0)
         self.ft =  k3.getattr(obj, "FufrnType", '')
         self.karkasnumb = k3.getattr(obj,"KarkasNumb",-1)
         if self.commonpos > 0:
             if self.commonpos in l_commonpos:
                 # print("Панель уже указана ", self.commonpos)
                 self.raster = Raster()
                 self.raster.raster_procent = -10
             else:
                 
                 self.raster = Raster(self.handle)
                 print("Панель ", self.commonpos)
                 if self.raster.raster_procent == -1 or self.raster.num_pixeles_in_zone_visible < 1:
                     pass
                 else:
                     l_commonpos.append(self.commonpos)
예제 #4
0
    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:
                Pans[Number].append(obj)
            else:
                Pans[Number] = [obj]

    # Ящики
    Boxs = GetChildPans(ArrBoxs)
예제 #5
0
 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:
         Pans[Number] = [obj]
 
 # Ящики
 BxUn = {}
 # Находим одинаковые по составу панелей ящики
 Boxs = GetChildPans(ArrBoxs)
예제 #6
0
Возвращает строку 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) 
                    if len(v_error.value)>1:
                        print ('Stamp.dbf ' + v_error.value + ' в выражении: '+cod)
예제 #7
0
        'Т' if res == (True, True) or res == (False, False) else 'Л',
        dictSlot[int(k3.findinarray(mask,
                                    int(s.Side)))], int(round(s.Shift, 0)),
        int(s.Width), int(s.Depth))
    if len(pazcom) > 0: pazcom += ';'

pars[3].value = 1 if FrontF == True else 0

lUnitCodeOut = [
    '3102',  # Боковые стенки ящиков
    '3101',
    '2101',  # Фасад ящика
]

# Нужно убирать см.эскиз и примечание паза для исключаемых
if k3.getattr(pan,"UnitCode",'') in lUnitCodeOut and \
   k3.getattr(pan,"ParentPos",0) and \
   k3.getattr(pan,"TopParentPos",0):
    isEskis.value = 0
else:
    slt += pazcom

PathIn = 0
InfoPoly = Panel.getPanelPathInfo(
    pan, PathIn,
    IsCuts=False)  # Получаем информацию по результирующему полилайну

dBand = {'D': 0, 'C': 0, 'E': 0, 'B': 0}
for i, pp in enumerate(InfoPoly.paths):  # пошли по контурам
    dictT = {
        'D': '',
예제 #8
0
        #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
예제 #9
0
    def __init__(self,
                 Name=None,
                 Hold=None,
                 Diameter=None,
                 Hohe=None,
                 MX=[],
                 MY=[],
                 MZ=[],
                 Side='X',
                 Panel=None):
        self.Name = Name
        self.Hold = Hold
        self.Diameter = delZero(Diameter)
        self.counter = Counter()

        self.MX = MX
        self.MY = MY
        self.MZ = MZ
        self.XV = MX[2]
        self.YV = MY[2]
        self.ZV = MZ[2]
        self.Xc = MX[3]
        self.Yc = MY[3]
        self.Zc = MZ[3]

        self.objs = []
        self.list_of_entries = []
        self.DrawDim = True
        self.DrawNote = True
        if 0 <= abs(MX[2] - 1.0) < 0.001:
            self.Side = 'B'
        elif 0 <= abs(MX[2] + 1.0) < 0.001:
            self.Side = 'C'
        elif 0 <= abs(MY[2] - 1.0) < 0.001:
            self.Side = 'D'
        elif 0 <= abs(MY[2] + 1.0) < 0.001:
            self.Side = 'E'
        elif 0 <= abs(MZ[2] - 1.0) < 0.001:
            self.Side = 'F'
        elif 0 <= abs(MZ[2] + 1.0) < 0.001:
            self.Side = 'A'
        else:
            self.Side = 'X'
        # Если отверстие висит в воздухе над панелью
        # Требуется посчиать реальную глубину сверловки
        if self.Side in ['A', 'F']:
            if self.Zc < 0.1:
                Hohe = round(Hohe + self.Zc + 0.1)
            elif self.Zc > Panel.panelThickness + 0.1:
                th_cover = 0
                if Panel.cover_count > 0:
                    for th_c in Panel.cover_info.keys():
                        th_cover = th_cover + Panel.cover_info[th_c][2]
                Hohe = round(Panel.panelThickness + th_cover -
                             (self.Zc - Hohe) + 0.1)

        self.Hohe = delZero(Hohe)

        if (Panel.panelThickness - Hohe) < 0.01 and (self.Side in ['A', 'F']):
            self.Through = True
        else:
            self.Through = False
            if self.Side == 'F':
                self.counter.drill_F = True
            elif self.Side == 'A':
                self.counter.drill_A = True

        self.HolTypes = k3.getattr(Hold, 'priceid', 0)
        sVal = k3.priceinfo(self.HolTypes, 'MatName', '', 1)
        self.Name = str(sVal)
        sVal = k3.priceinfo(self.HolTypes, 'Alias', '', 1)
        self.Alias = str(sVal)
예제 #10
0
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))
    if len(UnitName) == 0:
        UnitName = k3.getattr(obj_k3,'ElemName','')
    listUN.append(UnitName)
# if sel>0.:
    # obj_k3.value = k3.getselnum(1)
    # # UnitPosObj = k3.getattr(obj_k3,'UnitPos',0)
    # # listUP.append(k3.getattr(obj_k3,'UnitPos',0))
    # UnitName = k3.getattr(obj_k3,'UnitName','')
    # listUN.append(k3.getattr(obj_k3,'UnitPos',''))
    # if len(UnitName) == 0:
        # UnitName = k3.getattr(obj_k3,'ElemName','')

listArrAllObjects=Ut.getListArrayAllObjectsScene() # Заполнение всеми элементами сцены
예제 #11
0
    339.: 'DecTPrint',
    340.: 'DecWork',
    341.: 'DecPatina',
}
# Было нужно для сверки наличия лака глянцевого
dCheck = {
    338: 9302  # Глянцевый
}
ArrPans = Ut.getListArrayAllObjectsScene(AttrFilter='left(furntype,2)==\"01\"')
# Панели
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

            Panel.panelInit(obj)
            Panel.getPanelProperty(obj)
            KeyMenu = False
            lMenu = []
            lGDecA = []
            lGDecF = []
            lIDDecA = {}
            lIDDecF = {}
            dPans = {}