目前,参数化组件有两种贴图方式。第一种方式是使用BIMBase自带的素材库功能,对已经布置在工程文件中的模型进行选中后贴图(也可修改模型颜色)。第二种方式则是在建模过程中,直接对某个几何体进行贴图。

2.7.1 使用材质库进行贴图

我们点开【编辑】栏,找到最右侧的【材质库】,点击【材质库】,可以看到如下图所示的材质编辑器。


我们点击【材质编辑器】左下角的【加号】来新建一个新的材质,并且输入新材质的名称。

新建材质后,我们可以选择材质的颜色、透明度、高光、自发光等。通过勾选或取消勾选“贴图设置”中的“纹理贴图”来切换当前材质使用的是颜色模式还是贴图模式
如果勾选了下方的“贴图设置”中的“纹理贴图”,那么此时常规参数中的颜色、透明度、高光和自发光设置将自动置灰,并且需要点击“贴图设置”中的“设置”来选择图片,同时可以选择不同的“贴图映射方式”。

例如,我们勾选了纹理贴图后,点击【设置】,点击【选择纹理】,选择一张图片,并且在这里我们可以选择贴图的方式为尺寸贴图或者比例贴图,以及可以设置贴图的偏移量,我们可以根据实际需要选择合适的方式,点击【确定】完成纹理编辑。

选择映射方式,然后我们点击一个要赋予材质(贴图)的构件,然后点击应用,再点击确定。

我们以一个长方体为例,我们选择刚刚新建的“Test”材质,这时我们应保持材质编辑器打开,然后选择Test材质,然后选中要赋予材质的长方体模型,然后点击应用。

这时,我们点击模型旁边的空白处,可以看到,刚刚的长方体已经有了贴图

2.7.2 Python建模时贴图

这里我们需要使用到贴图函数,我们先来看一下例子(Eg.2.7.2-1)

from pyp3d import *
# 定义参数化模型
class 长方体(Component):
    # 定义各个参数及其默认值
    def __init__(self):
        Component.__init__(self)
        self['长'] = Attr(1000, obvious = True, combo = [500,1000,2000,3000,4000])
        self['宽'] = Attr(300.0, obvious = True)
        self['高'] = Attr(500, obvious = True)
        self['长方体'] = Attr(None, show = True)
        self.replace()
    @export
    # 模型造型
    def replace(self): 
        # 设置变量,同时调用参数(简化书写过程)

        L = self['长']
        W = self['宽']
        H = self['高']
        # 绘制模型
        TestCube = scale(L,W,H) * Cube()
        self['长方体'] = TestCube
        self['长方体'].material('M8')

# 输出模型
if __name__ == "__main__":
    mt3 = create_material('M8', mapMode = 5, mapUnit = 0, uvScale = [1,1], wRotation = 0)
    mt3.mapFile = R'C:\Users\PKPM\Pictures\BIMBase图标.png'
    FinalGeometry = 长方体()
place(FinalGeometry)

可以看到,我们对要某个几何体进行贴图时,需要加上material这个成员方法,同时,括弧内的字符串表示这个贴图的名称(name),而这个贴图的名称则是在输出模型阶段进行定义的。而这个贴图的变量名是mt3,需要用到create_material这个函数,这个函数的具体用法,我们来一起看一下。

create_material函数

create_material函数的含义是创建一个材质,可以是图片(贴图)也可以是颜色,在创建材质时,就可以填入各种默认参数。

create_material函数参数与说明表

参数 含义 参数格式
name 材质名称(必填) str
mapFile 贴图路径(贴图时必填) str
mapUnit 贴图单位3 按尺寸贴图0 按比例贴图 索引
mapMode 贴图模式0 参数几何投影2 平面投影4 立方体投影5 球形投影6 圆柱形投影 索引
uvScale 贴图缩放 [float,float]
uvOffset 贴图偏移 [float,float]
wRotation 贴图旋转角度(弧度制) float
Color 颜色 RGB(取值范围为0-1) [float,float,float]Eg. [0,245/255,1]
transparency 透明度(取值范围0-1) float
specularColor 高光颜色RGB(取值范围0-1) [float,float,float]Eg. [0,245/255,1]
specularFactor 高光系数(取值范围0-1) Float
glowColor 自发光颜色RGB(取值范围0-1) [float,float,float]Eg. [0,245/255,1]
glowFactor 自发光系数(取值范围0-100) int
ambientFactor 环境光(取值范围0-1) float

需要注意,在uvScale(贴图缩放)中,以uvScale=[m,n]为例。当mapUnit(贴图模式)为3(按尺寸贴图)时,表示将原有图片缩放为(m1000mm)×(n1000mm);当mapUnit为0(按比例贴图)时,[m,n]表示将原图片缩放为m×n倍

注意,创建材质的过程放在了输出模型的部分,也就是模型代码结构中的第三部分,请不要在建模部分创建材质。(参考例子Eg.2.7.2-1)