MoveJoint

カテゴリ

アニメーション

詳細

チェイン エレメント(ルート、ボーン、またはエフェクタ)を再配置し、その他のエレメントを空間内に固定します。 ボーンに接続すると、チェイン エレメントの新しい位置に合うようにサイズが変更されます。 移動するエレメントに続くエレメントは、ブランチ モードではグループとしてともに動き(移動するエレメントとの相対位置は固定されます)、ノード モードではグローバル空間に固定されます。 ボーン モードでは、ボーンのベースとチップがともに移動します。ベースとチップが独立して動く場合はこの限りではありません。

スクリプト構文

MoveJoint( InputObjs, X, Y, Z, [MoveJointBranch], [MoveJointBone] );

パラメータ

パラメータ タイプ 詳細
InputObjs 文字列 スケルトンのルート、ボーン、またはジョイントのプロパティ

デフォルト値: 現在選択されている値

X ダブル 新しい X 座標

デフォルト値: 0

Y ダブル 新しい Y 座標

デフォルト値: 0

Z ダブル 新しい Z 座標

デフォルト値: 0

MoveJointBranch ブール エレメントをブランチ モードで動かす場合は True、ノード モードで動かす場合は False

デフォルト値: False

MoveJointBone ブール エレメントをボーンとして動かすのか、ジョイントとして動かすのかを指定します。 False を指定すると、ボーンのベースが動き、チップが固定されます。 True を指定すると、ボーンのベースとチップがともに動きます。 ルートおよびエフェクタではこのパラメータは無視されます。

デフォルト値: False

VBScript の例

'
' Create a circle with 5 control points.
' Then create a 4 bone chain and move the joints to the control point positions.
'
'
' create the circle
'
set oRoot = application.activeproject.activescene.root
set oCircle = oRoot.addgeometry("Circle", "NurbsCurve" )
SetValue oCircle&".crvlist.geom.subdivu", 5
'
' Create a 4 bone chain
'
set oChain = oRoot.Add2DChain( Array(-2,0,0),Array(-1,0,0), , si2DChainTop ) 
for i = 0 to 2
        oChain.AddBone(Array(i,0,0))
next 
'
' move the joints on the chain to the circle's control points
'
set oGeometry = oCircle.activeprimitive.geometry
for i=0 to oGeometry.Points.Count - 1
        ' get the position of point
        set oPos = oGeometry.Points(i).position
        if i < oGeometry.Points.Count - 1 then
                MoveJoint oChain.Bones(i), oPos.x, oPos.y, oPos.z, False, False
        else
                MoveJoint oChain.Effector, oPos.x, oPos.y, oPos.z, False, False
        end if
next 
'
' log the positions to show that they are the same
'
set oPosP = XSIMath.CreateVector3
set oPosJ = XSIMath.CreateVector3
for i=0 to oGeometry.Points.Count - 1
        set oPosP = oGeometry.Points(i).position
        if i < oGeometry.Points.Count - 1 then
                oChain.Bones(i).kinematics.global.transform.GetTranslation oPosJ
        else
                oChain.Effector.kinematics.global.transform.GetTranslation oPosJ
        end if
        logmessage "Point Position: " & oPosP.x & " " & oPosP.y & " " & oPosP.z
        logmessage "Joint Position: " & oPosJ.x & " " & oPosJ.y & " " & oPosJ.z
next
'
' Output from running this script:
'
'INFO : "Point Position: 5.19701675181841 0 0"
'INFO : "Joint Position: 5.19701675181841 0 0"
'INFO : "Point Position: 1.60596649636318 -4.94265664711197 0"
'INFO : "Joint Position: 1.60596649636318 -4.94265664711197 -7.48168305103674E-16"
'INFO : "Point Position: -4.20447487227238 -3.05472980263579 0"
'INFO : "Joint Position: -4.20447487227238 -3.0547298026358 2.95822839457879E-31"
'INFO : "Point Position: -4.20447487227238 3.05472980263579 0"
'INFO : "Joint Position: -4.20447487227238 3.0547298026358 -5.39677520623026E-33"
'INFO : "Point Position: 1.60596649636318 4.94265664711197 0"
'INFO : "Joint Position: 1.60596649636318 4.94265664711198 6.99081284597971E-32"