View Full Version : stop and starting a .wrl file
Hello,
Im trying to make a animation happen once if. Im planning on using it in a def.
Do i initate the .wrl file before the def?
How can I make the .wrl disapear after the animation runs once?
Use the viz.ACTION_END_EVENT to notify you that the action has completed on your object and then within your callback function use <node3D>.remove() to permanently remove the object from the scene.
import viz
viz.go()
spin = vizact.spin(0,1,0,90,5)
ball = viz.add('ball.wrl',pos=(0,1.8,2))
ball.addAction(spin)
def onActionEnd(e):
if e.object is ball and e.action is spin:
ball.remove()
print 'Ball is removed'
viz.callback(viz.ACTION_END_EVENT,onActionEnd)
Well I dont want a spinning action to happen. The animation(the .wrl file) moves. This is an example. We have the sun. The sun rise from one area and sets in another area. On a certain cue I want to trigger the animation(the sun). Let it arc through the air for about 5 seconds and when its at its set point I want it to disappear. And then if that certain cue happens again I want to repeat that process. Ive been going through the index trying to find some code that could fit this but Im not having the best of luck.
Thanks
Not sure if Im understanding how these def really works. Im trying to calculate speed. When that speed is between 3 and 5 I want it to kick in the animation. This animation is a looping animation. Kind of like the above post from yesterday about the sun. Anyways, when I run this it kicks off the animation when it shouldn't because the speed should be 0. Then it only runs once. I was thinking that since CalculateSpeed always stays runnning that it would keep checking the speed between 3 and 5. If that was true it would kick it into the showFlower() and run once. SO I need help, any suggestions would be much appreciated.
One more thing. I want it to create a new image everytime its speed is between 3 and 5 and then removes that image after 3.5 seconds.
Thanks
def CalculateSpeed(obj):
#Get current and last position
current_pos = obj.getPosition()
last_pos = getattr(obj, 'last_pos', None)
if last_pos is None:
#This is first call, so save position and set speed to 0
obj.last_pos = current_pos
obj.speed = 0.0
else:
#Compute speed using last position
obj.speed = vizmat.Distance(current_pos,last_pos) / viz.elapsed()
obj.last_pos = current_pos
if obj.speed > 3 and obj.speed < 5:
showFlower()
vizact.ontimer(.1,CalculateSpeed,ppt1)
def showFlower():
flower = viz.add('flower_02.wrl') #creates new flower
flower.scale(.2,.2,.2)
yield viztask.waitTime( 3.5 ) #waits 3.5 seconds
flower.remove() #then removes flower
viztask.schedule( showFlower() )
Nevermind I got it... I just moved the def up into the if statement and now it works YEAH!
vBulletin® v3.8.7, Copyright ©2000-2025, vBulletin Solutions, Inc.