Running scripts are slow - newbie 2005-05-23 - By kim aldis
Back Here's another tip:
For I = 1 to 1567
Is a bit specific and you probably had to go to work on the scene to figure that number out. Try something like this instead, which should ease you into the OM gently by relieving you of a selectobj at the same time:-
set oColl = createobject( "XSI.Collection" )
' wild card select of everything cube!!! oColl.Items = "Cube*"
for each oCube in oColl logmessage oCube next
-- --Original Message-- -- From: owner-xsi@(protected) [mailto:owner-xsi@(protected)] On Behalf Of Bernard Lebel Sent: 23 May 2005 20:55 To: XSI@(protected) Subject: Re: Running scripts are slow - newbie
First of all, I you have 1500 objects, you may not want to print their name. Each time you log a message it ads to the execution time. On a small bunch of object it doesn't matter that much, but on longer lists it may affect execution time significantly. If you really want a log message to show progress you may print such message only once every 10 or 100 objects. Only when the script is giving you troubles you will force it to print every object.
Now Kim is 100% right, using the object model instead of the command model will make your scripts enormously faster. In fact, do not pretend you know scripting until you use the object model (or at least know how to use it!) ;-)
So lets's look at the various of your script... (see [Bernard] below)
Jeff McFall wrote:
>CreateImageClip " .... \VIDEO_ELEMENTS\Mosaic_test_mdb\Pictures\relief.pic"
> >SelectObj "Clips.relief_pic" > >set oImageClip = Selection(0) >set oImage = oImageClip.GetImage > > >for i = 1 to 1567 > > >SelectObj("cube" & i) > >' show where we are >logmessage i > > [Bernard] Remove this logmessage, as explained above.
>xPos = Selection(0).posX.Value >yPos = Selection(0).posZ.Value > > > xImagepos = CInt(720 - (xPos*100)) > yImagepos = CInt(540 - (yPos*100)) > > > set oPixelColor = oImage.GetPixel (xImagepos , yImagepos) > > ApplyShader "Phong" > > > SetKey obj & ".Material.Phong.Diffuse.red", 91 , oPixelColor.Red > SetKey obj & ".Material.Phong.Diffuse.green", 91 , oPixelColor.Green > SetKey obj & ".Material.Phong.Diffuse.blue", 91 , oPixelColor.Blue > > SetKey obj & ".Material.Phong.Ambient.red", 91 , oPixelColor.Blue > SetKey obj & ".Material.Phong.Ambient.green", 91 , oPixelColor.Blue > SetKey obj & ".Material.Phong.Ambient.blue", 91 , oPixelColor.Blue > > [Bernard] There is a way to replace the set key commands. First, apply an fcurve to the parameters you wish to keyframe. The AddFCurve() method will return a FCurve object. Now use that object to add keyframes, with the AddKey() method. The AddKey() entry in the docs have a good example of how to do these two things.
> > > height = ((oPixelColor.Red + oPixelColor.blue + oPixelColor.green) * 1.5) > size = (oPixelColor.Red + oPixelColor.blue + oPixelColor.green) > > > SetKey obj & ".kine.local.posy", 91, height > > > SetKey obj & ".kine.local.sclx", 91 , size > SetKey obj & ".kine.local.scly", 91 , size > SetKey obj & ".kine.local.sclz", 91 , size > > >next > > [Bernard] The same applies. Instead of setting keys onto the transformation of the object, you should add fcurves and use addkey().
Cheers Bernard
--- Unsubscribe? Mail Majordomo@(protected) with the following text in body: unsubscribe xsi
--- Unsubscribe? Mail Majordomo@(protected) with the following text in body: unsubscribe xsi
|
|