2011年9月26日月曜日

SoftimageScript : ICE2Obj v0.1

ICEInstanceって、ジオメトリとして扱えません。
GameModelに書き出すときは実ジオメトリデータが必要になります

Scriptから、Positionなどにアクセスできれば
その位置に配置することが出来るなぁと
思いながら誰かが作ってくれるのを待ちます

待てども待てども・・・。

だれも作ってくれないので、
ちょっと現実逃避がてら作業をしてみました


とりあえず、PointPositionを取得できたので、
Cubeをコピーすることに。

現フレームのポイントのポジションを取得して、
キューブを配置してます。

草や樹木程度だといけそうな感じ



from win32com.client import Constants as c
app = Application; log = app.Logmessage

#ポイントクラウドを選択
oPC = app.Dictionary.GetObject("pointcloud")

#ICEアトリビュートを取得、今回はPointPosition
attr = oPC.ActivePrimitive.Geometry.GetICEAttributeFromName("PointPosition")

#DataType(どんなパラメーターなのかコレで判別)
oType = attr.DataType

#アトリビュート内のデーターを取得
oData = attr.DataArray

#選択しているオブジェクト
oCube = app.Selection(0)

#位置を設定するためにPosのワールドベクト、トランスフォームを用意
v = XSIMath.CreateVector3()
oTrans = XSIMath.CreateTransform()


#データーに格納してある要素を取り出す
#コレの長さってどうやって出すんだ?
for elem in oData:

	#ベクトルにポジションを入れる
	v.Set(elem.X, elem.Y, elem.Z)
	
	#トランスフォームにセット
	oTrans.SetTranslation(v)
	
	#オブジェクトを複製
	newObj = app.Duplicate(oCube)(0)
	
	#複製したものに位置を設定
	newObj.Kinematics.Global.Transform = oTrans
	#log( "Vector3: " + str(elem.X) + ":" + str(elem.Y) + ":" + str(elem.Z) )

0 件のコメント:

コメントを投稿