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()

Reply via email to