在视图中显示及隐藏输入参数对应的构建集合,并以动画的形式逐帧批量播放
输入参数:
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]
效果示例: