Envelope.GetWeights2

Envelope.GetWeights2

導入

v6.0

詳細

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

注:このメソッドは、Envelope.Weights の Python 互換バージョンです。Python ではプロパティ上の入力パラメータがサポートされていないので、Envelope.Weights は Python で失敗します。

C#構文

ClusterElementCollection Envelope.GetWeights2( Object );

スクリプト構文

oReturn = Envelope.GetWeights2( [Time] );

戻り値

ClusterElementCollection

パラメータ

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

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

C#の例

/*

	C# version of the Envelope.Weights examples,

	demonstrating how to deform a sphere

	and access the weights on each vertex

*/

CXSIApplicationClass app = new CXSIApplicationClass();

// Set up some null objects to be used for passing default values

object dummy = null;

Object[] args = new Object[2];

args[1] = false;

app.ExecuteCommand("NewScene", args);

Model oRoot = app.ActiveSceneRoot;

Object[] aRootPos = new Object[3] { 0.254, 3.998, 0.045 };

Object[] aEffPos1 = new Object[3] { -0.01, -0.056, -2.972 };

Object[] aEffPos2 = new Object[3] { 0.183, -3.999, 0.115 };

// Create the Skeleton

ChainRoot oChain1 = oRoot.Add2DChain(aRootPos, aEffPos1, dummy, si2DChainAlignType.si2DChainTop, "");

ChainBone oChain2 = oChain1.AddBone(aEffPos2, siChainBoneType.siChainBonePin, "");

// Create the Envelope

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

oSphere.Parameters["subdivu"].PutValue2(dummy, 2);

oSphere.Parameters["subdivv"].PutValue2(dummy, 2);

Geometry oGeometry = oSphere.ActivePrimitive.GetGeometry2(dummy, siConstructionMode.siConstructionModeDefault);

// Apply the Envelope to the Skeleton

Envelope oEnvelope = oSphere.ApplyEnvelope(oChain1, siBranchFlag.siBranch, siBranchFlag.siBranch);

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

// by the Array class in C#, just cast the returned object into an Array

// and use the Array class's access members (same idea as in VBScript)

ClusterElementCollection oWeights = oEnvelope.GetWeights2(dummy);

Array aWeightValues = (Array)oWeights.Array;

for (int iElement = aWeightValues.GetLowerBound(1); iElement < aWeightValues.GetLength(1); iElement++)

{

	string strElementWeights = "";

	for (int iDeformer = aWeightValues.GetLowerBound(0); iDeformer < aWeightValues.GetLength(0); iDeformer++)

	{

		double dCurrWeight = (double)aWeightValues.GetValue(iDeformer, iElement);

		double dRndWeight = Math.Round(dCurrWeight);

		strElementWeights = strElementWeights + dRndWeight.ToString() + ",";

	}

	// Trip the final comma from the string

	strElementWeights.Remove(strElementWeights.Length-1, 1);

	app.LogMessage("weight (" + iElement.ToString() + ") = " + strElementWeights, siSeverity.siInfo);

}

// 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"

関連項目

Envelope.Weights