Envelope.Weights

説明

エンベロープのデフォーマウェイトを含む ClusterElementCollection を戻します。ClusterElementCollection.Array プロパティは、2D Array へのアクセスを提供します。この場合、最初の次元は Envelope.Deformers にマップされ、2 番目の次元はクラスタエレメントにマップされます。

C#構文

// get accessor

ClusterElementCollection Envelope.get_Weights( Object );

パラメータ

パラメータ タイプ 説明
Time Double プロパティを取得する時間(フレーム)

デフォルト値:現在の時間(フレーム)

1. VBScript の例

' 

'	This example demonstrates how to access the

'	Weights information from a skeleton's envelope

'

NewScene , false

' Create the Skeleton

Dim oRoot, aRootPos, aEffPos1, aEffPos2, oChain1, oChain2

Set oRoot = Application.ActiveProject.ActiveScene.Root

aRootPos = Array(0.254, 3.998, 0.045)

aEffPos1 = Array(-0.01, -0.056, -2.972)

aEffPos2 = Array(0.183, -3.999, 0.115)

Set oChain1 = oRoot.Add2DChain( aRootPos, aEffPos1, , siViewTop )

Set oChain2 = oChain1.AddBone( aEffPos2 )

' Create the Envelope

Dim oSphere, oGeometry

Set oSphere = oRoot.AddGeometry( "Sphere", "MeshSurface")

oSphere.Parameters("subdivu").Value = 2

oSphere.Parameters("subdivv").Value = 2

Set oGeometry = oSphere.ActivePrimitive.Geometry

' Apply the Envelope to the Skeleton

Dim oEnvelope

Set oEnvelope = oSphere.ApplyEnvelope( oChain1, siBranch, siBranch )

' Get 2D array of element/deformer weights

Dim aWeights

aWeights = oEnvelope.Weights.Array

' Log weights

Dim iElement, strElementWeights, iDeformer, lString

For iElement = LBound(aWeights,2) to UBound(aWeights,2)

	strElementWeights = ""

	For iDeformer = LBound(aWeights,1) to UBound(aWeights,1)

		strElementWeights = strElementWeights & Round(aWeights(iDeformer,iElement)) & ","

	Next

	' Trim the final comma from the string

	lString = Len(strElementWeights) - 1

	strElementWeights = Left( strElementWeights, lString )

	LogMessage "weight(" & iElement & ") = " & strElementWeights

Next

'Output of the script is this:

'INFO : "weight(0) = 0,0,100,0"

'INFO : "weight(1) = 0,100,0,0"

'INFO : "weight(2) = 0,50,50,0"

'INFO : "weight(3) = 0,50,50,0"

'INFO : "weight(4) = 0,50,50,0"

2. JScript の例

/*

	JScript version of the previous example, demonstrating 

	how to access the weights on each vertex

*/

NewScene( null, false ) ;

var oRoot = Application.ActiveProject.ActiveScene.Root ;

var aRootPos = new Array( 0.254, 3.998, 0.045 ) ;

var aEffPos1 = new Array( -0.01, -0.056,-2.972 ) ;

var aEffPos2 = new Array( 0.183,-3.999, 0.115 ) ;

// Create the Skeleton

var oChain1 = oRoot.Add2DChain( aRootPos, aEffPos1 ) ;

var oChain2 = oChain1.AddBone( aEffPos2 ) ;

// Create the Envelope

var oSphere = oRoot.AddGeometry( "Sphere", "MeshSurface" ) ;

oSphere.Parameters( "subdivu" ).Value = 2 ;

oSphere.Parameters( "subdivv" ).Value = 2 ;

var oGeometry = oSphere.ActivePrimitive.Geometry ;

// Apply the Envelope to the Skeleton

var oEnvelope = oSphere.ApplyEnvelope( oChain1, siBranch, siBranch ) ;

// Weights are represented as a 2-dimensional array,

// but it will be collapsed down to a 1-D array

// because JScript does not support multi-dimensional arrays

// (with each component listed one after another)

var aWeights = oEnvelope.Weights.Array.toArray() ;

var cntDeformers = oEnvelope.Deformers.Count ;

var cntVertices = aWeights.length / cntDeformers ;

var iElement = 0 ;

for ( iVertex=0 ; iVertex<cntVertices ; iVertex++ ) {

	strElementWeights = "" ;

	for ( iDeformer=0 ; iDeformer<cntDeformers ; iDeformer++ ) {

		strElementWeights += Math.round(aWeights[ iDeformer + iVertex * cntDeformers ]) ;

		if ( iDeformer != cntDeformers-1 ) {

			strElementWeights += "," ;

		}

	}

	Application.LogMessage( "weight(" + iVertex + ") = " + strElementWeights ) ;

}

// Output of the script is this:

//INFO : "weight(0) = 0,0,100,0"

//INFO : "weight(1) = 0,100,0,0"

//INFO : "weight(2) = 0,50,50,0"

//INFO : "weight(3) = 0,50,50,0"

//INFO : "weight(4) = 0,50,50,0"

3. C# の例

/*

	See Envelope.GetWeights2 for a C# example of accessing envelope weights

*/

関連項目

Envelope.GetWeights2