WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   stop and starting a .wrl file (https://forum.worldviz.com/showthread.php?t=1917)

durf 03-17-2009 05:57 PM

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?

Jeff 03-18-2009 12:07 AM

Use the viz.ACTION_END_EVENT to notify you that the action has completed on your object and then within your callback function use .remove() to permanently remove the object from the scene.
Code:

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)


durf 03-18-2009 05:53 AM

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

durf 03-19-2009 08:51 AM

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

Code:

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


durf 03-19-2009 10:20 AM

Nevermind I got it... I just moved the def up into the if statement and now it works YEAH!


All times are GMT -7. The time now is 06:19 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc.
Copyright 2002-2018 WorldViz LLC