WorldViz User Forum

WorldViz User Forum (
-   Vizard (
-   -   understanding vizact.moveTo (

fordprefect 07-16-2013 10:47 AM

understanding vizact.moveTo

it seems I have problems understanding this moveTo. What I'd like to achieve is to have two actions that move a node one unit (meter) along it's Y axis up or down. That way I can use them on different nodes in the object, regardless of the original position of the node. So I created

_ceilDist = 1
_ceilMode = viz.REL_LOCAL

_actYplus = vizact.moveTo( [0,_ceilDist,0], time=4, mode=_ceilMode, interpolate=vizact.easeInOut)
_actYmin = vizact.moveTo( [0,-_ceilDist,0], time=4, mode=_ceilMode, interpolate=vizact.easeInOut)

def cmdOpenCeil(parName):

def cmdCloseCeil(parName):

My problems are:
  1. When used as shown above, the distance the part is moved is more that one (meter) by far! :(
  2. When used as shown above, the interpolation is starting gradually, but at the end the motion is cut off, without slowing down. Same with (examples) vizact.easeInOutCircular, .easeInOutExp, .easeInOutSine, .cubic(0.1,0.6), .easeOut, .backOut
  3. When used with different time values (e.g. 6 seconds for plus direction) then the speed is not changed, but the distance is increased :confused:

Same effect when using addAction instead.

What point am I missing here, and is there a better (working) approach?

BR Walter

Jeff 07-16-2013 06:34 PM

Does the following work for you?

import viz
import vizact


ball = viz.addChild('beachball.osgb',pos=[0,1,4])

moveUp = vizact.move(0,1,0,1)
moveDown = vizact.move(0,-1,0,1)


fordprefect 07-17-2013 03:06 AM

Hi Jeff,

that code works ok as it is. Also, when I adopt it to my script, it does the trick and moves the node by 1 meter. So thank you for the workaround. :)

  • .move is not as convenient because it is working with speed instead of distance. So I have to calculate the speed myself instead of using the conveniently designed interface of .moveTo.
  • .move does not allow for gradually picking up the speed
  • would there be rounding issues with .move when moving back and forth a part several timesusing different timings (when fractions occur)?

Therefore I'd like to repeat: what am I missing to understand how .moveTo works? :confused:

When I use your script as a basis and try out .moveTo again

import viz
import vizact


ball = viz.addChild('beachball.osgb',pos=[0,1,4])

_ceilDist = 1
_ceilMode = viz.REL_LOCAL
_actYplus = vizact.moveTo( [0,_ceilDist,0], time=1, mode=_ceilMode, interpolate=vizact.easeInOut)
_actYmin = vizact.moveTo( [0,-_ceilDist,0], time=1, mode=_ceilMode, interpolate=vizact.easeInOut)

vizact.onkeydown('3', ball.addAction, _actYplus)
vizact.onkeydown('4', ball.addAction, _actYmin)

def debugPos():
        print 'posi:', ball.getPosition()
vizact.ontimer(3.3, debugPos)

then the position of the ball after moving seems to depend on the interpolation used. it is (truncated to 2 decimals)
  • 11.54 .easeInStrong
  • 14.44 .easeInCircular
  • 21.53 .easeIn
  • 31.52 .easeInOut .easeInOutStrong .easeInOutCircular .cubic .linear
  • 41.51 .easeOut
  • 48.59 .easeOutCircular
  • 51.50 .easeOutStrong

Giving time=2 does not lower the speed but extends the distance, e.g. 61.55 for .easeInOut

Using parameter speed=1 instead of time=1 in the code above yields same result, BUT using speed=.1 results in y=301.75 while speed=10 yields y=4.50

even more confused the more I try,

All times are GMT -7. The time now is 10:14 AM.

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