7.1.1 旋转布置

旋转布置只需要在原脚本中的末尾部分添加一行代码,即可实现旋转布置效果。
旋转布置时,第一次点击鼠标左键为选择布置原点,此时移动鼠标,组件会跟随鼠标发生转动,再次点击鼠标左键时,组件会根据点击位置绕原点旋转相应角度布置。
示例:

from pyp3d import *
class 立方体(Component):
    def __init__(self):
        Component.__init__(self)
        self['长'] = Attr(1000.0, obvious=True)
        self['宽'] = Attr(300.0, obvious=True)
        self['高'] = Attr(500, obvious = True)
        self['立方体'] = Attr(None, show=True)
        self['旋转角度'] = Attr(0,obvious = True)
        self['X'] = Attr(0.0, obvious=True)
        self['Y'] = Attr(0.0, obvious=True)
        self['Z'] = Attr(0.0, obvious=True)
        self.replace()
    @export
    def replace(self):
        L = self['长']
        W = self['宽']
        H = self['高']
        x = self['X']
        y = self['Y']
        z = self['Z']
        Angle = self['旋转角度']
        TestCube = translate(x,y,z) * rotation(math.pi/180 * Angle) * scale(L,W,H) * Cube()
        self['立方体'] = TestCube
if __name__ == "__main__":
    # 只需加上下面两行即可实现旋转布置
    # 第一行 对【立方体】这个class进行装饰
    FinalGeometry = 立方体()
    # 第二行 实现旋转布置 注意最后Place时需要填入的是装饰后的立方体
    RotationPlace.RotationFunction(FinalGeometry)
    place(FinalGeometry)


步骤1:第一次点击左键时,会选中布置位置。

步骤2:此时移动鼠标,模型会跟随鼠标进行转动,再次点击鼠标左键,即可完成旋转布置。

此时,可以继续选择下一个要布置模型的点(回到步骤1),即可以连续布置多个需要旋转布置的模型

7.1.2 两点布置

两点布置中,需要选定一个变量作为线性变量,通常选择为长、高等。
要点:线性布置的构件中,要进行线性变化的变量需要放在X轴上。放置在Y轴或Z轴时,需要对几何体进行旋转。
我们以长度为线性变量的长方体两点布置为例。(案例为非参数化,可自行改为参数化模型脚本)
示例:

from pyp3d import *
class 立方体(Component):
    def __init__(self):
        Component.__init__(self)
        self['长'] = Attr(1000.0, obvious=True)
        self['宽'] = Attr(300.0, obvious=True)
        self['高'] = Attr(500, obvious = True)
        self['立方体'] = Attr(None, show=True)
        self['旋转角度'] = Attr(0,obvious = True)
        self['X'] = Attr(0.0, obvious=True)
        self['Y'] = Attr(0.0, obvious=True)
        self['Z'] = Attr(0.0, obvious=True)
        self.replace()
    @export
    def replace(self):
        L = self['长']
        W = self['宽']
        H = self['高']
        x = self['X']
        y = self['Y']
        z = self['Z']
        Angle = self['旋转角度']
        TestCube = translate(x,y,z) * rotation(math.pi/180 * Angle) * scale(L,W,H) * Cube()
        self['立方体'] = TestCube
if __name__ == "__main__":
    # 第一行 对【立方体】这个class进行装饰
    FinalGeometry = 立方体()
    # 第二行 实现两点布置
    TwoPointPlace.linearize(FinalGeometry,'长')
    place(FinalGeometry)