3dsmax建筑/室内/家具/生长动画脚本插件AutokeyV1.0
标签:
3dmax插件建筑生长脚本建筑生长插件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)
)

加载中…