在视图中显示及隐藏输入参数对应的构建集合,并以动画的形式逐帧批量播放

输入参数:
hideframe:隐藏构件集
showframe:显示构件集
def snapshoot_control(hideframe:list,showframe:list)

设定几何实体、即Entity是否在视图中显示

输入参数:
entityid:需要进行显隐的entity
switch:设定是否显示,true为显示
def entity_show_switch(entityid: P3DEntityId, switch: bool)

使用示例

import time
from pyp3d import *

# 塔吊建模函数


def TowerCrane(angle) -> None:
    data = P3DData({
        '场布分类': '施工机械',
        '构件类型': '塔吊',
        '构件名称': '塔吊',
        '塔身单元节个数': 20,
        '吊臂单元节个数': 35,
        '吊臂旋转角度': angle,
        '延伸距离': 1000,
        '平移距离': 1000
    })

    n = data['塔身单元节个数']  # 单元节个数
    data['高度'] = n*2000
    x = data['吊臂单元节个数']
    k = data['吊臂旋转角度']
    if data['延伸距离'] > 3550+n*2000+30-3000:
        data['延伸距离'] = 3550+n*2000+30-3000
    if data['平移距离'] > (x-1)*1500:
        data['平移距离'] = (x-1)*1500
    if data['平移距离'] < 1000:
        data['平移距离'] = 1000

    Box1 = Box(Vec3(0, 0, 0), Vec3(0, 0, 500), Vec3(1, 0, 0), Vec3(
        0, 1, 0), 4000, 4000, 4000, 4000).color(210/255, 180/255, 140/255, 1)
    # 地面柱子
    Cone1 = Cone(Vec3(1000, 1000, 530), Vec3(3000, 1000, 530),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone2 = Cone(Vec3(1000, 3000, 530), Vec3(3000, 3000, 530),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone3 = Cone(Vec3(1000, 1000, 530), Vec3(1000, 3000, 530),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone4 = Cone(Vec3(3000, 1000, 530), Vec3(3000, 3000, 530),
                 30, 30).color(139/255, 69/255, 19/255, 1)

    Cone5 = Cone(Vec3(1000, 1000, 560), Vec3(1000, 1000, 2560),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone6 = Cone(Vec3(3000, 1000, 560), Vec3(3000, 1000, 2560),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone7 = Cone(Vec3(3000, 3000, 560), Vec3(3000, 3000, 2560),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone8 = Cone(Vec3(1000, 3000, 560), Vec3(1000, 3000, 2560),
                 30, 30).color(139/255, 69/255, 19/255, 1)

    Cone9 = Cone(Vec3(1000, 1000, 2530), Vec3(3000, 1000, 2530),
                 30, 30).color(139/255, 69/255, 19/255, 1)
    Cone10 = Cone(Vec3(1000, 3000, 2530), Vec3(3000, 3000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    Cone11 = Cone(Vec3(1000, 1000, 2530), Vec3(1000, 3000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    Cone12 = Cone(Vec3(3000, 1000, 2530), Vec3(3000, 3000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)

    Cone13 = Cone(Vec3(1000, 1000, 530), Vec3(3000, 1000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    Cone14 = Cone(Vec3(1000, 3000, 530), Vec3(1000, 1000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    Cone15 = Cone(Vec3(3000, 3000, 530), Vec3(1000, 3000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    Cone16 = Cone(Vec3(3000, 1000, 530), Vec3(3000, 3000, 2530),
                  30, 30).color(139/255, 69/255, 19/255, 1)
    AA = combine(Cone5, Cone6, Cone7, Cone8, Cone9, Cone10,
                 Cone11, Cone12, Cone13, Cone14, Cone15, Cone16)
    td = combine()
    for i in range(n):
        td.append(translation(Vec3(0, 0, 2000*i))*AA)
    Box2 = Box(Vec3(0, 0, (n-3)*2000), Vec3(0, 0, ((n-3)*2000)+50),
               Vec3(1, 0, 0), Vec3(0, 1, 0), 4000, 4000, 4000, 4000).color(1, 1, 1, 1)
    Box3 = Box(Vec3(1000, 1000, (n-3)*2000), Vec3(1000, 1000, ((n-3)*2000)+50),
               Vec3(1, 0, 0), Vec3(0, 1, 0), 2000, 2000, 2000, 2000).color(1, 1, 1, 1)
    BB = substract(Box2, Box3).color(1, 1, 1, 1)
    # 围栏
    Cone17 = Cone(Vec3(30, 30, (n-3)*2000), Vec3(30, 30,
                  ((n-3)*2000)+1000), 30, 30).color(1, 1, 1, 1)
    langan1 = combine()
    Number = 4
    for i in range(Number):
        langan1.append(translation(Vec3(1000*i, 0, 0))*Cone17)
    langan4 = combine()
    Number = 4
    for i in range(Number):
        langan4.append(translation(Vec3(0, 1000*i, 0))*Cone17)
    Cone18 = Cone(Vec3(3970, 30, (n-3)*2000), Vec3(3970, 30,
                  ((n-3)*2000)+1000), 30, 30).color(1, 1, 1, 1)
    langan2 = combine()
    Number = 4
    for i in range(Number):
        langan2.append(translation(Vec3(0, 1000*i, 0))*Cone18)
    Cone19 = Cone(Vec3(30, 3970, (n-3)*2000), Vec3(30, 3970,
                  ((n-3)*2000)+1000), 30, 30).color(1, 1, 1, 1)
    langan3 = combine()
    Number = 5
    for i in range(Number):
        langan3.append(translation(Vec3(1000*i, 0, 0))*Cone19)
    Cone20 = Cone(Vec3(30, 30, ((n-3)*2000)+800), Vec3(30, 3970,
                  ((n-3)*2000)+800), 30, 30).color(1, 1, 1, 1)
    Cone21 = Cone(Vec3(3970, 30, ((n-3)*2000)+800), Vec3(3970,
                  3970, ((n-3)*2000)+800), 30, 30).color(1, 1, 1, 1)
    Cone22 = Cone(Vec3(3972, 3970, ((n-3)*2000)+800),
                  Vec3(30, 3970, ((n-3)*2000)+800), 30, 30).color(1, 1, 1, 1)
    Cone23 = Cone(Vec3(30, 30, ((n-3)*2000)+800), Vec3(3970, 30,
                  ((n-3)*2000)+800), 30, 30).color(1, 1, 1, 1)

    B2 = combine(Cone20, Cone21, Cone22, Cone23,
                 langan1, langan2, langan3, langan4, BB)
    B3 = translation(Vec3(0, 0, 2000))*B2
    likehancuixun = combine(Cone1, Cone2, Cone3, Cone4, Box1, td, B3, B2)
# 吊臂 陈梦菲
    db1 = Cone(Vec3(0, 1500, 0), Vec3(750, 0, 0), 30,
               30).color(139/255, 69/255, 19/255, 1)
    db2 = Cone(Vec3(1500, 1500, 0), Vec3(750, 0, 0),
               30, 30).color(139/255, 69/255, 19/255, 1)
    db3 = Cone(Vec3(0, 1500, 0), Vec3(750, 750, 1500),
               30, 30).color(139/255, 69/255, 19/255, 1)
    db4 = Cone(Vec3(1500, 1500, 0), Vec3(750, 750, 1500),
               30, 30).color(139/255, 69/255, 19/255, 1)
    db5 = Cone(Vec3(0, 0, 0), Vec3(750, 750, 1500), 30,
               30).color(139/255, 69/255, 19/255, 1)
    db6 = Cone(Vec3(1500, 0, 0), Vec3(750, 750, 1500),
               30, 30).color(139/255, 69/255, 19/255, 1)

    db = combine(db1, db2, db3, db4, db5, db6)
    p1 = linspace(Vec3(0, 0, 0), Vec3((x-1)*1500, 0, 0), x)
    rebars2 = combine()
    for point in p1:
        rebars2.append(translation(point) * db)
    db11 = Cone(Vec3(0, 0, 0), Vec3(x*1500, 0, 0), 30,
                30).color(139/255, 69/255, 19/255, 1)
    db12 = Cone(Vec3(0, 1500, 0), Vec3(x*1500, 1500, 0),
                30, 30).color(139/255, 69/255, 19/255, 1)
    db13 = Cone(Vec3(750, 750, 1500), Vec3((x*1500)-750, 750, 1500),
                30, 30).color(139/255, 69/255, 19/255, 1)
    db14 = Cone(Vec3(x*1500, 0, 0), Vec3(x*1500, 1500, 0),
                30, 30).color(139/255, 69/255, 19/255, 1)
# 塔尖 陈梦菲
    tj1 = Cone(Vec3(0, 750, 0), Vec3(0, 750, 4500), 30,
               30).color(139/255, 69/255, 19/255, 1)
    tj2 = Cone(Vec3(-1500, 1500, 0), Vec3(0, 750, 4500),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj3 = Cone(Vec3(-1500, 0, 0), Vec3(0, 750, 4500),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj4 = Cone(Vec3(-1500, 0, 0), Vec3(0, 750, 1000),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj5 = Cone(Vec3(-1500, 1500, 0), Vec3(0, 750, 1000),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj6 = Cone(Vec3(-900, 300, 1800), Vec3(0, 750, 1000),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj7 = Cone(Vec3(-900, 1200, 1800), Vec3(0, 750, 1000),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj8 = Cone(Vec3(-900, 300, 1800), Vec3(0, 750, 2700),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj9 = Cone(Vec3(-900, 1200, 1800), Vec3(0, 750, 2700),
               30, 30).color(139/255, 69/255, 19/255, 1)
    tj10 = Cone(Vec3(-(1300/3), 535, 3200), Vec3(0, 750, 2700),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj11 = Cone(Vec3(-(1300/3), 966, 3200), Vec3(0, 750, 2700),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj12 = Cone(Vec3(-(1300/3), 535, 3200), Vec3(0, 750, 3700),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj13 = Cone(Vec3(-(1300/3), 966, 3200), Vec3(0, 750, 3700),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj14 = Cone(Vec3(-1500, 0, 0), Vec3(-900, 1200, 1800),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj15 = Cone(Vec3(-(1300/3), 535, 3200), Vec3(-900, 1200, 1800),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj16 = Cone(Vec3(-900, 300, 1800), Vec3(-900, 1200, 1800),
                30, 30).color(139/255, 69/255, 19/255, 1)
    tj17 = Cone(Vec3(-(1300/3), 535, 3200), Vec3(-(1300/3), 966,
                3200), 30, 30).color(139/255, 69/255, 19/255, 1)
    tj18 = Cone(Vec3(0, 750, 4500), Vec3(
        (x*1500/3), 750, 1500), 30, 30).color(1, 1, 1, 1)
    tj19 = Cone(Vec3(0, 750, 4500), Vec3(
        (x*1500*3/4), 750, 1500), 30, 30).color(1, 1, 1, 1)
    tj20 = Cone(Vec3(0, 750, 4500), Vec3(-6000, 1200, 0),
                30, 30).color(1, 1, 1, 1)
    tj21 = Cone(Vec3(0, 750, 4500), Vec3(-6000, 300, 0),
                30, 30).color(1, 1, 1, 1)

    AA22 = combine(rebars2, db11, db12, db13, db14, tj1, tj2, tj3, tj4, tj5, tj6, tj7,
                   tj8, tj9, tj10, tj11, tj12, tj13, tj14, tj15, tj16, tj17, tj18, tj19, tj20, tj21)

    chenmengfei = translation(Vec3(2750, 1250, 3550+n*2000+30))*AA22
# 吊钩 王科
    Boxjyj = Box(Vec3(0, 0, -200), Vec3(0, 0, -400), Vec3(1, 0, 0),
                 Vec3(0, 1, 0), 1500, 1500, 1500, 1500).color(139/255, 69/255, 19/255, 1)
    jyjlz1 = Cone(Vec3(200, 0, -200), Vec3(200, 100, -200),
                  200, 200).color(139/255, 69/255, 19/255, 1)
    jyjlz2 = Cone(Vec3(1300, 0, -200), Vec3(1300, 100, -200),
                  200, 200).color(139/255, 69/255, 19/255, 1)
    jyjlz3 = Cone(Vec3(200, 1400, -200), Vec3(200, 1500, -200),
                  200, 200).color(139/255, 69/255, 19/255, 1)
    jyjlz4 = Cone(Vec3(1300, 1400, -200), Vec3(1300, 1500, -200),
                  200, 200).color(139/255, 69/255, 19/255, 1)
    Boxjyjmd = Box(Vec3(400, 400, -100), Vec3(400, 400, -500), Vec3(1, 0, 0),
                   Vec3(0, 1, 0), 700, 700, 700, 700).color(139/255, 69/255, 19/255, 1)
    gsz = Cone(Vec3(500, 750, -500), Vec3(500, 750, -500 -
               data['延伸距离']), 10, 10).color(139/255, 69/255, 19/255, 1)
    gsy = Cone(Vec3(1000, 750, -500), Vec3(1000, 750, -500 -
               data['延伸距离']), 10, 10).color(139/255, 69/255, 19/255, 1)
    gzgz = Box(Vec3(400, 650, -500-data['延伸距离']-100), Vec3(750, 650, -500-data['延伸距离']-400), Vec3(
        1, 0, 0), Vec3(0, 1, 0), 700, 200, 0, 200).color(139/255, 69/255, 19/255, 1)
    gzlzz = Cone(Vec3(500, 700, -500-data['延伸距离']-100), Vec3(
        500, 800, -500-data['延伸距离']-100), 100, 100).color(139/255, 69/255, 19/255, 1)
    gzlzy = Cone(Vec3(1000, 700, -500-data['延伸距离']-100), Vec3(
        1000, 800, -500-data['延伸距离']-100), 100, 100).color(139/255, 69/255, 19/255, 1)
    gz111 = Cone(Vec3(750, 750, -500-data['延伸距离']-400+100), Vec3(
        750, 750, -500-data['延伸距离']-400-80), 30, 30).color(139/255, 69/255, 19/255, 1)
    gz = RotationalSweep([Vec3(750, 790, -500-data['延伸距离']-400-80+50), Vec3(750, 710, -500-data['延伸距离']-400-80+50), Vec3(750, 725, -500-data['延伸距离']-400-80+50-50),
                         Vec3(750, 775, -500-data['延伸距离']-400-80+50-50)], Vec3(750, 750, -500-data['延伸距离']-400-80-150), Vec3(0, 1, 0), 1.5*pi).color(139/255, 69/255, 19/255, 1)
    dlss1 = Cone(Vec3(750, 750, -500-data['延伸距离']-400-80-100), Vec3(
        250, 250, -500-data['延伸距离']-400-80-1000), 5, 5).color(139/255, 69/255, 19/255, 1)
    dlss2 = Cone(Vec3(750, 750, -500-data['延伸距离']-400-80-100), Vec3(
        1250, 250, -500-data['延伸距离']-400-80-1000), 5, 5).color(139/255, 69/255, 19/255, 1)
    dlss3 = Cone(Vec3(750, 750, -500-data['延伸距离']-400-80-100), Vec3(
        250, 1250, -500-data['延伸距离']-400-80-1000), 5, 5).color(139/255, 69/255, 19/255, 1)
    dlss4 = Cone(Vec3(750, 750, -500-data['延伸距离']-400-80-100), Vec3(
        1250, 1250, -500-data['延伸距离']-400-80-1000), 5, 5).color(139/255, 69/255, 19/255, 1)
    dl1 = Box(Vec3(250, 250, -500-data['延伸距离']-400-80-1000), Vec3(250, 250, -500-data['延伸距离']-400-80-1000-800), Vec3(
        1, 0, 0), Vec3(0, 1, 0), 1000, 1000, 1000, 1000).color(139/255, 69/255, 19/255, 1)
    dl2 = Box(Vec3(300, 300, -500-data['延伸距离']-400-80-1000), Vec3(300, 300, -500-data['延伸距离']-400 -
              80-1000-750), Vec3(1, 0, 0), Vec3(0, 1, 0), 900, 900, 900, 900).color(139/255, 69/255, 19/255, 1)
    dl = substract(dl1, dl2).color(139/255, 69/255, 19/255, 1)
    JYJ = combine(Boxjyj, jyjlz3, jyjlz4, jyjlz1, jyjlz2, Boxjyjmd, gsz,
                  gsy, gzgz, gzlzz, gzlzy, gz111, gz, dl, dlss1, dlss2, dlss3, dlss4)
    JYJ = translation(Vec3(data['平移距离'], 0, 0))*JYJ

    wangke = translation(Vec3(2750, 1250, 3550+n*2000+30))*JYJ


# 驾驶室平台 何雨洋
    boxa = Box(Vec3(500, 500, n*2000+30+500), Vec3(500, 500, n*2000+30+500+50), Vec3(1,
               0, 0), Vec3(0, 1, 0), 3000, 3000, 3000, 3000).color(231/255, 101/255, 26/255, 1)
# 驾驶室 何雨洋
    boxb = Box(Vec3(2900, 2900, n*2000+30+500+50), Vec3(2900, 2900, n*2000+30+500+50+2000),
               Vec3(1, 0, 0), Vec3(0, 1, 0), 1000, 1000, 1000, 1000).color(231/255, 101/255, 26/255, 1)
    # 驾驶室栏杆
    conea = Cone(Vec3(3500, 500, n*2000+30+500+50), Vec3(3500, 500,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneb = Cone(Vec3(3500, 500, n*2000+30+500+50+600), Vec3(3500, 3400,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    conec = Cone(Vec3(500, 500, n*2000+30+500+50), Vec3(500, 500,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    coned = Cone(Vec3(500, 500, n*2000+30+500+50+600), Vec3(3500, 500,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    conee = Cone(Vec3(3500, 500, n*2000+30+500+50+300), Vec3(3500, 3400,
                 n*2000+30+500+50+300), 20, 20).color(139/255, 69/255, 19/255, 1)
    conef = Cone(Vec3(500, 500, n*2000+30+500+50+300), Vec3(3500, 500,
                 n*2000+30+500+50+300), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneg = Cone(Vec3(500, 500, n*2000+30+500+50+600), Vec3(500, 3500,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneh = Cone(Vec3(500, 3500, n*2000+30+500+50+600), Vec3(3400, 3500,
                 n*2000+30+500+50+600), 20, 20).color(139/255, 69/255, 19/255, 1)
    conei = translation(Vec3(0, 3000, 0))*conec
    conej = translation(Vec3(0, 0, -300))*coneg
    conek = Cone(Vec3(500, 3500, n*2000+30+500+50+300), Vec3(3500, 3500,
                 n*2000+30+500+50+300), 20, 20).color(139/255, 69/255, 19/255, 1)
    conel = translation(Vec3(0, 800, 0))*conea
    conem = translation(Vec3(0, 1600, 0))*conea
    conen = translation(Vec3(750, 0, 0))*conec
    coneo = translation(Vec3(1500, 0, 0))*conec
    conep = translation(Vec3(2250, 0, 0))*conec
    coneq = translation(Vec3(0, 750, 0))*conec
    coner = translation(Vec3(0, 1500, 0))*conec
    cones = translation(Vec3(0, 2250, 0))*conec
    conet = translation(Vec3(800, 0, 0))*conei
    coneu = translation(Vec3(1600, 0, 0))*conei
    # 中间柱
    coneaa = Cone(Vec3(2750, 1250, n*2000+30+500+50), Vec3(2750, 1250,
                  n*2000+30+500+50+3000), 20, 20).color(139/255, 69/255, 19/255, 1)
    conebb = translation(Vec3(0, 1500, 0))*coneaa
    conecc = translation(Vec3(-1500, 0, 0))*conebb
    conedd = translation(Vec3(-1500, 0, 0))*coneaa
    coneee = Cone(Vec3(1250, 2750, n*2000+30+500+50+1500), Vec3(2750, 2750,
                  n*2000+30+500+50+1500), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneff = translation(Vec3(0, -1500, 0))*coneee
    conegg = Cone(Vec3(1250, 2750, n*2000+30+500+50+1500), Vec3(1250, 1250,
                  n*2000+30+500+50+1500), 20, 20).color(139/255, 69/255, 19/255, 1)
    conehh = translation(Vec3(1500, 0, 0))*conegg
    conemm = translation(Vec3(0, 0, 1500))*coneff
    conenn = translation(Vec3(0, 0, 1500))*conehh
    coneoo = translation(Vec3(0, 0, 1500))*coneee
    conepp = translation(Vec3(0, 0, 1500))*conegg
    # 斜杆
    coneaa1 = Cone(Vec3(1250, 1250, n*2000+30+500+50), Vec3(2750, 1250,
                   n*2000+30+500+50+1500), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa2 = Cone(Vec3(2750, 1250, n*2000+30+500+50+1500), Vec3(1250, 1250,
                   n*2000+30+500+50+3000), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa3 = Cone(Vec3(1250, 2750, n*2000+30+500+50), Vec3(1250, 1250,
                   n*2000+30+500+50+1500), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa4 = Cone(Vec3(1250, 1250, n*2000+30+500+50+1500), Vec3(1250, 2750,
                   n*2000+30+500+50+3000), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa5 = Cone(Vec3(1250, 2750, n*2000+30+500+50+1500), Vec3(2750,
                   2750, n*2000+30+500+50), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa6 = Cone(Vec3(1250, 2750, n*2000+30+500+50+1500), Vec3(2750, 2750,
                   n*2000+30+500+50+3000), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa7 = Cone(Vec3(2750, 2750, n*2000+30+500+50+3000), Vec3(2750, 1250,
                   n*2000+30+500+50+1500), 20, 20).color(139/255, 69/255, 19/255, 1)
    coneaa8 = Cone(Vec3(2750, 1250, n*2000+30+500+50+1500), Vec3(2750,
                   2750, n*2000+30+500+50), 20, 20).color(139/255, 69/255, 19/255, 1)
    heyuyang = combine(boxa, boxb, conea, coneb, conec, coned, conee, conef, coneg, coneh, conei, conej, conek, conel, conem, conen, coneo, conep, coneq, coner, cones, conet, coneu,
                       coneaa, conebb, conecc, conedd, coneee, coneff, conegg, conehh, conemm, conenn, coneoo, conepp, coneaa1, coneaa2, coneaa3, coneaa4, coneaa5, coneaa6, coneaa7, coneaa8)
# 配重 王嵩霖
    PHBD1 = Box(Vec3(0, 0, 0), Vec3(0, 0, 10), Vec3(-1, 0, 0),
                Vec3(0, 1, 0), 6000, 1500, 6000, 1500).color(1, 1, 1, 1)
    PHBD2 = Box(Vec3(-6000, -500, 0), Vec3(-6000, -500, 10), Vec3(-1,
                0, 0), Vec3(0, 1, 0), 4000, 2500, 4000, 2500).color(1, 1, 1, 1)
    PHBD = unite(PHBD1, PHBD2).color(139/255, 69/255, 19/255, 1)
    PHBFS1 = Box(Vec3(0, 0, 10), Vec3(0, 0, 1480), Vec3(-1, 0, 0),
                 Vec3(0, 1, 0), 30, 30, 30, 30).color(139/255, 69/255, 19/255, 1)
    PHBFS2 = translation(Vec3(0, 1470, 0))*PHBFS1
    PHBFS3 = translation(Vec3(-6000, -500, 0))*PHBFS1
    PHBFS4 = translation(Vec3(-6000, 1970, 0))*PHBFS1
    PHBFS5 = translation(Vec3(-9970, -500, 0))*PHBFS1
    PHBFS6 = translation(Vec3(-9970, 1970, 0))*PHBFS1
    PHBFS7 = translation(Vec3(-9970, -253, 0))*PHBFS1
    PHBFSS1 = combine()
    Number = 21
    for i in range(Number):
        PHBFSS1.append(translation(Vec3(-597/2*i, 0, 0))*PHBFS1)
    PHBFSS2 = combine()
    Number = 21
    for i in range(Number):
        PHBFSS2.append(translation(Vec3(-597/2*i, 0, 0))*PHBFS2)
    PHBFSS3 = combine()
    Number = 2
    for i in range(Number):
        PHBFSS3.append(translation(Vec3(0, 235*i, 0))*PHBFS3)
    PHBFSS4 = combine()
    Number = 2
    for i in range(Number):
        PHBFSS4.append(translation(Vec3(0, -235*i, 0))*PHBFS4)
    PHBFSS5 = combine()
    Number = 20
    for i in range(Number):
        PHBFSS5.append(translation(Vec3(198.5*i, 0, 0))*PHBFS5)
    PHBFSS6 = combine()
    Number = 20
    for i in range(Number):
        PHBFSS6.append(translation(Vec3(198.5*i, 0, 0))*PHBFS6)
    PHBFSS7 = combine()
    Number = 9
    for i in range(Number):
        PHBFSS7.append(translation(Vec3(0, 247*i, 0))*PHBFS7)
    PHBFSS = combine(PHBFSS1, PHBFSS2, PHBFSS3,
                     PHBFSS4, PHBFSS5, PHBFSS6, PHBFSS7)
    # 扶手
    PHBFSFS1 = Box(Vec3(0, 0, 1480), Vec3(0, 0, 1510), Vec3(-1, 0, 0),
                   Vec3(0, 1, 0), 6030, 30, 6030, 30).color(1, 1, 1, 1)
    PHBFSFS2 = translation(Vec3(0, 1470, 0))*PHBFSFS1
    PHBFSFS3 = Box(Vec3(-6000, -500, 1480), Vec3(-6000, -500, 1510),
                   Vec3(-1, 0, 0), Vec3(0, 1, 0), 30, 500, 30, 500).color(1, 1, 1, 1)
    PHBFSFS4 = translation(Vec3(0, 2000, 0))*PHBFSFS3
    PHBFSFS5 = Box(Vec3(-6030, -500, 1480), Vec3(-6030, -500, 1510),
                   Vec3(-1, 0, 0), Vec3(0, 1, 0), 3970, 30, 3970, 30).color(1, 1, 1, 1)
    PHBFSFS6 = translation(Vec3(0, 2470, 0))*PHBFSFS5
    PHBFSFS7 = Box(Vec3(-9970, -470, 1480), Vec3(-9970, -500, 1510),
                   Vec3(-1, 0, 0), Vec3(0, 1, 0), 30, 2440, 30, 2440).color(1, 1, 1, 1)
    PHBFSFS = unite(PHBFSFS1, PHBFSFS2, PHBFSFS3, PHBFSFS4, PHBFSFS5,
                    PHBFSFS6, PHBFSFS7).color(139/255, 69/255, 19/255, 1)
    # 配重
    PHBPZ = Box(Vec3(-6500, 0, -1000), Vec3(-6500, 0, 1000), Vec3(-1,
                0, 0), Vec3(0, 1, 0), 3000, 1500, 3000, 1500).color(1, 1, 1, 1)

    WSL = combine(PHBD, PHBFSS, PHBFSFS, PHBPZ)
    WSL1 = translation(Vec3(2750, 1250, 3550+n*2000+30))*WSL
# 上半部

    Z = combine(chenmengfei, heyuyang, WSL1, wangke)
    Z1 = translation(Vec3(-2000, -2000, 0))*Z
    Z11 = rotation(Vec3(0, 0, 1), (pi/180)*k)*Z1
    Z111 = translation(Vec3(2000, 2000, 0))*Z11
# 构件名

    data['塔吊'] = combine(likehancuixun, Z111)
    return data['塔吊']


if __name__ == '__main__':

    all_animation_snapshoot_entity = []

    iteration_count = 15  # iteration_count是旋转的次数
    for i in range(0, iteration_count):
        # 塔吊1
        towerCrane1 = TowerCrane(i*1)  # 1是每次旋转的角度
        towerCrane1_id = create_geometry(towerCrane1)
        all_animation_snapshoot_entity.append(towerCrane1_id)
        entity_show_switch(towerCrane1_id, False)
        # 塔吊2
        towerCrane2 = trans(0, 55000, 0)*rotz(-0.25*pi)*towerCrane1
        towerCrane2_id = create_geometry(towerCrane2)
        all_animation_snapshoot_entity.append(towerCrane2_id)
        entity_show_switch(towerCrane2_id, False)
        # 塔吊3
        towerCrane3 = trans(70000, 55000, 0)*rotz(-0.5*pi)*towerCrane1
        towerCrane3_id = create_geometry(towerCrane3)
        all_animation_snapshoot_entity.append(towerCrane3_id)
        entity_show_switch(towerCrane3_id, False)
        # 生成进度消息
        messages("动画生成中请稍作等待 当前进度:" +
                 str(round(((i+1)/iteration_count)*100, 1))+"%")

    # 若在此位置借助python三方库joblib,可将all_animation_snapshoot_entity变量记录存储到文件,就不用每次运行都重新构建。并且可用作动画后清理构件的依据

    # 动画快照控制
    while True:
        for i in range(0, len(all_animation_snapshoot_entity), 3):
            # 函数说明:snapshoot_control(参数1:隐藏构件集,参数2:显示构件集) 此函数每调用一次就是一帧
            snapshoot_control(all_animation_snapshoot_entity, [
                              all_animation_snapshoot_entity[i], all_animation_snapshoot_entity[i+1], all_animation_snapshoot_entity[i+2]])
        # 往复播放
        all_animation_snapshoot_entity = all_animation_snapshoot_entity[::-1]

效果示例: