加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

3dsmax建筑/室内/家具/生长动画脚本插件AutokeyV1.0

(2019-11-24 17:52:56)
标签:

3dmax插件

建筑生长脚本

建筑生长插件

autokeyv1.0

分类: 软件插件
3dsmax建筑/室内/家具/生长动画脚本插件AutokeyV1.0

--------------------------------------------------------------------------
----*******************建筑生长 v2.0*************************************-----
----------------------------------------------------------------------------
rollout buildGrow "建筑生长 v2.0" 
(
local selG,
selP,
numObj,
objs=#(),
sf,
ef
fn fShape obj=findItem (shapes as array) obj>0
fn fMenb  obj=(findItem (geometry as array) obj>0 and obj.parent as string !="undefined")
---------------------------------------------
pickButton getG "选择生长物体组" pos:[4,8] width:203 height:15 filter:fMenb
button creG "创建生长" pos:[4,30] width:96 height:15 enabled:false
button delG "删除生长" pos:[111,30] width:96 height:15 enabled:false
checkbox pathON "沿路径生长" pos:[4,62] width:90 height:15
pickButton pickP "选取路径" pos:[109,62] width:97 height:15 filter:fShape enabled:false
checkbox rxyz "-   生长方向" pos:[4,82] width:77 height:15
radioButtons gxyz "" pos:[84,82] width:126 height:15 labels:#("x", "y", "z", "R") default:3 columns:4
checkbox vOn "可见性" pos:[4,117] width:56 height:14 checked:true
checkbox mOn "移动" pos:[63,117] width:44 height:14
checkbox rOn "旋转" pos:[110,117] width:44 height:14
checkbox sOn "缩放" pos:[158,117] width:44 height:14
label showP "使用几率" pos:[4,136] width:49 height:14
spinner perv "" pos:[52,136] width:35 height:16 range:[0,100,100] type:#integer
spinner perm "" pos:[92,136] width:35 height:16 range:[0,100,100] type:#integer enabled:false
spinner perr "" pos:[131,136] width:35 height:16 range:[0,100,100] type:#integer enabled:false
spinner pers "" pos:[171,136] width:35 height:16 range:[0,100,100] type:#integer enabled:false
label lblsef "组生长始末帧" pos:[4,100] width:72 height:14
label lblp "生长周期" pos:[4,157] width:49 height:14
label lblpr "周期随机" pos:[4,177] width:49 height:14
label lblsfr "始帧随机" pos:[4,197] width:49 height:14
spinner tsf "" pos:[78,100] width:60 height:16 range:[1,500,1]  type:#integer 
spinner tef "" pos:[146,100] width:60 height:16 range:[2,1000,50] type:#integer
spinner Pv "" pos:[52,156] width:35 height:16 range:[1,200,1] type:#integer
spinner pm "" pos:[92,156] width:35 height:16 range:[1,200,3] type:#integer enabled:false
spinner pr "" pos:[131,156] width:35 height:16 range:[1,200,3] type:#integer enabled:false
spinner ps "" pos:[171,156] width:35 height:16 range:[1,200,3] type:#integer enabled:false
spinner prv "" pos:[52,176] width:35 height:16 range:[0,200,2] type:#integer
spinner prm "" pos:[92,176] width:35 height:16 range:[0,200,4] type:#integer enabled:false
spinner prr "" pos:[131,176] width:35 height:16 range:[0,200,4] type:#integer enabled:false
spinner prs "" pos:[171,176] width:35 height:16 range:[0,200,4] type:#integer enabled:false
spinner sfrv "" pos:[52,196] width:35 height:16 range:[0,100,3] type:#integer
spinner sfrm "" pos:[92,196] width:35 height:16 range:[0,100,5] type:#integer enabled:false
spinner sfrr "" pos:[131,196] width:35 height:16 range:[0,100,5] type:#integer enabled:false
spinner sfrs "" pos:[171,196] width:35 height:16 range:[0,100,5] type:#integer enabled:false
label lblpx "VMRS排序: 0-1" pos:[4,217] width:82 height:15
spinner seqM "" pos:[92,216] width:35 height:16 range:[0,5,3] type:#float enabled:false
spinner seqR "" pos:[131,216] width:35 height:16 range:[0,5,2] type:#float enabled:false
spinner seqS "" pos:[171,216] width:35 height:16 range:[0,5,1] type:#float enabled:false
label lblfd "VMRS幅度    1" pos:[4,236] width:204 height:15
spinner maxM "" pos:[92,236] width:35 height:16 range:[0,10,1.8] enabled:false
spinner maxR "" pos:[131,236] width:35 height:16 range:[0,10,1] enabled:false
label lblgx "惯性生长      0" pos:[4,259] width:80 height:19
checkbox gxm "" pos:[92,259] width:36 height:14 enabled:false
checkbox gxr "" pos:[131,259] width:36 height:14 enabled:false
checkbox gxs "" pos:[171,259] width:36 height:14 enabled:false
label lblm "移动方向:" pos:[4,284] width:55 height:15 enabled:false
editText txyzm "" pos:[55,284] width:54 height:12 text:" 随机" enabled:false
editText trm   "" pos:[138,284] width:54 height:12  text:" 双向" enabled:false
spinner xyzM "" pos:[110,284] width:13 height:16 range:[1,4,4] type:#integer enabled:false
spinner rm "" pos:[193,285] width:13 height:16 range:[1,3,3] type:#integer enabled:false
label lblr "旋转方向:" pos:[4,304] width:55 height:15 enabled:false
editText txyzR "" pos:[55,304] width:54 height:12 text:" 随机" enabled:false
editText trr   "" pos:[138,304] width:54 height:12 text:" 双向" enabled:false
spinner xyzR "" pos:[110,304] width:13 height:16 range:[1,4,4] type:#integer enabled:false
spinner rr "" pos:[193,305] width:13 height:16 range:[1,3,3] type:#integer enabled:false
label lbls "缩放方式:" pos:[4,324] width:55 height:15 enabled:false
editText txyzs "" pos:[55,324]  width:54 height:12 text:" 随机" enabled:false
spinner xyzS "" pos:[110,324] width:13 height:16 range:[1,5,5] type:#integer enabled:false
-------------------------
--editText trm   "" pos:[156,284] width:30 height:16 enabled:false

groupBox demon "说明:" pos:[4,350] width:203 height:97
label lbldemon "     移动旋转缩放的参数值请通过微调手柄上下拖动选择。    vmrs指可见性、移动、旋转和缩放。     目前惯性生长功能不可用。" pos:[11,365] width:184 height:80
-------------------------------------------------------------------------------------------------------------------------------------
local creON=#(1,0,0,0,0),
ctrlV=#(perv,pv,prv,sfrv),
ctrlM=#(perm,pm,prm,sfrm,seqm,maxm,gxm,xyzm,rm,lblm),
ctrlR=#(perr,pr,prr,sfrr,seqr,maxr,gxr,xyzr,rr,lblr),
ctrls=#(pers,ps,prs,sfrs,seqs,gxs,xyzs,lbls)
----------------------------
fn delGrow    =
(
if vON.checked == true do
(
for i=1 to numObj do (if objs[i].visibility.isAnimated==true then (deleteKeys objs[i].visibility.controller #allKeys;  objs[i].visibility=on) )
)
if mON.checked == true do
(
local objP
for i=1 to numObj do 
(
objP=at time (tef.value+500) objs[i].position
deleteKeys objs[i].position.controller #allKeys
objs[i].position=objP
)
)
if rON.checked == true do
(
local rr=[0,0,0]
for i=1 to numObj do 
(
rr.x=at time (tef.value+500) objs[i].rotation.x_rotation
rr.y=at time (tef.value+500) objs[i].rotation.y_rotation
rr.z=at time (tef.value+500) objs[i].rotation.z_rotation
deleteKeys objs[i].rotation.x_rotation.controller #allKeys; deleteKeys objs[i].rotation.y_rotation.controller #allKeys;deleteKeys objs[i].rotation.z_rotation.controller #allKeys
objs[i].rotation.x_rotation=rr.x; objs[i].rotation.y_rotation=rr.y; objs[i].rotation.z_rotation=rr.z
)
)
if sON.checked == true do
(
local ss=[0,0,0]
for i=1 to numObj do
(
ss=at time (tef.value+200) objs[i].scale
deleteKeys objs[i].scale.controller #allKeys
objs[i].scale=ss
)
)
)--end fn
-----------------------------
fn creGrow =
(
local sfv=0,
efv=0,
sfm=0,
efm=0,
sfr=0,
efr=0,
sfs=0,
efs=0,
r=0,
nm=[0,0,0],
nr=[0,0,0],
ns=[0,0,0],
rto=[0,0,0]
for i=1 to numObj do
(
objc=objs[i]
if pathOn.checked==false then 
(
per=case gxyz.state of
(
1: (objc.center.x-selg.min.x)/(selg.max.x-selg.min.x)
2: (objc.center.y-selg.min.y)/(selg.max.y-selg.min.y)
3: (objc.center.z-selg.min.z)/(selg.max.z-selg.min.z)  
4: (random 0.0 1.0)
)
if rxyz.checked==true then per=1-per
)
else per=nearestPathParam selP objC.center
sf=(per*(tef.value-tsf.value)) as integer+tsf.value+random 0 sfrv.value
ef=sf+pv.value+random 0 prv.value
if (random 1 100)
if (random 1 100)
if (random 1 100)
if (random 1 100)
----------------
if sfm !=0 then 
(
dir=case xyzm.value of (1: 1; 2: 2; 3: 3; 4: (random 1 3))
r=case rm.value of (1: 1; 2: -1; 3: (if (random 1 100)<50 then 1 else -1))
nm= case dir of
(
1:[(objc.pos.x-r*maxM.value*(objc.max.x-objc.min.x)),objc.pos.y,objc.pos.z]
2:[objc.pos.x,(objc.pos.y-r*maxM.value*(objc.max.y-objc.min.y)),objc.pos.z]
3:[objc.pos.x,objc.pos.y,(objc.pos.z-r*maxM.value*(objc.max.z-objc.min.z))]
)
)
if sfr !=0 then
(
dir=case xyzr.value of (1: 1; 2: 2; 3: 3; 4: (random 1 3))
r=case rr.value of (1: 1; 2: -1; 3: (if (random 1 100) <50 then 1 else -1))
nr=case dir of
(
1: [(objc.rotation.x_rotation-r*maxR.value*180),objc.rotation.y_rotation,objc.rotation.z_rotation]
2: [objc.rotation.x_rotation,(objc.rotation.y_rotation-r*maxR.value*180),objc.rotation.z_rotation]
3: [objc.rotation.x_rotation,objc.rotation.y_rotation,(objc.rotation.z_rotation-r*maxR.value*180)]
)
)
if sfs !=0 then
(
dir=case xyzs.value of (1: 1; 2: 2; 3: 3; 4: 4; 5: (random 1 4))
ns=case dir of
(
1: [0,objc.scale.y,objc.scale.z]
2: [objc.scale.x,0,objc.scale.z]
3: [objc.scale.x,objc.scale.y,0]
4: [0,0,0]
)
)
---------------
set animate on
if sfv !=0 then
(
at time sfv objc.visibility=off
at time efv objc.visibility=on
deleteKey objc.visibility.controller 1
objc.visibility.keys.inTangentType=#linear
objc.visibility.keys.outTangentType=#linear
)
if sfm !=0 then
(
at time efm objc.position=objc.position
at time sfm objc.position=nm
deleteKey objc.position.controller 1
objc.position.keys.intangentType=#linear
objc.position.keys.outTangentType=#linear
)
if sfr !=0 then
(
local rto=[objc.rotation.x_rotation,objc.rotation.y_rotation,objc.rotation.z_rotation]
at time efr ( objc.rotation.x_rotation=rto.x; objc.rotation.y_rotation=rto.y; objc.rotation.z_rotation=rto.z)
at time sfr ( objc.rotation.x_rotation=nr.x; objc.rotation.y_rotation=nr.y; objc.rotation.z_rotation=nr.z)
deleteKey objc.rotation.x_rotation.controller 1; deleteKey objc.rotation.y_rotation.controller 1; deleteKey objc.rotation.z_rotation.controller 1
objc.rotation.x_rotation.controller.keys[1].value=nr.x; objc.rotation.x_rotation.controller.keys[2].value=rto.x
objc.rotation.y_rotation.controller.keys[1].value=nr.y; objc.rotation.y_rotation.controller.keys[2].value=rto.y
objc.rotation.z_rotation.controller.keys[1].value=nr.z; objc.rotation.z_rotation.controller.keys[2].value=rto.z
objc.rotation.x_rotation.keys.intangentType=#linear; objc.rotation.x_rotation.keys.outtangentType=#linear
objc.rotation.y_rotation.keys.intangentType=#linear; objc.rotation.y_rotation.keys.outtangentType=#linear
objc.rotation.z_rotation.keys.intangentType=#linear; objc.rotation.z_rotation.keys.outtangentType=#linear
)
if sfs !=0 then
(
at time efs objc.scale=objc.scale
at time sfs objc.scale=ns
deleteKey objc.scale.controller 1
objc.scale.keys.intangentType=#linear
objc.scale.keys.outTangentType=#linear
)
set animate off
)--end for i
)--end creKey
----------------------------------------------------------------------------------------------------------------
on pathOn changed state do if state==on then(pickP.enabled=true;rxyz.enabled=false;gxyz.enabled=false) else (pickP.enabled=false;rxyz.enabled=true;gxyz.enabled=true)
on vOn changed state do 
(
if state==on then (for i=1 to ctrlV.count do ctrlv[i].enabled=true;creOn[1]=1;if creon[5]==1 then (creG.enabled=true;delG.enabled=true)) 
else (for i=1 to ctrlv.count do ctrlv[i].enabled=false;creOn[1]=0;if (creON[1]+creON[2]+creon[3]+creon[4])*creOn[5]==0 then (creG.enabled=false;delG.enabled=false))
)
on mON changed state do 
(
if state==on then (for i=1 to ctrlM.count do ctrlm[i].enabled=true;creOn[2]=1;if creon[5]==1 then (creG.enabled=true;delG.enabled=true))
else (for i=1 to ctrlM.count do ctrlm[i].enabled=false;creOn[2]=0;if (creON[1]+creON[2]+creon[3]+creon[4])*creOn[5]==0 then (creG.enabled=false;delG.enabled=false))
)
on rOn changed state do 
(
if state==on then (for i=1 to ctrlR.count do ctrlr[i].enabled=true;creOn[3]=1;if creon[5]==1 then (creG.enabled=true;delG.enabled=true))
else (for i=1 to ctrlR.count do ctrlr[i].enabled=false;creOn[3]=0;if (creON[1]+creON[2]+creon[3]+creon[4])*creOn[5]==0 then (creG.enabled=false;delG.enabled=false))
)
on sOn changed state do
(
if state==on then (for i=1 to ctrlS.count do ctrls[i].enabled=true;if creon[5]==1 then (creG.enabled=true;delG.enabled=true))
else (for i=1 to ctrlS.count do ctrls[i].enabled=false;creOn[4]=0;if (creON[1]+creON[2]+creon[3]+creon[4])*creOn[5]==0 then (creG.enabled=false;delG.enabled=false))
)
on getG picked obj do 
(
selG=obj
while selG.parent as string !="undefined" do selG=selG.parent
getG.text=("组物体: "+selG.name)
objs=selG.children
numObj=objs.count
for i=1 to numObj do (objs[i].rotation.controller=euler_xyz(); objs[i].pos.controller=bezier_position(); objs[i].scale.controller=bezier_scale() )
creOn[5]=1
if (creON[1]+creON[2]+creon[3]+creon[4])>0 then (creG.enabled=true;delG.enabled=true)
)
3dsmax建筑/室内/家具/生长动画脚本插件AutokeyV1.0

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有