2.3.1 旋转 rotate
rotate
必须作用于某个几何体上,不能单独使用。rotate
有两种参数装填形式。
- 放入空间矢量
Vec3
作为旋转轴轴向,再放入角度作为旋转角。 - 直接输入角度,此时默认旋转轴轴向为Z轴正方向。
旋转时,符合右手定则。即右手除大拇指外的四指握拳,大拇指向外伸出(点赞姿势)。此时让大拇指指向,与代表旋转轴轴向的空间矢量Vec3,保持一致,这时,四指弯曲的方向即为旋转的正方向。
举例:俯视图下,如果旋转轴为(0,0,1),即z轴正方向,则此时旋转的正方向为逆时针。此时输入一个角度的正值,则会逆时针旋转;输入负值,则会顺时针旋转。
示例:
testcube = scale(500,200,400) * Cube()
rotatecube = rotate(pi/2) * scale(500,200,400) * Cube()
图2.2.1-1
2.3.2 平移 translate
Translate
和rotate
一样,必须作用与某个几何体上。
示例:
testcube = translate(Vec3(100,100,100)) * scale(500,200,400) * Cube()
testcube = translate(100,100,100) * scale(500,200,400) * Cube()
testcube = translate(100,100) * scale(500,200,400) * Cube()
translate
有三种参数装填形式。
- 放入空间矢量
Vec3
作为平移矢量 - 直接输入三维空间数值,同样可以识别为平移矢量
- 输入二维空间数值,可以识别为二维的平移矢量,此时被作用的几何体只会在XY平面上进行平移(即只会水平移动)
2.3.3 旋转、平移的其他形式
在使用BIMBase KIT 2022 R2.2及以上版本软件时,旋转、平移可以使用本节所讲解的各种函数
绕X、Y、Z轴进行旋转
当我们需要将一个几何体绕X、Y或Z轴进行旋转时,我们可以使用rotx(theta)
,roty(theta)
和rotz(theta)
这三个函数。这三个函数所需要状态的数值theta
是角度值(弧度制),即如果需要绕X轴正半轴,按照正方向旋转90°时,应当写为rotx(pi/2)
示例:
testcube = scale(500,200,400) * Cube()
rotatecube = rotx(pi/2) * scale(500,200,400) * Cube()
平移函数的简略形式
原本的平移函数为translate
,名称较长,在使用新版软件时,可以将translate
简写成trans
。
示例:
testcube = trans (Vec3(100,100,100)) * scale(500,200,400) * Cube()
testcube = trans (100,100,100) * scale(500,200,400) * Cube()
testcube = trans (100,100) * scale(500,200,400) * Cube()
注意,章节2.3.3中所涉及的函数,需要在BIMBase KIT 2022 R2.2及之后版本中可使用,旧版程序不支持上述函数。
2.3.4 就近原则
当旋转和平移同时需要作用在同一个几何体上时,他们的作用效果是有先后顺序的。写代码时,哪个离几何体近,哪个就优先生效。由于几何体放置在当前代码行最右侧,因此最右侧的旋转平移会先生效,最左侧,也就是距离等号最近的旋转平移会最后生效。
示例:
# 先缩放,然后平移,最后旋转
cube = rotate(Vec3(0,0,1), pi/2) * translate(100,100) * scale(500,200,400) * Cube()
# 先缩放,然后旋转,最后平移
cube = translate(100,100) * rotate(Vec3(0,0,1), pi/2) * scale(500,200,400) * Cube()
当缩放遇到旋转平移,请将缩放放到第一步,然后再进行旋转平移。
2.3.5 镜像 mirror
Mirror
镜像操作,同上述两种方法一样,需作用于某个几何体上。镜像操作需要一个辅助的镜像平面,所以镜像的输入有所不同。
镜像平面使用一个坐标系的坐标面来表示,所以镜像函数需要填入两个参数,一是自制临时的镜面坐标系,二是镜面坐标系的坐标平面名称。
镜面坐标系,是通过平移旋转原坐标系而新建产生。输入对原坐标系的平移或旋转操作,而不后接星号不作用于任意模型,就可表示一个任意镜面坐标系(例:trans(300,0,0) * rotz(pi)
表示了原坐标系按z轴旋转180°并沿X轴平移300的镜面坐标系,如图)。

镜面坐标系仅为辅助用,并不显示在窗口。如需显示,可使用函数`show_coordinate_system()`。该函数可将置入的坐标系可视化,方便建模及理解。需区分,有字母标识且无箭头的是软件显示界面的全局坐标系,无字母有箭头的为可视化的镜面坐标系。红轴为X,绿轴为Y,蓝轴为Z。坐标系显示尺寸可用`scale()`更改。
示例:
Model = trans(400,0,0) * scale(500,200,400) * Cube()
MirrorModel = mirror(trans(0,0,0) * rotz(pi/4)) * Model
show_coordinate_system(scale(5) * trans(0,0,0) * rotz(pi/4))

Model = trans(400,0,0) * scale(500,200,400) * Cube()
MirrorModel = mirror(trans(0,0,0) * rotz(-pi/4),'XY') * Model
show_coordinate_system(scale(5) * trans(0,0,0) * rotz(-pi/4))
