|
87 | 87 | from . import widget |
88 | 88 |
|
89 | 89 |
|
| 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 | + |
90 | 101 | # ============================================================================= |
91 | 102 | # general functions |
92 | 103 | # ============================================================================= |
@@ -355,6 +366,45 @@ def update_rbf_solver_reference(self): |
355 | 366 |
|
356 | 367 | return new_path |
357 | 368 |
|
| 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 | + |
358 | 408 |
|
359 | 409 | class RBFManagerUI(widget.RBFWidget): |
360 | 410 | """A manager for creating, mirroring, importing/exporting poses created |
@@ -534,6 +584,10 @@ def addRBFToSetup(self): |
534 | 584 | drivenNode_name = drivenNode |
535 | 585 |
|
536 | 586 | # 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 |
537 | 591 | if mc.objExists(drivenNode_name): |
538 | 592 | if existing_rbf_setup(drivenNode_name): |
539 | 593 | msg = "Node is already driven by an RBF Setup." |
@@ -868,7 +922,7 @@ def setNodeToField(self, lineEdit, multi=False): |
868 | 922 | str: str set to the lineedit |
869 | 923 | """ |
870 | 924 | selected = mc.ls(sl=True) |
871 | | - if not multi: |
| 925 | + if not multi and selected: |
872 | 926 | selected = [selected[0]] |
873 | 927 | controlNameData = ", ".join(selected) |
874 | 928 | lineEdit.setText(controlNameData) |
@@ -1864,7 +1918,7 @@ def connectSignals(self): |
1864 | 1918 | partial(self.setNodeToField, self.driverLineEdit) |
1865 | 1919 | ) |
1866 | 1920 | self.setDrivenButton.clicked.connect( |
1867 | | - partial(self.setNodeToField, self.drivenLineEdit, multi=True) |
| 1921 | + partial(self.setNodeToField, self.drivenLineEdit) |
1868 | 1922 | ) |
1869 | 1923 | self.allButton.clicked.connect(self.setDriverControlLineEdit) |
1870 | 1924 | self.addDrivenButton.clicked.connect(self.addNewDriven) |
@@ -1968,6 +2022,10 @@ def createMenuBar(self, hideMenuBar=False): |
1968 | 2022 | file.addAction( |
1969 | 2023 | "Update file to mGear Weight Driver Variant", |
1970 | 2024 | 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) |
1971 | 2029 | # mirror -------------------------------------------------------------- |
1972 | 2030 | mirrorMenu = mainMenuBar.addMenu("Mirror") |
1973 | 2031 | mirrorMenu1 = mirrorMenu.addAction("Mirror Setup", self.mirrorSetup) |
|
0 commit comments