Object Hierarchy | 関連する C++クラス:AnimationSourceItem
AnimationSourceItem
v1.5
ActionSourceには、ActionSource.SourceItemsプロパティからアクセスできるアニメーションソース項目(AnimationSourceItemCollection)のコレクションが含まれています。
AnimationSourceItem は、アニメーションDataSource(FCurveなど)へのアクセス、およびそのターゲット(アニメーションソースが制御するパラメータ)へのアクセスを提供します。
アクションアニメーションを作成する方法の 1 つは、空の ActionSource を作成し、ActionSource.AddSourceItemメソッドを使用してそれを登録することです。このような場合、AnimationSourceItem.SetAsFCurveおよびAnimationSourceItem.SetAsStaticメソッドを使用して、アニメーションソースとしてFCurveまたは StaticSource を追加できます。
注:バージョン 4.0 から、SIObject.TypeメソッドがsiAnimationSourceItemType列挙子に含まれる値を戻すようになりました。
Active | Application | Categories | FullName |
Help | Name | NestedObjects | Origin |
OriginPath | Parent | Source | Target |
Type | |||
' ' 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) |
/* 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; } |
// 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 ); |