10 from pyfbsdk_additions
import *
13 def IsAuxIKPivot(pModel):
15 lIKSyncProp = pModel.PropertyList.Find(
"IKSync",
False)
16 lIKDrawLink = pModel.PropertyList.Find(
"DrawLink",
False)
17 if lIKSyncProp
and lIKDrawLink
and lIKSyncProp.Data
and lIKDrawLink.Data:
22 def ClearAuxEffectors(pCharacter, pEffectorId):
24 for lSetId
in FBEffectorSetID.values.values():
26 if lSetId == FBEffectorSetID.FBEffectorSetDefault:
continue
28 lAuxEffector = pCharacter.GetEffectorModel(pEffectorId,lSetId)
30 lAuxToClear.append(lAuxEffector)
34 for lModel
in reversed(lAuxToClear):
38 def MatchEffector(pSrcCharacter, pDstCharacter, pEffectorId):
39 lDstEffectorModel = pDstCharacter.GetEffectorModel(pEffectorId)
41 ClearAuxEffectors(pDstCharacter,pEffectorId)
42 for lSetId
in FBEffectorSetID.values.values():
43 if lSetId == FBEffectorSetID.FBEffectorSetDefault:
continue
45 lSrcAuxEffectorModel = pSrcCharacter.GetEffectorModel(pEffectorId,lSetId)
46 if lSrcAuxEffectorModel:
47 lIsAuxPivot = IsAuxIKPivot(lSrcAuxEffectorModel)
48 if pDstCharacter.CreateAuxiliary(pEffectorId,lIsAuxPivot) ==
False:
53 pDstCharacter.GetEffectorModel(pEffectorId,lSetId).IKPivot = lSrcAuxEffectorModel.IKPivot
58 def MatchAuxiliary(pSrcCharacter, pDstCharacter):
59 if pSrcCharacter
and pDstCharacter:
60 for lEffectorId
in FBEffectorId.values.values():
61 if pSrcCharacter.GetEffectorModel(lEffectorId):
62 MatchEffector(pSrcCharacter, pDstCharacter,lEffectorId)
65 print "Missing params"
69 gToolName =
"MatchAuxiliaries"
71 gScene = gSystem.Scene
74 class MatchAuxiliariesTool(
FBTool):
75 def SrcDrop(self,pEvent,pControl):
76 if pEvent.State == FBDragAndDropState.kFBDragAndDropDrag:
79 elif pEvent.State == FBDragAndDropState.kFBDragAndDropDrop:
80 self.mSrcChar = pEvent.Components[0]
81 pControl.Items.removeAll()
82 pControl.Items.append(self.mSrcChar.Name)
84 def DstDrop(self,pEvent,pControl):
85 if pEvent.State == FBDragAndDropState.kFBDragAndDropDrag:
88 elif pEvent.State == FBDragAndDropState.kFBDragAndDropDrop:
89 self.mDstChar = pEvent.Components[0]
90 pControl.Items.removeAll()
91 pControl.Items.append(self.mDstChar.Name)
106 lLblSrcCharacter.Caption =
"Source Character:"
107 lLblDstCharacter.Caption =
"Destination Character:"
108 lBtnMatch.Caption =
"Match auxiliary"
115 self.AddRegion(
"Main" ,
"Main" , x, y, w, h)
116 self.SetControl(
"Main" ,lVLt)
119 lHLt.AddRelative(lLblSrcCharacter,0.5)
120 lHLt.AddRelative(lCntSrcCharacter,0.5)
123 lHLt.AddRelative(lLblDstCharacter,0.5)
124 lHLt.AddRelative(lCntDstCharacter,0.5)
126 lVLt.Add(lBtnMatch,20)
128 lCntSrcCharacter.OnDragAndDrop.Add(
lambda control =
None, event =
None : self.SrcDrop(event,control))
129 lCntDstCharacter.OnDragAndDrop.Add(
lambda control =
None, event =
None : self.DstDrop(event,control))
130 lBtnMatch.OnClick.Add(
lambda control =
None, event =
None : MatchAuxiliary(self.mSrcChar,self.mDstChar))
132 if len(gScene.Characters):
133 self.mSrcChar = gScene.Characters[0]
134 lCntSrcCharacter.Items.append(self.mSrcChar.Name)
135 if len(gScene.Characters)>1:
136 self.mDstChar = gScene.Characters[1]
137 lCntDstCharacter.Items.append(self.mDstChar.Name)
139 self.StartSizeX = 250
140 self.StartSizeY = 115
146 if gToolName
in FBToolList:
147 tool = FBToolList[gToolName]
150 tool=MatchAuxiliariesTool()