Try the attached script, but by all means don't look at it...it's rather old
> pingo van der brinkloev <[email protected]> hat am 16. Januar 2014 um 13:28
> geschrieben:
>
>
> Hi all,
>
> I need to add some random motion to some objects...
>
> And here I thought I'd get data kine.global.pos feed that into a turbulize
> around value and into a set data and execute and... og well..
>
> I can't "just" do that. Why not? I'm having trouble with the set data node no
> matter what I do.
>
> Any pointers would be greatly appreciated, so I don't have to brute force
> animate a LOT of objects.
>
> - it's objects with collission, so I need real geo.
>
> - I'd rather not mess with particles on this one.
>
> Cheers!
>
from random import randint
import win32com.client
from win32com.client import constants as c
null = None
false = 0
true = 1
TRUE = True
FALSE = False
xsi = Application
SELECTION = xsi.Selection
def wiggle(obj,kine,AMOUNT,IN,OUT,STEP):
BASEPOS = xsi.GetValue(str(obj)+".kine.local."+kine,IN)
xsi.SaveKey(str(obj)+".kine.local."+kine, IN,BASEPOS , "", "", 0)
xsi.SaveKey(str(obj)+".kine.local."+kine, OUT,BASEPOS , "", "", 0)
i = IN+STEP
while i < OUT:
value =
randint(int(BASEPOS*10000-AMOUNT*10000),int(BASEPOS*10000+AMOUNT*10000))/10000.0
xsi.SaveKey(str(obj)+".kine.local."+kine, i,value , "", "", 0)
i = i+STEP
#for i in range(IN+1,OUT):
#value =
randint(int(BASEPOS*10000-AMOUNT*10000),int(BASEPOS*10000+AMOUNT*10000))/10000.0
#xsi.SaveKey(str(obj)+".kine.local."+kine, i,value , "", "", 0)
def
doIt(PosX,posxAmount,PosY,posyAmount,PosZ,poszAmount,RotX,rotxAmount,RotY,rotyAmount,RotZ,rotzAmount,
SclX,sclxAmount,SclY,sclyAmount,SclZ,sclzAmount,IN,OUT,STEP):
for obj in SELECTION:
if PosX.Value == True:
wiggle(obj,"posx",posxAmount.Value,IN.Value,OUT.Value,STEP.Value)
if PosY.Value == True:
wiggle(obj,"posy",posyAmount.Value,IN.Value,OUT.Value,STEP.Value)
if PosZ.Value == True:
wiggle(obj,"posz",poszAmount.Value,IN.Value,OUT.Value,STEP.Value)
if RotX.Value == True:
wiggle(obj,"rotx",rotxAmount.Value,IN.Value,OUT.Value,STEP.Value)
if RotY.Value == True:
wiggle(obj,"roty",rotyAmount.Value,IN.Value,OUT.Value,STEP.Value)
if RotZ.Value == True:
wiggle(obj,"rotz",rotzAmount.Value,IN.Value,OUT.Value,STEP.Value)
if SclX.Value == True:
wiggle(obj,"sclx",sclxAmount.Value,IN.Value,OUT.Value,STEP.Value)
if SclY.Value == True:
wiggle(obj,"scly",sclyAmount.Value,IN.Value,OUT.Value,STEP.Value)
if SclZ.Value == True:
wiggle(obj,"sclz",sclzAmount.Value,IN.Value,OUT.Value,STEP.Value)
#AMOUNT = int(AMOUNT*1000)
#sel = xsi.Selection[0]
def gui():
oPSet = xsi.ActiveSceneRoot.AddProperty("CustomProperty",False,"WIGGLE")
oLayout = oPSet.PPGLayout
oPSet.AddParameter3( "Logo", c.siString )
logo = oLayout.AddItem("Logo"," ",c.siControlBitmap)
logo.SetAttribute(c.siUIFilePath,
"T:\\3D\\XSI_WORKGROUP\\Data\\Scripts\\bitmaps\\tv_wiggle.bmp")
oLayout.AddGroup( "FRAMERANGE" )
oLayout.AddRow()
IN = oPSet.AddParameter3("IN", c.siInt2,1,1,10000,0)
oLayout.AddItem("IN", "IN", c.siControlNumber)
xsi.SetValue(IN, xsi.GetValue('PlayControl.In'))
OUT = oPSet.AddParameter3("OUT", c.siInt2,1,1,10000,0)
oLayout.AddItem("OUT", "OUT", c.siControlNumber)
xsi.SetValue(OUT, xsi.GetValue('PlayControl.Out'))
oLayout.EndRow()
STEP = oPSet.AddParameter3("STEP", c.siInt2,1,1,1000,0)
oLayout.AddItem("STEP", "STEP", c.siControlNumber)
xsi.SetValue(STEP, 1)
oLayout.EndGroup()
###############
# POSITION
oLayout.AddGroup( "POSITION" )
oLayout.AddRow()
PosX = oPSet.AddParameter3("PosX",c.siBool,1,1,100,0)
posx = ["",1]
oLayout.AddEnumControl("PosX", posx,"", c.siControlBoolean)
xsi.SetValue(PosX, TRUE)
posxAmount = oPSet.AddParameter3("PosX_Amount", c.siFloat,1,0,100,0)
oLayout.AddItem("PosX_Amount", "X", c.siControlNumber)
xsi.SetValue(posxAmount, 1)
PosY = oPSet.AddParameter3("PosY",c.siBool,1,1,100,0)
posy = ["",1]
oLayout.AddEnumControl("PosY", posy,"", c.siControlBoolean)
xsi.SetValue(PosY, TRUE)
posyAmount = oPSet.AddParameter3("PosY_Amount", c.siFloat,1,0,100,0)
oLayout.AddItem("PosY_Amount", "Y", c.siControlNumber)
xsi.SetValue(posyAmount, 1)
PosZ = oPSet.AddParameter3("PosZ",c.siBool,1,1,100,0)
posz = ["",1]
oLayout.AddEnumControl("PosZ", posz,"", c.siControlBoolean)
xsi.SetValue(PosZ, TRUE)
poszAmount = oPSet.AddParameter3("PosZ_Amount", c.siFloat,1,0,100,0)
oLayout.AddItem("PosZ_Amount", "Z", c.siControlNumber)
xsi.SetValue(poszAmount, 1)
oLayout.EndRow()
oLayout.EndGroup()
###############
# ROTATION
oLayout.AddGroup( "ROTATION" )
oLayout.AddRow()
RotX = oPSet.AddParameter3("RotX",c.siBool,0.5,0,1000,0)
rotx = ["",1]
oLayout.AddEnumControl("RotX", rotx,"", c.siControlBoolean)
xsi.SetValue(RotX, TRUE)
rotxAmount = oPSet.AddParameter3("RotX_Amount", c.siFloat,0.5,0,1000,0)
oLayout.AddItem("RotX_Amount", "RotX_Amount", c.siControlNumber)
xsi.SetValue(rotxAmount, 0.5)
RotY = oPSet.AddParameter3("RotY",c.siBool,1.5,0,1000,0)
roty = ["",1]
oLayout.AddEnumControl("RotY", roty,"", c.siControlBoolean)
xsi.SetValue(RotY, TRUE)
rotyAmount = oPSet.AddParameter3("RotY_Amount", c.siFloat,1.5,0,1000,0)
oLayout.AddItem("RotY_Amount", "RotY_Amount", c.siControlNumber)
xsi.SetValue(rotyAmount, 10.5)
RotZ = oPSet.AddParameter3("RotZ",c.siBool,1.5,0,1000,0)
rotz = ["",1]
oLayout.AddEnumControl("RotZ", rotz,"", c.siControlBoolean)
xsi.SetValue(RotZ, TRUE)
rotzAmount = oPSet.AddParameter3("RotZ_Amount", c.siFloat,1.5,0,1000,0)
oLayout.AddItem("RotZ_Amount", "RotZ_Amount", c.siControlNumber)
xsi.SetValue(rotzAmount, 10.5)
oLayout.EndRow()
oLayout.EndGroup()
###############
# SCALE
oLayout.AddGroup( "SCALE" )
oLayout.AddRow()
SclX = oPSet.AddParameter3("SclX",c.siBool,1,1,100,0)
sclx = ["",1]
oLayout.AddEnumControl("SclX", sclx,"", c.siControlBoolean)
xsi.SetValue(SclX, TRUE)
sclxAmount = oPSet.AddParameter3("SclX_Amount", c.siFloat,0.5,0,100,0)
oLayout.AddItem("SclX_Amount", "SclX_Amount", c.siControlNumber)
xsi.SetValue(sclxAmount, 0.5)
SclY = oPSet.AddParameter3("SclY",c.siBool,1,1,100,0)
scly = ["",1]
oLayout.AddEnumControl("SclY", scly,"", c.siControlBoolean)
xsi.SetValue(SclY, TRUE)
sclyAmount = oPSet.AddParameter3("SclY_Amount", c.siFloat,0.5,0,100,0)
oLayout.AddItem("SclY_Amount", "SclY_Amount", c.siControlNumber)
xsi.SetValue(sclyAmount, 0.5)
SclZ = oPSet.AddParameter3("SclZ",c.siBool,1,1,100,0)
sclz = ["",1]
oLayout.AddEnumControl("SclZ", sclz,"", c.siControlBoolean)
xsi.SetValue(SclZ, TRUE)
sclzAmount = oPSet.AddParameter3("SclZ_Amount", c.siFloat,0.5,0,100,0)
oLayout.AddItem("SclZ_Amount", "SclZ_Amount", c.siControlNumber)
xsi.SetValue(sclzAmount, 0.5)
oLayout.EndRow()
oLayout.EndGroup()
buttonPressed = xsi.InspectObj(oPSet, "", "Check it out", c.siModal,FALSE)
return oPSet,buttonPressed,PosX,posxAmount,PosY,posyAmount,PosZ,poszAmount,
\
RotX,rotxAmount,RotY,rotyAmount,RotZ,rotzAmount, \
SclX,sclxAmount,SclY,sclyAmount,SclZ,sclzAmount,IN,OUT,STEP
def main():
oPSet,buttonPressed,PosX,posxAmount,PosY,posyAmount,PosZ,poszAmount, \
RotX,rotxAmount,RotY,rotyAmount,RotZ,rotzAmount, \
SclX,sclxAmount,SclY,sclyAmount,SclZ,sclzAmount,IN,OUT,STEP =
gui()
if buttonPressed == FALSE:
xsi.LogMessage("OK")
doIt(PosX,posxAmount,PosY,posyAmount,PosZ,poszAmount,RotX,rotxAmount,RotY,rotyAmount,RotZ,rotzAmount,
SclX,sclxAmount,SclY,sclyAmount,SclZ,sclzAmount,IN,OUT,STEP)
else:
xsi.LogMessage("Cancel")
xsi.DeleteObj(oPSet)
main()