AnimationSourceItem

Object Hierarchy | 関連する C++クラス:AnimationSourceItem

継承

SIObject

AnimationSourceItem

導入

v1.5

カテゴリ

Mixer|Action

詳細

ActionSourceには、ActionSource.SourceItemsプロパティからアクセスできるアニメーションソース項目(AnimationSourceItemCollection)のコレクションが含まれています。

AnimationSourceItem は、アニメーションDataSourceFCurveなど)へのアクセス、およびそのターゲット(アニメーションソースが制御するパラメータ)へのアクセスを提供します。

アクションアニメーションを作成する方法の 1 つは、空の ActionSource を作成し、ActionSource.AddSourceItemメソッドを使用してそれを登録することです。このような場合、AnimationSourceItem.SetAsFCurveおよびAnimationSourceItem.SetAsStaticメソッドを使用して、アニメーションソースとしてFCurveまたは StaticSource を追加できます。

注:バージョン 4.0から、SIObject.TypeメソッドがsiAnimationSourceItemType列挙子に含まれる値を戻すようになりました。

メソッド

IsClassOfオペレータ IsEqualToオペレータ SetAsFCurve SetAsStatic

プロパティ

Active Application Categories FullNameオペレータ
Help Nameオペレータ NestedObjects Origin
OriginPath Parent Source Target
Typeオペレータ      
       

1. VBScript の例

'
' This example illustrates how to access the fcurves inside a
' model's actionsource
'
NewScene , false
set oRoot = Application.ActiveProject.ActiveScene.Root
' These commands were cut and pasted from scripting history and modified to work in a script.
' The commands create a simple actionsource from some animation on the null's position
set oNull = GetPrim( "Null" )
strPosParams = oNull & ".kine.local.posx," & oNull & ".kine.local.posy," & oNull & ".kine.local.posz"
Translate oNull, -8.153, 7.015, -0.702, siRelative, siView, siObj, siXYZ
SaveKey strPosParams, 1.000
Translate oNull, 8.350, -8.935, 0.894, siRelative, siView, siObj, siXYZ
SaveKey strPosParams, 50.000
Translate oNull, 9.413, 8.935, -0.894, siRelative, siView, siObj, siXYZ
SaveKey strPosParams, 100.000
StoreAction oRoot, strPosParams, 2, "StoredFcvAction", True, 1, 100
' Get the ActionSource from the model
set oActionSource = oRoot.Sources("StoredFcvAction")
LogMessage oActionSource.Name
for each oSourceItem in oActionSource.SourceItems
        LogMessage vbTab & "target: " & oSourceItem.Target
        set oSource = oSourceItem.Source
        if TypeName(oSource) = "FCurve" then
                strKeys=""
                for each oKey in oSource.Keys
                        if strKeys<>""then
                                strKeys = strKeys & ","
                        end if
                        strKeys = strKeys & oKey.Time & "," & oKey.Value
                next
                LogMessage vbTab & "source: " & "fcurve keys(" & strKeys & ")"
        else
                LogMessage vbTab & "source ignored"
        end if
next
' Output of above script:
'INFO : StoredFcvAction
'INFO :         target: null.kine.local.posx
'INFO :         source: fcurve keys(1,-8.153,50,0.196999999999999,100,9.61)
'INFO :         target: null.kine.local.posy
'INFO :         source: fcurve keys(1,7.015,50,-1.92,100,7.015)
'INFO :         target: null.kine.local.posz
'INFO :         source: fcurve keys(1,-0.702,50,0.192,100,-0.702)

2. JScript の例

