aboutsummaryrefslogtreecommitdiff
path: root/Documentation/build/_modules/System
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/build/_modules/System')
-rw-r--r--Documentation/build/_modules/System/ART_RigModule.html3108
-rw-r--r--Documentation/build/_modules/System/utils.html1255
2 files changed, 4363 insertions, 0 deletions
diff --git a/Documentation/build/_modules/System/ART_RigModule.html b/Documentation/build/_modules/System/ART_RigModule.html
new file mode 100644
index 0000000..03a2ceb
--- /dev/null
+++ b/Documentation/build/_modules/System/ART_RigModule.html
@@ -0,0 +1,3108 @@
+
+
+<!doctype html>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>System.ART_RigModule &#8212; ARTv2 1.0 documentation</title>
+
+ <link rel="stylesheet" href="../../_static/bizstyle.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: '../../',
+ VERSION: '1.0',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true,
+ SOURCELINK_SUFFIX: '.txt'
+ };
+ </script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/bizstyle.js"></script>
+ <link rel="index" title="Index" href="../../genindex.html" />
+ <link rel="search" title="Search" href="../../search.html" />
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
+ <!--[if lt IE 9]>
+ <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
+ <![endif]-->
+ </head>
+ <body role="document">
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../../index.html">ARTv2 1.0 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <form class="search" action="../../search.html" method="get">
+ <div><input type="text" name="q" /></div>
+ <div><input type="submit" value="Go" /></div>
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <h1>Source code for System.ART_RigModule</h1><div class="highlight"><pre>
+<span></span><span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">Author: Jeremy Ernst</span>
+
+<span class="sd"> This is the base class from which all modules are created. When creating a new module,</span>
+<span class="sd"> your module class should inherit from this base class. Example:</span>
+
+<span class="sd">| class ART_Head(ART_RigModule)</span>
+
+<span class="sd"> In the __init__ of your module class, you will want to also run the base class __init__</span>
+<span class="sd"> at the end of your module class __init__:</span>
+
+<span class="sd">| ART_RigModule.__init__(self, &quot;ART_Head_Module&quot;, &quot;ART_Head&quot;, moduleUserName)</span>
+
+<span class="sd"> This module has two file attributes set by default. Your module class will need many more</span>
+<span class="sd"> file attributes set. Please see another module as an example.</span>
+
+<span class="sd">########</span>
+<span class="sd">Contents</span>
+<span class="sd">########</span>
+
+<span class="sd">| **Module Creation Functions:**</span>
+<span class="sd">| :func:`addAttributes &lt;System.ART_RigModule.ART_RigModule.addAttributes&gt;`</span>
+<span class="sd">| :func:`buildNetwork &lt;System.ART_RigModule.ART_RigModule.buildNetwork&gt;`</span>
+<span class="sd">| :func:`createMirrorModule &lt;System.ART_RigModule.ART_RigModule.createMirrorModule&gt;`</span>
+<span class="sd">| :func:`jointMover_Build &lt;System.ART_RigModule.ART_RigModule.jointMover_Build&gt;`</span>
+<span class="sd">| :func:`skeletonSettings_UI &lt;System.ART_RigModule.ART_RigModule.skeletonSettings_UI&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Update Functions:**</span>
+<span class="sd">| :func:`applyModuleChanges &lt;System.ART_RigModule.ART_RigModule.applyModuleChanges&gt;`</span>
+<span class="sd">| :func:`checkForDependencies &lt;System.ART_RigModule.ART_RigModule.checkForDependencies&gt;`</span>
+<span class="sd">| :func:`deleteModule &lt;System.ART_RigModule.ART_RigModule.deleteModule&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Settings and Interface Functions:**</span>
+<span class="sd">| :func:`changeModuleName &lt;System.ART_RigModule.ART_RigModule.changeModuleName&gt;`</span>
+<span class="sd">| :func:`changeModuleParent &lt;System.ART_RigModule.ART_RigModule.changeModuleParent&gt;`</span>
+<span class="sd">| :func:`copySettings &lt;System.ART_RigModule.ART_RigModule.copySettings&gt;`</span>
+<span class="sd">| :func:`pasteSettings &lt;System.ART_RigModule.ART_RigModule.pasteSettings&gt;`</span>
+<span class="sd">| :func:`resetSettings &lt;System.ART_RigModule.ART_RigModule.resetSettings&gt;`</span>
+<span class="sd">| :func:`createContextMenu &lt;System.ART_RigModule.ART_RigModule.createContextMenu&gt;`</span>
+<span class="sd">| :func:`createMirrorOfModule_UI &lt;System.ART_RigModule.ART_RigModule.createMirrorOfModule_UI&gt;`</span>
+<span class="sd">| :func:`createScriptJob &lt;System.ART_RigModule.ART_RigModule.createScriptJob&gt;`</span>
+<span class="sd">| :func:`mirrorTransformations &lt;System.ART_RigModule.ART_RigModule.mirrorTransformations&gt;`</span>
+<span class="sd">| :func:`mirrorTransformations_Custom &lt;System.ART_RigModule.ART_RigModule.mirrorTransformations_Custom&gt;`</span>
+<span class="sd">| :func:`resetTransforms &lt;System.ART_RigModule.ART_RigModule.resetTransforms&gt;`</span>
+<span class="sd">| :func:`setMirrorModule &lt;System.ART_RigModule.ART_RigModule.setMirrorModule&gt;`</span>
+<span class="sd">| :func:`updateBoneCount &lt;System.ART_RigModule.ART_RigModule.updateBoneCount&gt;`</span>
+<span class="sd">| :func:`updatePreview &lt;System.ART_RigModule.ART_RigModule.updatePreview&gt;`</span>
+<span class="sd">| :func:`updateSettingsUI &lt;System.ART_RigModule.ART_RigModule.updateSettingsUI&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Joint Mover Functions:**</span>
+<span class="sd">| :func:`addJointMoverToOutliner &lt;System.ART_RigModule.ART_RigModule.addJointMoverToOutliner&gt;`</span>
+<span class="sd">| :func:`aimMode &lt;System.ART_RigModule.ART_RigModule.aimMode&gt;`</span>
+<span class="sd">| :func:`aimMode_Setup &lt;System.ART_RigModule.ART_RigModule.aimMode_Setup&gt;`</span>
+<span class="sd">| :func:`bakeOffsets &lt;System.ART_RigModule.ART_RigModule.bakeOffsets&gt;`</span>
+<span class="sd">| :func:`createGlobalMoverButton &lt;System.ART_RigModule.ART_RigModule.createGlobalMoverButton&gt;`</span>
+<span class="sd">| :func:`createMeshMoverButton &lt;System.ART_RigModule.ART_RigModule.createMeshMoverButton&gt;`</span>
+<span class="sd">| :func:`createOffsetMoverButton &lt;System.ART_RigModule.ART_RigModule.createOffsetMoverButton&gt;`</span>
+<span class="sd">| :func:`pinModule &lt;System.ART_RigModule.ART_RigModule.pinModule&gt;`</span>
+<span class="sd">| :func:`selectMover &lt;System.ART_RigModule.ART_RigModule.selectMover&gt;`</span>
+<span class="sd">| :func:`selectScriptJob &lt;System.ART_RigModule.ART_RigModule.selectScriptJob&gt;`</span>
+<span class="sd">| :func:`toggleShapeVis &lt;System.ART_RigModule.ART_RigModule.toggleShapeVis&gt;`</span>
+<span class="sd">| :func:`updateOutliner &lt;System.ART_RigModule.ART_RigModule.updateOutliner&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Publish Functions:**</span>
+<span class="sd">| :func:`cleanUpRigPose &lt;System.ART_RigModule.ART_RigModule.cleanUpRigPose&gt;`</span>
+<span class="sd">| :func:`createRigPoseSliderForJoint &lt;System.ART_RigModule.ART_RigModule.createRigPoseSliderForJoint&gt;`</span>
+<span class="sd">| :func:`getReferencePose &lt;System.ART_RigModule.ART_RigModule.getReferencePose&gt;`</span>
+<span class="sd">| :func:`matchModelPose &lt;System.ART_RigModule.ART_RigModule.matchModelPose&gt;`</span>
+<span class="sd">| :func:`mirrorTransformations_RigPose &lt;System.ART_RigModule.ART_RigModule.mirrorTransformations_RigPose&gt;`</span>
+<span class="sd">| :func:`resetRigPose &lt;System.ART_RigModule.ART_RigModule.resetRigPose&gt;`</span>
+<span class="sd">| :func:`resetRigPose_Part &lt;System.ART_RigModule.ART_RigModule.resetRigPose_Part&gt;`</span>
+<span class="sd">| :func:`rigPose_UI &lt;System.ART_RigModule.ART_RigModule.rigPose_UI&gt;`</span>
+<span class="sd">| :func:`setPosePercentage &lt;System.ART_RigModule.ART_RigModule.setPosePercentage&gt;`</span>
+<span class="sd">| :func:`setPosePercentage_Part &lt;System.ART_RigModule.ART_RigModule.setPosePercentage_Part&gt;`</span>
+<span class="sd">| :func:`setReferencePose &lt;System.ART_RigModule.ART_RigModule.setReferencePose&gt;`</span>
+<span class="sd">| :func:`setReferencePoseSlider &lt;System.ART_RigModule.ART_RigModule.setReferencePoseSlider&gt;`</span>
+<span class="sd">| :func:`setSkeletonPose &lt;System.ART_RigModule.ART_RigModule.setSkeletonPose&gt;`</span>
+<span class="sd">| :func:`setupForRigPose &lt;System.ART_RigModule.ART_RigModule.setupForRigPose&gt;`</span>
+<span class="sd">| :func:`setupModelPoseForRig &lt;System.ART_RigModule.ART_RigModule.setupModelPoseForRig&gt;`</span>
+<span class="sd">| :func:`skinProxyGeo &lt;System.ART_RigModule.ART_RigModule.skinProxyGeo&gt;`</span>
+<span class="sd">| :func:`updateRigPose &lt;System.ART_RigModule.ART_RigModule.updateRigPose&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Rig Functions**</span>
+<span class="sd">| :func:`buildRig &lt;System.ART_RigModule.ART_RigModule.buildRig&gt;`</span>
+<span class="sd">| :func:`buildRigCustom &lt;System.ART_RigModule.ART_RigModule.buildRigCustom&gt;`</span>
+<span class="sd">| :func:`deleteRig &lt;System.ART_RigModule.ART_RigModule.deleteRig&gt;`</span>
+<span class="sd">| :func:`getControls &lt;System.ART_RigModule.ART_RigModule.getControls&gt;`</span>
+<span class="sd">| :func:`importFBX &lt;System.ART_RigModule.ART_RigModule.importFBX&gt;`</span>
+<span class="sd">| :func:`importFBX_pre &lt;System.ART_RigModule.ART_RigModule.importFBX_pre&gt;`</span>
+<span class="sd">| :func:`resetRigControls &lt;System.ART_RigModule.ART_RigModule.resetRigControls&gt;`</span>
+<span class="sd">| :func:`selectRigControls &lt;System.ART_RigModule.ART_RigModule.selectRigControls&gt;`</span>
+<span class="sd">| :func:`selectionScriptJob_animUI &lt;System.ART_RigModule.ART_RigModule.selectionScriptJob_animUI&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Module Utility Functions**</span>
+<span class="sd">| :func:`getAllModules &lt;System.ART_RigModule.ART_RigModule.getAllModules&gt;`</span>
+<span class="sd">| :func:`getModules &lt;System.ART_RigModule.ART_RigModule.getModules&gt;`</span>
+<span class="sd">| :func:`removeSkeletalConstraints &lt;System.ART_RigModule.ART_RigModule.removeSkeletalConstraints&gt;`</span>
+<span class="sd">| :func:`returnCreatedJoints &lt;System.ART_RigModule.ART_RigModule.returnCreatedJoints&gt;`</span>
+<span class="sd">| :func:`returnJointMovers &lt;System.ART_RigModule.ART_RigModule.returnJointMovers&gt;`</span>
+<span class="sd">| :func:`returnMirrorModuleInst &lt;System.ART_RigModule.ART_RigModule.returnMirrorModuleInst&gt;`</span>
+<span class="sd">| :func:`returnNetworkNode &lt;System.ART_RigModule.ART_RigModule.returnNetworkNode&gt;`</span>
+<span class="sd">| :func:`returnPrefixSuffix &lt;System.ART_RigModule.ART_RigModule.returnPrefixSuffix&gt;`</span>
+<span class="sd">| :func:`returnRigNetworkNode &lt;System.ART_RigModule.ART_RigModule.returnRigNetworkNode&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">|</span>
+<span class="sd">#########</span>
+<span class="sd">Class</span>
+<span class="sd">#########</span>
+<span class="sd">&quot;&quot;&quot;</span>
+
+<span class="c1"># file imports</span>
+<span class="kn">import</span> <span class="nn">json</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">traceback</span>
+<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">partial</span>
+
+<span class="kn">import</span> <span class="nn">System.interfaceUtils</span> <span class="k">as</span> <span class="nn">interfaceUtils</span>
+<span class="kn">import</span> <span class="nn">System.riggingUtils</span> <span class="k">as</span> <span class="nn">riggingUtils</span>
+<span class="kn">import</span> <span class="nn">System.utils</span> <span class="k">as</span> <span class="nn">utils</span>
+<span class="kn">import</span> <span class="nn">System.mathUtils</span> <span class="k">as</span> <span class="nn">mathUtils</span>
+<span class="kn">import</span> <span class="nn">maya.cmds</span> <span class="k">as</span> <span class="nn">cmds</span>
+<span class="kn">import</span> <span class="nn">maya.mel</span> <span class="k">as</span> <span class="nn">mel</span>
+<span class="kn">from</span> <span class="nn">ThirdParty.Qt</span> <span class="k">import</span> <span class="n">QtGui</span><span class="p">,</span> <span class="n">QtCore</span><span class="p">,</span> <span class="n">QtWidgets</span>
+
+<span class="c1"># file attributes</span>
+<span class="n">fbxImport</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;None&quot;</span><span class="p">,</span> <span class="s2">&quot;FK&quot;</span><span class="p">]</span>
+<span class="n">matchData</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">,</span> <span class="kc">None</span><span class="p">]</span>
+
+
+<div class="viewcode-block" id="ART_RigModule"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule">[docs]</a><span class="k">class</span> <span class="nc">ART_RigModule</span><span class="p">():</span>
+<div class="viewcode-block" id="ART_RigModule.__init__"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">moduleName</span><span class="p">,</span> <span class="n">moduleType</span><span class="p">,</span> <span class="n">userCreatedName</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;Initiate the class, taking in the instance to the interface and the user specified name.</span>
+
+<span class="sd"> :param moduleName: This is the base name of the module, specified in the rig module.</span>
+<span class="sd"> :param moduleType: This is the name of the module to create (the module class).</span>
+<span class="sd"> :param userCreatedName: This is the name specified by the user on module creation.</span>
+
+<span class="sd"> Instantiate the following class variables as well:</span>
+<span class="sd"> * **self.modName:** Take the passed in moduleName and make it a class var</span>
+<span class="sd"> * **self.moduleType:** Take the passed in moduleType and make it a class var</span>
+<span class="sd"> * **self.rootMod:** The network node of the entire character asset</span>
+<span class="sd"> * **self.name:** The user created name (prefix + baseName + suffix) passed in</span>
+<span class="sd"> * **self.originalName:** Also the user created name, but we want to store what the original name</span>
+<span class="sd"> was on creation, as the user can rename the module later. This will allow us to make the link between</span>
+<span class="sd"> what the module&#39;s original name was and what the new name is.</span>
+<span class="sd"> * **self.outlinerControls:** A list of the outliner controls created when adding module joint movers to</span>
+<span class="sd"> the outliner.</span>
+
+<span class="sd"> Also, read the QSettings to find out where needed paths are.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># set class variables</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">modName</span> <span class="o">=</span> <span class="n">moduleName</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">moduleType</span> <span class="o">=</span> <span class="n">moduleType</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rootMod</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">userCreatedName</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">=</span> <span class="n">userCreatedName</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerControls</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">controlTypes</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># get the directory path of the tools</span>
+ <span class="n">settings</span> <span class="o">=</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">QSettings</span><span class="p">(</span><span class="s2">&quot;Epic Games&quot;</span><span class="p">,</span> <span class="s2">&quot;ARTv2&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s2">&quot;toolsPath&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">value</span><span class="p">(</span><span class="s2">&quot;iconPath&quot;</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.buildNetwork"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.buildNetwork">[docs]</a> <span class="k">def</span> <span class="nf">buildNetwork</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Build the network node for the module which will store all information needed by the module.</span>
+<span class="sd"> Then, call on addAttributes to add the required module attributes to the network node.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># create the network node for our module</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">createNode</span><span class="p">(</span><span class="s2">&quot;network&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">modName</span><span class="p">)</span>
+
+ <span class="c1"># create attributes</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">addAttributes</span><span class="p">()</span>
+
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.addAttributes"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.addAttributes">[docs]</a> <span class="k">def</span> <span class="nf">addAttributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Add attributes to the network node that all modules need.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">moduleType</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="c1"># add attributes specific to this module</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;rigModules&quot;</span><span class="p">,</span> <span class="n">at</span><span class="o">=</span><span class="s2">&quot;message&quot;</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c1"># add a rigging message attribute</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;parent&quot;</span><span class="p">,</span> <span class="n">at</span><span class="o">=</span><span class="s2">&quot;message&quot;</span><span class="p">)</span>
+
+ <span class="c1"># add a module type attribute</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;moduleType&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">moduleType</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># and a module name attribute (used for skeleton settings UI groupbox label)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;moduleName&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># add attr for parent module that user specfies</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;parentModuleBone&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># add attr for mirror module that user specfies</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;mirrorModule&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="s2">&quot;pinned&quot;</span><span class="p">,</span> <span class="n">at</span><span class="o">=</span><span class="s2">&quot;bool&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.pinned&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># connect rigModule to root module node</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rootMod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getModules</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rootMod</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">connectAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rootMod</span> <span class="o">+</span> <span class="s2">&quot;.rigModules&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.parent&quot;</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.skeletonSettings_UI"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.skeletonSettings_UI">[docs]</a> <span class="k">def</span> <span class="nf">skeletonSettings_UI</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">checkable</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Build the framework for the skeleton settings that all modules need.</span>
+
+<span class="sd"> :param name: user given name of module (prefix + base_name + suffix)</span>
+<span class="sd"> :param width: width of the skeleton settings groupBox. 335 usually</span>
+<span class="sd"> :param height: height of the skeleton settings groupBox.</span>
+<span class="sd"> :param checkable: Whether or not the groupBox can be collapsed.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># add the groupbox for this module with the module name and module settings</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QGroupBox</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setGeometry</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QRect</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">))</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">checkable</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">))</span>
+
+ <span class="k">if</span> <span class="n">checkable</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setFlat</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setCheckable</span><span class="p">(</span><span class="n">checkable</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">lockButton</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">lockButton</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">lockButton</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
+
+ <span class="c1"># load style sheet file</span>
+ <span class="n">styleSheetFile</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnNicePath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span><span class="p">,</span>
+ <span class="s2">&quot;Core/Scripts/Interfaces/StyleSheets/skeletonSettings.qss&quot;</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">styleSheetFile</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span>
+ <span class="n">style</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="n">style</span><span class="p">)</span>
+
+ <span class="c1"># set properties for filtering later</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+ <span class="c1"># set context menu policy on groupbox</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setContextMenuPolicy</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">CustomContextMenu</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">customContextMenuRequested</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">createContextMenu</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.changeModuleName"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.changeModuleName">[docs]</a> <span class="k">def</span> <span class="nf">changeModuleName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baseName</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Launch the interface that allows users to change the module name.</span>
+
+<span class="sd"> :param baseName: The module base name (head, torso, leg, etc)</span>
+<span class="sd"> :param moduleInst: The specific instance of the module</span>
+<span class="sd"> :param rigUiInst: The instance of the rig creator interface.</span>
+
+<span class="sd"> This will call on a separate class in Core/Interfaces called ART_ChangeModuleNameUI.py</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get prefix/suffix</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">baseName</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">baseName</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="c1"># when pressing the change name button on the skeleton settings UI (if it exists):</span>
+
+ <span class="c1"># delete the UI if it already exists</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">()</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">mayaWindow</span><span class="o">.</span><span class="n">objectName</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtChangeModuleNameUi&quot;</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteUI</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtChangeModuleNameUi&quot;</span><span class="p">)</span>
+
+ <span class="c1"># launch a UI for prefix/suffix/preview again</span>
+ <span class="kn">import</span> <span class="nn">Interfaces.ART_ChangeModuleNameUI</span> <span class="k">as</span> <span class="nn">ART_ChangeModuleNameUI</span>
+ <span class="n">reload</span><span class="p">(</span><span class="n">ART_ChangeModuleNameUI</span><span class="p">)</span>
+ <span class="n">inst</span> <span class="o">=</span> <span class="n">ART_ChangeModuleNameUI</span><span class="o">.</span><span class="n">ART_ChangeModuleName_UI</span><span class="p">(</span><span class="n">baseName</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">suffix</span><span class="p">,</span>
+ <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">())</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.changeModuleParent"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.changeModuleParent">[docs]</a> <span class="k">def</span> <span class="nf">changeModuleParent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Launch the interface that allows users to change the module&#39;s parent bone.</span>
+
+<span class="sd"> :param moduleInst: The specific instance of the module</span>
+<span class="sd"> :param rigUiInst: The instance of the rig creator interface.</span>
+
+<span class="sd"> This will call on a separate class in Core/Interfaces called ART_ChangeModuleParentUI.py</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get current parent value</span>
+ <span class="n">currentParent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">currentParent</span><span class="o">.</span><span class="n">text</span><span class="p">()</span>
+
+ <span class="c1"># when pressing the change parent button on the skeleton settings UI (if it exists):</span>
+
+ <span class="c1"># delete the UI if it already exists</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">()</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">mayaWindow</span><span class="o">.</span><span class="n">objectName</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtChangeModuleParentUi&quot;</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteUI</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtChangeModuleParentUi&quot;</span><span class="p">)</span>
+
+ <span class="c1"># launch a UI for prefix/suffix/preview again</span>
+ <span class="kn">import</span> <span class="nn">Interfaces.ART_ChangeModuleParentUI</span> <span class="k">as</span> <span class="nn">ART_ChangeModuleParentUI</span>
+ <span class="n">reload</span><span class="p">(</span><span class="n">ART_ChangeModuleParentUI</span><span class="p">)</span>
+ <span class="n">inst</span> <span class="o">=</span> <span class="n">ART_ChangeModuleParentUI</span><span class="o">.</span><span class="n">ART_ChangeModuleParent_UI</span><span class="p">(</span><span class="n">currentParent</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">,</span>
+ <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">())</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setMirrorModule"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setMirrorModule">[docs]</a> <span class="k">def</span> <span class="nf">setMirrorModule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Launch the interface that allows users to change the module&#39;s mirror module.</span>
+<span class="sd"> Meaning, the module that is linked as a mirror of this module. Only modules of the same</span>
+<span class="sd"> type can be linked as mirrors.</span>
+
+<span class="sd"> :param moduleInst: The specific instance of the module</span>
+<span class="sd"> :param rigUiInst: The instance of the rig creator interface.</span>
+
+<span class="sd"> This will call on a separate class in Core/Interfaces called ART_SetMirrorModuleUI.py</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># delete the UI if it already exists</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">()</span>
+ <span class="n">mayaWindow</span> <span class="o">=</span> <span class="n">mayaWindow</span><span class="o">.</span><span class="n">objectName</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtSetMirrorModuleUi&quot;</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteUI</span><span class="p">(</span><span class="n">mayaWindow</span> <span class="o">+</span> <span class="s2">&quot;|pyArtSetMirrorModuleUi&quot;</span><span class="p">)</span>
+
+ <span class="c1"># launch a UI for prefix/suffix/preview again</span>
+ <span class="kn">import</span> <span class="nn">Interfaces.ART_SetMirrorModuleUI</span> <span class="k">as</span> <span class="nn">ART_SetMirrorModuleUI</span>
+ <span class="n">reload</span><span class="p">(</span><span class="n">ART_SetMirrorModuleUI</span><span class="p">)</span>
+ <span class="n">inst</span> <span class="o">=</span> <span class="n">ART_SetMirrorModuleUI</span><span class="o">.</span><span class="n">ART_SetMirrorModule_UI</span><span class="p">(</span><span class="n">moduleInst</span><span class="p">,</span> <span class="n">rigUiInst</span><span class="p">,</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">())</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.jointMover_Build"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.jointMover_Build">[docs]</a> <span class="k">def</span> <span class="nf">jointMover_Build</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Import the joint mover file with the given path.</span>
+
+<span class="sd"> After importing the module&#39;s joint mover file, rename imported nodes to use module name.</span>
+<span class="sd"> Then, assign existing matching materials to joint mover proxy geometry, deleting the imported</span>
+<span class="sd"> materials if they were duplicates. Then parent into the main JointMover group. Lastly, hook up</span>
+<span class="sd"> global scaling on the joint movers.</span>
+
+
+<span class="sd"> :param path: Path of joint mover file to import</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the full path for the joint mover file</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
+
+ <span class="c1"># import the file</span>
+ <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fullPath</span><span class="p">):</span>
+ <span class="n">nodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">file</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="n">i</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">iv</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;mayaAscii&quot;</span><span class="p">,</span> <span class="n">rnn</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">validTypes</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;transform&quot;</span><span class="p">,</span> <span class="s2">&quot;joint&quot;</span><span class="p">,</span> <span class="s2">&quot;ikHandle&quot;</span><span class="p">]</span>
+
+ <span class="c1"># loop through returned nodes from import, and find the mover_grp, renaming it and all</span>
+ <span class="c1"># children to have user specified name as prefix</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;|mover_grp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">children</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">allDescendents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)</span>
+ <span class="n">moverGrp</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">movers</span> <span class="o">=</span> <span class="p">[</span><span class="n">moverGrp</span><span class="p">]</span>
+
+ <span class="k">for</span> <span class="n">child</span> <span class="ow">in</span> <span class="n">children</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">nodeType</span><span class="p">(</span><span class="n">child</span><span class="p">)</span> <span class="ow">in</span> <span class="n">validTypes</span><span class="p">:</span>
+ <span class="n">movers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">child</span><span class="p">)</span>
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="n">e</span>
+
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">movers</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">mover</span><span class="p">)</span>
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="n">mover</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">mover</span>
+ <span class="nb">print</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+
+ <span class="c1"># exit loop</span>
+ <span class="k">break</span>
+
+ <span class="c1"># assign materials if they exist, removing duplicate materials</span>
+ <span class="n">materials</span> <span class="o">=</span> <span class="p">[[</span><span class="s2">&quot;*_blue_m&quot;</span><span class="p">,</span> <span class="s2">&quot;blue_m&quot;</span><span class="p">],</span> <span class="p">[</span><span class="s2">&quot;*_green_m&quot;</span><span class="p">,</span> <span class="s2">&quot;green_m&quot;</span><span class="p">],</span> <span class="p">[</span><span class="s2">&quot;*_red_m&quot;</span><span class="p">,</span> <span class="s2">&quot;red_m&quot;</span><span class="p">],</span>
+ <span class="p">[</span><span class="s2">&quot;*_white_m&quot;</span><span class="p">,</span> <span class="s2">&quot;white_m&quot;</span><span class="p">],</span> <span class="p">[</span><span class="s2">&quot;*_proxy_shader_tan&quot;</span><span class="p">,</span> <span class="s2">&quot;proxy_shader_tan&quot;</span><span class="p">],</span>
+ <span class="p">[</span><span class="s2">&quot;*_proxy_shader_black&quot;</span><span class="p">,</span> <span class="s2">&quot;proxy_shader_black&quot;</span><span class="p">]]</span>
+ <span class="n">deleteMaterials</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">material</span> <span class="ow">in</span> <span class="n">materials</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="c1"># select materials for the joint mover</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">material</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="n">foundMaterials</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># loop through each color material (dupes)</span>
+ <span class="k">for</span> <span class="n">mat</span> <span class="ow">in</span> <span class="n">foundMaterials</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">hyperShade</span><span class="p">(</span><span class="n">objects</span><span class="o">=</span><span class="n">mat</span><span class="p">)</span>
+ <span class="n">assignedGeo</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># select the geo and the original material, and assign</span>
+ <span class="n">originalMaterial</span> <span class="o">=</span> <span class="n">material</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="k">for</span> <span class="n">geo</span> <span class="ow">in</span> <span class="n">assignedGeo</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">([</span><span class="n">geo</span><span class="p">,</span> <span class="n">originalMaterial</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">hyperShade</span><span class="p">(</span><span class="n">assign</span><span class="o">=</span><span class="n">originalMaterial</span><span class="p">)</span>
+
+ <span class="c1"># delete the material no longer needed</span>
+ <span class="n">deleteMaterials</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mat</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># delete all deleteMaterials</span>
+ <span class="k">for</span> <span class="n">mat</span> <span class="ow">in</span> <span class="n">deleteMaterials</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">mat</span><span class="p">)</span>
+
+ <span class="c1"># add to JointMover grp</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">refresh</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="s2">&quot;JointMover&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="n">empty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;JointMover&quot;</span><span class="p">)</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="s2">&quot;|&quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="s2">&quot;JointMover&quot;</span><span class="p">)</span>
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+ <span class="n">globalMover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findGlobalMoverFromName</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">globalMover</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setToolTo</span><span class="p">(</span><span class="s2">&quot;moveSuperContext&quot;</span><span class="p">)</span>
+
+ <span class="c1"># obey visibility toggles</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">setMoverVisibility</span><span class="p">()</span>
+
+ <span class="c1"># 1/13/16 Change # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># hook up global scale on joint movers</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">movers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="p">[</span><span class="n">movers</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">movers</span><span class="p">[</span><span class="mi">1</span><span class="p">]]:</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">each</span><span class="p">:</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.globalScale&quot;</span><span class="p">):</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">aliasAttr</span><span class="p">(</span><span class="s2">&quot;globalScale&quot;</span><span class="p">,</span> <span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.scaleZ&quot;</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">connectAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.globalScale&quot;</span><span class="p">,</span> <span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.scaleX&quot;</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">connectAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.globalScale&quot;</span><span class="p">,</span> <span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.scaleY&quot;</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.scaleX&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.scaleY&quot;</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="c1"># lock movers</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">movers</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">each</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># 1/13/16 Change # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">confirmDialog</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">&quot;Joint Mover&quot;</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s2">&quot;Could not find associated joint mover file.&quot;</span><span class="p">,</span>
+ <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;critical&quot;</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.selectScriptJob"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.selectScriptJob">[docs]</a> <span class="k">def</span> <span class="nf">selectScriptJob</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Change icon color of the given joint mover&#39;s button in the outliner to show selection status.</span>
+
+<span class="sd"> :param info: This list contains the button object, the joint mover control, and the original color icon.</span>
+
+<span class="sd"> If the control given is selected, the icon is switched to a white icon. If it is not selected, the icon</span>
+<span class="sd"> is set back to the original passed in icon.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">pixmap</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QPixmap</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
+ <span class="n">pixmap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">QtGui</span><span class="o">.</span><span class="n">QColor</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">))</span>
+ <span class="n">whiteIcon</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">pixmap</span><span class="p">)</span>
+
+ <span class="c1"># for each item in the passed in info [outliner button, mover control, unselected stylesheet],check if</span>
+ <span class="c1"># the control is in the selection, and color the button appropriately</span>
+ <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">info</span><span class="p">:</span>
+ <span class="n">button</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">control</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="n">icon</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="n">selected</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">selection</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">control</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">button</span><span class="p">]</span><span class="o">.</span><span class="n">setIcon</span><span class="p">(</span><span class="n">icon</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">button</span><span class="p">]</span><span class="o">.</span><span class="n">setIcon</span><span class="p">(</span><span class="n">whiteIcon</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createGlobalMoverButton"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createGlobalMoverButton">[docs]</a> <span class="k">def</span> <span class="nf">createGlobalMoverButton</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">uiInstance</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Create the button in the outliner for the global mover control of a joint mover.</span>
+
+<span class="sd"> :param name: The name of the joint mover control.</span>
+<span class="sd"> :param parent: The outliner widget the created button will be parented to.</span>
+<span class="sd"> :param uiInstance: The Rig Creator interface instance.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">part</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="c1"># create the icon</span>
+ <span class="n">pixmap</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QPixmap</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
+ <span class="n">pixmap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">QtGui</span><span class="o">.</span><span class="n">QColor</span><span class="p">(</span><span class="s2">&quot;yellow&quot;</span><span class="p">))</span>
+ <span class="n">icon</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">pixmap</span><span class="p">)</span>
+
+ <span class="c1"># create the button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="n">icon</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="n">uiInstance</span><span class="o">.</span><span class="n">treeWidget</span><span class="o">.</span><span class="n">setItemWidget</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">])</span>
+
+ <span class="c1"># connect and add to list</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span>
+ <span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">selectMover</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">]))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_globalMoverBtn&quot;</span><span class="p">,</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">,</span> <span class="n">icon</span><span class="p">])</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createOffsetMoverButton"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createOffsetMoverButton">[docs]</a> <span class="k">def</span> <span class="nf">createOffsetMoverButton</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">uiInstance</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Create the button in the outliner for the offset mover control of a joint mover.</span>
+
+<span class="sd"> :param name: The name of the joint mover control.</span>
+<span class="sd"> :param parent: The outliner widget the created button will be parented to.</span>
+<span class="sd"> :param uiInstance: The Rig Creator interface instance.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+ <span class="n">part</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="c1"># create the icon</span>
+ <span class="n">pixmap</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QPixmap</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
+ <span class="n">pixmap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">QtGui</span><span class="o">.</span><span class="n">QColor</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">255</span><span class="p">))</span>
+ <span class="n">icon</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">pixmap</span><span class="p">)</span>
+
+ <span class="c1"># create the button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="n">icon</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="n">uiInstance</span><span class="o">.</span><span class="n">treeWidget</span><span class="o">.</span><span class="n">setItemWidget</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">])</span>
+
+ <span class="c1"># connect and add to list</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span>
+ <span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">selectMover</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">,</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">icon</span><span class="p">])</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createMeshMoverButton"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createMeshMoverButton">[docs]</a> <span class="k">def</span> <span class="nf">createMeshMoverButton</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">uiInstance</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Create the button in the outliner for the geometry mover control of a joint mover.</span>
+
+<span class="sd"> :param name: The name of the joint mover control.</span>
+<span class="sd"> :param parent: The outliner widget the created button will be parented to.</span>
+<span class="sd"> :param uiInstance: The Rig Creator interface instance.</span>
+
+<span class="sd"> Note: The geometry mover is purely for aesthetics and does not affect the rigging.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">part</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="c1"># create the icon</span>
+ <span class="n">pixmap</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QPixmap</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
+ <span class="n">pixmap</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">QtGui</span><span class="o">.</span><span class="n">QColor</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">176</span><span class="p">,</span> <span class="mi">176</span><span class="p">))</span>
+ <span class="n">icon</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">pixmap</span><span class="p">)</span>
+
+ <span class="c1"># create the button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="n">icon</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">15</span><span class="p">))</span>
+ <span class="n">uiInstance</span><span class="o">.</span><span class="n">treeWidget</span><span class="o">.</span><span class="n">setItemWidget</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">])</span>
+
+ <span class="c1"># connect and add to list</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span>
+ <span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">selectMover</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">,</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_geo&quot;</span><span class="p">,</span> <span class="n">icon</span><span class="p">])</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createScriptJob"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createScriptJob">[docs]</a> <span class="k">def</span> <span class="nf">createScriptJob</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Create the selection script job for the outliner buttons and their associated joint mover controls.</span>
+
+<span class="sd"> This function purely creates the script job. The script job function that is run is called self.selectScriptJob.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">scriptJob</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">scriptJob</span><span class="p">(</span>
+ <span class="n">event</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SelectionChanged&quot;</span><span class="p">,</span> <span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">selectScriptJob</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">outlinerControls</span><span class="p">)],</span> <span class="n">runOnce</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+ <span class="n">parent</span><span class="o">=</span><span class="s2">&quot;pyArtRigCreatorUi&quot;</span><span class="p">,</span> <span class="n">kws</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">per</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">scriptJobs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">scriptJob</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.selectMover"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.selectMover">[docs]</a> <span class="k">def</span> <span class="nf">selectMover</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="n">globalMover</span><span class="p">,</span> <span class="n">offsetMover</span><span class="p">,</span> <span class="n">geoMover</span><span class="p">,</span> <span class="n">button</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Select the appropriate joint mover control based on the args passed in. Color the associated button white</span>
+<span class="sd"> to show selection status.</span>
+
+<span class="sd"> :param part: The name of the joint mover control.</span>
+<span class="sd"> :param globalMover: Boolean of whether or not given control is a global mover.</span>
+<span class="sd"> :param offsetMover: Boolean of whether or not given control is an offset mover.</span>
+<span class="sd"> :param geoMover: Boolean of whether or not given control is a mesh mover.</span>
+<span class="sd"> :param button: The button in the outliner associated with the given mover.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># select mover and color button</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="n">part</span>
+
+ <span class="c1"># get modifiers</span>
+ <span class="n">toggle</span> <span class="o">=</span> <span class="kc">False</span>
+ <span class="n">mods</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getModifiers</span><span class="p">()</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">mods</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">toggle</span> <span class="o">=</span> <span class="kc">True</span>
+
+ <span class="k">if</span> <span class="n">globalMover</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">,</span> <span class="n">tgl</span><span class="o">=</span><span class="n">toggle</span><span class="p">)</span>
+
+ <span class="n">selected</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">:</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(255, 255, 255);&#39;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(255, 255, 0);&#39;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">offsetMover</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">tgl</span><span class="o">=</span><span class="n">toggle</span><span class="p">)</span>
+
+ <span class="n">selected</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(255, 255, 255);&#39;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_offsetMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(100, 220, 255);&#39;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">geoMover</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_geo&quot;</span><span class="p">,</span> <span class="n">tgl</span><span class="o">=</span><span class="n">toggle</span><span class="p">)</span>
+
+ <span class="n">selected</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_geo&quot;</span> <span class="ow">in</span> <span class="n">selected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(255, 255, 255);&#39;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_geoMoverBtn&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s1">&#39;background-color: rgb(255, 176, 176);&#39;</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createContextMenu"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createContextMenu">[docs]</a> <span class="k">def</span> <span class="nf">createContextMenu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">point</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Create the right-click menu for the module.</span>
+
+<span class="sd"> :param point: Point on monitor to spawn the right-click menu.</span>
+
+<span class="sd"> Default menu actions created:</span>
+<span class="sd"> * Copy Settings</span>
+<span class="sd"> * Paste Settings</span>
+<span class="sd"> * Reset Settings</span>
+<span class="sd"> * Delete Module</span>
+<span class="sd"> * Create Mirror of this Module</span>
+<span class="sd"> * Mirror Transformations (only if a mirror is linked)</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">mirror</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+
+ <span class="c1"># icons</span>
+ <span class="n">icon_copy</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/copy.png&quot;</span><span class="p">))</span>
+ <span class="n">icon_paste</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/paste.png&quot;</span><span class="p">))</span>
+ <span class="n">icon_reset</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/reset.png&quot;</span><span class="p">))</span>
+ <span class="n">icon_delete</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/delete.png&quot;</span><span class="p">))</span>
+ <span class="n">icon_mirror</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/mirrorXforms.png&quot;</span><span class="p">))</span>
+ <span class="n">icon_createMirror</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QIcon</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/createMirror.png&quot;</span><span class="p">))</span>
+
+ <span class="c1"># create the context menu</span>
+ <span class="k">if</span> <span class="n">networkNode</span> <span class="o">!=</span> <span class="s2">&quot;ART_Root_Module&quot;</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMenu</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_copy</span><span class="p">,</span> <span class="s2">&quot;Copy Settings&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">copySettings</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_paste</span><span class="p">,</span> <span class="s2">&quot;Paste Settings&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pasteSettings</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_reset</span><span class="p">,</span> <span class="s2">&quot;Reset Settings&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">resetSettings</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addSeparator</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">mirror</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_mirror</span><span class="p">,</span> <span class="s2">&quot;Mirror Transformations to &quot;</span> <span class="o">+</span> <span class="n">mirror</span><span class="p">,</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorTransformations</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_createMirror</span><span class="p">,</span> <span class="s2">&quot;Create Mirror of this Module&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">createMirrorOfModule_UI</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addSeparator</span><span class="p">()</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">icon_delete</span><span class="p">,</span> <span class="s2">&quot;Delete Module&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">deleteModule</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">contextMenu</span><span class="o">.</span><span class="n">exec_</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">mapToGlobal</span><span class="p">(</span><span class="n">point</span><span class="p">))</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.copySettings"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.copySettings">[docs]</a> <span class="k">def</span> <span class="nf">copySettings</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Copy the values from the network node of the module and store them in a temp file on disk.</span>
+
+<span class="sd"> This function is used in the right-click menu of the module on the skeleton settings interface.</span>
+<span class="sd"> Occasionally, it is called outside of the menu. For example, when creating a mirror of the module,</span>
+<span class="sd"> the settings are copied for the source module to then be later pasted on the mirror.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">ud</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">hd</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">attrData</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">)</span>
+ <span class="n">attrData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">])</span>
+
+ <span class="c1"># write out attrData to a temp file</span>
+ <span class="n">tempDir</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">internalVar</span><span class="p">(</span><span class="n">userTmpDir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">clipboardFile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normcase</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tempDir</span><span class="p">,</span> <span class="s2">&quot;ART_clipboard.txt&quot;</span><span class="p">))</span>
+
+ <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">clipboardFile</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
+
+ <span class="c1"># dump the data with json</span>
+ <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">attrData</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span>
+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.pasteSettings"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.pasteSettings">[docs]</a> <span class="k">def</span> <span class="nf">pasteSettings</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Paste the settings from the temp file on disk to the module&#39;s network node.</span>
+
+<span class="sd"> This function is used in the right-click menu of the module on the skeleton settings interface.</span>
+<span class="sd"> Occasionally, it is called outside of the menu. For example, when creating a mirror of the module,</span>
+<span class="sd"> the settings are copied for the source module to then be later pasted on the mirror.</span>
+
+<span class="sd"> After settings are pasted, applyModuleChanges is called to update the joint mover in the scene with</span>
+<span class="sd"> the latest values. updateSettingsUI is also called to update the outliner.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># it does this 4 times because for some reason it would not grab everything one time through. Investigate</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
+
+ <span class="n">tempDir</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">internalVar</span><span class="p">(</span><span class="n">userTmpDir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">clipboardFile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normcase</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tempDir</span><span class="p">,</span> <span class="s2">&quot;ART_clipboard.txt&quot;</span><span class="p">))</span>
+
+ <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">clipboardFile</span><span class="p">):</span>
+ <span class="c1"># load the data</span>
+ <span class="n">json_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">clipboardFile</span><span class="p">)</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">json_file</span><span class="p">)</span>
+ <span class="n">json_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="c1"># attempt to paste data if module type is the same</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">moduleType</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">moduleType</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]:</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+ <span class="n">attr</span> <span class="o">=</span> <span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">each</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">attrType</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+
+ <span class="k">if</span> <span class="n">attrType</span> <span class="o">!=</span> <span class="s2">&quot;string&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;No data in clipboard&quot;</span><span class="p">)</span>
+
+ <span class="c1"># relaunch the UI</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateSettingsUI</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyModuleChanges</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.resetSettings"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.resetSettings">[docs]</a> <span class="k">def</span> <span class="nf">resetSettings</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Reset the settings of the module&#39;s network node.</span>
+
+<span class="sd"> This function is used in the right-click menu of the module on the skeleton settings interface.</span>
+<span class="sd"> Occasionally, it is called outside of the menu.</span>
+
+<span class="sd"> After settings are reset, applyModuleChanges is called to update the joint mover in the scene with</span>
+<span class="sd"> the latest values. updateSettingsUI is also called to update the outliner.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># it does this 4 times because for some reason it would not grab everything one time through. Investigate</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">ud</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">attrType</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+
+ <span class="k">if</span> <span class="n">attrType</span> <span class="o">==</span> <span class="s2">&quot;double&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">attrType</span> <span class="o">==</span> <span class="s2">&quot;bool&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">attrType</span> <span class="o">==</span> <span class="s2">&quot;enum&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># relaunch the UI</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateSettingsUI</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyModuleChanges</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.resetTransforms"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.resetTransforms">[docs]</a> <span class="k">def</span> <span class="nf">resetTransforms</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">translate</span><span class="p">,</span> <span class="n">rotate</span><span class="p">,</span> <span class="n">scale</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Reset the given attributes of all movers in the module.</span>
+
+<span class="sd"> :param translate: Boolean of whether or not to reset translation values.</span>
+<span class="sd"> :param rotate: Boolean of whether or not to reset the rotation values.</span>
+<span class="sd"> :param scale: Boolean of whether or not to reset the scale values.</span>
+<span class="sd"> :param name: The module name. (prefix + basename + suffix)</span>
+
+<span class="sd"> This function is mainly called from ART_ResetModeUI.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">globalMovers</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">offsetMovers</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">geoMovers</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">selection</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">globalMovers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">each</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover_offset&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_mover_offset&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">offsetMovers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">each</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover_geo&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">each</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_mover_geo&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">geoMovers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">each</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">moverList</span> <span class="ow">in</span> <span class="p">[</span><span class="n">globalMovers</span><span class="p">,</span> <span class="n">offsetMovers</span><span class="p">,</span> <span class="n">geoMovers</span><span class="p">]:</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">moverList</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">translate</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;.tx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ty&quot;</span><span class="p">,</span> <span class="s2">&quot;.tz&quot;</span><span class="p">]:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">rotate</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;.rx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ry&quot;</span><span class="p">,</span> <span class="s2">&quot;.rz&quot;</span><span class="p">]:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">scale</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;.sx&quot;</span><span class="p">,</span> <span class="s2">&quot;.sy&quot;</span><span class="p">,</span> <span class="s2">&quot;.sz&quot;</span><span class="p">]:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="s2">&quot;ART_ResetXformsModeWin&quot;</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteUI</span><span class="p">(</span><span class="s2">&quot;ART_ResetXformsModeWin&quot;</span><span class="p">,</span> <span class="n">wnd</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.deleteModule"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.deleteModule">[docs]</a> <span class="k">def</span> <span class="nf">deleteModule</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Delete the module and all associated nodes and interfaces.</span>
+
+<span class="sd"> First, this will delete the joint mover, remove the entry from the outliner and the skeleton settings UI.</span>
+<span class="sd"> Then, it has to deal with any connected modules or mirror modules and resolve any issues there.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># delete the joint mover</span>
+ <span class="n">movers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+
+ <span class="k">for</span> <span class="n">moverGrp</span> <span class="ow">in</span> <span class="n">movers</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">moverGrp</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">)</span>
+
+ <span class="c1"># remove the entry from the outliner</span>
+ <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">treeWidget</span><span class="o">.</span><span class="n">indexOfTopLevelItem</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_treeModule&quot;</span><span class="p">])</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">treeWidget</span><span class="o">.</span><span class="n">takeTopLevelItem</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+
+ <span class="c1"># remove the groupbox</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">setParent</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+
+ <span class="c1"># deal with mirror module</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">mirrorModule</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">mirrorModule</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">mirrorModule</span> <span class="o">!=</span> <span class="s2">&quot;None&quot;</span><span class="p">:</span>
+ <span class="n">modules</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnRigModules</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">modName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mod</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">modName</span> <span class="o">==</span> <span class="n">mirrorModule</span><span class="p">:</span>
+
+ <span class="c1"># set the mirrored version</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mod</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mod</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="s2">&quot;None&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># get instance of mirror module&#39;s class</span>
+ <span class="n">modType</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mod</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+ <span class="n">modName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mod</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="n">module</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="s2">&quot;RigModules.&quot;</span> <span class="o">+</span> <span class="n">modType</span><span class="p">,</span> <span class="p">{},</span> <span class="p">{},</span> <span class="p">[</span><span class="n">modType</span><span class="p">])</span>
+
+ <span class="c1"># get the class name from that module file (returns Modules.ART_Root.ART_Root for example)</span>
+ <span class="n">moduleClass</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">module</span><span class="o">.</span><span class="n">className</span><span class="p">)</span>
+
+ <span class="c1"># find the instance of that module and call on the skeletonSettings_UI function</span>
+ <span class="n">moduleInst</span> <span class="o">=</span> <span class="n">moduleClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="p">,</span> <span class="n">modName</span><span class="p">)</span>
+
+ <span class="c1"># find the current groupBox for this module</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleSettingsLayout</span><span class="o">.</span><span class="n">count</span><span class="p">()):</span>
+ <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleSettingsLayout</span><span class="o">.</span><span class="n">itemAt</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">widget</span><span class="p">())</span> <span class="o">==</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QGroupBox</span><span class="p">:</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleSettingsLayout</span><span class="o">.</span><span class="n">itemAt</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">widget</span><span class="p">()</span><span class="o">.</span><span class="n">title</span><span class="p">()</span> <span class="o">==</span> <span class="n">modName</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleSettingsLayout</span><span class="o">.</span><span class="n">itemAt</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">widget</span><span class="p">()</span><span class="o">.</span><span class="n">setParent</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+
+ <span class="c1"># relaunch the skeleton settings UI with new info</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">skeletonSettings_UI</span><span class="p">(</span><span class="n">modName</span><span class="p">)</span>
+
+ <span class="c1"># check for any attached modules</span>
+ <span class="n">attachedModules</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">checkForDependencies</span><span class="p">()</span>
+ <span class="n">elementList</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">attachedModules</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">attachedModules</span><span class="p">:</span>
+ <span class="n">elementList</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot; -&gt; parent changed from: &quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot; to: &quot;</span><span class="p">,</span> <span class="s2">&quot;root</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="s2">&quot;root_mover&quot;</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">,</span> <span class="s2">&quot;root&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">each</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">currentParent</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">&quot;root&quot;</span><span class="p">)</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="s2">&quot;root_mover&quot;</span>
+
+ <span class="c1"># create the connection geo between the two</span>
+ <span class="n">childMover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findOffsetMoverFromName</span><span class="p">(</span><span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createBoneConnection</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">childMover</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="n">each</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">applyModuleChanges</span><span class="p">(</span><span class="n">each</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># remove the network node</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">networkNode</span><span class="p">)</span>
+
+ <span class="c1"># delete scriptJob</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">scriptJob</span><span class="p">(</span><span class="n">kill</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">scriptJob</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateBoneCount</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleInstances</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="c1"># warn user about changes</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">attachedModules</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">winParent</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">()</span>
+ <span class="n">win</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">DialogMessage</span><span class="p">(</span><span class="s2">&quot;Attention!&quot;</span><span class="p">,</span>
+ <span class="s2">&quot;The following modules have had their parent changed</span><span class="se">\</span>
+<span class="s2"> due to the change in this module&#39;s structure:&quot;</span><span class="p">,</span>
+ <span class="n">elementList</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">winParent</span><span class="p">)</span>
+ <span class="n">win</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.checkForDependencies"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.checkForDependencies">[docs]</a> <span class="k">def</span> <span class="nf">checkForDependencies</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method will check modules for any attached modules or children modules.</span>
+
+<span class="sd"> This method is generally called when deleting a module or when changing a module name</span>
+<span class="sd"> so that any connected modules are updated accordingly.</span>
+
+<span class="sd"> :return: attached modules</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># This method will check our module for any attached modules</span>
+ <span class="n">modules</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getAllModules</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="n">attachedMods</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">instances</span> <span class="o">=</span> <span class="p">{}</span>
+
+ <span class="k">for</span> <span class="n">inst</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleInstances</span><span class="p">:</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="n">inst</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">instances</span><span class="p">[</span><span class="n">networkNode</span><span class="p">]</span> <span class="o">=</span> <span class="n">inst</span>
+
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">parentJoint</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">)</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">parentJoint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+ <span class="n">instance</span> <span class="o">=</span> <span class="n">instances</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
+ <span class="n">attachedMods</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">module</span><span class="p">,</span> <span class="n">parentJoint</span><span class="p">,</span> <span class="n">moduleName</span><span class="p">,</span> <span class="n">instance</span><span class="p">])</span>
+
+ <span class="k">return</span> <span class="n">attachedMods</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createMirrorOfModule_UI"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createMirrorOfModule_UI">[docs]</a> <span class="k">def</span> <span class="nf">createMirrorOfModule_UI</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method builds the interface for creating a mirror of a module.</span>
+
+<span class="sd"> .. image:: /images/mirrorModule.png</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># copy the settings of the module</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">copySettings</span><span class="p">()</span>
+
+ <span class="c1"># get basename and classname</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+ <span class="n">className</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+
+ <span class="c1"># launch a UI to get the name information</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMainWindow</span><span class="p">()</span>
+
+ <span class="c1"># load stylesheet</span>
+ <span class="n">styleSheetFile</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnNicePath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span><span class="p">,</span> <span class="s2">&quot;Core/Scripts/Interfaces/StyleSheets/mainScheme.qss&quot;</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">styleSheetFile</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span>
+ <span class="n">style</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="n">style</span><span class="p">)</span>
+
+ <span class="c1"># size policies</span>
+ <span class="n">mainSizePolicy</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="p">(</span><span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">)</span>
+
+ <span class="c1"># create the main widget</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mainWidget</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QWidget</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setCentralWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mainWidget</span><span class="p">)</span>
+
+ <span class="c1"># set qt object name</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;ART_createMirrorModuleUI&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setWindowTitle</span><span class="p">(</span><span class="s2">&quot;Create Mirror Module&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create the mainLayout for the rig creator UI</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mainLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QVBoxLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mainWidget</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mainLayout</span><span class="o">.</span><span class="n">setContentsMargins</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="mi">150</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">mainSizePolicy</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="mi">150</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="mi">150</span><span class="p">))</span>
+
+ <span class="c1"># create the background image</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFrame</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mainLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
+
+ <span class="c1"># create the layout for the widgets</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QVBoxLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
+
+ <span class="c1"># create the prefix pair of fields</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefixForm</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefixForm</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefixLabel</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="s2">&quot;Prefix: &quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefixForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">LabelRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefixLabel</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLineEdit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefixForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">FieldRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">)</span>
+
+ <span class="c1"># hookup signal/slot connection</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="o">.</span><span class="n">textChanged</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">updatePreview</span><span class="p">,</span> <span class="n">baseName</span><span class="p">))</span>
+
+ <span class="c1"># create the suffix pair of fields</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffixForm</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">suffixForm</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffixLabel</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="s2">&quot;Suffix: &quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffixForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">LabelRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">suffixLabel</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffix</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLineEdit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffixForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">FieldRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">suffix</span><span class="p">)</span>
+
+ <span class="c1"># hookup signal/slot connection</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">textChanged</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">updatePreview</span><span class="p">,</span> <span class="n">baseName</span><span class="p">))</span>
+
+ <span class="c1"># spacer</span>
+ <span class="n">spacerItem</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSpacerItem</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Minimum</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Expanding</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addItem</span><span class="p">(</span><span class="n">spacerItem</span><span class="p">)</span>
+
+ <span class="c1"># realtime preview of final module name</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewForm</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">previewForm</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewLabel</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="s2">&quot;Preview: &quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">setAlignment</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">AlignHCenter</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">LabelRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">previewLabel</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewForm</span><span class="o">.</span><span class="n">setWidget</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFormLayout</span><span class="o">.</span><span class="n">FieldRole</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="p">)</span>
+
+ <span class="c1"># set preview font</span>
+ <span class="n">font</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QFont</span><span class="p">()</span>
+ <span class="n">font</span><span class="o">.</span><span class="n">setPointSize</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">font</span><span class="p">)</span>
+
+ <span class="n">spacerItem1</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSpacerItem</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">40</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Minimum</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Expanding</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addItem</span><span class="p">(</span><span class="n">spacerItem1</span><span class="p">)</span>
+
+ <span class="c1"># create button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="s2">&quot;CREATE&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;blueButton&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">widgetLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">285</span><span class="p">,</span> <span class="mi">40</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">QSize</span><span class="p">(</span><span class="mi">285</span><span class="p">,</span> <span class="mi">40</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">setSizePolicy</span><span class="p">(</span><span class="n">mainSizePolicy</span><span class="p">)</span>
+ <span class="n">font</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QFont</span><span class="p">()</span>
+ <span class="n">font</span><span class="o">.</span><span class="n">setPointSize</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">font</span><span class="p">)</span>
+
+ <span class="c1"># hookup signal/slot on create button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createButton</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">createMirrorModule</span><span class="p">)</span>
+
+ <span class="c1"># show the window</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorWindow</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.updatePreview"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.updatePreview">[docs]</a> <span class="k">def</span> <span class="nf">updatePreview</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baseName</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This simple method updates the module preview field(QLineEdit) with the entered prefix and suffix.</span>
+
+<span class="sd"> :param baseName: base name of the module (example: arm)</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">prefix</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="o">.</span><span class="n">text</span><span class="p">())</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">text</span><span class="p">())</span>
+
+ <span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">string</span> <span class="o">+=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span>
+
+ <span class="n">string</span> <span class="o">+=</span> <span class="n">baseName</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">string</span> <span class="o">+=</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">suffix</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createMirrorModule"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createMirrorModule">[docs]</a> <span class="k">def</span> <span class="nf">createMirrorModule</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method creates the mirror of a module and is called from createMirrorOfModule_UI.</span>
+
+<span class="sd"> To create the mirror of a module, after a few checks are done, a module of the same type is created first.</span>
+<span class="sd"> If that module type has a left/right version of a joint mover file, the opposite version is brought in.</span>
+<span class="sd"> All the normal steps of module creation are then gone through and lastly, mirrorTransformations is called.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">userSpecName</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">previewName</span><span class="o">.</span><span class="n">text</span><span class="p">())</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">)</span>
+ <span class="n">className</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+
+ <span class="c1"># check to see if a module already has that name</span>
+ <span class="n">modules</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnRigModules</span><span class="p">()</span>
+ <span class="n">mirrorModule</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="kc">None</span>
+
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="n">userSpecName</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">confirmDialog</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">&quot;Name Exists&quot;</span><span class="p">,</span>
+ <span class="n">message</span><span class="o">=</span><span class="s2">&quot;A module with that name already exists. Please enter a unique name </span><span class="se">\</span>
+<span class="s2"> for the module&quot;</span><span class="p">,</span>
+ <span class="n">icon</span><span class="o">=</span><span class="s2">&quot;critical&quot;</span><span class="p">)</span>
+ <span class="k">return</span>
+
+ <span class="c1"># now check the modules that contain the parent bone</span>
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">bones</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">)</span>
+ <span class="n">splitJoints</span> <span class="o">=</span> <span class="n">bones</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;::&quot;</span><span class="p">)</span>
+ <span class="n">createdJoints</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># create a list of the created bones</span>
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">splitJoints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">bone</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">createdJoints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span>
+
+ <span class="c1"># see if the parent bone is in that list</span>
+ <span class="k">if</span> <span class="n">parent</span> <span class="ow">in</span> <span class="n">createdJoints</span><span class="p">:</span>
+ <span class="n">mirrorModule</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+
+ <span class="c1"># if our parent bone&#39;s module, has a mirror module, we need to create this new mirror module under that</span>
+ <span class="c1"># parent instead (if parent = l_thigh, mirror parent should be r_thigh)</span>
+ <span class="k">if</span> <span class="n">mirrorModule</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">modName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">modName</span> <span class="o">==</span> <span class="n">mirrorModule</span><span class="p">:</span>
+
+ <span class="c1"># find the parent&#39;s mover (if parent is l_thigh, mover would be l_leg_thigh_mover)</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnRigModules</span><span class="p">()</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findMoverNodeFromJointName</span><span class="p">(</span><span class="n">networkNodes</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># find mirror mover</span>
+ <span class="n">mirrorMover</span> <span class="o">=</span> <span class="n">mover</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">moduleName</span><span class="p">,</span> <span class="n">mirrorModule</span><span class="p">)</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+ <span class="n">boneList</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">)</span>
+
+ <span class="c1"># now, we need to find the joint from the mirror mover, and once there is a match, the parent\</span>
+ <span class="c1"># var now becomes that joint</span>
+ <span class="k">if</span> <span class="n">mirrorMover</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">mirrorMover</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">jointName</span> <span class="ow">in</span> <span class="n">boneList</span><span class="p">:</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">jointName</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c1"># if removing _mover didn&#39;t yield a matching joint name, take out the baseName from\</span>
+ <span class="c1"># the mover name, and then remove the _mover</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">jointName</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">baseName</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">jointName</span> <span class="ow">in</span> <span class="n">boneList</span><span class="p">:</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">jointName</span>
+
+ <span class="c1"># arms and leg exception</span>
+ <span class="n">mirrorSide</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">specialCaseModules</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;ART_Leg_Standard&quot;</span><span class="p">,</span> <span class="s2">&quot;ART_Arm_Standard&quot;</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">className</span> <span class="ow">in</span> <span class="n">specialCaseModules</span><span class="p">:</span>
+ <span class="n">side</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.side&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;Left&quot;</span><span class="p">:</span>
+ <span class="n">mirrorSide</span> <span class="o">=</span> <span class="s2">&quot;Right&quot;</span>
+ <span class="k">if</span> <span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;Right&quot;</span><span class="p">:</span>
+ <span class="n">mirrorSide</span> <span class="o">=</span> <span class="s2">&quot;Left&quot;</span>
+
+ <span class="c1"># create an instance of the module</span>
+ <span class="n">mod</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="s2">&quot;RigModules.&quot;</span> <span class="o">+</span> <span class="n">className</span><span class="p">,</span> <span class="p">{},</span> <span class="p">{},</span> <span class="p">[</span><span class="n">className</span><span class="p">])</span>
+
+ <span class="c1"># get the class name from that module file (returns Modules.ART_Root.ART_Root for example)</span>
+ <span class="n">moduleClass</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">mod</span><span class="o">.</span><span class="n">className</span><span class="p">)</span>
+ <span class="n">jmPath</span> <span class="o">=</span> <span class="n">mod</span><span class="o">.</span><span class="n">jointMover</span>
+
+ <span class="c1"># call functions to create network node, skeleton settings UI</span>
+ <span class="n">moduleInst</span> <span class="o">=</span> <span class="n">moduleClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="p">,</span> <span class="n">userSpecName</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleInstances</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">moduleInst</span><span class="p">)</span>
+ <span class="n">networkNodeInst</span> <span class="o">=</span> <span class="n">moduleInst</span><span class="o">.</span><span class="n">buildNetwork</span><span class="p">()</span>
+
+ <span class="c1"># if mirrorSide exists</span>
+ <span class="k">if</span> <span class="n">mirrorSide</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">jmPath</span> <span class="o">=</span> <span class="n">jmPath</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;.ma&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">mirrorSide</span> <span class="o">+</span> <span class="s2">&quot;.ma&quot;</span>
+ <span class="k">if</span> <span class="n">mirrorSide</span> <span class="o">==</span> <span class="s2">&quot;Left&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.side&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.side&quot;</span><span class="p">,</span> <span class="s2">&quot;Left&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">mirrorSide</span> <span class="o">==</span> <span class="s2">&quot;Right&quot;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.side&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.side&quot;</span><span class="p">,</span> <span class="s2">&quot;Right&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># build the settings UI/joint mover/add to outliner</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">skeletonSettings_UI</span><span class="p">(</span><span class="n">userSpecName</span><span class="p">)</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">jointMover_Build</span><span class="p">(</span><span class="n">jmPath</span><span class="p">)</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">addJointMoverToOutliner</span><span class="p">()</span>
+
+ <span class="c1"># update the created joints attribute on the network node with the new names</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="o">.</span><span class="n">text</span><span class="p">())</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">suffix</span><span class="o">.</span><span class="n">text</span><span class="p">())</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">prefix</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">suffix</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">suffix</span>
+
+ <span class="n">createdBones</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">)</span>
+ <span class="n">createdBones</span> <span class="o">=</span> <span class="n">createdBones</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;::&quot;</span><span class="p">)</span>
+
+ <span class="n">attrString</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">createdBones</span><span class="p">:</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">attrString</span> <span class="o">+=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">bone</span> <span class="o">+</span> <span class="n">suffix</span> <span class="o">+</span> <span class="s2">&quot;::&quot;</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">,</span> <span class="n">attrString</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># update the self.currentParent label and the parentModuleBone attr on the network node</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">currentParent</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># find the current parent mover and its scale</span>
+ <span class="k">if</span> <span class="n">parent</span> <span class="o">==</span> <span class="s2">&quot;root&quot;</span><span class="p">:</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="s2">&quot;root_mover&quot;</span>
+ <span class="n">offsetMover</span> <span class="o">=</span> <span class="s2">&quot;root_mover&quot;</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c1"># find the parent mover name to parent to</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnRigModules</span><span class="p">()</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findMoverNodeFromJointName</span><span class="p">(</span><span class="n">networkNodes</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+ <span class="n">offsetMover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findMoverNodeFromJointName</span><span class="p">(</span><span class="n">networkNodes</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">mover</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">userSpecName</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">mo</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">scaleConstraint</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">userSpecName</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create the connection geo between the two</span>
+ <span class="n">childMover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findOffsetMoverFromName</span><span class="p">(</span><span class="n">userSpecName</span><span class="p">)</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createBoneConnection</span><span class="p">(</span><span class="n">offsetMover</span><span class="p">,</span> <span class="n">childMover</span><span class="p">,</span> <span class="n">userSpecName</span><span class="p">)</span>
+
+ <span class="n">globalMover</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">findGlobalMoverFromName</span><span class="p">(</span><span class="n">userSpecName</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">globalMover</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setToolTo</span><span class="p">(</span><span class="s2">&quot;moveSuperContext&quot;</span><span class="p">)</span>
+
+ <span class="n">utils</span><span class="o">.</span><span class="n">fitViewAndShade</span><span class="p">()</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">refresh</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">pasteSettings</span><span class="p">()</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">aimMode</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># delete UI</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteUI</span><span class="p">(</span><span class="s2">&quot;ART_createMirrorModuleUI&quot;</span><span class="p">,</span> <span class="n">wnd</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># update the mirrorModule setting</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorMod</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="n">userSpecName</span><span class="p">)</span>
+ <span class="n">name</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="n">moduleInst</span><span class="o">.</span><span class="n">mirrorMod</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="n">userSpecName</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNodeInst</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># mirror transformations</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorTransformations</span><span class="p">()</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">populateNetworkList</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.mirrorTransformations_RigPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.mirrorTransformations_RigPose">[docs]</a> <span class="k">def</span> <span class="nf">mirrorTransformations_RigPose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is used when creating rig poses for modules. If a module has a mirror, this method will mirror the</span>
+<span class="sd"> rig pose transformations to that mirror module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># reset mirror module&#39;s rig pose</span>
+ <span class="n">mirrorModInst</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnMirrorModuleInst</span>
+
+ <span class="c1"># ensure the mirrorModInst has a UI and is setup for rig pose creation</span>
+ <span class="n">mirrorModInst</span><span class="o">.</span><span class="n">setupForRigPose</span><span class="p">()</span>
+ <span class="c1"># if not cmds.objExists(mirrorModInst.name + &quot;_rigPose&quot;):</span>
+ <span class="c1"># mirrorModInst.getReferencePose(&quot;rigPose&quot;)</span>
+
+ <span class="c1"># call on base mirror transformations method</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorTransformations</span><span class="p">()</span>
+ <span class="n">mirrorModInst</span><span class="o">.</span><span class="n">getReferencePose</span><span class="p">(</span><span class="s2">&quot;rigPose&quot;</span><span class="p">)</span>
+
+ <span class="c1"># update the rig pose of the mirrorModInst</span>
+ <span class="n">mirrorModInst</span><span class="o">.</span><span class="n">updateRigPose</span><span class="p">(</span><span class="n">mirrorModInst</span><span class="o">.</span><span class="n">overallSlider</span><span class="p">)</span>
+ <span class="n">mirrorModInst</span><span class="o">.</span><span class="n">cleanUpRigPose</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.mirrorTransformations"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.mirrorTransformations">[docs]</a> <span class="k">def</span> <span class="nf">mirrorTransformations</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method mirrors transformations for the module&#39;s mirror module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">currentSelection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># get the mirror module</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">mirrorModule</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.parentModuleBone&quot;</span><span class="p">)</span>
+
+ <span class="c1"># get mirror module instance and information</span>
+ <span class="n">mirrorInst</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnMirrorModuleInst</span>
+
+ <span class="c1"># turn off aim mode</span>
+ <span class="n">mirrorInst</span><span class="o">.</span><span class="n">aimMode_Setup</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># turn off coplanar mode IF it exists on the module</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">state</span> <span class="o">=</span> <span class="n">mirrorInst</span><span class="o">.</span><span class="n">coplanarBtn</span><span class="o">.</span><span class="n">isChecked</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">state</span><span class="p">:</span>
+ <span class="n">mirrorInst</span><span class="o">.</span><span class="n">coplanarBtn</span><span class="o">.</span><span class="n">setChecked</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">mirrorInst</span><span class="o">.</span><span class="n">coplanarMode</span><span class="p">()</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="n">moverTypes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+ <span class="k">for</span> <span class="n">moverType</span> <span class="ow">in</span> <span class="n">moverTypes</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">jointMover</span> <span class="ow">in</span> <span class="n">moverType</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">jointMover</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">jointMover</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">)</span>
+
+ <span class="n">mirrorMover</span> <span class="o">=</span> <span class="n">jointMover</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">moduleName</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">mirrorMover</span> <span class="o">=</span> <span class="n">mirrorModule</span> <span class="o">+</span> <span class="n">mirrorMover</span>
+ <span class="n">mirrorAttrs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;translateX&quot;</span><span class="p">,</span> <span class="s2">&quot;translateY&quot;</span><span class="p">,</span> <span class="s2">&quot;translateZ&quot;</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">mirrorAttrs</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mirrorMover</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mirrorMover</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">currentSelection</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">currentSelection</span><span class="p">)</span>
+
+ <span class="c1"># turn aim mode on</span>
+ <span class="n">mirrorInst</span><span class="o">.</span><span class="n">aimMode_Setup</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># extend functionality</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">mirrorTransformations_Custom</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.rigPose_UI"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.rigPose_UI">[docs]</a> <span class="k">def</span> <span class="nf">rigPose_UI</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parentWidget</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method creates the UI widget that gets parented into the publish UI that handles rig pose creation.</span>
+
+<span class="sd"> A slider gets created for the overall module that goes from current pose to ideal rig pose. Then a slider</span>
+<span class="sd"> gets created for each joint in the module to allow for finer control over the rig pose creation.</span>
+
+<span class="sd"> :param parentWidget: the widget the rig pose UI (QFrame) will get parented to</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># Add a QFrame for the widget</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFrame</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">WA_DeleteOnClose</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="o">.</span><span class="n">setMinimumWidth</span><span class="p">(</span><span class="mi">310</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="o">.</span><span class="n">setMaximumWidth</span><span class="p">(</span><span class="mi">310</span><span class="p">)</span>
+
+ <span class="c1"># load stylesheet</span>
+ <span class="n">styleSheetFile</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnNicePath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span><span class="p">,</span> <span class="s2">&quot;Core/Scripts/Interfaces/StyleSheets/mainScheme.qss&quot;</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">styleSheetFile</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="c1"># add the rig pose frame to the stackWidget</span>
+ <span class="n">parentWidget</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="p">)</span>
+ <span class="n">numWidgetsInStack</span> <span class="o">=</span> <span class="n">parentWidget</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+ <span class="n">parentWidget</span><span class="o">.</span><span class="n">setCurrentIndex</span><span class="p">(</span><span class="n">numWidgetsInStack</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="c1"># frame styling</span>
+ <span class="n">backgroundImg</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/field_background.png&quot;</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">&quot;background-image: url(&quot;</span> <span class="o">+</span> <span class="n">backgroundImg</span> <span class="o">+</span> <span class="s2">&quot;);&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create an overall layout</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QVBoxLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPoseFrame</span><span class="p">)</span>
+ <span class="n">label</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">label</span><span class="p">)</span>
+
+ <span class="c1"># create a slider for the overall module rig pose</span>
+ <span class="n">hboxLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QHBoxLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="n">hboxLayout</span><span class="p">)</span>
+
+ <span class="n">image1</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFrame</span><span class="p">()</span>
+ <span class="n">image1</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+ <span class="n">image1</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+ <span class="n">modelPoseImg</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/modelPose.png&quot;</span><span class="p">))</span>
+ <span class="n">image1</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">&quot;background-image: url(&quot;</span> <span class="o">+</span> <span class="n">modelPoseImg</span> <span class="o">+</span> <span class="s2">&quot;);&quot;</span><span class="p">)</span>
+ <span class="n">hboxLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">image1</span><span class="p">)</span>
+ <span class="n">image1</span><span class="o">.</span><span class="n">setToolTip</span><span class="p">(</span><span class="s2">&quot;Model Pose&quot;</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSlider</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="n">hboxLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setOrientation</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">Horizontal</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setRange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setSingleStep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setTracking</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="n">image2</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QFrame</span><span class="p">()</span>
+ <span class="n">image2</span><span class="o">.</span><span class="n">setMinimumSize</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+ <span class="n">image2</span><span class="o">.</span><span class="n">setMaximumSize</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+ <span class="n">rigPoseImg</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iconsPath</span><span class="p">,</span> <span class="s2">&quot;System/rigPose.png&quot;</span><span class="p">))</span>
+ <span class="n">image2</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="s2">&quot;background-image: url(&quot;</span> <span class="o">+</span> <span class="n">rigPoseImg</span> <span class="o">+</span> <span class="s2">&quot;);&quot;</span><span class="p">)</span>
+ <span class="n">hboxLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">image2</span><span class="p">)</span>
+ <span class="n">image2</span><span class="o">.</span><span class="n">setToolTip</span><span class="p">(</span><span class="s2">&quot;Rig Pose&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create hboxlayout for resetAll and update Rig Pose buttons</span>
+ <span class="n">buttonLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QHBoxLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="n">buttonLayout</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="s2">&quot;Reset Rig Pose&quot;</span><span class="p">)</span>
+ <span class="n">buttonLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resetRigPose</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span><span class="o">.</span><span class="n">setToolTip</span><span class="p">(</span><span class="s2">&quot;Reset the module to it&#39;s initial ideal rig pose.&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;blueButton&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseResetAllBtn</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">style</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="s2">&quot;Update Rig Pose&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">style</span><span class="p">)</span>
+ <span class="n">buttonLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">updateRigPose</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span><span class="o">.</span><span class="n">setToolTip</span><span class="p">(</span>
+ <span class="s2">&quot;Update the rig pose if you&#39;ve done any custom manipulations to the controls.&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseUpdateAllBtn</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;blueButton&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create a frame for the advanced controls</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPose_advancedGroup</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QGroupBox</span><span class="p">(</span><span class="s2">&quot;Advanced&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPose_advancedGroup</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPose_advancedLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QVBoxLayout</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPose_advancedGroup</span><span class="p">)</span>
+
+ <span class="c1"># create a slider for each created joint</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createRigPoseSliderForJoint</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createRigPoseSliderForJoint</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+
+ <span class="c1"># create mirror button if applicable</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">mirrorMod</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">mirrorMod</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseMirrorBtn</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="s2">&quot;Mirror to: &quot;</span> <span class="o">+</span> <span class="n">mirrorMod</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigPoseMirrorBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseMirrorBtn</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mirrorTransformations_RigPose</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseMirrorBtn</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;blueButton&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseMirrorBtn</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">style</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPoseLayout</span><span class="o">.</span><span class="n">addSpacerItem</span><span class="p">(</span>
+ <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSpacerItem</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Fixed</span><span class="p">,</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSizePolicy</span><span class="o">.</span><span class="n">Expanding</span><span class="p">))</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.buildRig"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.buildRig">[docs]</a> <span class="k">def</span> <span class="nf">buildRig</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">textEdit</span><span class="p">,</span> <span class="n">uiInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method starts building the rig for a module. It will then call on buildRigCustom, which is implemented</span>
+<span class="sd"> in each derived module class as an override function.</span>
+
+<span class="sd"> :param textEdit: The text edit in the buildProgressUI that we output information to.</span>
+<span class="sd"> :param uiInst: passed in instance of the buildProgressUI</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get current nodes in scene</span>
+ <span class="n">currentNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="n">long</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">successfulBuild</span> <span class="o">=</span> <span class="kc">True</span>
+ <span class="n">errorMessage</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+
+ <span class="c1"># run the instance build function</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">buildRigCustom</span><span class="p">(</span><span class="n">textEdit</span><span class="p">,</span> <span class="n">uiInst</span><span class="p">)</span>
+
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="n">successfulBuild</span> <span class="o">=</span> <span class="kc">False</span>
+ <span class="n">errorMessage</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">())</span>
+
+ <span class="c1"># get all nodes in scene and compare to original list</span>
+ <span class="n">allNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="n">long</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">newNodes</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">allNodes</span><span class="p">)</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">currentNodes</span><span class="p">))</span>
+
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">newNodes</span><span class="p">:</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.sourceModule&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">ln</span><span class="o">=</span><span class="s2">&quot;sourceModule&quot;</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">)</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.sourceModule&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="n">node</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">successfulBuild</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="s2">&quot;Build Rig Failed: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+ <span class="nb">print</span> <span class="n">errorMessage</span></div>
+ <span class="c1"># self.deleteRig()</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.buildRigCustom"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.buildRigCustom">[docs]</a> <span class="k">def</span> <span class="nf">buildRigCustom</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">textEdit</span><span class="p">,</span> <span class="n">uiInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is what truly builds the rig for each module. It is implemented in the derived module class.</span>
+
+<span class="sd"> :param textEdit: The text edit in the buildProgressUI that we output information to.</span>
+<span class="sd"> :param uiInst: passed in instance of the buildProgressUI</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.deleteRig"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.deleteRig">[docs]</a> <span class="k">def</span> <span class="nf">deleteRig</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method deletes all rigging for the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">allNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">allNodes</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.sourceModule&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">source</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.sourceModule&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">source</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.mirrorTransformations_Custom"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.mirrorTransformations_Custom">[docs]</a> <span class="k">def</span> <span class="nf">mirrorTransformations_Custom</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.updateSettingsUI"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.updateSettingsUI">[docs]</a> <span class="k">def</span> <span class="nf">updateSettingsUI</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.applyModuleChanges"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.applyModuleChanges">[docs]</a> <span class="k">def</span> <span class="nf">applyModuleChanges</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">moduleInst</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.addJointMoverToOutliner"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.addJointMoverToOutliner">[docs]</a> <span class="k">def</span> <span class="nf">addJointMoverToOutliner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.updateOutliner"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.updateOutliner">[docs]</a> <span class="k">def</span> <span class="nf">updateOutliner</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.skinProxyGeo"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.skinProxyGeo">[docs]</a> <span class="k">def</span> <span class="nf">skinProxyGeo</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.aimMode"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.aimMode">[docs]</a> <span class="k">def</span> <span class="nf">aimMode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method toggles the aim mode state if the module can have aim mode.</span>
+
+<span class="sd"> It then calls on each derived module&#39;s aimMode_Setup which defines how to setup aim mode for the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.aimMode&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.aimMode&quot;</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">aimMode_Setup</span><span class="p">(</span><span class="n">state</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.aimMode_Setup"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.aimMode_Setup">[docs]</a> <span class="k">def</span> <span class="nf">aimMode_Setup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setupModelPoseForRig"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setupModelPoseForRig">[docs]</a> <span class="k">def</span> <span class="nf">setupModelPoseForRig</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.matchModelPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.matchModelPose">[docs]</a> <span class="k">def</span> <span class="nf">matchModelPose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.pinModule"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.pinModule">[docs]</a> <span class="k">def</span> <span class="nf">pinModule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.bakeOffsets"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.bakeOffsets">[docs]</a> <span class="k">def</span> <span class="nf">bakeOffsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method bakes any transforms on the offset movers up to the global movers, and then zeroes out the offset</span>
+<span class="sd"> movers.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get movers</span>
+ <span class="n">jointMovers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+
+ <span class="c1"># separate mover lists</span>
+ <span class="n">globalMovers</span> <span class="o">=</span> <span class="n">jointMovers</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">offsetMovers</span> <span class="o">=</span> <span class="n">jointMovers</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">locators</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># create locators for the offsetMovers, then zero out offset mover</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">offsetMovers</span><span class="p">:</span>
+ <span class="n">locatorName</span> <span class="o">=</span> <span class="n">mover</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_offset&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_loc&quot;</span>
+ <span class="n">loc</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">spaceLocator</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">locatorName</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="c1"># constrain locator</span>
+ <span class="n">constraint</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">loc</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+
+ <span class="c1"># parent locator under a copy of the locatorName</span>
+ <span class="n">parentLoc</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">duplicate</span><span class="p">(</span><span class="n">loc</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">parentLoc</span><span class="p">)</span>
+ <span class="n">locators</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parentLoc</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">offsetMovers</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;.tx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ty&quot;</span><span class="p">,</span> <span class="s2">&quot;.tz&quot;</span><span class="p">,</span> <span class="s2">&quot;.rx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ry&quot;</span><span class="p">,</span> <span class="s2">&quot;.rz&quot;</span><span class="p">]:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># snap global movers to locators</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">globalMovers</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;_loc&quot;</span><span class="p">):</span>
+ <span class="n">constraint</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;_loc&quot;</span><span class="p">,</span> <span class="n">mover</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+
+ <span class="c1"># remove locs</span>
+ <span class="k">for</span> <span class="n">const</span> <span class="ow">in</span> <span class="n">constraints</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">const</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">loc</span> <span class="ow">in</span> <span class="n">locators</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">loc</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setupForRigPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setupForRigPose">[docs]</a> <span class="k">def</span> <span class="nf">setupForRigPose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method unhides the movers and constrains the joints to the movers for creating the rig pose.</span>
+
+<span class="sd"> If the user wants to create a custom rig pose (instead of using the sliders), this method sets the module</span>
+<span class="sd"> up for that functionality.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># unlock joint movers</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;JointMover&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">jmNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">jmNodes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># find the mover shapes and set their visibility</span>
+ <span class="n">movers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+ <span class="n">globalMovers</span> <span class="o">=</span> <span class="n">movers</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">shapes</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">movers</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">each</span><span class="p">:</span>
+ <span class="n">child</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">shapes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">child</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">shapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;|&quot;</span> <span class="o">+</span> <span class="n">child</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+
+ <span class="k">for</span> <span class="n">shape</span> <span class="ow">in</span> <span class="n">shapes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># show global movers</span>
+ <span class="n">shapes</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">globalMovers</span><span class="p">:</span>
+ <span class="n">child</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">shapes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">child</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">shapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;|&quot;</span> <span class="o">+</span> <span class="n">child</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+
+ <span class="k">for</span> <span class="n">shape</span> <span class="ow">in</span> <span class="n">shapes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># unlock mover group for this module and make visible</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp.v&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="c1"># hide the proxy geo</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">allNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">allNodes</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_proxy_geo&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">nodeType</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;mesh&quot;</span><span class="p">:</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">parent</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">parent</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># get the joints created by this module</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="c1"># create mover name</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">joint</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">joint</span><span class="p">)</span>
+
+ <span class="c1"># lock joint movers</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;JointMover&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">jmNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">jmNodes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setSkeletonPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setSkeletonPose">[docs]</a> <span class="k">def</span> <span class="nf">setSkeletonPose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">poseType</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method constrains the joints to the movers and then stores that pose data for those joints.</span>
+
+<span class="sd"> This could be the model pose or the rig pose.</span>
+
+<span class="sd"> :param poseType: whether to set the model pose or rig pose for the joints.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+ <span class="c1"># get the joints created by this module</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="c1"># create mover name</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">joint</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">,</span> <span class="n">joint</span><span class="p">)</span>
+
+ <span class="c1"># set pose</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">setReferencePose</span><span class="p">(</span><span class="n">poseType</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.removeSkeletalConstraints"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.removeSkeletalConstraints">[docs]</a> <span class="k">def</span> <span class="nf">removeSkeletalConstraints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method removes any constraints on the joints. This tends to get called by removing rigging.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the joints created by this module and remove the constraints</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="c1"># create mover name</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.cleanUpRigPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.cleanUpRigPose">[docs]</a> <span class="k">def</span> <span class="nf">cleanUpRigPose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method hides the joint movers and unconstrains the joints from the movers after setting a rig pose.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># show the proxy geo</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">allNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">allNodes</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_proxy_geo&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">nodeType</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;mesh&quot;</span><span class="p">:</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">parent</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">parent</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># unlock mover group for this module and make invisible</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp.v&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">lockNode</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># get the joints created by this module and remove the constraints</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="c1"># create mover name</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">joints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointBaseName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">joint</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.updateRigPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.updateRigPose">[docs]</a> <span class="k">def</span> <span class="nf">updateRigPose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slider</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method updates what the stored rig pose is for a module. The default rig pose tends to be zeroed out</span>
+<span class="sd"> rotations, but this function can essentially update what the max value on the rig pose slider sets the pose to.</span>
+
+<span class="sd"> :param slider: The rig pose slider where the min is the current model pose and the max is the rig pose.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># get pose data off networkNode</span>
+ <span class="n">originalData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.rigPose&quot;</span><span class="p">))</span>
+ <span class="n">newPose</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">originalData</span><span class="p">:</span>
+ <span class="n">moverData</span> <span class="o">=</span> <span class="p">{}</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mover&quot;</span><span class="p">)</span>
+ <span class="n">moverData</span><span class="p">[</span><span class="s2">&quot;mover&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">mover</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mover</span><span class="p">):</span>
+ <span class="n">translate</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translate&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">rotate</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotate&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="n">moverData</span><span class="p">[</span><span class="s2">&quot;translate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">translate</span>
+ <span class="n">moverData</span><span class="p">[</span><span class="s2">&quot;rotate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">rotate</span>
+ <span class="n">newPose</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">moverData</span><span class="p">)</span>
+
+ <span class="n">jsonString</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">newPose</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.rigPose&quot;</span><span class="p">,</span> <span class="n">jsonString</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.resetRigPose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.resetRigPose">[docs]</a> <span class="k">def</span> <span class="nf">resetRigPose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method resets the module rig pose to be the default (zeroed rotations).</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># remove the rigPose attribute on the networkNode</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">deleteAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">at</span><span class="o">=</span><span class="s2">&quot;rigPose&quot;</span><span class="p">)</span>
+
+ <span class="c1"># recreate rig pose node with defaults</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">getReferencePose</span><span class="p">(</span><span class="s2">&quot;rigPose&quot;</span><span class="p">)</span>
+
+ <span class="c1"># set slider</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.resetRigPose_Part"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.resetRigPose_Part">[docs]</a> <span class="k">def</span> <span class="nf">resetRigPose_Part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method resets the given joint (part) rig pose to be zeroed rotations. This is for the part slider on</span>
+<span class="sd"> the rig pose UI in the advanced section.</span>
+
+<span class="sd"> :param part: The given joint name slider.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the networkNode</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># get the poseData</span>
+ <span class="n">poseData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.rigPose&quot;</span><span class="p">))</span>
+
+ <span class="c1"># find our part in the pose data</span>
+ <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">poseData</span><span class="p">:</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mover&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">mover</span> <span class="o">==</span> <span class="n">part</span><span class="p">:</span>
+ <span class="n">rotate</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rotate&quot;</span><span class="p">)</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotate&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;double3&quot;</span><span class="p">)</span>
+ <span class="n">data</span><span class="p">[</span><span class="s2">&quot;rotate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.getReferencePose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.getReferencePose">[docs]</a> <span class="k">def</span> <span class="nf">getReferencePose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">poseType</span><span class="p">,</span> <span class="n">zeroPose</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method gets the model pose or the rig pose (depending on poseType) and stores that data for the movers.</span>
+
+<span class="sd"> :param poseType: Whether or not to get the model pose or rig pose.</span>
+<span class="sd"> :param zeroPose: Whether or not the default rig pose should be set to zeroed rotations.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get movers</span>
+ <span class="n">jointMovers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnJointMovers</span>
+
+ <span class="c1"># separate mover lists</span>
+ <span class="n">globalMovers</span> <span class="o">=</span> <span class="n">jointMovers</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">offsetMovers</span> <span class="o">=</span> <span class="n">jointMovers</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="c1"># get the network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># if rigPose already exists, then do not set values</span>
+ <span class="k">if</span> <span class="n">poseType</span> <span class="o">==</span> <span class="s2">&quot;rigPose&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">poseType</span><span class="p">):</span>
+ <span class="k">return</span>
+
+ <span class="c1"># create the pose data attr if needed</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">poseType</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">addAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">sn</span><span class="o">=</span><span class="n">poseType</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create reference pose data dict</span>
+ <span class="n">poseData</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># loop through each mover, getting the translate and rotate values, creating an attribute on the network node</span>
+ <span class="c1"># to store those values</span>
+ <span class="k">for</span> <span class="n">moverList</span> <span class="ow">in</span> <span class="p">[</span><span class="n">globalMovers</span><span class="p">,</span> <span class="n">offsetMovers</span><span class="p">]:</span>
+ <span class="k">for</span> <span class="n">mover</span> <span class="ow">in</span> <span class="n">moverList</span><span class="p">:</span>
+ <span class="n">moverData</span> <span class="o">=</span> <span class="p">{}</span>
+ <span class="n">moverData</span><span class="p">[</span><span class="s2">&quot;mover&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">mover</span>
+
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;translate&quot;</span><span class="p">,</span> <span class="s2">&quot;rotate&quot;</span><span class="p">]:</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">zeroPose</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">poseType</span> <span class="o">==</span> <span class="s2">&quot;rigPose&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="s2">&quot;rotate&quot;</span><span class="p">:</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
+
+ <span class="c1"># add the data to the list</span>
+ <span class="n">moverData</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
+
+ <span class="c1"># add mover data to the pose data list</span>
+ <span class="n">poseData</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">moverData</span><span class="p">)</span>
+
+ <span class="c1"># dump the pose data list onto the poseType attribute</span>
+ <span class="n">jsonString</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">poseData</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">poseType</span><span class="p">,</span> <span class="n">jsonString</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;string&quot;</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setReferencePose"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setReferencePose">[docs]</a> <span class="k">def</span> <span class="nf">setReferencePose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">poseType</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method gets the data for the given pose type (rig or model) and sets the movers with those values.</span>
+
+<span class="sd"> :param poseType: Whether to set the model pose or the rig pose on the movers.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># get the pose data from the attribute</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">poseType</span><span class="p">):</span>
+ <span class="n">poseData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">poseType</span><span class="p">))</span>
+
+ <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">poseData</span><span class="p">:</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mover&quot;</span><span class="p">)</span>
+ <span class="n">translate</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;translate&quot;</span><span class="p">)</span>
+ <span class="n">rotate</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rotate&quot;</span><span class="p">)</span>
+
+ <span class="c1"># if the mover exists, set the values</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mover</span><span class="p">):</span>
+
+ <span class="c1"># set translations</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">translate</span><span class="p">)):</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateX&quot;</span><span class="p">,</span> <span class="n">translate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateY&quot;</span><span class="p">,</span> <span class="n">translate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateZ&quot;</span><span class="p">,</span> <span class="n">translate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># set rotations</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rotate</span><span class="p">)):</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateX&quot;</span><span class="p">,</span> <span class="n">rotate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateY&quot;</span><span class="p">,</span> <span class="n">rotate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateZ&quot;</span><span class="p">,</span> <span class="n">rotate</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setReferencePoseSlider"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setReferencePoseSlider">[docs]</a> <span class="k">def</span> <span class="nf">setReferencePoseSlider</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method takes the slider value of a given part and then calls on setPosePercentage, which will then find</span>
+<span class="sd"> the values of the model pose and the rig pose and figure out based on the slider percentage what values to</span>
+<span class="sd"> set on the mover.</span>
+
+<span class="sd"> :param part: the joint mover which the slider is controlling.</span>
+<span class="sd"> :param args: the values from the slider</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">percent</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">*</span> <span class="o">.</span><span class="mi">01</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">setPosePercentage</span><span class="p">(</span><span class="n">percent</span><span class="p">,</span> <span class="n">part</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setPosePercentage"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setPosePercentage">[docs]</a> <span class="k">def</span> <span class="nf">setPosePercentage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">percent</span><span class="p">,</span> <span class="n">part</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method takes the percent from setReferencePoseSlider, gets the values of the model pose and rig pose</span>
+<span class="sd"> for the given part, then calls on setPosePercentage_Part to find and set the values on the mover that is</span>
+<span class="sd"> the percentage between model and rig pose.</span>
+
+<span class="sd"> Example: If the model pose is a value of 10 and the rig pose is a value of 0, and the slider is at .5, then</span>
+<span class="sd"> the value to set is 5. (But this is done and found per attribute)</span>
+
+<span class="sd"> :param percent: What percent of model and rig pose to set.</span>
+<span class="sd"> :param part: What joint mover to set the values on.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+
+ <span class="c1"># get reference pose attributes</span>
+ <span class="n">modelPoseData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.modelPose&quot;</span><span class="p">))</span>
+ <span class="n">rigPoseData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.rigPose&quot;</span><span class="p">))</span>
+
+ <span class="c1"># get the data for each mover</span>
+ <span class="k">for</span> <span class="n">poseData</span> <span class="ow">in</span> <span class="n">modelPoseData</span><span class="p">:</span>
+
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">poseData</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;mover&quot;</span><span class="p">)</span>
+ <span class="n">translate</span> <span class="o">=</span> <span class="n">poseData</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;translate&quot;</span><span class="p">)</span>
+ <span class="n">rotate</span> <span class="o">=</span> <span class="n">poseData</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rotate&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">part</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">part</span> <span class="o">==</span> <span class="n">mover</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">setPosePercentage_Part</span><span class="p">(</span><span class="n">percent</span><span class="p">,</span> <span class="n">mover</span><span class="p">,</span> <span class="n">modelPoseData</span><span class="p">,</span> <span class="n">rigPoseData</span><span class="p">,</span> <span class="n">poseData</span><span class="p">,</span> <span class="n">translate</span><span class="p">,</span> <span class="n">rotate</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">setPosePercentage_Part</span><span class="p">(</span><span class="n">percent</span><span class="p">,</span> <span class="n">mover</span><span class="p">,</span> <span class="n">modelPoseData</span><span class="p">,</span> <span class="n">rigPoseData</span><span class="p">,</span> <span class="n">poseData</span><span class="p">,</span> <span class="n">translate</span><span class="p">,</span> <span class="n">rotate</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.setPosePercentage_Part"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.setPosePercentage_Part">[docs]</a> <span class="k">def</span> <span class="nf">setPosePercentage_Part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">percent</span><span class="p">,</span> <span class="n">mover</span><span class="p">,</span> <span class="n">modelPoseData</span><span class="p">,</span> <span class="n">rigPoseData</span><span class="p">,</span> <span class="n">poseData</span><span class="p">,</span> <span class="n">translate</span><span class="p">,</span> <span class="n">rotate</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method takes the data from setPosePercentage and figures out what values to set on the given part (mover).</span>
+
+<span class="sd"> Example: If the model pose is a value of 10 and the rig pose is a value of 0, and the slider is at .5, then</span>
+<span class="sd"> the value to set is 5. (But this is done and found per attribute)</span>
+
+<span class="sd"> :param percent: the percent value of the slider. What percentage of the model and rig pose to use.</span>
+<span class="sd"> :param mover: the mover to set the values on.</span>
+<span class="sd"> :param modelPoseData: all of the data for the model pose for this mover.</span>
+<span class="sd"> :param rigPoseData: all of the data for the rig pose for this mover.</span>
+<span class="sd"> :param poseData: a list which includes the mover and its translate and rotate values.</span>
+<span class="sd"> :param translate: the translate values for the model pose</span>
+<span class="sd"> :param rotate: the rotate values for the model pose</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get the index of this entry in the rigPoseData list</span>
+ <span class="n">index</span> <span class="o">=</span> <span class="n">modelPoseData</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">poseData</span><span class="p">)</span>
+
+ <span class="c1"># get the corresponding rig pose data</span>
+ <span class="n">rigData</span> <span class="o">=</span> <span class="n">rigPoseData</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
+ <span class="n">rigTranslate</span> <span class="o">=</span> <span class="n">rigData</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;translate&quot;</span><span class="p">)</span>
+ <span class="n">rigRotate</span> <span class="o">=</span> <span class="n">rigData</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;rotate&quot;</span><span class="p">)</span>
+
+ <span class="c1"># find percentile between model and rig pose to set on each attribute</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">translate</span><span class="p">)):</span>
+ <span class="n">valueToSet</span> <span class="o">=</span> <span class="n">mathUtils</span><span class="o">.</span><span class="n">returnPercentile</span><span class="p">([</span><span class="n">translate</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">rigTranslate</span><span class="p">[</span><span class="n">i</span><span class="p">]],</span> <span class="n">percent</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateX&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateY&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.translateZ&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">rotate</span><span class="p">)):</span>
+ <span class="n">valueToSet</span> <span class="o">=</span> <span class="n">mathUtils</span><span class="o">.</span><span class="n">returnPercentile</span><span class="p">([</span><span class="n">rotate</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">rigRotate</span><span class="p">[</span><span class="n">i</span><span class="p">]],</span> <span class="n">percent</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateX&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateY&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">mover</span> <span class="o">+</span> <span class="s2">&quot;.rotateZ&quot;</span><span class="p">,</span> <span class="n">valueToSet</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.createRigPoseSliderForJoint"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.createRigPoseSliderForJoint">[docs]</a> <span class="k">def</span> <span class="nf">createRigPoseSliderForJoint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">joint</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method creates the rig pose slider widget for the given joint. (This shows up in the advanced section of</span>
+<span class="sd"> the rig pose UI)</span>
+
+<span class="sd"> :param joint: The joint that the slider will control.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># load stylesheet</span>
+ <span class="n">styleSheetFile</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">returnNicePath</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">toolsPath</span><span class="p">,</span> <span class="s2">&quot;Core/Scripts/Interfaces/StyleSheets/mainScheme.qss&quot;</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">styleSheetFile</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">style</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="c1"># create mover name</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">joint</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">):</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">joint</span>
+
+ <span class="k">else</span><span class="p">:</span>
+
+ <span class="n">jointBaseName</span> <span class="o">=</span> <span class="n">joint</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">!=</span> <span class="n">baseName</span><span class="p">:</span>
+ <span class="n">nameData</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">jointBaseName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="n">jointName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">nameData</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="n">jointName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointName</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">jointName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">jointName</span>
+
+ <span class="c1"># create a master vertical layout</span>
+ <span class="n">mainLayout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QVBoxLayout</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigPose_advancedLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="n">mainLayout</span><span class="p">)</span>
+
+ <span class="c1"># create a label for the joint</span>
+ <span class="n">font</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QFont</span><span class="p">()</span>
+ <span class="n">font</span><span class="o">.</span><span class="n">setPointSize</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
+ <span class="n">font</span><span class="o">.</span><span class="n">setBold</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">jointLabel</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QLabel</span><span class="p">(</span><span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span><span class="p">)</span>
+ <span class="n">jointLabel</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">font</span><span class="p">)</span>
+ <span class="n">mainLayout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">jointLabel</span><span class="p">)</span>
+
+ <span class="c1"># create layout for slider/button</span>
+ <span class="n">layout</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QHBoxLayout</span><span class="p">()</span>
+ <span class="n">mainLayout</span><span class="o">.</span><span class="n">addLayout</span><span class="p">(</span><span class="n">layout</span><span class="p">)</span>
+
+ <span class="c1"># create slider for joint</span>
+ <span class="n">slider</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSlider</span><span class="p">()</span>
+ <span class="n">layout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">slider</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setProperty</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="n">joint</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setOrientation</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">Horizontal</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setRange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setSingleStep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">valueChanged</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">setReferencePoseSlider</span><span class="p">,</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">))</span>
+ <span class="n">slider</span><span class="o">.</span><span class="n">setTracking</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">overallSlider</span><span class="o">.</span><span class="n">valueChanged</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">slider</span><span class="o">.</span><span class="n">setValue</span><span class="p">)</span>
+
+ <span class="c1"># create reset button</span>
+ <span class="n">button</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QPushButton</span><span class="p">(</span><span class="s2">&quot;Reset&quot;</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setMinimumWidth</span><span class="p">(</span><span class="mi">70</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setMaximumWidth</span><span class="p">(</span><span class="mi">70</span><span class="p">)</span>
+ <span class="n">layout</span><span class="o">.</span><span class="n">addWidget</span><span class="p">(</span><span class="n">button</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setObjectName</span><span class="p">(</span><span class="s2">&quot;blueButton&quot;</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">setStyleSheet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">style</span><span class="p">)</span>
+
+ <span class="n">button</span><span class="o">.</span><span class="n">clicked</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">partial</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">resetRigPose_Part</span><span class="p">,</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span><span class="p">))</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.updateBoneCount"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.updateBoneCount">[docs]</a> <span class="k">def</span> <span class="nf">updateBoneCount</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method looks at the create bones attribute of the module and gets the number of bones in that list</span>
+<span class="sd"> and appends it onto the total bone count for the bone counter interface.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">window</span><span class="p">(</span><span class="s2">&quot;ART_BoneCounterWin&quot;</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">boneCounterInst</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">boneCounterInst</span><span class="o">.</span><span class="n">updateBoneCount</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.toggleShapeVis"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.toggleShapeVis">[docs]</a> <span class="k">def</span> <span class="nf">toggleShapeVis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transform</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method finds the shapes for the passed in transform and toggles the visibility based on the value.</span>
+
+<span class="sd"> :param transform: the transform to get the shape nodes from.</span>
+<span class="sd"> :param value: whether to show or hide the shape nodes.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">transform</span><span class="p">):</span>
+ <span class="n">shape</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">transform</span><span class="p">,</span> <span class="n">shapes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">shape</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.v&quot;</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.selectionScriptJob_animUI"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.selectionScriptJob_animUI">[docs]</a> <span class="k">def</span> <span class="nf">selectionScriptJob_animUI</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">buttonData</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is called from a scriptjob anytime a selection is changed. It&#39;s sole purpose it to update the button</span>
+<span class="sd"> color on the anim picker to show if a control is selected or not.</span>
+
+<span class="sd"> :param buttonData: pairings of button/control/brush. brush is the original color of the button.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;ls -sl;&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">selection</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">selection</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">buttonData</span><span class="p">:</span>
+ <span class="n">control</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="n">button</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">brushColor</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">selection</span><span class="p">:</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">brush</span><span class="o">.</span><span class="n">setColor</span><span class="p">(</span><span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">white</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">brush</span><span class="o">.</span><span class="n">setColor</span><span class="p">(</span><span class="n">brushColor</span><span class="p">)</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">update</span><span class="p">()</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.importFBX_pre"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.importFBX_pre">[docs]</a> <span class="k">def</span> <span class="nf">importFBX_pre</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">importMethod</span><span class="p">,</span> <span class="n">character</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method runs before an fbx is imported onto the control rig. It cuts any keys on the controls and zeroes</span>
+<span class="sd"> the controls out before importing the fbx (which is called in the derived module class)</span>
+
+<span class="sd"> :param importMethod: Whether or not the FBX is getting imported as FK, IK, Both, or None</span>
+<span class="sd"> :param character: The namespace of the rig.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">importMethod</span> <span class="o">!=</span> <span class="s2">&quot;None&quot;</span><span class="p">:</span>
+ <span class="n">controls</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getControls</span><span class="p">()</span>
+
+ <span class="k">for</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">controls</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">cutKey</span><span class="p">(</span><span class="n">character</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="n">control</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">resetRigControls</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.importFBX"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.importFBX">[docs]</a> <span class="k">def</span> <span class="nf">importFBX</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">importMethod</span><span class="p">,</span> <span class="n">character</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method is implemented in the derived module class and defines how mocap is imported onto the rig controls.</span>
+
+<span class="sd"> :param importMethod: Whether or not the FBX is getting imported as FK, IK, Both, or None</span>
+<span class="sd"> :param character: The namespace of the rig.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">pass</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.resetRigControls"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.resetRigControls">[docs]</a> <span class="k">def</span> <span class="nf">resetRigControls</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">resetAll</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method zeroes out control attributes. If resetAll is true, then it will zero out all rig controls for</span>
+<span class="sd"> the module. Otherwise, it will only zero out the selected controls of the module.</span>
+
+<span class="sd"> :param resetAll: Whether or not to reset only the selected controls or all controls of the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get namespace</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnRigNetworkNode</span>
+ <span class="n">characterNode</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listConnections</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.parent&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">namespace</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.namespace&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">resetAll</span><span class="p">:</span>
+
+ <span class="c1"># list any attributes on the network node that contain &quot;controls&quot;</span>
+ <span class="n">controls</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">st</span><span class="o">=</span><span class="s2">&quot;*Controls&quot;</span><span class="p">)</span>
+ <span class="c1"># get that data on that attr</span>
+ <span class="k">for</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">controls</span><span class="p">:</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">control</span><span class="p">))</span>
+
+ <span class="c1"># reset the attr on each control</span>
+ <span class="n">nonZeroAttrs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;scale&quot;</span><span class="p">,</span> <span class="s2">&quot;globalScale&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleX&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleY&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleZ&quot;</span><span class="p">]</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">namespace</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="n">each</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">attr</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">nonZeroAttrs</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">namespace</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">namespace</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;skipped &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">control</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;. No valid controls found to reset.&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">resetAll</span><span class="p">:</span>
+ <span class="n">nonZeroAttrs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;scale&quot;</span><span class="p">,</span> <span class="s2">&quot;globalScale&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleX&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleY&quot;</span><span class="p">,</span> <span class="s2">&quot;scaleZ&quot;</span><span class="p">]</span>
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">selection</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">each</span><span class="p">,</span> <span class="n">keyable</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">attr</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">nonZeroAttrs</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.getControls"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.getControls">[docs]</a> <span class="k">def</span> <span class="nf">getControls</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method returns a list of all the rig controls of the module.</span>
+
+<span class="sd"> :return: List of all rig controls in the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get namespace</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnRigNetworkNode</span>
+ <span class="k">if</span> <span class="n">networkNode</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">winParent</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">getMainWindow</span><span class="p">()</span>
+ <span class="n">win</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">DialogMessage</span><span class="p">(</span><span class="s2">&quot;Error&quot;</span><span class="p">,</span> <span class="s2">&quot;This function does not work without a namespace.&quot;</span><span class="p">,</span> <span class="p">[],</span> <span class="mi">0</span><span class="p">,</span>
+ <span class="n">winParent</span><span class="p">)</span>
+ <span class="n">win</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+ <span class="k">return</span> <span class="kc">None</span>
+
+ <span class="c1"># list any attributes on the network node that contain &quot;controls&quot;</span>
+ <span class="n">controls</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">networkNode</span><span class="p">,</span> <span class="n">st</span><span class="o">=</span><span class="s2">&quot;*Controls&quot;</span><span class="p">)</span>
+
+ <span class="n">returnControls</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># get that data on that attr</span>
+ <span class="k">for</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">controls</span><span class="p">:</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">control</span><span class="p">))</span>
+
+ <span class="c1"># reset the attr on each control</span>
+ <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+ <span class="n">returnControls</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">each</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">returnControls</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="ART_RigModule.selectRigControls"><a class="viewcode-back" href="../../baseclass.html#System.ART_RigModule.ART_RigModule.selectRigControls">[docs]</a> <span class="k">def</span> <span class="nf">selectRigControls</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method calls on getControls to return a list of the controls and the selects them.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">controls</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">getControls</span><span class="p">()</span>
+
+ <span class="c1"># get namespace</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnRigNetworkNode</span>
+ <span class="n">characterNode</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listConnections</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.parent&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">namespace</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.namespace&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">control</span> <span class="ow">in</span> <span class="n">controls</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">namespace</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="n">control</span><span class="p">,</span> <span class="n">add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># PROPERTIES</span>
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">getModules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method finds the main &quot;character&quot; module that has connections to all of the rig modules</span>
+
+<span class="sd"> :return: returns the character node.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">modules</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
+ <span class="k">if</span> <span class="s2">&quot;rigModules&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">module</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">getAllModules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method finds all connected rig modules to the main character network node.</span>
+
+<span class="sd"> :return: returns a list of the rig modules</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">modules</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="n">returnMods</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
+ <span class="k">if</span> <span class="s2">&quot;parent&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">returnMods</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">returnMods</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnNetworkNode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method returns the module&#39;s own network node.</span>
+
+<span class="sd"> :return: the modules network node</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+ <span class="k">if</span> <span class="s2">&quot;moduleName&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="n">node</span>
+
+ <span class="k">return</span> <span class="n">networkNode</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnRigNetworkNode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method returns the module&#39;s own network node using the namespace on the main character</span>
+<span class="sd"> network node. This is so that if there are multiple characters in a scene, we know which</span>
+<span class="sd"> network node for which character we are trying to return.</span>
+
+<span class="sd"> :return: returns this module&#39;s network node in a scene with references.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+ <span class="n">modules</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+ <span class="k">if</span> <span class="s2">&quot;moduleName&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
+ <span class="n">characterNode</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listConnections</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.parent&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.namespace&quot;</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.namespace&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">namespace</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="n">node</span>
+ <span class="k">return</span> <span class="n">networkNode</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">return</span> <span class="kc">None</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnClassObject</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">return</span> <span class="bp">self</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnCreatedJoints</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method loops through the Created Bones attribute on its network node and returns a list of the</span>
+<span class="sd"> joints it will create given the current module settings.</span>
+
+<span class="sd"> :return: A list of the created bones of the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">)</span>
+
+ <span class="n">splitJoints</span> <span class="o">=</span> <span class="n">joints</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;::&quot;</span><span class="p">)</span>
+ <span class="n">createdJoints</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">splitJoints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">bone</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">createdJoints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">createdJoints</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnJointMovers</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method finds and returns all joint movers for the module.</span>
+
+<span class="sd"> :return: a list of all global movers, offset movers, and geo movers for the module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
+
+ <span class="c1"># select global movers</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;*_mover&quot;</span><span class="p">)</span>
+ <span class="n">globalMovers</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># select offset movers</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;*_mover_offset&quot;</span><span class="p">)</span>
+ <span class="n">offsetMovers</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># mesh movers</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;*_mover_geo&quot;</span><span class="p">)</span>
+ <span class="n">geoMovers</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="p">[</span><span class="n">globalMovers</span><span class="p">,</span> <span class="n">offsetMovers</span><span class="p">,</span> <span class="n">geoMovers</span><span class="p">]</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnMirrorModuleInst</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method finds and returns the instance of a module&#39;s mirror module.</span>
+
+<span class="sd"> :return: a pointer in memory to the instance of the mirror module.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get network node</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">mirrorModule</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.mirrorModule&quot;</span><span class="p">)</span>
+
+ <span class="c1"># find instance through rig UI inst</span>
+ <span class="k">for</span> <span class="n">inst</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span><span class="o">.</span><span class="n">moduleInstances</span><span class="p">:</span>
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="n">inst</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">moduleName</span> <span class="o">==</span> <span class="n">mirrorModule</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">inst</span>
+
+ <span class="nd">@property</span>
+ <span class="k">def</span> <span class="nf">returnPrefixSuffix</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This method splits our module name by the base name and returns the prefix and suffix.</span>
+
+<span class="sd"> :return: the user-defined prefix and suffix found by splitting the module name by the base name.</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">prefix</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="kc">None</span>
+
+ <span class="n">networkNode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnNetworkNode</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+ <span class="n">splitName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseName</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">splitName</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="n">splitName</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">splitName</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="n">splitName</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="k">return</span> <span class="p">[</span><span class="n">prefix</span><span class="p">,</span> <span class="n">suffix</span><span class="p">]</span></div>
+</pre></div>
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../../index.html">ARTv2 1.0 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2017, Jeremy Ernst.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.2.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/Documentation/build/_modules/System/utils.html b/Documentation/build/_modules/System/utils.html
new file mode 100644
index 0000000..70116d5
--- /dev/null
+++ b/Documentation/build/_modules/System/utils.html
@@ -0,0 +1,1255 @@
+
+
+<!doctype html>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>System.utils &#8212; ARTv2 1.0 documentation</title>
+
+ <link rel="stylesheet" href="../../_static/bizstyle.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: '../../',
+ VERSION: '1.0',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true,
+ SOURCELINK_SUFFIX: '.txt'
+ };
+ </script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <script type="text/javascript" src="../../_static/bizstyle.js"></script>
+ <link rel="index" title="Index" href="../../genindex.html" />
+ <link rel="search" title="Search" href="../../search.html" />
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
+ <!--[if lt IE 9]>
+ <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
+ <![endif]-->
+ </head>
+ <body role="document">
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../../index.html">ARTv2 1.0 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <form class="search" action="../../search.html" method="get">
+ <div><input type="text" name="q" /></div>
+ <div><input type="submit" value="Go" /></div>
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <h1>Source code for System.utils</h1><div class="highlight"><pre>
+<span></span><span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">Author: Jeremy Ernst</span>
+
+<span class="sd">########</span>
+<span class="sd">Contents</span>
+<span class="sd">########</span>
+
+<span class="sd">| **Node Traversal Utilities:**</span>
+<span class="sd">| :func:`returnRigModules &lt;System.utils.returnRigModules&gt;`</span>
+<span class="sd">| :func:`returnCharacterModule &lt;System.utils.returnCharacterModule&gt;`</span>
+<span class="sd">| :func:`returnCharacterModules &lt;System.utils.returnCharacterModules&gt;`</span>
+<span class="sd">| :func:`returnRigModuleTypes &lt;System.utils.returnRigModuleTypes&gt;`</span>
+<span class="sd">| :func:`getViableParents &lt;System.utils.getViableParents&gt;`</span>
+<span class="sd">| :func:`deleteChildren &lt;System.utils.deleteChildren&gt;`</span>
+<span class="sd">| :func:`find_all_incoming &lt;System.utils.find_all_incoming&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Joint Mover Utilities:**</span>
+<span class="sd">| :func:`findAndRenameOutlinerChildren &lt;System.utils.findAndRenameOutlinerChildren&gt;`</span>
+<span class="sd">| :func:`findAssociatedMover &lt;System.utils.findAssociatedMover&gt;`</span>
+<span class="sd">| :func:`findMoverNodeFromJointName &lt;System.utils.findMoverNodeFromJointName&gt;`</span>
+<span class="sd">| :func:`findOffsetMoverFromName &lt;System.utils.findOffsetMoverFromName&gt;`</span>
+<span class="sd">| :func:`findGlobalMoverFromName &lt;System.utils.findGlobalMoverFromName&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Mesh Utilities:**</span>
+<span class="sd">| :func:`splitMesh &lt;System.utils.splitMesh&gt;`</span>
+<span class="sd">| :func:`findAllSkinnableGeo &lt;System.utils.findAllSkinnableGeo&gt;`</span>
+<span class="sd">| :func:`getLodData &lt;System.utils.getLodData&gt;`</span>
+<span class="sd">| :func:`exportMesh &lt;System.utils.exportMesh&gt;`</span>
+<span class="sd">| :func:`findExportMeshData &lt;System.utils.findExportMeshData&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Path Utilities:**</span>
+<span class="sd">| :func:`win_path_convert &lt;System.utils.win_path_convert&gt;`</span>
+<span class="sd">| :func:`returnFriendlyPath &lt;System.utils.returnFriendlyPath&gt;`</span>
+<span class="sd">| :func:`returnNicePath &lt;System.utils.returnNicePath&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">| **Misc. Utilities:**</span>
+<span class="sd">| :func:`fitViewAndShade &lt;System.utils.fitViewAndShade&gt;`</span>
+<span class="sd">| :func:`fitSelection &lt;System.utils.fitSelection&gt;`</span>
+<span class="sd">| :func:`get_mobject &lt;System.utils.get_mobject&gt;`</span>
+<span class="sd">| :func:`get_namespace &lt;System.utils.get_namespace&gt;`</span>
+<span class="sd">| :func:`remove_namespace &lt;System.utils.remove_namespace&gt;`</span>
+<span class="sd">|</span>
+<span class="sd">|</span>
+
+<span class="sd">#########</span>
+<span class="sd">Functions</span>
+<span class="sd">#########</span>
+<span class="sd">&quot;&quot;&quot;</span>
+
+<span class="kn">import</span> <span class="nn">json</span>
+<span class="kn">import</span> <span class="nn">math</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">re</span>
+
+<span class="kn">import</span> <span class="nn">maya.cmds</span> <span class="k">as</span> <span class="nn">cmds</span>
+<span class="kn">import</span> <span class="nn">maya.mel</span> <span class="k">as</span> <span class="nn">mel</span>
+<span class="kn">from</span> <span class="nn">maya</span> <span class="k">import</span> <span class="n">OpenMaya</span><span class="p">,</span> <span class="n">OpenMayaAnim</span>
+
+<span class="kn">import</span> <span class="nn">interfaceUtils</span> <span class="k">as</span> <span class="nn">interfaceUtils</span>
+<span class="kn">import</span> <span class="nn">riggingUtils</span> <span class="k">as</span> <span class="nn">riggingUtils</span>
+<span class="kn">from</span> <span class="nn">ThirdParty.Qt</span> <span class="k">import</span> <span class="n">QtWidgets</span>
+
+<span class="c1"># maya 2016&lt; maya2017&gt; compatability</span>
+<span class="k">try</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">shiboken</span> <span class="k">as</span> <span class="nn">shiboken</span>
+<span class="k">except</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">shiboken2</span> <span class="k">as</span> <span class="nn">shiboken</span>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnRigModules"><a class="viewcode-back" href="../../utils.html#System.utils.returnRigModules">[docs]</a><span class="k">def</span> <span class="nf">returnRigModules</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for all network nodes in the scene. Return network nodes that have a .parent attribute.</span>
+
+<span class="sd"> :return: list of network nodes that have .parent attr, signifying an ART network node</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">modules</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="s2">&quot;ART_Root_Module&quot;</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">modules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;ART_Root_Module&quot;</span><span class="p">)</span>
+ <span class="n">index</span> <span class="o">=</span> <span class="n">networkNodes</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&quot;ART_Root_Module&quot;</span><span class="p">)</span>
+ <span class="n">networkNodes</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+ <span class="k">if</span> <span class="s2">&quot;parent&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">modules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">modules</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnCharacterModule"><a class="viewcode-back" href="../../utils.html#System.utils.returnCharacterModule">[docs]</a><span class="k">def</span> <span class="nf">returnCharacterModule</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for all network nodes in the scene. Return the main network node that all other ART network nodes</span>
+<span class="sd"> connect to (also known as the character node)</span>
+
+<span class="sd"> :return: character node that stores character information.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="s2">&quot;parent&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">node</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnCharacterModules"><a class="viewcode-back" href="../../utils.html#System.utils.returnCharacterModules">[docs]</a><span class="k">def</span> <span class="nf">returnCharacterModules</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for all network nodes in the scene. Return all character network nodes found.</span>
+
+<span class="sd"> :return: list of character network nodes which list details about the character.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">modules</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="s2">&quot;parent&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">modules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">modules</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnRigModuleTypes"><a class="viewcode-back" href="../../utils.html#System.utils.returnRigModuleTypes">[docs]</a><span class="k">def</span> <span class="nf">returnRigModuleTypes</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for all network nodes in the scene. Get the moduleType attribute value for any valid nodes and</span>
+<span class="sd"> append that to our list of modules to return, giving us a list of all of the types of modules our character</span>
+<span class="sd"> has.</span>
+
+<span class="sd"> :return: list of the different types of modules in our scene (ART_Arm, ART_Leg, etc)</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">modTypes</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">networkNodes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;network&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="s2">&quot;parent&quot;</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">modType</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">modType</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">modTypes</span><span class="p">:</span>
+ <span class="n">modTypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">modType</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">modTypes</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="getViableParents"><a class="viewcode-back" href="../../utils.html#System.utils.getViableParents">[docs]</a><span class="k">def</span> <span class="nf">getViableParents</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for all network nodes in the scene, and search for the Created_Bones attribute, which holds the names</span>
+<span class="sd"> of the bones a particular module will create given its current settings. Add all created bones from all modules</span>
+<span class="sd"> to a list to be returned.</span>
+
+<span class="sd"> :return: list of all the bone names created by the current modules in the scene.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># look through the node network and find created bone lists</span>
+ <span class="n">modules</span> <span class="o">=</span> <span class="n">returnRigModules</span><span class="p">()</span>
+
+ <span class="n">bonesList</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">):</span>
+ <span class="n">bonesList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">))</span>
+
+ <span class="c1"># now we have a long string of all of the created bones. we need to split them up into individual items</span>
+ <span class="n">parents</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">bonesList</span><span class="p">:</span>
+ <span class="n">bones</span> <span class="o">=</span> <span class="n">bone</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;::&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">bones</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">bone</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">parents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span>
+
+ <span class="c1"># once done, add each one to the comboBox</span>
+ <span class="k">return</span> <span class="n">parents</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findMoverNodeFromJointName"><a class="viewcode-back" href="../../utils.html#System.utils.findMoverNodeFromJointName">[docs]</a><span class="k">def</span> <span class="nf">findMoverNodeFromJointName</span><span class="p">(</span><span class="n">networkNodes</span><span class="p">,</span> <span class="n">jointName</span><span class="p">,</span> <span class="n">offsetMover</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">globalMover</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Look for the passed in joint name in the Created_Bones attribute of all network nodes in the scene.</span>
+<span class="sd"> Once found, find the joint&#39;s associated offset or global mover.</span>
+
+<span class="sd"> :param networkNodes: list of network nodes to search for jointName in Created_Bones attribute</span>
+<span class="sd"> :param jointName: name of joint whose mover (offset or global) we are trying to find</span>
+<span class="sd"> :param offsetMover: Whether to return the offset mover</span>
+<span class="sd"> :param globalMover: Whether to return the global mover</span>
+<span class="sd"> :return: the name of the associated joint mover for the given joint</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># take the passed in list, and if there is a created_Bones attribute, search it for the jointName</span>
+ <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">networkNodes</span><span class="p">:</span>
+ <span class="n">boneList</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">):</span>
+ <span class="n">boneList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.Created_Bones&quot;</span><span class="p">))</span>
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">boneList</span><span class="p">:</span>
+ <span class="n">splitBones</span> <span class="o">=</span> <span class="n">bone</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;::&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">splitBones</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">joint</span> <span class="o">==</span> <span class="n">jointName</span><span class="p">:</span>
+ <span class="c1"># get the module name and module class</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="n">moduleClass</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.moduleType&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">node</span> <span class="o">!=</span> <span class="s2">&quot;ART_Root_Module&quot;</span><span class="p">:</span>
+ <span class="n">basename</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">node</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">basename</span> <span class="o">=</span> <span class="n">moduleName</span>
+
+ <span class="c1"># start building up the mover name we need and return it</span>
+ <span class="k">if</span> <span class="n">offsetMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span>
+ <span class="k">if</span> <span class="n">globalMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">return</span> <span class="n">moverName</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">offsetMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover_offset&quot;</span>
+ <span class="k">if</span> <span class="n">globalMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">jointName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span>
+
+ <span class="c1"># comparing basename and moduleName, get prefix and suffix</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="n">moduleName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">basename</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="n">moduleName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">basename</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+
+ <span class="c1"># make sure not partitioning on an empty separator</span>
+ <span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&amp;&amp;&quot;</span>
+ <span class="k">if</span> <span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;$$&quot;</span>
+
+ <span class="n">noPrefix</span> <span class="o">=</span> <span class="n">jointName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">prefix</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">noPrefix</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">noPrefix</span>
+ <span class="n">noSuffix</span> <span class="o">=</span> <span class="n">moverName</span><span class="o">.</span><span class="n">rpartition</span><span class="p">(</span><span class="n">suffix</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">noSuffix</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">noSuffix</span>
+
+ <span class="c1"># construct mover name.</span>
+ <span class="k">if</span> <span class="n">offsetMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">moduleName</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">moverName</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">moverName</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">moverName</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">+=</span> <span class="s2">&quot;_mover_offset&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">return</span> <span class="n">moverName</span>
+
+ <span class="k">if</span> <span class="n">globalMover</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">moduleName</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">moverName</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">moverName</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;_mover&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">moverName</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">moverName</span> <span class="o">+=</span> <span class="s2">&quot;_mover&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">return</span> <span class="n">moverName</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findOffsetMoverFromName"><a class="viewcode-back" href="../../utils.html#System.utils.findOffsetMoverFromName">[docs]</a><span class="k">def</span> <span class="nf">findOffsetMoverFromName</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Find the top-most offset mover of a given module and return it.</span>
+
+<span class="sd"> :param name: name of the module whose top-most offset mover we wish to find.</span>
+<span class="sd"> :return: name of the offset mover of given module name.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">grp</span> <span class="o">=</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">grp</span><span class="p">):</span>
+ <span class="n">topLevelGrp</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">grp</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">topLevelGrp</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">globalMover</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">globalMover</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">offsetMover</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">globalMover</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">offsetMover</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">offsetMover</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findGlobalMoverFromName"><a class="viewcode-back" href="../../utils.html#System.utils.findGlobalMoverFromName">[docs]</a><span class="k">def</span> <span class="nf">findGlobalMoverFromName</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Find the top-most global mover of a given module and return it.</span>
+
+<span class="sd"> :param name: name of the module whose top-most global mover we wish to find.</span>
+<span class="sd"> :return: name of the global mover of given module name.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">grp</span> <span class="o">=</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_mover_grp&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">grp</span><span class="p">):</span>
+ <span class="n">topLevelGrp</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">grp</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">topLevelGrp</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;mover&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;grp&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">globalMover</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">globalMover</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">globalMover</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">globalMover</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">topLevelGrp</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">globalMover</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">globalMover</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="fitViewAndShade"><a class="viewcode-back" href="../../utils.html#System.utils.fitViewAndShade">[docs]</a><span class="k">def</span> <span class="nf">fitViewAndShade</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Focus the camera on what is in the scene, fitting it to the view, then turn on shaded mode.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># clear selection and fit view</span>
+ <span class="n">previousSelection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">viewFit</span><span class="p">()</span>
+ <span class="n">panels</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getPanel</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s1">&#39;modelPanel&#39;</span><span class="p">)</span>
+
+ <span class="c1"># turn on smooth shading</span>
+ <span class="k">for</span> <span class="n">panel</span> <span class="ow">in</span> <span class="n">panels</span><span class="p">:</span>
+ <span class="n">editor</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">modelPanel</span><span class="p">(</span><span class="n">panel</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">modelEditor</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">modelEditor</span><span class="p">(</span><span class="n">editor</span><span class="p">,</span> <span class="n">edit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">displayAppearance</span><span class="o">=</span><span class="s2">&quot;smoothShaded&quot;</span><span class="p">,</span> <span class="n">backfaceCulling</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">previousSelection</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">previousSelection</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="fitSelection"><a class="viewcode-back" href="../../utils.html#System.utils.fitSelection">[docs]</a><span class="k">def</span> <span class="nf">fitSelection</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Frame the camera up on the current selection.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FrameSelected;&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;fitPanel -selected;&quot;</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findAndRenameOutlinerChildren"><a class="viewcode-back" href="../../utils.html#System.utils.findAndRenameOutlinerChildren">[docs]</a><span class="k">def</span> <span class="nf">findAndRenameOutlinerChildren</span><span class="p">(</span><span class="n">widgetItem</span><span class="p">,</span> <span class="n">partitionName</span><span class="p">,</span> <span class="n">newName</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Find all child widgets of the passed in widgetItem and set their text to the new module name. Usually invoked</span>
+<span class="sd"> when a user wants to change the module name.</span>
+
+<span class="sd"> :param widgetItem: widget to search and replace the names of the children widgets</span>
+<span class="sd"> :param partitionName: the original module name</span>
+<span class="sd"> :param newName: the new module name</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">children</span> <span class="o">=</span> <span class="n">widgetItem</span><span class="o">.</span><span class="n">childCount</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">children</span><span class="p">):</span>
+ <span class="n">child</span> <span class="o">=</span> <span class="n">widgetItem</span><span class="o">.</span><span class="n">child</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">child</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">partitionName</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">child</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">newName</span> <span class="o">+</span> <span class="n">mover</span><span class="p">)</span>
+ <span class="n">findAndRenameOutlinerChildren</span><span class="p">(</span><span class="n">child</span><span class="p">,</span> <span class="n">partitionName</span><span class="p">,</span> <span class="n">newName</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="deleteChildren"><a class="viewcode-back" href="../../utils.html#System.utils.deleteChildren">[docs]</a><span class="k">def</span> <span class="nf">deleteChildren</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Delete all children of the passed in transform node.</span>
+
+<span class="sd"> :param node: node whose children we want to delete.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">relatives</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">relatives</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">relatives</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">nodeType</span><span class="p">(</span><span class="n">each</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;transform&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">each</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">each</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findAssociatedMover"><a class="viewcode-back" href="../../utils.html#System.utils.findAssociatedMover">[docs]</a><span class="k">def</span> <span class="nf">findAssociatedMover</span><span class="p">(</span><span class="n">joint</span><span class="p">,</span> <span class="n">module</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Find the global mover associated with the passed in joint and the passed in network node. Usually invoked from</span>
+<span class="sd"> riggingUtils when creating a control from a joint mover.</span>
+
+<span class="sd"> :param joint: name of the joint whose associated mover you wish to find.</span>
+<span class="sd"> :param module: name of the module the joint belongs to. Used to figure out if any prefixes or suffixes were used.</span>
+<span class="sd"> :return: name of global mover</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">module</span> <span class="o">==</span> <span class="s2">&quot;ART_Root_Module&quot;</span><span class="p">:</span>
+ <span class="k">return</span> <span class="s2">&quot;root_mover&quot;</span>
+
+ <span class="c1"># figure out the name</span>
+ <span class="n">moduleName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+ <span class="n">baseName</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s2">&quot;.baseName&quot;</span><span class="p">)</span>
+
+ <span class="n">moverName</span> <span class="o">=</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">moverName</span><span class="p">):</span>
+ <span class="k">return</span> <span class="n">moverName</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c1"># find prefix/suffix if available</span>
+ <span class="n">prefix</span> <span class="o">=</span> <span class="n">moduleName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">baseName</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">suffix</span> <span class="o">=</span> <span class="n">moduleName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">baseName</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">prefixSeparator</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">prefixSeparator</span> <span class="o">=</span> <span class="n">prefix</span>
+
+ <span class="k">if</span> <span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">suffixSeparator</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">suffixSeparator</span> <span class="o">=</span> <span class="n">suffix</span>
+
+ <span class="c1"># get the bone name (for example, thigh)</span>
+ <span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">boneName</span> <span class="o">=</span> <span class="n">joint</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">suffixSeparator</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">boneName</span> <span class="o">=</span> <span class="n">joint</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">prefixSeparator</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">suffixSeparator</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="c1"># get the mover node</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">baseName</span> <span class="o">+</span> <span class="n">suffix</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">boneName</span> <span class="o">+</span> <span class="s2">&quot;_mover&quot;</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">mover</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mover</span><span class="p">):</span>
+ <span class="k">return</span> <span class="n">mover</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">return</span> <span class="kc">None</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="find_all_incoming"><a class="viewcode-back" href="../../utils.html#System.utils.find_all_incoming">[docs]</a><span class="k">def</span> <span class="nf">find_all_incoming</span><span class="p">(</span><span class="n">start_nodes</span><span class="p">,</span> <span class="n">max_depth</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Recursively finds all unique incoming dependencies for the specified node.</span>
+
+<span class="sd"> :return: list of dependencies associated with node.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">dependencies</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
+ <span class="n">_find_all_incoming</span><span class="p">(</span><span class="n">start_nodes</span><span class="p">,</span> <span class="n">dependencies</span><span class="p">,</span> <span class="n">max_depth</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">dependencies</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<span class="k">def</span> <span class="nf">_find_all_incoming</span><span class="p">(</span><span class="n">start_nodes</span><span class="p">,</span> <span class="n">dependencies</span><span class="p">,</span> <span class="n">max_depth</span><span class="p">,</span> <span class="n">depth</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Recursively finds all unique incoming dependencies for the specified node.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">max_depth</span> <span class="ow">and</span> <span class="n">depth</span> <span class="o">&gt;</span> <span class="n">max_depth</span><span class="p">:</span>
+ <span class="k">return</span>
+ <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">s</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">d</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">incoming</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listConnections</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">start_nodes</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">incoming</span><span class="p">:</span>
+ <span class="k">return</span>
+ <span class="n">non_visitied</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">incoming</span><span class="p">,</span> <span class="n">l</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">dependencies</span><span class="p">)</span>
+ <span class="n">dependencies</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">non_visitied</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">non_visitied</span><span class="p">:</span>
+ <span class="n">_find_all_incoming</span><span class="p">(</span><span class="n">non_visitied</span><span class="p">,</span> <span class="n">dependencies</span><span class="p">,</span> <span class="n">max_depth</span><span class="p">,</span> <span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="get_mobject"><a class="viewcode-back" href="../../utils.html#System.utils.get_mobject">[docs]</a><span class="k">def</span> <span class="nf">get_mobject</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Get&#39;s MObject from given name.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">selection_list</span> <span class="o">=</span> <span class="n">OpenMaya</span><span class="o">.</span><span class="n">MSelectionList</span><span class="p">()</span>
+ <span class="n">selection_list</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+ <span class="n">mobject</span> <span class="o">=</span> <span class="n">OpenMaya</span><span class="o">.</span><span class="n">MObject</span><span class="p">()</span>
+ <span class="n">selection_list</span><span class="o">.</span><span class="n">getDependNode</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">mobject</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">mobject</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="get_namespace"><a class="viewcode-back" href="../../utils.html#System.utils.get_namespace">[docs]</a><span class="k">def</span> <span class="nf">get_namespace</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Gets the namespace from the given name.</span>
+
+<span class="sd"> :param name: String to extract the namespace from.</span>
+<span class="sd"> :return: The extracted namespace</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">namespace</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s1">&#39;[_0-9a-zA-Z]+(?=:)(:[_0-9a-zA-Z]+(?=:))*&#39;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">namespace</span><span class="p">:</span>
+ <span class="n">namespace</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">:&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">namespace</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">namespace</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+ <span class="k">return</span> <span class="n">namespace</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="remove_namespace"><a class="viewcode-back" href="../../utils.html#System.utils.remove_namespace">[docs]</a><span class="k">def</span> <span class="nf">remove_namespace</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Removes the namespace from the given name</span>
+
+<span class="sd"> :param name: The name with the namespace</span>
+<span class="sd"> :return: The name without the namesapce</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">namespace</span> <span class="o">=</span> <span class="n">get_namespace</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">namespace</span><span class="p">:</span>
+ <span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">&#39;^</span><span class="si">{0}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">namespace</span><span class="p">),</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">name</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="win_path_convert"><a class="viewcode-back" href="../../utils.html#System.utils.win_path_convert">[docs]</a><span class="k">def</span> <span class="nf">win_path_convert</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Converts back slashes to forward slashes</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">separator</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">sep</span>
+ <span class="k">if</span> <span class="n">separator</span> <span class="o">!=</span> <span class="s2">&quot;/&quot;</span><span class="p">:</span>
+ <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">sep</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">path</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="exportMesh"><a class="viewcode-back" href="../../utils.html#System.utils.exportMesh">[docs]</a><span class="k">def</span> <span class="nf">exportMesh</span><span class="p">(</span><span class="n">mainUI</span><span class="p">,</span> <span class="n">exportMeshes</span><span class="p">,</span> <span class="n">exportPath</span><span class="p">,</span> <span class="n">removeBones</span><span class="p">,</span> <span class="n">poseDict</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Take the passed in information and export skeletal meshes to FBX format in the specified output path.</span>
+<span class="sd"> Invoked from ART_ExportMeshes.py</span>
+
+<span class="sd"> :param mainUI: instance of rig creator interface. Used to access rig creator class variables</span>
+<span class="sd"> :param exportMeshes: list of meshes to export for the given LOD</span>
+<span class="sd"> :param exportPath: output path of FBX file for the given LOD</span>
+<span class="sd"> :param removeBones: which bones, if any, to remove for the given LOD</span>
+<span class="sd"> :param poseDict: transform values for bones to be applied to given LOD before removing bones, in order to bake in a\</span>
+<span class="sd"> pose.</span>
+
+
+<span class="sd"> Details:</span>
+
+<span class="sd"> When exporting a LOD skeletal mesh, there are many steps that need to happen:</span>
+<span class="sd"> * First, the LOD needs to go back to the model pose. If there are any joints this LOD needs to remove, we must</span>
+<span class="sd"> save out the skin weight information first.</span>
+<span class="sd"> * If there is a LOD pose to set, set the pose then while the mesh is still skinned.</span>
+<span class="sd"> * After setting the LOD pose, search for any connected blendshapes the meshes may have. If there are not true</span>
+<span class="sd"> copies of the mesh in the scene, manually create new morph target copies by going through each blendshape</span>
+<span class="sd"> attribute turning them on, one by one, duplicating the mesh each time.</span>
+<span class="sd"> * After checking for blendshapes, delete history on the meshes. This will bake the LOD pose in.</span>
+<span class="sd"> * Next, re-apply the blendshapes now that the pose is baked in and import the skin weights.</span>
+<span class="sd"> * If there were bones to remove, before removing the joints, transfer the weighting of those bones to the bone</span>
+<span class="sd"> that was specified to transfer weighting to. Usually this is the first valid parent. So if removing all finger</span>
+<span class="sd"> bones in an LOD, you would likely transfer all finger weights to the hand bone.</span>
+<span class="sd"> * Once the weighting is transferred, it is then safe to delete the bones that were to be removed.</span>
+<span class="sd"> * Now, we start building our selection of things to export. First though, we will check for any incoming</span>
+<span class="sd"> connections to our joints that we want to export, and break those connections. These are usually connections</span>
+<span class="sd"> to the rig, and we don&#39;t want FBX exporting all of that stuff.</span>
+<span class="sd"> * Build the selection (joints and morphs) and export FBX</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># before starting this function, the file should be saved (by whichever function is calling this function)</span>
+
+ <span class="c1"># make sure fbx plugin is loaded</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">loadPlugin</span><span class="p">(</span><span class="s2">&quot;fbxmaya&quot;</span><span class="p">)</span>
+
+ <span class="c1"># set FBX settings</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportSmoothingGroups -v 1&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportSmoothMesh -v 0&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportTangents -v 1&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportUpAxis Z&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportCameras -v 0&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportConstraints -v 0&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportShapes -v 1&quot;</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExportSkins -v 1&quot;</span><span class="p">)</span>
+
+ <span class="c1"># Create a progress bar</span>
+ <span class="n">exportFileName</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">exportPath</span><span class="p">)</span>
+ <span class="n">title</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">exportFileName</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="n">progBar</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">ProgressBar</span><span class="p">(</span><span class="n">title</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setTextVisible</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+
+ <span class="c1"># find the value range</span>
+ <span class="n">maxVal</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">exportMeshes</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">poseDict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">maxVal</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">maxVal</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">exportMeshes</span><span class="p">)</span> <span class="o">*</span> <span class="mi">4</span>
+
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setRange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">maxVal</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+
+ <span class="c1"># go to model pose</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Setting Model Pose on Modules..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">inst</span> <span class="ow">in</span> <span class="n">mainUI</span><span class="o">.</span><span class="n">moduleInstances</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">setupForRigPose</span><span class="p">()</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">setReferencePose</span><span class="p">(</span><span class="s2">&quot;modelPose&quot;</span><span class="p">)</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">cleanUpRigPose</span><span class="p">()</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># if joints to remove, save out skinning</span>
+ <span class="kn">import</span> <span class="nn">System.riggingUtils</span> <span class="k">as</span> <span class="nn">riggingUtils</span>
+
+ <span class="n">weightFiles</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="n">exportMeshes</span> <span class="ow">and</span> <span class="n">removeBones</span> <span class="ow">or</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+ <span class="n">skinCluster</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">findRelatedSkinCluster</span><span class="p">(</span><span class="n">mesh</span><span class="p">)</span>
+
+ <span class="c1"># find a temporary place to save the weights out to</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">internalVar</span><span class="p">(</span><span class="n">uwd</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;artv2&quot;</span><span class="p">)</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="s2">&quot;weights&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fullPath</span><span class="p">):</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">fullPath</span><span class="p">)</span>
+
+ <span class="n">meshCheck</span> <span class="o">=</span> <span class="kc">False</span>
+ <span class="c1"># do a check to make sure we don&#39;t have naming conflicts</span>
+ <span class="k">if</span> <span class="n">mesh</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">shortName</span> <span class="o">=</span> <span class="n">mesh</span><span class="o">.</span><span class="n">rpartition</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span> <span class="o">+</span> <span class="n">shortName</span> <span class="o">+</span> <span class="s2">&quot;*&quot;</span><span class="p">)</span>
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">long</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">transforms</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">shapes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selection</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">selection</span><span class="p">:</span>
+ <span class="n">string</span> <span class="o">+=</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+
+ <span class="c1"># launch a message box informing of the issue</span>
+ <span class="n">msgBox</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMessageBox</span><span class="p">()</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setWindowTitle</span><span class="p">(</span><span class="s2">&quot;Naming Conflict&quot;</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span>
+ <span class="s2">&quot;More than one object shares the same name. Names should be unique.</span><span class="se">\</span>
+<span class="s2"> Please fix and try the operation again.&quot;</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setInformativeText</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setIcon</span><span class="p">(</span><span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMessageBox</span><span class="o">.</span><span class="n">Critical</span><span class="p">)</span>
+ <span class="n">ret</span> <span class="o">=</span> <span class="n">msgBox</span><span class="o">.</span><span class="n">exec_</span><span class="p">()</span>
+
+ <span class="c1"># clean up</span>
+ <span class="k">if</span> <span class="n">ret</span> <span class="o">==</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMessageBox</span><span class="o">.</span><span class="n">Ok</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">weightFiles</span><span class="p">:</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+ <span class="k">return</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">meshCheck</span> <span class="o">=</span> <span class="kc">True</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">meshCheck</span> <span class="o">=</span> <span class="kc">True</span>
+
+ <span class="k">if</span> <span class="n">meshCheck</span><span class="p">:</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;.weights&quot;</span><span class="p">)</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">fullPath</span><span class="p">)</span>
+
+ <span class="c1"># add file to our list so we can delete later</span>
+ <span class="n">weightFiles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fullPath</span><span class="p">)</span>
+
+ <span class="c1"># create skin class instance and save weights to location</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Exporting Skin Weights..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="n">skin</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">export_skin_weights</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="n">mesh</span><span class="p">)</span>
+ <span class="nb">print</span> <span class="n">skin</span>
+ <span class="n">skin</span><span class="o">.</span><span class="n">exportSkinWeights</span><span class="p">(</span><span class="n">fullPath</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">exportMeshes</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">msgBox</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMessageBox</span><span class="p">()</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setWindowTitle</span><span class="p">(</span><span class="s2">&quot;Export Error&quot;</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">&quot;No meshes assigned to this LOD.&quot;</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">setIcon</span><span class="p">(</span><span class="n">QtWidgets</span><span class="o">.</span><span class="n">QMessageBox</span><span class="o">.</span><span class="n">Critical</span><span class="p">)</span>
+ <span class="n">msgBox</span><span class="o">.</span><span class="n">exec_</span><span class="p">()</span>
+ <span class="k">return</span>
+
+ <span class="c1"># if LOD pose exists, set LOD pose (meshes are still weighted)</span>
+ <span class="k">if</span> <span class="n">poseDict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Setting LOD Pose..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">poseDict</span><span class="p">:</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">poseDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
+ <span class="c1"># translate, rotate, scale</span>
+ <span class="k">if</span> <span class="n">each</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.translateX&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.translateY&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.translateZ&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+
+ <span class="k">if</span> <span class="n">each</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.rotateX&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.rotateY&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.rotateZ&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+
+ <span class="k">if</span> <span class="n">each</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="mi">2</span><span class="p">]:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.scaleX&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.scaleY&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot;.scaleZ&quot;</span><span class="p">,</span> <span class="n">each</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+
+ <span class="c1"># delete the history on the meshes after setting the pose</span>
+ <span class="k">if</span> <span class="n">exportMeshes</span> <span class="ow">and</span> <span class="n">removeBones</span> <span class="ow">or</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+
+ <span class="n">blendshapeList</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">deleteShapes</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># find blendshapes</span>
+ <span class="n">blendshapes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;blendShape&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">blendshape</span> <span class="ow">in</span> <span class="n">blendshapes</span><span class="p">:</span>
+ <span class="n">geo</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">blendShape</span><span class="p">(</span><span class="n">blendshape</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">geometry</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">geo</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">geo</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">geo</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">geo</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">geo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">mesh</span><span class="p">:</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">blendshape</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">string</span><span class="o">=</span><span class="s2">&quot;weight&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">attrs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="c1"># if not, manually create shapes by toggling attrs and duplicating mesh</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">blendshape</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="n">dupe</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">duplicate</span><span class="p">(</span><span class="n">mesh</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="c1"># parent to world</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">dupe</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="n">dupe</span><span class="p">,</span> <span class="n">world</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># rename the duplicate mesh to the blendshape name</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">dupe</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">blendshape</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+ <span class="n">deleteShapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
+
+ <span class="c1"># add the blendshape node name and its attrs to the master blendshape list</span>
+ <span class="n">blendshapeList</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">blendshape</span><span class="p">,</span> <span class="n">attrs</span><span class="p">])</span>
+
+ <span class="c1"># delete history</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">ch</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># reapply blendshapes</span>
+ <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">blendshapeList</span><span class="p">:</span>
+ <span class="n">bshapeName</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">shapeList</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span>
+ <span class="k">for</span> <span class="n">shape</span> <span class="ow">in</span> <span class="n">shapeList</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">bshapeName</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">blendShape</span><span class="p">(</span><span class="n">bshapeName</span><span class="p">,</span> <span class="n">edit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">shape</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">))</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">([</span><span class="n">shape</span><span class="p">,</span> <span class="n">mesh</span><span class="p">],</span> <span class="n">r</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">blendShape</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">bshapeName</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">deleteShapes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">each</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Deleting Mesh History..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="c1"># go back to model pose</span>
+ <span class="k">for</span> <span class="n">inst</span> <span class="ow">in</span> <span class="n">mainUI</span><span class="o">.</span><span class="n">moduleInstances</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">setupForRigPose</span><span class="p">()</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">setReferencePose</span><span class="p">(</span><span class="s2">&quot;modelPose&quot;</span><span class="p">)</span>
+ <span class="n">inst</span><span class="o">.</span><span class="n">cleanUpRigPose</span><span class="p">()</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># import skin weights</span>
+ <span class="k">if</span> <span class="n">exportMeshes</span> <span class="ow">and</span> <span class="n">removeBones</span> <span class="ow">or</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Importing Skin Weights&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">internalVar</span><span class="p">(</span><span class="n">uwd</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">&quot;artv2&quot;</span><span class="p">)</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="s2">&quot;weights&quot;</span><span class="p">)</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;.weights&quot;</span><span class="p">)</span>
+ <span class="n">fullPath</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">fullPath</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fullPath</span><span class="p">):</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">import_skin_weights</span><span class="p">(</span><span class="n">fullPath</span><span class="p">,</span> <span class="n">mesh</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">weightFiles</span><span class="p">:</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
+
+ <span class="c1"># transfer weighting information</span>
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+ <span class="n">skinCluster</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">findRelatedSkinCluster</span><span class="p">(</span><span class="n">mesh</span><span class="p">)</span>
+
+ <span class="c1"># prune weights</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">skinPercent</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">mesh</span><span class="p">,</span> <span class="n">prw</span><span class="o">=</span><span class="mf">0.001</span><span class="p">)</span>
+
+ <span class="c1"># remove unused influences</span>
+ <span class="n">weightedInfs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">weightedInfluence</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">allInfs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inf</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">inf</span> <span class="ow">in</span> <span class="n">allInfs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">inf</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">weightedInfs</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">edit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ri</span><span class="o">=</span><span class="n">inf</span><span class="p">)</span>
+
+ <span class="c1"># get mesh influences</span>
+ <span class="n">meshInfluences</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">wi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># transfer weighting</span>
+ <span class="k">if</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">removeBones</span><span class="p">:</span>
+ <span class="n">transferBone</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">deleteBones</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">deleteBones</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">meshInfluences</span><span class="p">:</span>
+
+ <span class="n">currentInfluences</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inf</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">transferBone</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">currentInfluences</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">e</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">wt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ai</span><span class="o">=</span><span class="n">transferBone</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">polyEvaluate</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="kc">True</span><span class="p">)):</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinPercent</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="p">(</span><span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span> <span class="n">t</span><span class="o">=</span><span class="n">joint</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">value</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">skinPercent</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="p">(</span><span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span><span class="p">),</span>
+ <span class="n">tmw</span><span class="o">=</span><span class="p">[</span><span class="n">joint</span><span class="p">,</span> <span class="n">transferBone</span><span class="p">])</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Transferring Weighting..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="c1"># delete joints to remove</span>
+ <span class="k">if</span> <span class="n">removeBones</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Deleting Chosen Bones..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">removeBones</span><span class="p">:</span>
+ <span class="n">deleteBones</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+ <span class="k">for</span> <span class="n">bone</span> <span class="ow">in</span> <span class="n">deleteBones</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span>
+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="nb">print</span> <span class="s2">&quot;Unable to remove joint: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bone</span><span class="p">)</span>
+ <span class="nb">print</span> <span class="n">e</span>
+
+ <span class="c1"># handle morph targets</span>
+ <span class="n">blendShapeNodes</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">blendShapeMeshes</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Checking for Morph Targets..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="n">blendshapes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;blendShape&quot;</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">blendshape</span> <span class="ow">in</span> <span class="n">blendshapes</span><span class="p">:</span>
+ <span class="n">geo</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">blendShape</span><span class="p">(</span><span class="n">blendshape</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">geometry</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">geo</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">geo</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">geo</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">geo</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+
+ <span class="k">if</span> <span class="n">geo</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">mesh</span><span class="p">:</span>
+ <span class="n">blendShapeNodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">blendshape</span><span class="p">)</span>
+ <span class="c1"># get blendshapes</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">blendshape</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">string</span><span class="o">=</span><span class="s2">&quot;weight&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">attrs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
+ <span class="n">blendShapeMeshes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
+
+ <span class="c1"># before building selection, remove any connections from our skeleton</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Removing Connections on Skeleton..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;root&quot;</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">selection</span><span class="p">:</span>
+ <span class="n">connT</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">connectionInfo</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.translate&quot;</span><span class="p">,</span> <span class="n">sourceFromDestination</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">connT</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">disconnectAttr</span><span class="p">(</span><span class="n">connT</span><span class="p">,</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.translate&quot;</span><span class="p">)</span>
+ <span class="n">connR</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">connectionInfo</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.rotate&quot;</span><span class="p">,</span> <span class="n">sourceFromDestination</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">connR</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">disconnectAttr</span><span class="p">(</span><span class="n">connR</span><span class="p">,</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.rotate&quot;</span><span class="p">)</span>
+ <span class="n">connS</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">connectionInfo</span><span class="p">(</span><span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.scale&quot;</span><span class="p">,</span> <span class="n">sourceFromDestination</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">connS</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">disconnectAttr</span><span class="p">(</span><span class="n">connS</span><span class="p">,</span> <span class="n">each</span> <span class="o">+</span> <span class="s2">&quot;.scale&quot;</span><span class="p">)</span>
+
+ <span class="c1"># export (select root, geometry, and any morphs)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">clear</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># build selection</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;Building Selection For Export..&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">exportMeshes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;root&quot;</span><span class="p">,</span> <span class="n">add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">bShapeMesh</span> <span class="ow">in</span> <span class="n">blendShapeMeshes</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">bShapeMesh</span><span class="p">,</span> <span class="n">add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setFormat</span><span class="p">(</span><span class="s2">&quot;FBX Exporting...&quot;</span><span class="p">)</span>
+ <span class="n">progBar</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">progBar</span><span class="o">.</span><span class="n">maximum</span><span class="p">())</span>
+
+ <span class="n">selection</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="n">sl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">mel</span><span class="o">.</span><span class="n">eval</span><span class="p">(</span><span class="s2">&quot;FBXExport -f </span><span class="se">\&quot;</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">exportPath</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2"> -s&quot;</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findExportMeshData"><a class="viewcode-back" href="../../utils.html#System.utils.findExportMeshData">[docs]</a><span class="k">def</span> <span class="nf">findExportMeshData</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Search through the character node LOD attributes to find out what and how to export the LOD.</span>
+<span class="sd"> This data included the LOD pose, the bones to remove, the meshes for the LOD, the output path</span>
+<span class="sd"> for the FBX, and the LOD name.</span>
+
+<span class="sd"> :return: [output path for FBX, list of meshes to export for LOD, list of bones to remove for LOD,</span>
+<span class="sd"> pose to put LOD in before removing bones, the LOD number]</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">lodAttrs</span> <span class="o">=</span> <span class="n">getLodData</span><span class="p">()</span>
+ <span class="n">characterNode</span> <span class="o">=</span> <span class="n">returnCharacterModule</span><span class="p">()</span>
+
+ <span class="k">if</span> <span class="n">lodAttrs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="c1"># get json data from attribute</span>
+ <span class="n">lodData</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;_Pose&quot;</span><span class="p">,</span> <span class="s2">&quot;_Bones&quot;</span><span class="p">,</span> <span class="s2">&quot;_Meshes&quot;</span><span class="p">,</span> <span class="s2">&quot;_FilePath&quot;</span><span class="p">,</span> <span class="s2">&quot;LOD&quot;</span><span class="p">]</span>
+
+ <span class="n">returnData</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">lodAttrs</span><span class="p">:</span>
+
+ <span class="n">meshValue</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">boneValue</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">pathValue</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">poseData</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">lodNumber</span> <span class="o">=</span> <span class="kc">None</span>
+
+ <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">lodData</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span> <span class="o">+</span> <span class="n">entry</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">entry</span> <span class="o">==</span> <span class="s2">&quot;_Bones&quot;</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">boneValue</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span> <span class="o">+</span> <span class="n">entry</span><span class="p">))</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">entry</span> <span class="o">==</span> <span class="s2">&quot;_Meshes&quot;</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">meshValue</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listConnections</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span> <span class="o">+</span> <span class="n">entry</span><span class="p">)</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;No meshes assigned to this LOD.&quot;</span><span class="p">)</span>
+ <span class="k">pass</span>
+ <span class="k">if</span> <span class="n">entry</span> <span class="o">==</span> <span class="s2">&quot;_FilePath&quot;</span><span class="p">:</span>
+ <span class="n">pathValue</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span> <span class="o">+</span> <span class="n">entry</span><span class="p">))</span>
+ <span class="k">if</span> <span class="n">entry</span> <span class="o">==</span> <span class="s2">&quot;_Pose&quot;</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">poseData</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">getAttr</span><span class="p">(</span><span class="n">characterNode</span> <span class="o">+</span> <span class="s2">&quot;.&quot;</span> <span class="o">+</span> <span class="n">attr</span> <span class="o">+</span> <span class="n">entry</span><span class="p">))</span>
+ <span class="k">except</span><span class="p">:</span>
+ <span class="k">pass</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">entry</span> <span class="o">==</span> <span class="s2">&quot;LOD&quot;</span><span class="p">:</span>
+ <span class="n">lodNumber</span> <span class="o">=</span> <span class="n">attr</span>
+
+ <span class="c1"># append to return data</span>
+ <span class="n">returnData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">pathValue</span><span class="p">,</span> <span class="n">meshValue</span><span class="p">,</span> <span class="n">boneValue</span><span class="p">,</span> <span class="n">poseData</span><span class="p">,</span> <span class="n">lodNumber</span><span class="p">])</span>
+
+ <span class="k">return</span> <span class="n">returnData</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="getLodData"><a class="viewcode-back" href="../../utils.html#System.utils.getLodData">[docs]</a><span class="k">def</span> <span class="nf">getLodData</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Search the character node for and LOD related attributes and return those.</span>
+
+<span class="sd"> :return: list of attributes on character node that contain LOD export data.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get mesh info from character node</span>
+ <span class="n">characterNode</span> <span class="o">=</span> <span class="n">returnCharacterModule</span><span class="p">()</span>
+ <span class="n">attrs</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="n">characterNode</span><span class="p">,</span> <span class="n">ud</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">string</span><span class="o">=</span><span class="s2">&quot;LOD_*_FilePath&quot;</span><span class="p">)</span>
+
+ <span class="n">lodAttrs</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="n">attrs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
+ <span class="n">lodAttrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_FilePath&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
+
+ <span class="k">return</span> <span class="n">lodAttrs</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnFriendlyPath"><a class="viewcode-back" href="../../utils.html#System.utils.returnFriendlyPath">[docs]</a><span class="k">def</span> <span class="nf">returnFriendlyPath</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Take the incoming path and replace back slashes with forward slashes</span>
+
+<span class="sd"> :param path: directory or file path to replace back slashes in</span>
+<span class="sd"> :return: a directory or file path with only forward slashes</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">nicePath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">nicePath</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">nicePath</span> <span class="o">=</span> <span class="n">nicePath</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">nicePath</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="returnNicePath"><a class="viewcode-back" href="../../utils.html#System.utils.returnNicePath">[docs]</a><span class="k">def</span> <span class="nf">returnNicePath</span><span class="p">(</span><span class="n">toolsPath</span><span class="p">,</span> <span class="n">imagePath</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Take the incoming path and file and use os.path.join to create a new file path. Then replace all</span>
+<span class="sd"> back slashes with forward slashes.</span>
+
+<span class="sd"> :param toolsPath: the base directory path</span>
+<span class="sd"> :param imagePath: the file name to join onto the base path</span>
+<span class="sd"> :return: a joined path with only forward slashes</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">image</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">toolsPath</span><span class="p">,</span> <span class="n">imagePath</span><span class="p">))</span>
+ <span class="k">if</span> <span class="n">image</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+ <span class="n">image</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">image</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="splitMesh"><a class="viewcode-back" href="../../utils.html#System.utils.splitMesh">[docs]</a><span class="k">def</span> <span class="nf">splitMesh</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">assetName</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Take the given mesh and break it into chunks based on the influence weights of each bone. For example,</span>
+<span class="sd"> if the mesh was a leg that was skinned to a thigh bone, a calf bone, and a foot bone, this function will</span>
+<span class="sd"> split the leg mesh into three new meshes, one for each major influence. This is sometimes known as an</span>
+<span class="sd"> &quot;anim mesh&quot;</span>
+
+<span class="sd"> :param mesh: name of mesh to split up</span>
+<span class="sd"> :param assetName: name of character or rig (the name given on publish)</span>
+<span class="sd"> :return: a list of the newly created meshes</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># get mesh&#39;s skinCluster</span>
+ <span class="n">skinCluster</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">findRelatedSkinCluster</span><span class="p">(</span><span class="n">mesh</span><span class="p">)</span>
+
+ <span class="c1"># get the influences in that skinCluster</span>
+ <span class="n">influences</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinCluster</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">inf</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># create a group if it doesn&#39;t exist</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">assetName</span> <span class="o">+</span> <span class="s2">&quot;_animMeshGrp&quot;</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="n">empty</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">assetName</span> <span class="o">+</span> <span class="s2">&quot;_animMeshGrp&quot;</span><span class="p">)</span>
+
+ <span class="n">newMeshes</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="c1"># loop through each influence, creating a mesh for that influnece is applicable</span>
+ <span class="k">for</span> <span class="n">influence</span> <span class="ow">in</span> <span class="n">influences</span><span class="p">:</span>
+ <span class="c1"># create a new mesh</span>
+ <span class="k">if</span> <span class="n">cmds</span><span class="o">.</span><span class="n">objExists</span><span class="p">(</span><span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">influence</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">&quot;Mesh with name: &quot;</span> <span class="o">+</span> <span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">influence</span> <span class="o">+</span> <span class="s2">&quot; already exists. Skipping.&quot;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">newMesh</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">duplicate</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="n">influence</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+
+ <span class="c1"># unlock attrs so we can add a constraint later</span>
+ <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;.tx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ty&quot;</span><span class="p">,</span> <span class="s2">&quot;.tz&quot;</span><span class="p">,</span> <span class="s2">&quot;.rx&quot;</span><span class="p">,</span> <span class="s2">&quot;.ry&quot;</span><span class="p">,</span> <span class="s2">&quot;.rz&quot;</span><span class="p">]:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">setAttr</span><span class="p">(</span><span class="n">newMesh</span> <span class="o">+</span> <span class="n">attr</span><span class="p">,</span> <span class="n">lock</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># if there is only 1 influence, constrain the entire mesh as is</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">influences</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">influence</span><span class="p">,</span> <span class="n">newMesh</span><span class="p">,</span> <span class="n">mo</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># otherwise, loop through each influence getting the components affected by that influence</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">verts</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="n">notWeighted</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">polyEvaluate</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="kc">True</span><span class="p">)):</span>
+ <span class="n">value</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">skinPercent</span><span class="p">(</span><span class="n">skinCluster</span><span class="p">,</span> <span class="n">mesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span><span class="p">,</span> <span class="n">transform</span><span class="o">=</span><span class="n">influence</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">value</span> <span class="o">&gt;</span> <span class="mf">0.5</span><span class="p">:</span>
+ <span class="n">verts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newMesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">notWeighted</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newMesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;]&quot;</span><span class="p">)</span>
+
+ <span class="c1"># if the amount of non-weighted verts is the same as the number of verts in the mesh, delete the mesh.</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">notWeighted</span><span class="p">)</span> <span class="o">==</span> <span class="n">cmds</span><span class="o">.</span><span class="n">polyEvaluate</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">newMesh</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">verts</span><span class="p">:</span>
+ <span class="c1"># select all verts</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">newMesh</span> <span class="o">+</span> <span class="s2">&quot;.vtx[*]&quot;</span><span class="p">)</span>
+
+ <span class="c1"># Convert the selection to contained faces</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">verts</span><span class="p">)</span> <span class="o">!=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">polyEvaluate</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+ <span class="c1"># unselect the verts we want to keep, convert remaining to faces and delete</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">verts</span><span class="p">,</span> <span class="n">tgl</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">cmds</span><span class="o">.</span><span class="n">polyListComponentConversion</span><span class="p">(</span><span class="n">fv</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">tf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">internal</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
+
+ <span class="c1"># constrain mesh to influence, parent mesh to group</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parentConstraint</span><span class="p">(</span><span class="n">influence</span><span class="p">,</span> <span class="n">newMesh</span><span class="p">,</span> <span class="n">mo</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="n">newMesh</span><span class="p">,</span> <span class="n">assetName</span> <span class="o">+</span> <span class="s2">&quot;_animMeshGrp&quot;</span><span class="p">)</span>
+
+ <span class="c1"># fill holes, triangulate, and smooth normals</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">polyCloseBorder</span><span class="p">(</span><span class="n">newMesh</span><span class="p">,</span> <span class="n">ch</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">polyTriangulate</span><span class="p">(</span><span class="n">newMesh</span><span class="p">,</span> <span class="n">ch</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">polySoftEdge</span><span class="p">(</span><span class="n">newMesh</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">90</span><span class="p">,</span> <span class="n">ch</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+ <span class="n">newMeshes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">newMesh</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="p">(</span><span class="n">newMeshes</span><span class="p">)</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="findAllSkinnableGeo"><a class="viewcode-back" href="../../utils.html#System.utils.findAllSkinnableGeo">[docs]</a><span class="k">def</span> <span class="nf">findAllSkinnableGeo</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Find all meshes in the scene, list their parents. If the parent is not part of the joint mover (proxy geo,</span>
+<span class="sd"> lra representations, or bone representation geo) add it to the list of meshes that can be skinned.</span>
+
+<span class="sd"> :return: a list of geometry that is valid for skinning.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">meshes</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">ls</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="s2">&quot;mesh&quot;</span><span class="p">)</span>
+ <span class="n">skinnableGeo</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">meshes</span><span class="p">:</span>
+ <span class="n">parent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">&quot;transform&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">parent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;proxy_geo&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;lra&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;bone_geo&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">skinnableGeo</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">parent</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;proxy_geo&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="c1"># get that parent</span>
+ <span class="n">transformParent</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">listRelatives</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">transformParent</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">transformParent</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;skinned&quot;</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">skinnableGeo</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
+
+ <span class="n">skinnableGeo</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">skinnableGeo</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">skinnableGeo</span></div>
+
+
+<span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+<div class="viewcode-block" id="getMayaPyLoc"><a class="viewcode-back" href="../../utils.html#System.utils.getMayaPyLoc">[docs]</a><span class="k">def</span> <span class="nf">getMayaPyLoc</span><span class="p">():</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This function finds the location of the mayapy interpreter for batch functions.</span>
+
+<span class="sd"> :return: mayapy location</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">operatingSystem</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">about</span><span class="p">(</span><span class="n">operatingSystem</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+ <span class="n">windows</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;win64&quot;</span><span class="p">,</span> <span class="s2">&quot;nt&quot;</span><span class="p">]</span>
+ <span class="n">linux</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;linux&quot;</span><span class="p">,</span> <span class="s2">&quot;linux64&quot;</span><span class="p">]</span>
+ <span class="n">mac</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;mac&quot;</span><span class="p">]</span>
+
+ <span class="n">mayaLoc</span> <span class="o">=</span> <span class="kc">None</span>
+ <span class="n">mayapy</span> <span class="o">=</span> <span class="kc">None</span>
+
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
+ <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;MAYA_LOCATION&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
+ <span class="n">mayaLoc</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">operatingSystem</span> <span class="ow">in</span> <span class="n">windows</span><span class="p">:</span>
+ <span class="n">mayapy</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mayaLoc</span><span class="p">,</span> <span class="s2">&quot;bin&quot;</span><span class="p">))</span>
+ <span class="n">mayapy</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mayapy</span><span class="p">,</span> <span class="s2">&quot;mayapy.exe&quot;</span><span class="p">))</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c1"># need to confirm this works on Linux and Mac OS</span>
+ <span class="n">mayapy</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mayaLoc</span><span class="p">,</span> <span class="s2">&quot;bin&quot;</span><span class="p">))</span>
+ <span class="n">mayapy</span> <span class="o">=</span> <span class="n">returnFriendlyPath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mayapy</span><span class="p">,</span> <span class="s2">&quot;mayapy&quot;</span><span class="p">))</span>
+
+
+ <span class="k">return</span> <span class="n">mayapy</span></div>
+</pre></div>
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../../index.html">ARTv2 1.0 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2017, Jeremy Ernst.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.2.
+ </div>
+ </body>
+</html> \ No newline at end of file