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

Translaterotate一样,必须作用与某个几何体上。

示例:

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的镜面坐标系,如图)。


经过此操作而得的一个镜面坐标系的任意一个坐标面,都可以作为镜像平面进行镜像操作。默认以镜面坐标系的YOZ平面进行镜像。可以选取镜面坐标系三个坐标面的任意一个,仅需在`Mirror`函数内以字符串形式输入所需面的名称即可。(例:'XY')
镜面坐标系仅为辅助用,并不显示在窗口。如需显示,可使用函数`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))

以镜面坐标系XOY平面做镜像示例:
    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))