/*
        This example illustrates how to create an empty ActionSource using
        Model.AddActionSource, populate it with 2 static values and 1 fcurve 
        using ActionSource.AddSourceItem, and then replace the fcurve source 
        with a static value for the 2nd and change the static value for the 3rd 
        using AnimationSourceItem.SetAsStatic.
*/
NewScene( null, false );
// Get the scene root
var root = Application.ActiveSceneRoot;
// Create a null and get pointers to the pos parameters
var n = root.AddNull( "null");
var posx = n.posx; var rposx = GetRelativeName(posx);
var posy = n.posy; var rposy = GetRelativeName(posy);
var posz = n.posz; var rposz = GetRelativeName(posz);
// Create an empty actionsource and then populate it with static values
var src = root.AddActionSource( "StaticActionSource" );
var fc = MakeAnFCurve( n, "posy" );
src.AddSourceItem( rposx, 2.0 );        // static value 
src.AddSourceItem( rposy, fc );         // fcurve 
src.AddSourceItem( rposz );             // default static value = 0.0
// Now change the value on the posz parameter using SetAsStatic and change
// the posy parameter source to an fcurve
var animsrcitems = src.SourceItems;
for ( var i=0; i<animsrcitems.Count; i++ ) {
        var srcitem = animsrcitems(i);
        // Get a pointer to the source item (it can be either a StaticSource or an FCurve)
        var datasrc = srcitem.Source;
        if ( datasrc.IsClassOf(siFCurveID) ) {
                // Print the FCurve type
                Application.LogMessage( "AnimationSourceItem[" + i + "] (" + srcitem.Target 
                        + ") has " + datasrc.GetNumKeys() + " keys" );
        }
        if ( datasrc.IsClassOf(siStaticSourceID) ) {
                // Print the current value
                Application.LogMessage( "AnimationSourceItem[" + i + "] (" + srcitem.Target 
                        + ") has this static value: " + datasrc.Value );
        }
        // AnimationSourceItem.Target returns the RelativeName
        if ( srcitem.Target == rposy ) {
                srcitem.SetAsStatic( 1.0 );
                // Check for the new value (we know it's a StaticSource because we just set it)
                var datasrc = srcitem.Source;           // refresh
                Application.LogMessage( "New static value = " + datasrc.Value );
        }
        if ( srcitem.Target == rposz ) {
                srcitem.SetAsStatic( 1.5 );
                // Check for the new value (we know it's a StaticSource because we just set it)
                var datasrc = srcitem.Source;           // refresh
                Application.LogMessage( "New static value = " + datasrc.Value );
        }
}
//INFO : AnimationSourceItem[0] (null.kine.local.posx) has this static value: 2
//INFO : AnimationSourceItem[1] (null.kine.local.posy) has 4 keys
//INFO : New static value = 1
//INFO : AnimationSourceItem[2] (null.kine.local.posz) has this static value: 0
//INFO : New static value = 1.5
// Function to remove the name of the model from the FullName of the specified parameter.
// This is necessary when setting up a source that will later be used to instantiate a
// clip when the parameter lives under a model other than the Scene_Root.
function GetRelativeName( in_param )
{
        var mdlname = in_param.Model.FullName;
        if ( mdlname == "Scene_Root" ) {
                return in_param.FullName;
        } else {
                var tmp = in_param.FullName;
                var re = new RegExp( mdlname + ".", "i" );
                return tmp.replace( re, "" );
        }
}
// Convenience function 
function MakeAnFCurve( in_obj, in_param )
{
        var p = in_obj.Kinematics.Local.Parameters( in_param );
        var fc = p.AddFCurve( siStandardFCurve );
        fc.AddKey( 1.0, 1.25 );
        fc.AddKey( 25.0, 2.0 );
        fc.AddKey( 40.0, 2.75 );
        fc.AddKey( 85.0, 0.0 );
        return fc;
}

3. JScript の例

// Simple example showing how to access action source items from a collection
        NewScene( false, false ) ;
        var cube = ActiveSceneRoot.AddPrimitive("Cube") ;
        var actionsource = StoreAction( null, "cube.kine.local.posx, cube.kine.local.posy, cube.kine.local.posz", null, "Test", null, 1, 5, null, null, null, 1);  
        var items = actionsource.SourceItems;
        // Log all items
        for ( var i = 0; i< items.Count; i++ )
        {
                LogMessage( items(i).Name );
        }
        // Log specific items
        LogMessage( "cube.kine.local.posx ActionSourceItem active: " + items("cube.kine.local.posx").Active );
        var filtereditems = items.Filter ("","","cube.kine.local.posx");
        LogMessage( "cube.kine.local.posx ActionSourceItem source value: " + filtereditems(0).Source.Value );

関連項目

ActionSource ActionSource.SourceItems ActionSource.AddSourceItem