PDA

View Full Version : scheduled animation paths: jumps


ursi
02-08-2010, 05:00 PM
Hi

Three animation paths should be scheduled one after another.

The path speed should be 100 steps/sec
pathFW.speed(100) # default: 1/sec?

I thought the waiting time should be devided by 100 as well>
yield viztask.waitTime(len(BW_Pos)/100)

My schedule looks like that, but in the animation there is a jump at the end of the first animation path... I guess, there is a timing problem and the system starts with the second path (pathStopp) before the 1st path (pathFW) is finished.

def onkeydown(key):
PATH()
if key == 't':
###+++++++++++++++++++++++++++
### SCHEDULE the room movement, sound and the output voltage
def ScheduleOutputs():
song.play()
d.eAnalogOut(3.0, 0.0) #(AO0, AO1)
pathFW.play()
yield viztask.waitTime(((len(FW_Pos))/100))
d.eAnalogOut(1.0, 0.0)
pathStopp.play()
yield viztask.waitTime(((len(Stopp_Pos))/100))
d.eAnalogOut(3.0, 0.0)
pathBW.play()
yield viztask.waitTime(((len(BW_Pos))/100))
d.eAnalogOut(1.0, 0.0)
song.stop()

viztask.schedule(ScheduleOutputs())
###+++++++++++++++++++++++++++
viz.callback(viz.KEYDOWN_EVENT,onkeydown)

So, how can I manage that timing problem?

bloswald
03-11-2010, 02:51 PM
I think I have a similar problem. Maybe I just don't understand viztask very well, but it seems that you are unable to schedule a function more than once. Can I have someone with authority agree or disagree with this? Here is some code demonstrating what I am talking about.


def print_this():
print "this"
yield viztask.waitTime( 0.1 )
vizact.onkeydown( 'p', viztask.schedule, print_this() )


If I wanted to call print_this() multiple times, how would I go about doing that?

In my application I am assembling/disassembling a model (also with animation paths). When I typed vizact.onkeydown( viz.KEY_DOWN, disassemble_all ), my program would only call the function the first time I pressed the key. I want the parts to disassemble one at a time rather than all at once.

-
bloswald :)

bloswald
03-11-2010, 03:03 PM
Oops. I meant to say: vizact.onkeydown( viz.KEY_DOWN, viztask.schedule, disassemble_all() )

-
bloswald :)

bloswald
04-27-2010, 12:12 PM
Since my last post, I have learned that tasks require a different way of thinking.

The following code worked for my purposes, and viztask.schedule is only called once.


def print_this():
while True:
yield viztask.waitKeyDown( 'p' )

print "this"
yield viztask.waitTime( 1 )

viztask.schedule( print_this() )


Sometimes you have to forget about the problem for a while, then the solution shows itself. ;)

-
bloswald :)

bloswald
06-17-2010, 11:17 AM
Here is an even better solution.


import viztask
import vizact
import viz
viz.go()

def print_this():
yield viztask.waitTime( 0.1 )
print "this"

def intermediate_function():
viztask.schedule(print_this())

vizact.onkeydown( 'p', intermediate_function )



-
bloswald :)