Trackbar Keys Filter Callback Function Examples
The following examples show possible ways to implement trackbar key filter functions:
Visibility Keys Filter Function Examples
In order to register a filter that will display only Visibility keys,
YOU CAN SAY
|
fn filterVisibilityKeys theAnim theParent theIndex theGParent theNode =
(
if theParent != undefined then
theParent[theIndex].name == "Visibility"
else
false
)
fn testCallbackAdditionFunction arg1 arg2 = (true)
theInterface = maxOps.trackbar
theIndex = theInterface.registerFilter filterVisibilityKeys callbackAdditionFunction "Visibility" 8 active:true stopTraversal:false
|
The filter function will return true only when the Parent is not undefined and the
subAnim indexed track of the parent is called "Visibility".
A faster and better way to define a visibility track key filter function would be
|
fn filterVisibilityKeys theAnim theParent theIndex theGParent theNode = ( theIndex == 2 and theParent == theNode )
|
This function will return true only when the parent is the node itself and the index
is 2 which corresponds to the Visibility track!
Name and Class Filter Fun ction Examples
Obviously, you can define filter functions that will filter keys by the class or even
the name of the node being traversed,
FOR EXAMPLE
|
--this function will show keys only of Sphere class nodes:
fn filterSphereKeys theAnim theParent theIndex theGParent theNode = ( classof theNode == Sphere )
|
--this function will show keys only of objects whose name starts with "Sphere":
fn filterSphereByNameKeys theAnim theParent theIndex theGParent theNode = ( substring theNode.name 1 6 == "Sphere")
|
Key Count Filter Function Examples
In some cases, for example when animating using Reactor or baking animation to keys
per frame using MAXScript, the trackBar could become very slow as it tries to display
hundreds and even thousands of keys.
The following function will show keys only of those controllers that have less than
10 keys:
fn filterNonMassiveKeys theAnim theParent theIndex theGParent theNode = (superClassof theAnim == FloatController and theAnim.keys.count < 10 )
Create some object in the scene, for example a Box, set the Animation mode to Set
Key and start animating the position by pressing the Key button. The trackBar will
display the keys of the Box until you create the 10 th key, after that all keys will be filtered out and disappear! You could define a global
variable to control the number of keys to be displayed at a time,
EXAMPLE
|
global maxNumberOfKeysInTrackbar = 50
fn filterNonMassiveKeys theAnim theParent theIndex theGParent theNode = ( superClassof theAnim == FloatController and theAnim.keys.count < maxNumberOfKeysInTrackbar )
|
Simply changing the value stored in the global variable maxNumberOfKeysInTrackbar
will control how many keys a controller may have in order to appear in the trackBar.
You could even define a small dialog with a spinner and dock it in the UI to have
interactive control over the keys display:
SCRIPT
|
(
try(cui.UnRegisterDialogBar MassiveKeysFilterCount)catch()
try(destroyDialog MassiveKeysFilterCount)catch()
global maxNumberOfKeysInTrackbar = 20
--Define a rollout with a spinner
rollout MassiveKeysFilterCount "Keys Limit"
(
spinner massive_count "Max.Keys:" range:[10,1000,20] type:#integer fieldwidth:40
on massive_count changed val do
maxNumberOfKeysInTrackbar = val
select selection
)
--Create a dialog, register as DialogBar and dock at bottom
createDialog MassiveKeysFilterCount 120 25
cui.RegisterDialogBar MassiveKeysFilterCount style:#(#cui_dock_all)
cui.DockDialogBar MassiveKeysFilterCount #cui_dock_bottom
--Define, register and enable the key filter functions:
fn callbackAdditionFunction arg1 arg2 = (true)
fn filterNonMassiveKeys theAnim theParent theIndex theGParent theNode =
(
superClassof theAnim == FloatController and theAnim.keys.count < maxNumberOfKeysInTrackbar
)
theIndex = (maxOps.trackBar).registerFilter filterNonMassiveKeys callbackAdditionFunction "Massive Keys Filter" 13 active:true stopTraversal:false
)--end script
|