WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   problem with path animation (https://forum.worldviz.com/showthread.php?t=5695)

jelly 04-16-2016 11:42 AM

problem with path animation
 
Hello!

I want to run a function 4 times. The function entails that the viewpoint is being animated as to look as it is moving through a maze. The problem is that, while it always loads the function 4 times, the animation only works the first time, after which is stops at the position of the end of the animation. It's as if the viewpoint does not get updated back to its initial setting.

I would be extremely grateful for any help or pointers, because I tried everything I could think of and it is just trial-and-error!


Code:

import viz                                                                                                                        #Needed to generate a world.
import viztask                                                                                                                #Needed to control the experiment structure.


viz.mouse.setVisible(viz.OFF)                                                                                #Stops the mouse appearing on the screen.
viz.mouse.setOverride(viz.ON)                                                                                #Stops Vizard navigation using the mouse.

viz.clearcolor(viz.BLACK)



#Set the start position:
startPos = [-6.4,0,-8]


viz.go()

### Add all the resources. ###############
maze1 = viz.add('Objects/Maze_1.dae')
#maze1.visible(viz.ON)

subwindow = viz.addWindow()

view = viz.addView()

view.eyeheight(1.4)
view.setPosition(startPos)
view.collision(viz.ON)
viz.collisionbuffer(.8)

subwindow.setView( view )
subwindow.setSize( 0.4,0.4 )
subwindow.setPosition(0.3,0.7) #(0,1)
subwindow.visible( viz.ON )



##Animation path


pathMaze1 = viz.addAnimationPath()

#Add control points to the path, along with their time stamp.
pathMaze1.addControlPoint(0,pos=(-6.4,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(2,pos=(-6.4,0,-8),euler=(90,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(4,pos=(0,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(8,pos=(0,0,5),euler=(0,0,0),scale=(2,2,2))

#Duation of animation
pathMaze1Duration = pathMaze1.getDuration()

#Loop the path in a swinging fashion (point A to point B to point A, etc.).
pathMaze1.setLoopMode(viz.OFF)


def maze1():
        print 'now'
       
        view.setPosition(-6.4,0,-8)
        link = viz.link(pathMaze1,view)
        yield viztask.waitTime(2)
        pathMaze1.play()
        yield viztask.waitTime(pathMaze1Duration)
       

def masterFunction():                                                               
        for x in range(4):
                yield maze1()
               
viztask.schedule(masterFunction())


jelly 04-18-2016 02:52 AM

I noticed that it's not good to have a function with the same name is an object "maze1" so I cahnged the fucntion name to "maze1trial". This, however still has not solved my problem. I wonder why the viewpoint does not reset to the start position, or why the animation does not play again, respectively? I played around with the viewpoint and thought it may be because of the link, so within the trial, at the very end, I am also unlinking, just to be sure. Still did not solve the issue. I would just like the maze objhect to lead and then the viewpoint animation to be played 4 times (as in repeating the animation 4 times, one after the other).

It now looks like this:

Code:

import viz                                                                                                                        #Needed to generate a world.
import viztask                                                                                                                #Needed to control the experiment structure.


viz.mouse.setVisible(viz.OFF)                                                                                #Stops the mouse appearing on the screen.
viz.mouse.setOverride(viz.ON)                                                                                #Stops Vizard navigation using the mouse.

viz.clearcolor(viz.BLACK)


#Set the start position:
startPos = [-6.4,0,-8]


viz.go()


### Add all the resources. ###############

maze1 = viz.add('Objects/Maze_1.dae')
maze1.visible(viz.OFF)

#Add a sky with an environment map.
env = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg')
dome = viz.add('skydome.dlc')
dome.texture(env)

view = viz.MainView

view.eyeheight(1.4)
view.setPosition(startPos)
view.collision(viz.ON)
viz.collisionbuffer(.8)

viewNode = viz.addGroup()
viewLink = viz.link( viewNode, viz.MainView)
viewNode.setPosition([-6.4,0,-8])

##Animation path

pathMaze1 = viz.addAnimationPath()

#Add control points to the path, along with their time stamp.
pathMaze1.addControlPoint(0,pos=(-6.4,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(2,pos=(-6.4,0,-8),euler=(90,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(4,pos=(0,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(8,pos=(0,0,5),euler=(0,0,0),scale=(2,2,2))

#Duation of animation
pathMaze1Duration = pathMaze1.getDuration()


#Loop the path in a swinging fashion (point A to point B to point A, etc.).
pathMaze1.setLoopMode(viz.OFF)


def maze1trial():
        print 'now'
        maze1.visible(viz.ON)
        viewNode.setPosition(-6.4,0,-8)
        link = viz.link(pathMaze1,viewNode)
        yield pathMaze1.play()
        yield viztask.waitTime(pathMaze1Duration)
        link.remove
        maze1.visible(viz.OFF)


def masterFunction():                                                               
        for x in range(4):
                yield maze1trial()
               
viztask.schedule(masterFunction())


jelly 04-18-2016 02:53 AM

I would really appreciate your help! :)

Jeff 04-18-2016 06:01 AM

Make sure you reset the path at the beginning of each trial:

Code:

pathMaze1.reset()

jelly 04-18-2016 07:18 AM

Thank you so much, this did the trick and it now works perfectly!!

jelly 04-20-2016 06:15 AM

Help again, coordinates not reset
 
Dear Jeff,

I am sorry, but I am still having problems. To simplify the issue I will explain the first problem I am having, as (once solved) it may solve the others as well.

The problem is that once the trial and the animation run once, the other times they run, the coordinates are reset. To find out what happens I added two lines to find out the cooridnates (red below), at those points where I believe I should get the starting and end positions. But the output gives me this:

Code:

now
[-6.400000095367432, 0.0, -8.0]
[0.0, 1.399999976158142, 5.0]
now
[0.0, 0.0, 5.0]
[0.0, 0.0, 5.0]
now
[0.0, 0.0, 5.0]
[0.0, 0.0, 5.0]
now
[0.0, 0.0, 5.0]
[0.0, 0.0, 5.0]

Only the very fist line is correct, since that is the starting position. What happens with the coordinates for the animation and the viewpoint during the other 3 trials?. I would be so grateful for your help!

I have updated the code below.

Code:

import viz                                                                                                                        #Needed to generate a world.
import viztask                                                                                                                #Needed to control the experiment structure.


viz.mouse.setVisible(viz.OFF)                                                                                #Stops the mouse appearing on the screen.
viz.mouse.setOverride(viz.ON)                                                                                #Stops Vizard navigation using the mouse.

viz.clearcolor(viz.BLACK)


#Set the start position:
startPos = [-6.4,0,-8]


viz.go()


### Add all the resources. ###############

maze1 = viz.add('Objects/Maze_1.dae')
maze1.visible(viz.OFF)

#Add a sky with an environment map.
env = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg')
dome = viz.add('skydome.dlc')
dome.texture(env)

view = viz.MainView

view.eyeheight(1.4)
view.setPosition(startPos)
view.collision(viz.ON)
viz.collisionbuffer(.8)

viewNode = viz.addGroup()
viewLink = viz.link( viewNode, viz.MainView)
viewNode.setPosition([-6.4,0,-8])

##Animation path

pathMaze1 = viz.addAnimationPath()

#Add control points to the path, along with their time stamp.
pathMaze1.addControlPoint(0,pos=(-6.4,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(2,pos=(-6.4,0,-8),euler=(90,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(4,pos=(0,0,-8),euler=(0,0,0),scale=(2,2,2))
pathMaze1.addControlPoint(8,pos=(0,0,5),euler=(0,0,0),scale=(2,2,2))

#Duation of animation
pathMaze1Duration = pathMaze1.getDuration()


#Loop the path in a swinging fashion (point A to point B to point A, etc.).
pathMaze1.setLoopMode(viz.OFF)


def maze1trial():
        print 'now'
        print view.getPosition(mode = viz.ABS_PARENT)
        pathMaze1.reset()
        maze1.visible(viz.ON)
        viewNode.setPosition(-6.4,0,-8)
        link = viz.link(pathMaze1,viewNode)
        yield pathMaze1.play()
        yield viztask.waitTime(pathMaze1Duration)
        print view.getPosition(mode = viz.ABS_PARENT)
        link.remove
        maze1.visible(viz.OFF)


def masterFunction():                                                               
        for x in range(4):
                yield maze1trial()
               
viztask.schedule(masterFunction())



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

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