myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Memo : GetGeometry2()

GetGeometry2

ポイントの位置を取得するために使ってみました。便利なのでメモっておきます。

このMethodを使うと、フレームとコンストラクションモードを指定が出来ます。
何がいいかというと、オブジェクトにモーションが付いていても、他のフレームや、元のジオメトリのポイント位置を取得することが出来ます。

例えば、X<0 のポイントを選択するファンクションを作ってみましょう:


SelectObj (HalfPoints(selection(0), 1) )

function HalfPoints(oObj, kine, zero_Range){
// X < 0 にすると 0 も含まれるので、このzero_Rangeの数値をひいておこう
// 指定されていなければ、0.0001にしましょう。
var zero_Range = zero_Range == null ? 0.0001 : zero_Range

//ポイントを取得
var oPoints = oObj.ActivePrimitive.Geometry.Points;

//ポイントの数を取得 (ポイントの数を取得しておいた方がループが速くなります)
var oPointsCount = oPoints.Count;

//ターゲットポイントのコレクションを作っておく
var oTargetPoints = oObj.ActivePrimitive.Geometry.CreateSubComponent(siVertexCluster);

//ポイントをループ
for ( var i=0; i < oPointsCount; i++ ) {
// ポイントの位置を取得
// kine = 0 = グローバル値
// kine = 1 = ローカル値
var oPos = kine == 1 ? oPoints(i).Position : XSIMath.MapObjectPositionToWorldSpace(oObj.Kinematics.Global.Transform, oPoints(i).Position);
if (oPos.x < 0 - zero_Range){
oTargetPoints.Addelement(oPoints(i).index)
}
}
return oTargetPoints;
}


すると、こうなります:

X-1.gif

でも、この列


//ポイントを取得
var oPoints = oObj.ActivePrimitive.Geometry.Points;


のGeometryにGetGeometry2(null, 0)を入れ替えると


//ポイントを取得
var oPoints = oObj.ActivePrimitive.GetGeometry2(null, 0).Points;


ポーズと関係なく元のジオメトリの位置を取得出来ます:

X-2.gif

null は フレーム数。 null にすると現フレームになります。
0 は siConstructionModeModeling なので、元のジオメトリを取得します。

以上。

Comments

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/105-b0428220
Use trackback on this entry.