Skip to content

Commit de7088d

Browse files
committed
RBF Manager not working correctly with new weightDriver kernel. Closes #514
1 parent 221d44c commit de7088d

3 files changed

Lines changed: 63 additions & 5 deletions

File tree

release/scripts/mgear/rigbits/menu.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def install():
2929
("-----", None),
3030
("Duplicate symmetrical", str_duplicateSym),
3131
("-----", None),
32-
("RBF Manager2", str_rbf_manager2_ui),
33-
("SDK Manager (BETA)", str_SDK_manager_ui),
32+
("RBF Manager 2.1", str_rbf_manager2_ui),
33+
("SDK Manager", str_SDK_manager_ui),
3434
("-----", None),
3535
("Space Manager", str_space_manager),
3636
("-----", None),

release/scripts/mgear/rigbits/rbf_manager2/rbf_manager_ui.py

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,17 @@
8787
from . import widget
8888

8989

90+
# Callback node snippet
91+
CALLBACK_NODE_CODE = r"""
92+
93+
import mgear.pymaya as pm
94+
for nod in pm.ls(type="mGearWeightDriver"):
95+
print( "RBF mgearWeightDriver node {} force evaluation".format(nod.name()))
96+
nod.evaluate.set(True)
97+
98+
"""
99+
100+
90101
# =============================================================================
91102
# general functions
92103
# =============================================================================
@@ -355,6 +366,45 @@ def update_rbf_solver_reference(self):
355366

356367
return new_path
357368

369+
def add_RBF_evaluate_callback_node(self, rigTopNode=None):
370+
371+
if not rigTopNode:
372+
sel = pm.selected()
373+
if sel:
374+
rigTopNode = sel[0]
375+
else:
376+
pm.displayWarning("Please select the rig top node")
377+
return
378+
379+
if not pm.hasAttr(rigTopNode, "is_rig"):
380+
pm.displayWarning("The selected object is not a rig top Node. It is missing the is_rig attribute")
381+
return
382+
383+
def connections(rigTopNode):
384+
i = 0
385+
while True:
386+
try:
387+
pm.connectAttr(
388+
pm.PyNode(cb_node).message,
389+
pm.PyNode(rigTopNode).attr(
390+
"rigScriptNodes[%s]" % str(i)))
391+
break
392+
except:
393+
i += 1
394+
if i > 100:
395+
pm.displayWarning("next available reached limit 100")
396+
break
397+
398+
cb_node = pm.scriptNode(st=1,
399+
beforeScript=CALLBACK_NODE_CODE,
400+
n='rbf_force_eval_cb_node',
401+
stp='python')
402+
pm.scriptNode(cb_node, executeBefore=True)
403+
404+
connections(rigTopNode)
405+
406+
return cb_node
407+
358408

359409
class RBFManagerUI(widget.RBFWidget):
360410
"""A manager for creating, mirroring, importing/exporting poses created
@@ -534,6 +584,10 @@ def addRBFToSetup(self):
534584
drivenNode_name = drivenNode
535585

536586
# Check if there is an existing rbf node attached
587+
print(drivenNode_name)
588+
if not drivenNode_name:
589+
pm.displayWarning("Not Driven Channels Selected")
590+
return
537591
if mc.objExists(drivenNode_name):
538592
if existing_rbf_setup(drivenNode_name):
539593
msg = "Node is already driven by an RBF Setup."
@@ -868,7 +922,7 @@ def setNodeToField(self, lineEdit, multi=False):
868922
str: str set to the lineedit
869923
"""
870924
selected = mc.ls(sl=True)
871-
if not multi:
925+
if not multi and selected:
872926
selected = [selected[0]]
873927
controlNameData = ", ".join(selected)
874928
lineEdit.setText(controlNameData)
@@ -1864,7 +1918,7 @@ def connectSignals(self):
18641918
partial(self.setNodeToField, self.driverLineEdit)
18651919
)
18661920
self.setDrivenButton.clicked.connect(
1867-
partial(self.setNodeToField, self.drivenLineEdit, multi=True)
1921+
partial(self.setNodeToField, self.drivenLineEdit)
18681922
)
18691923
self.allButton.clicked.connect(self.setDriverControlLineEdit)
18701924
self.addDrivenButton.clicked.connect(self.addNewDriven)
@@ -1968,6 +2022,10 @@ def createMenuBar(self, hideMenuBar=False):
19682022
file.addAction(
19692023
"Update file to mGear Weight Driver Variant",
19702024
self.menuFunc.update_rbf_solver_reference)
2025+
file.addSeparator()
2026+
file.addAction(
2027+
"Add RBF Callback Node To Force Evaluation",
2028+
self.menuFunc.add_RBF_evaluate_callback_node)
19712029
# mirror --------------------------------------------------------------
19722030
mirrorMenu = mainMenuBar.addMenu("Mirror")
19732031
mirrorMenu1 = mirrorMenu.addAction("Mirror Setup", self.mirrorSetup)

release/scripts/mgear/rigbits/rbf_manager2/widget.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
1010
from mgear.rigbits.six import PY2
1111

12-
__version__ = "2.0.1"
12+
__version__ = "2.1.0"
1313
TOOL_NAME = "RBF Manager"
1414
TOOL_TITLE = "{} v{} | mGear {}".format(
1515
TOOL_NAME, __version__, mgear.getVersion()

0 commit comments

Comments
 (0)