WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Thread Tools Rate Thread Display Modes
Old 01-09-2008, 06:39 AM
krimble krimble is offline
Join Date: Nov 2006
Location: Nijmegen
Posts: 63
animate cal3d bones

Hi all,

What I have is a cal3d avatar with a peoplemaker morph (for a talking mouth).

The avatar has to perform an animation: lean forward - back the origin - lean backward back to origin - lean left - back to origin - lean right and back to origin.

The bone that I want to rotate is one of the spineBones.

This is the code-part where i'm talking about:

viz.starttimer(TIMER_BODY_MOVEMENT, .03, 1)

def onTimerEvent(id) :

What's happening now: the bone seems to snap to the new position, with <bone>.setEuler() it's doing the same.

How can I make this a smooth animation?


Last edited by krimble; 01-09-2008 at 06:41 AM.
Reply With Quote
Old 01-10-2008, 03:23 AM
krimble krimble is offline
Join Date: Nov 2006
Location: Nijmegen
Posts: 63

Shorter question: How do I animate a cal3d bone. ( not the neckBone )?

Reply With Quote
Old 01-10-2008, 04:20 PM
farshizzo farshizzo is offline
WorldViz Team Member
Join Date: Mar 2003
Posts: 2,849
I've attached a sample script that creates a custom vizact action that animates a bone. The code at the bottom of the script shows how to use the action. This action will be included in the vizact library in the next release of Vizard. Let me know if anything is unclear.
import viz

Code for creating action that animates a bone rotating

_paramval_ = vizact._paramval_
_paramlist_ = vizact._paramlist_
VizCubicQuatInterpolator = vizact.VizCubicQuatInterpolator
VizLinearQuatInterpolator = vizact.VizLinearQuatInterpolator

def boneSpinTo(bone,mode=viz.ABS_PARENT,quat=None,euler=None,axisAngle=None,speed=None,time=None,p1=None,p2=None):
	bla = viz.ActionData()
	bla.bone =  bone
	bla.mode = mode
	bla.speed = speed
	bla.time = time
	bla.quat = quat
	bla.euler = euler
	bla.axisAngle = axisAngle
	bla.p1 = p1
	bla.p2 = p2
	bla.actionclass = VizBoneSpintToAction
	return bla

class VizBoneSpintToAction(viz.ActionClass):

	def begin(self,object):
		self.elapsed = 0.0
		self.duration = 0.0
		#If bone is not a Vizard bone object, assume it is string and get bone from name
		bone = _paramval_(self._actiondata_.bone,object)
		if isinstance(bone,viz.VizBone):
			self.bone = bone
			self.bone = object.getBone(bone)
		#Make sure bone is valid
		if not self.bone:
		#Lock the bone for animating
		#Get coordinate frame mode for bone rotations
		self.mode = _paramval_(self._actiondata_.mode,object)
		#Get begin and end rotation
		beginQuat = self.bone.getQuat(self.mode)
		if self._actiondata_.quat is not None:
			self.endQuat = _paramlist_(self._actiondata_.quat,object)
		elif self._actiondata_.euler is not None:
			self.endQuat = vizmat.EulerToQuat(_paramlist_(self._actiondata_.euler,object))
		elif self._actiondata_.axisAngle is not None:
			self.endQuat = vizmat.AxisAngleToQuat(_paramlist_(self._actiondata_.axisAngle,object))

		#Compute whether animation duration is based on time or speed
		speed = _paramval_(self._actiondata_.speed,object)
		time = _paramval_(self._actiondata_.time,object)
		if time is not None:
			self.duration = time
		elif speed is not None:
			self.duration = vizmat.QuatDiff(beginQuat,self.endQuat) / speed

		#Make sure duration is valid
		if self.duration <= 0.0:
		#Check if we are using linear or cubic interpolation
		p1 = _paramlist_(self._actiondata_.p1,object)
		p2 = _paramlist_(self._actiondata_.p2,object)
		if p1[0] is not None and p2[0] is not None:
			interpolator = VizCubicQuatInterpolator(p1[0],p2[0])
			interpolator = VizLinearQuatInterpolator()

		self.interpolate = interpolator.interpolate
	def update(self,elapsed,object):

		self.elapsed += elapsed
		p = self.elapsed / self.duration
		if p >= 1.0:
			self._overtime_ = self.elapsed - self.duration

model = viz.add('vcc_female.cfg',pos=(0,0,5),euler=(180,0,0))

lookRight = boneSpinTo('Bip01 Spine1',mode=viz.AVATAR_LOCAL,euler=(45,0,0),speed=90)
lookLeft = boneSpinTo('Bip01 Spine1',mode=viz.AVATAR_LOCAL,euler=(-45,0,0),speed=90)

Reply With Quote
Old 01-11-2008, 05:31 AM
krimble krimble is offline
Join Date: Nov 2006
Location: Nijmegen
Posts: 63
Thanks man!!!

I'll take a look at it as soon i've got the time.
Reply With Quote
Old 05-07-2008, 08:51 AM
Karla Karla is offline
Join Date: May 2007
Posts: 12
Example request for vizact.boneSpinTo()

I noticed that for the Q1 2008 Release of Vizard, vizact.boneSpinTo() is listed as an addition.

vizact.boneSpinTo() action for animating avatar bones

I am running vizard_3.00.2701. I cannot find any additional information about vizact.boneSpinTo() in the Help Documentation.

Can someone please post an example of how to use vizact.boneSpinTo() without including the sample script as posted above? For now I'm using the sample script but more condensed code would be preferable.


Reply With Quote
Old 05-07-2008, 10:40 AM
farshizzo farshizzo is offline
WorldViz Team Member
Join Date: Mar 2003
Posts: 2,849
Here is a short sample:
lookLeft = vizact.boneSpinTo('Bip01 Head',mode=viz.AVATAR_LOCAL,euler=(-90,0,0),speed=90)

And here is the documentation for the command:
    mode = viz.ABS_PARENT	    
    quat = None	    # Keyword argument
    euler = None	    # Keyword argument
    axisAngle = None	    # Keyword argument
    speed = None	    # Keyword argument
    time = None	    # Keyword argument


An Avatar bone object or the name of a bone.

mode = viz.ABS_PARENT
The transformation mode to apply the rotations with

quat = None
The quaternion rotation to spin to

euler = None
The euler rotation to spin to

axisAngle = None
The Axis-Angle rotation to spin to

speed = None
The speed to spin at in degrees/sec

time = None
The amount of time to spin for
Reply With Quote

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
cal3d exporter issue reiverlass Vizard 4 07-18-2007 01:08 PM
importing avatars with cal3d marcoleon Vizard 15 04-28-2006 05:48 PM
importing cal3d in 3ds? shai Vizard 1 11-01-2004 11:19 AM
Using Cal3d Avatars zachhendershot Vizard 4 01-27-2004 11:26 AM
Linking avatar 'bones' to a position tracker. zachhendershot Vizard 3 11-19-2003 10:26 PM

All times are GMT -7. The time now is 01:38 AM.

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