XM Magdalena 3D print, GGeorgy (3D)
LC #42 Pipers Alley

View Full Version : Floating animation interface idea

06-14-2008, 01:43 PM
Howdy people.

Im toying with the idea of creating a floating interface to control the animation of an object. Now ive had a quick tinker and just created a spinner in an interface that would move the z value of a dummy up and down.

spn1.startval = 0

spn1startval = 0
rollout ch1panel "spinnertest"
megaloop = 1

if megaloop = 1 then

spinner spn1 "" width:40 range:[-200,10000,0] pos:[15,10]

on spn1 changed val do

spn1newval = spn1.value

if spn1newval < 0.1 and spn1newval > -0.1 do
(move $dummy01 [0,0,0])

if spn1newval > spn1startval do
(move $dummy01 [0,0,0.1])

if spn1newval < spn1startval do
(move $dummy01 [0,0,-0.1])

spn1startval = spn1newval



myfloater = (newRolloutFloater "spinnertest" 195 100

addRollout ch1panel myfloater

Now ok that can move and object for me but is there any way that i can get the spinner value to update when i change the keyframe so that it shows an accurate value for the z axis of the dummy and would it be posible to show that that value is keyed on the current frame.



06-15-2008, 12:02 AM
You can create a link between the spinner and controller by setting the spinner's 'controller' property:

spinner spn1 "" controller:$Dummy01.position.controller[3].controller
This assumes the dummy has a PositionXYZ controller.

Edit: Forgot to add, set the .setKeyBrackets property to true to have the spinner show the red brackets on keyframes.


06-15-2008, 05:10 AM
ok cool that does the job thanks.

On another point I want to have prefix name that can change once and then replicated throught the script. So

character_name = John_

select $ character_name dummy01

but i dont know the correct format of inserting the charcter_name varible into a selection of an object.

06-15-2008, 08:20 AM
If I understood you correctly,
you don't need the object name, you can store the node itself in a variable.

local newObject = $Dummy01
print newObject.name
select newObject

06-15-2008, 08:58 AM
I have scripts that builds a rig for me and i want to work on an interface for it.
So lets say one spinner in the interface controls the x rotation of John_Bone_upperarm, but then i create a Jane character so on her rig that X rotation i want to control is on Jane_Bone_upperarm.

So in in Character Johns interface there would be a bunch of controls for all the bone and Janes interface and rig is the same the only difference is that they have a different prefix charcter name on each object.

So i was to be able to set the prefix name once and then have it placed in all the parts of the script that need the prefix name.


Prefix name = John

select $ prefix name _bone_upperarm

so i can select John_bone_upperarm

or if i change prefix name to Jane it will select Jane_bone_upperarm

06-15-2008, 01:00 PM
So if now I understood you correct, what I think you should do is
you should have an interface that lets you select a character name out
of a name list (like a dropDownList for instance).
Then you need a function that finds the correct object for every controller.

rollout roTest "Test"
-- Local Variable Declerations

local upperArmL = undefined
local upperArmR = undefined

-- User Interface

dropDownList ddlNames "Characters:" items:#("John","Jane")

-- Functions

fn getObj prefix name =
local obj = undefined
for i in objects do (
if i.name == prefix + name then obj = i

fn openDialog =
createDialog roTest width:200

fn init =
upperArmL = getObj ddlNames.selected "_bone_upperarm_L"
upperArmR = getObj ddlNames.selected "_bone_upperarm_R"

-- Event Handlers

on ddlNames selected itm do init()
on roTest open do init()

) -- end of rollout

But if you are working with large scenes, the init function can get pretty slow.
So to make it faster you can save your objects in an array and another array for the
name and then write the getObj function to work with array values so that you would
cover all of the objects in one loop.

In this case I would also suggest to organize everything in a struct.

06-15-2008, 04:19 PM
To find a scene object by name, use getNodeByName. Check the manual for more info about this function.


06-15-2008, 05:51 PM
Thanks Magicm just had a look at getNodeByName. and i can uses that for what i want to do.

Also thanks TzMtN for the input.



CGTalk Moderation
06-15-2008, 05:51 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.