今回はConstarintを設定する方法を書きます。
まず、任意のConstraintを作るときには、FBConstraintmanagerクラスを使う必要があります。
■Constraintの生成
[python]
from pyfbsdk import FBConstraintManager
lMgr = FBConstraintManager()
for lIdx in range(lMgr.TypeGetCount()):
lConst = lMgr.TypeCreateConstraint( lIdx )
[/python]
ここでは全Constraintを生成しています。
TypeGetCount()を使うことでConstraintの種類の総数を取得できます。
また、TypeCreateConstraintの第一引数はInt型か、stringを渡すことで各種Constarintを設定できます。
■TypeCreateConstraintの対応表
Index | string |
0 | Aim |
1 | Expression |
2 | Multi Referential |
3 | Parent/Child |
4 | Path |
5 | Position |
6 | Range |
7 | Relation |
8 | Rigid Body |
9 | 3 Points |
10 | Rotation |
11 | Scale |
12 | Mapping |
13 | Chain IK |
stringは生成したいConstraint名を渡す事で目的のConstraintが生成できます。
さて、本番はこれからなのですが、
MB2010では生成したConstarintのsourceに何も関連付けられていないとUI上では確かに存在するPropertyが見つけれません。
Constrained object (Child) のPropertyがPropertyListでなぜか見つけることができません。
ちなみにMBのサンプルスクリプトにあるPropertyDrop.pyを使っても、MB2010同様にMB2014でも見つけれませんでした。
ということは、
PropetyListにPropertyが存在せず自分でPropertyを追加しなければ使い物にならないはず。。。。
念のためPropertyListをpythonで全表示してみましょう。
。。。(´゚д゚`)ポカーン
2014では問題ないですね(
それじゃ気兼ねなくconstraintを組みましょう
■Constraintを設定する
[python]
from pyfbsdk import FBConstraintManager,FBModelList,FBGetSelectedModels
lMgr = FBConstraintManager()
lConst = lMgr.TypeCreateConstraint("Parent/Child")
lPropertyName = "Constrained object (Child)"
lMdlList = FBModelList()
FBGetSelectedModels( lMdlList )
lConst.PropertyList.Find(lPropertyName).append(lMdlList[0])
lConst.Active = True
lConst.Lock = True
[/python]
現在選択されているFBModelをConstrained object (Child)に追加するスクリプトです。
なお、生成された直後ではConstrainはActiveとLockにチェックが入っていません。
UI上に存在するConstraint Settings中の項目名がそのままPropertyListに存在します。