0.5.2.1 写法

首先,我们来看一下之前讲过的参数化模型写法与建筑基类写法的区别。


通常建模方式(非基类建模方式)


基类建模方式
接下来,我们来讲一下基类写法与普通写法的区别。
可以看到,基类方式建模在第一部分引用时,需要引用特定的python文件(库),同时,引用的python库(基类库)必须和当前模型文件在同一文件夹下。
在第二部分的前半部分中,定义class时,不再继承自`Component`,而是继承自引用的库文件中的某个基类。案例中需要创建一个平开门,因此继承自Door库中的平开门。此外,我们发现,在参数定义时,基类写法并没有定义参数;在后半部分的建模过程中,直接使用了一些参数。这里,我们先来看一下door.py里面有什么
from pyp3d import *

class 门(Component):
    def __init__(self):
        Component.__init__(self)
        self.schemaName = "PBM_ArchiModel"
        self.className = "PBArchiDoor"

        self['Width'] = 900
        self.W = 900
        self['Height'] = 2100
        self.H = 2100
        self['BottomHeight'] = 0
        self.BH = 0
        self['FrameWidth'] = 50
        self.FW = 50
        self['FrameThick'] = 100
        self.FT = 100
        self['PaneThick'] = 50
        self.PT = 50
        self['GlassThick'] = 5
        self.GT = 5

    def __setitem__(self, key, val):
        if key == '门宽':
            Noumenon.__setitem__(self, 'Width', val)
        elif key == '门高':
            Noumenon.__setitem__(self, 'Height', val)
        elif key == '门槛高度':
            Noumenon.__setitem__(self, 'BottomHeight', val)
        elif key == '门框宽度':
            Noumenon.__setitem__(self, 'FrameWidth', val)
        elif key == '门框厚度':
            Noumenon.__setitem__(self, 'FrameThick', val)
        elif key == '门板厚度':
            Noumenon.__setitem__(self, 'PaneThick', val)
        elif key == '玻璃厚度':
            Noumenon.__setitem__(self, 'GlassThick', val)
        else:
            Noumenon.__setitem__(self, key, val)
    def __getitem__(self, key):
        if key == '门宽':
            return Noumenon.__getitem__(self, 'Width')
        elif key == '门高':
            return Noumenon.__getitem__(self, 'Height')
        elif key == '门槛高度':
            return Noumenon.__getitem__(self, 'BottomHeight')
        elif key == '门框宽度':
            return Noumenon.__getitem__(self, 'FrameWidth')
        elif key == '门框厚度':
            return Noumenon.__getitem__(self, 'FrameThick')
        elif key == '门板厚度':
            return Noumenon.__getitem__(self, 'PaneThick')
        elif key == '玻璃厚度':
            return Noumenon.__getitem__(self, 'GlassThick')
        else:
            return Noumenon.__getitem__(self, key)

    @property
    def 门宽(self):
        return self['Width']
    @门宽.setter
    def 门宽(self, W):
        self['Width'] = W

    @property
    def 门高(self):
        return self['Height']
    @门高.setter
    def 门高(self, H):
        self['Height'] = H

    @property
    def 门槛高度(self):
        return self['BottomHeight']
    @门槛高度.setter
    def 门槛高度(self, BH):
        self['BottomHeight'] = BH

    @property
    def 门框宽度(self):
        return self['FrameWidth']
    @门框宽度.setter
    def 门框宽度(self, FW):
        self['FrameWidth'] = FW

    @property
    def 门框厚度(self):
        return self['FrameThick']
    @门框厚度.setter
    def 门框厚度(self, FT):
        self['FrameThick'] = FT

    @property
    def 门板厚度(self):
        return self['PaneThick']
    @门板厚度.setter
    def 门板厚度(self, PT):
        self['PaneThick'] = PT

    @property
    def 玻璃厚度(self):
        return self['GlassThick']
    @玻璃厚度.setter
    def 玻璃厚度(self, GT):
        self['GlassThick'] = GT

class 平开门(门):
    def __init__(self):
        门.__init__(self)
        self['国标编码'] = '90-01.04.01'

class 推拉门(门):
    def __init__(self):
        门.__init__(self)
        self['国标编码'] = '14-10.20.09.12'

class 卷帘门(门):
    def __init__(self):
        门.__init__(self)
        self['国标编码'] = '14-10.20.09.15'

class 防火门(门):
    def __init__(self):
        门.__init__(self)
        self['国标编码'] = '14-10.20.09.19'

我们可以看到,整个door.py文件中,定义门宽、门高、门板厚度等7个参数;同时定义了多个class,包括卷帘门、防火门、平开门等

因此,我们在创建属于Door这个库中所定义的类别的门时,就可以使用基类写法,在定义部分就设置好继承自谁;在定义参数时,如果这个参数属于Door中已经定义的部分,务必直接使用(可以在第二部分的后半部分重新起个变量名)


Eg.重新起变量名,便于使用

建筑基类写法

例如我们的案例(上图),就是需要创建一个平开门,平开门是Door.py里已经定义的门类别,那就需要在定义的时候选好继承。同时,在这个模型中,使用Door.py中提供的参数已经能满足我们的需要,因此我们不需要创建其他额外参数。如果有其他参数需要定义,请在模型文件内按照通常写法定义即可。

请注意,基类库文件不得擅自修改。即无论何时,务必不要修改或增加、删除引用的基类库文件(如Door.py)中的参数和分类。

当我们以建筑基类方式完成一个构件后,我们的这个构件就可以在建筑专业下使用,并且实现和建筑原有模型的交互了。

0.5.2.2 建筑基类分类

建筑基类 库类 类别(父类) 具体类别(子类) 已有参数
建筑板 Slab
建筑场地 Site 场地 场地厚度
建筑窗 Window 单扇窗 窗宽
推拉窗 窗高
组合窗 窗台高度
百叶窗 窗框宽度
固定窗 窗框厚度
玻璃厚度
建筑栏杆 Railing 栏杆
建筑梁 Beam
建筑楼梯 Stair 楼梯 楼梯高度
楼梯总宽
建筑门 Door 平开门 门宽
推拉门 门高
卷帘门 门槛高度
防火门 门框宽度
门框厚度
门板厚度
玻璃厚度
建筑幕墙 CurtainWall 幕墙
建筑坡道 Ramp 坡道 坡道宽度
坡道长度
坡道高度
坡道坡度
建筑墙 Wall 墙体厚度
建筑台阶 Step 台阶 踏面宽度
踢面总数
踢面高度
平台深度
平台宽度
建筑屋顶 Roof 屋顶 结构厚度
建筑柱 Column 圆柱 长度
矩形柱 宽度
柱高