aboutsummaryrefslogtreecommitdiff
path: root/Documentation/build/_modules/RigModules/ART_Head.html
diff options
context:
space:
mode:
authorMobileMachine\jeremy <[email protected]>2017-06-06 22:59:03 -0400
committerMobileMachine\jeremy <[email protected]>2017-06-06 22:59:03 -0400
commit24725fa8681f906ab44d80687c09fecc171a2896 (patch)
tree312a601df29aca7f8db9f44082d96ebc7a679138 /Documentation/build/_modules/RigModules/ART_Head.html
parentInitial commit (diff)
downloadartv2-24725fa8681f906ab44d80687c09fecc171a2896.tar.xz
artv2-24725fa8681f906ab44d80687c09fecc171a2896.zip
Initial Submission
First submission of current state of ARTv2. Currently considered to be in Alpha. There are a couple of animation tools not implemented yet, and one module not implemented yet, as well as incomplete documentation.
Diffstat (limited to 'Documentation/build/_modules/RigModules/ART_Head.html')
-rw-r--r--Documentation/build/_modules/RigModules/ART_Head.html1164
1 files changed, 1164 insertions, 0 deletions
diff --git a/Documentation/build/_modules/RigModules/ART_Head.html b/Documentation/build/_modules/RigModules/ART_Head.html
new file mode 100644
index 0000000..ab3c49e
--- /dev/null
+++ b/Documentation/build/_modules/RigModules/ART_Head.html
@@ -0,0 +1,1164 @@
+
+
+<!doctype html>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>RigModules.ART_Head &#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 RigModules.ART_Head</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">File Attributes</span>
+<span class="sd">===============</span>
+<span class="sd"> * **icon:** This is the image file (125x75 .png) that gets used in the RigCreatorUI</span>
+
+<span class="sd"> * **hoverIcon:** When you hover over the module in the module list, it will swap to this icon</span>
+<span class="sd"> (background changes to orange). There are .psd template files for these.</span>
+
+<span class="sd"> * **search:** These are search terms that are accepted when searching the list of modules in the</span>
+<span class="sd"> RigCreatorUI</span>
+
+<span class="sd"> * **class name:** The name of the class.</span>
+
+<span class="sd"> * **jointMover:** The relative path to the joint mover file. Relative to the ARTv2 root directory.</span>
+
+<span class="sd"> * **baseName:** The default name the module will get created with. Users can then add a prefix and/or</span>
+<span class="sd"> suffix to the base name.</span>
+
+<span class="sd"> * **rigs:** This is a simple list of what rigs this module can build. This feature isn&#39;t implemented yet,</span>
+<span class="sd"> but the plan is to query this list and present these options to the user for them to select what rigs</span>
+<span class="sd"> they want to build for the module. Right now, it will build all rigs.</span>
+
+<span class="sd"> * **fbxImport:** This is a list that will show the options for the module in the import mocap interface.</span>
+<span class="sd"> Normally, this list will have at least None and FK.</span>
+
+<span class="sd"> * **matchData:** This is a list of options that will be presented for the module in a comboBox in the</span>
+<span class="sd"> match over frame range interface. First argument is a bool as to whether the module can or can&#39;t</span>
+<span class="sd"> match. The second arg is a list of strings to display for the match options. For example:</span>
+<span class="sd"> matchData = [True, [&quot;Match FK to IK&quot;, &quot;Match IK to FK&quot;]]</span>
+
+<span class="sd"> * **controlTypes:** This is a list of lists, where each item in the main list is a list comprised of the</span>
+<span class="sd"> name of the attribute that gets added to the network node that contains the control information.</span>
+<span class="sd"> The second arg in each list entry is a control type, like FK or IK. This is used in the select</span>
+<span class="sd"> rig controls interface for filtering out which controls on each module you want to select. On</span>
+<span class="sd"> this module, the values are: controlTypes = [[&quot;fkControls&quot;, &quot;FK&quot;]], which means that the</span>
+<span class="sd"> attribute that holds the control info is called fkControls, and those controls are of type FK.</span>
+
+<span class="sd"> .. image:: /images/selectRigControls.png</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">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">maya.cmds</span> <span class="k">as</span> <span class="nn">cmds</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">from</span> <span class="nn">System.ART_RigModule</span> <span class="k">import</span> <span class="n">ART_RigModule</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">icon</span> <span class="o">=</span> <span class="s2">&quot;Modules/head.png&quot;</span>
+<span class="n">hoverIcon</span> <span class="o">=</span> <span class="s2">&quot;Modules/hover_head.png&quot;</span>
+<span class="n">search</span> <span class="o">=</span> <span class="s2">&quot;biped:head:neck&quot;</span>
+<span class="n">className</span> <span class="o">=</span> <span class="s2">&quot;ART_Head&quot;</span>
+<span class="n">jointMover</span> <span class="o">=</span> <span class="s2">&quot;Core/JointMover/ART_Head_1Neck.ma&quot;</span>
+<span class="n">baseName</span> <span class="o">=</span> <span class="s2">&quot;Head&quot;</span>
+<span class="n">rigs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;FK&quot;</span><span class="p">]</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> <span class="c1"># This is for matching over frame range options. (Matching between rigs of the module)</span>
+<span class="n">controlTypes</span> <span class="o">=</span> <span class="p">[[</span><span class="s2">&quot;fkControls&quot;</span><span class="p">,</span> <span class="s2">&quot;FK&quot;</span><span class="p">]]</span>
+
+
+<div class="viewcode-block" id="ART_Head"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head">[docs]</a><span class="k">class</span> <span class="nc">ART_Head</span><span class="p">(</span><span class="n">ART_RigModule</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;This class creates the head module&quot;&quot;&quot;</span>
+
+<div class="viewcode-block" id="ART_Head.__init__"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.__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">rigUiInst</span><span class="p">,</span> <span class="n">moduleUserName</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 rigUiInst: This is the rig creator interface instance being passed in.</span>
+<span class="sd"> :param moduleUserName: 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.rigUiInst:** take the passed in interface instance and make it a class var</span>
+<span class="sd"> * **self.moduleUserName:** take the passed in moduleUserName and make it a class var</span>
+<span class="sd"> * **self.outlinerWidget:** an empty list that will hold all of the widgets added to 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="bp">self</span><span class="o">.</span><span class="n">rigUiInst</span> <span class="o">=</span> <span class="n">rigUiInst</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">moduleUserName</span> <span class="o">=</span> <span class="n">moduleUserName</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">outlinerWidgets</span> <span class="o">=</span> <span class="p">{}</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="n">ART_RigModule</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;ART_Head_Module&quot;</span><span class="p">,</span> <span class="s2">&quot;ART_Head&quot;</span><span class="p">,</span> <span class="n">moduleUserName</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_Head.addAttributes"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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 custom attributes this module needs to the network node.</span>
+
+<span class="sd"> Always calls on base class function first, then extends with any attributes unique to the class.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># call the base class method first to hook up our connections to the master module</span>
+ <span class="n">ART_RigModule</span><span class="o">.</span><span class="n">addAttributes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="c1"># add custom attributes for this specific 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;Created_Bones&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;.Created_Bones&quot;</span><span class="p">,</span> <span class="s2">&quot;neck_01::head::&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">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;baseName&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;.baseName&quot;</span><span class="p">,</span> <span class="n">baseName</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">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;canAim&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;.canAim&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="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;aimMode&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;.aimMode&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="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;neckJoints&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;.neckJoints&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></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_Head.skeletonSettings_UI"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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="sd">&quot;&quot;&quot;</span>
+<span class="sd"> This is the UI for the module that has all of the configuration settings.</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"> Build the groupBox that contains all of the settings for this module. Parent the groupBox</span>
+<span class="sd"> into the main skeletonSettingsUI layout.</span>
+<span class="sd"> Lastly, call on updateSettingsUI to populate the UI based off of the network node values.</span>
+
+<span class="sd"> .. image:: /images/skeletonSettings.png</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+ <span class="c1"># width, height, checkable</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">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">8</span><span class="p">)</span>
+
+ <span class="n">headerFont</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">headerFont</span><span class="o">.</span><span class="n">setPointSize</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
+ <span class="n">headerFont</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="c1"># groupbox all modules get</span>
+ <span class="n">ART_RigModule</span><span class="o">.</span><span class="n">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="mi">335</span><span class="p">,</span> <span class="mi">228</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+
+ <span class="c1"># STANDARD BUTTONS</span>
+
+ <span class="c1"># create a VBoxLayout to add to our Groupbox and then add a QFrame for our signal/slot</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">groupBox</span><span class="p">)</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">groupBox</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="bp">self</span><span class="o">.</span><span class="n">frame</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="bp">self</span><span class="o">.</span><span class="n">frame</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">320</span><span class="p">,</span> <span class="mi">210</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">frame</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">320</span><span class="p">,</span> <span class="mi">210</span><span class="p">))</span>
+
+ <span class="c1"># create layout that is a child of the frame</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">layout</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"># current parent</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">currentParentMod</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">layout</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">currentParentMod</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">currentParentLabel</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;Current Parent: &quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">currentParentLabel</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="bp">self</span><span class="o">.</span><span class="n">currentParentMod</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">currentParentLabel</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="bp">self</span><span class="o">.</span><span class="n">currentParent</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">parent</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">currentParent</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="bp">self</span><span class="o">.</span><span class="n">currentParent</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">currentParentMod</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">currentParent</span><span class="p">)</span>
+
+ <span class="c1"># button layout for name/parent</span>
+ <span class="bp">self</span><span class="o">.</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">layout</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">buttonLayout</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">changeNameBtn</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;Change Name&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">changeParentBtn</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;Change Parent&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</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">changeNameBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</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">changeParentBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">changeNameBtn</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">changeParentBtn</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"># bake offsets button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeToolsLayout</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">layout</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">bakeToolsLayout</span><span class="p">)</span>
+
+ <span class="c1"># Bake OFfsets</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeOffsetsBtn</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;Bake Offsets&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeOffsetsBtn</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">headerFont</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeToolsLayout</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">bakeOffsetsBtn</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeOffsetsBtn</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">bakeOffsets</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeOffsetsBtn</span><span class="o">.</span><span class="n">setToolTip</span><span class="p">(</span><span class="s2">&quot;Bake the offset mover values up to the global movers to get them in sync&quot;</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">bakeOffsetsBtn</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"># button signal/slots</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">changeNameBtn</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">changeModuleName</span><span class="p">,</span> <span class="n">baseName</span><span class="p">,</span> <span class="bp">self</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="bp">self</span><span class="o">.</span><span class="n">changeParentBtn</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">changeModuleParent</span><span class="p">,</span> <span class="bp">self</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="c1"># Number of Neck Bones</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">neckLayout</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">layout</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">neckLayout</span><span class="p">)</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeckBonesLabel</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;Number of Neck Bones: &quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeckBonesLabel</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="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">Preferred</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeckBonesLabel</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">numNeckBonesLabel</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">neckLayout</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">numNeckBonesLabel</span><span class="p">))</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QSpinBox</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</span><span class="o">.</span><span class="n">setMaximum</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">numNeck</span><span class="o">.</span><span class="n">setMinimum</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">numNeck</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">100</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">numNeck</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">100</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">numNeck</span><span class="o">.</span><span class="n">setValue</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">numNeck</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="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="bp">self</span><span class="o">.</span><span class="n">neckLayout</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">numNeck</span><span class="p">)</span>
+
+ <span class="c1"># rebuild button</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">10</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="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="bp">self</span><span class="o">.</span><span class="n">layout</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="bp">self</span><span class="o">.</span><span class="n">applyButton</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;Apply Changes&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">layout</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">applyButton</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">headerFont</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</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">40</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</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">40</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</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="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="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">setEnabled</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">applyButton</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">applyModuleChanges</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span>
+
+ <span class="c1"># spinBox &amp; checkbox signal/slots</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</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="bp">self</span><span class="o">.</span><span class="n">toggleButtonState</span><span class="p">)</span>
+
+ <span class="c1"># signal slot for groupbox checkbox</span>
+ <span class="n">QtCore</span><span class="o">.</span><span class="n">QObject</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">groupBox</span><span class="p">,</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">SIGNAL</span><span class="p">(</span><span class="s2">&quot;toggled(bool)&quot;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">setVisible</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">setChecked</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># add custom skeletonUI settings name, parent, rig types to install, mirror module, etc.</span>
+ <span class="c1"># add to the rig cretor UI&#39;s module settings layout VBoxLayout</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">addWidget</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">groupBox</span><span class="p">)</span>
+
+ <span class="c1"># Populate the settings UI based on the network node attributes</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateSettingsUI</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_Head.updateSettingsUI"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Update the skeleton settings UI based on the network node values for this 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">numNeck</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;.neckJoints&quot;</span><span class="p">)</span>
+
+ <span class="c1"># update UI elements</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">numNeck</span><span class="p">)</span>
+
+ <span class="c1"># apply changes</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">setEnabled</span><span class="p">(</span><span class="kc">False</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_Head.updateNeck"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.updateNeck">[docs]</a> <span class="k">def</span> <span class="nf">updateNeck</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attachedModules</span><span class="p">,</span> <span class="n">oldNum</span><span class="p">):</span>
+
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Take the number of neck bones value and rebuild the joint mover.</span>
+
+<span class="sd"> The head module has 3 joint mover files, 1 for each possible neck number. When the number of neck bones is</span>
+<span class="sd"> changed, the current module has its information stored (placement, etc), the module is then deleted,</span>
+<span class="sd"> the new joint mover path is constructed and brought in, and lastly it resolves any dependency issues.</span>
+<span class="sd"> (Like if there was a leaf joint as a child of a neck bone that no longer exists)</span>
+
+<span class="sd"> :param attachedModules: self.checkForDependencies()</span>
+<span class="sd"> :param oldNum: the existing amount of neck bones prior to the update</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># gather information (current name, current parent, etc)</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">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">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">newNum</span> <span class="o">=</span> <span class="nb">int</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;.neckJoints&quot;</span><span class="p">))</span>
+
+ <span class="c1"># call on base class delete</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="c1"># store mover positions (movers = [all global, all offset, all geo])</span>
+ <span class="n">basePositions</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">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">mover</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="n">attrValues</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">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="n">attrValues</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="n">basePositions</span><span class="p">[</span><span class="n">mover</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrValues</span>
+
+ <span class="c1"># delete joint mover</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"># build new jmPath name</span>
+ <span class="n">jmPath</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="s2">&quot;.ma&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</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">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">newNum</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;Neck.ma&quot;</span> <span class="c1"># ART_Head_1Neck</span>
+ <span class="bp">self</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="c1"># apply base positions</span>
+ <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">basePositions</span><span class="p">:</span>
+
+ <span class="n">mover</span> <span class="o">=</span> <span class="n">key</span>
+ <span class="n">attrList</span> <span class="o">=</span> <span class="n">basePositions</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">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrList</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="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;.&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">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+
+ <span class="c1"># parent the joint mover to the offset mover of the parent</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="s2">&quot;&quot;</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="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="c1"># delete the old constraint and create the new one</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;_mover_grp_parentConstraint*&quot;</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_parentConstraint*&quot;</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="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">mo</span><span class="o">=</span><span class="kc">True</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;_mover_grp_scaleConstraint*&quot;</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_scaleConstraint*&quot;</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">scaleConstraint</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;_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="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">name</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">name</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>
+ <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"># if there were any module dependencies, fix those now.</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">elementList</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">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">currentParent</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">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="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="k">if</span> <span class="n">currentParent</span> <span class="o">!=</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">parentConstraint</span><span class="p">(</span><span class="s2">&quot;root_mover&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="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="s2">&quot;root_mover&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="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">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="c1"># then, update settings UI for those dependency modules to display new parent info</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="k">if</span> <span class="n">each</span><span class="p">[</span><span class="mi">0</span><span class="p">]</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">each</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;.moduleName&quot;</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">modInst</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="k">if</span> <span class="n">modInst</span><span class="o">.</span><span class="n">networkNode</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="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">modInst</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"># create the connection geo between the two</span>
+ <span class="n">mover</span> <span class="o">=</span> <span class="s2">&quot;root_mover&quot;</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"># warn user about changes</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 due to the change</span><span class="se">\</span>
+<span class="s2"> 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_Head.applyModuleChanges"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Update the scene after the settings are changed in the skeleton settings UI.</span>
+
+<span class="sd"> This means also updating the created_bones attr, updating the joint mover if needed,</span>
+<span class="sd"> running self.updateNeck, updating the outliner, and updating the bone count.</span>
+
+<span class="sd"> :param moduleInst: self (usually, but there are cases like templates where an inst on disc is passed in.)</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="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="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="c1"># create list of the new created bones</span>
+ <span class="n">joints</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># get current neck value</span>
+ <span class="n">currentNum</span> <span class="o">=</span> <span class="nb">int</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;.neckJoints&quot;</span><span class="p">))</span>
+
+ <span class="c1"># get new neck value</span>
+ <span class="n">uiNeckVal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</span><span class="o">.</span><span class="n">value</span><span class="p">()</span>
+
+ <span class="k">if</span> <span class="n">uiNeckVal</span> <span class="o">!=</span> <span class="n">currentNum</span><span class="p">:</span>
+ <span class="c1"># update neck value, and call on update neck</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;.neckJoints&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;.neckJoints&quot;</span><span class="p">,</span> <span class="n">uiNeckVal</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"># look 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="bp">self</span><span class="o">.</span><span class="n">updateNeck</span><span class="p">(</span><span class="n">attachedModules</span><span class="p">,</span> <span class="n">currentNum</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">uiNeckVal</span><span class="p">):</span>
+ <span class="n">joints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s2">&quot;neck_0&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">suffix</span><span class="p">)</span>
+
+ <span class="n">joints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s2">&quot;head&quot;</span> <span class="o">+</span> <span class="n">suffix</span><span class="p">)</span>
+
+ <span class="c1"># build attrString</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">joints</span><span class="p">:</span>
+ <span class="n">attrString</span> <span class="o">+=</span> <span class="n">bone</span> <span class="o">+</span> <span class="s2">&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;.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">networkNode</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"># reset button</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">setEnabled</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
+
+ <span class="c1"># update outliner</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateOutliner</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="c1"># clear selection</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></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_Head.toggleButtonState"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.toggleButtonState">[docs]</a> <span class="k">def</span> <span class="nf">toggleButtonState</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+
+ <span class="sd">&quot;&quot;&quot;Toggle the state of the Apply Changes button.&quot;&quot;&quot;</span>
+
+ <span class="n">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">isEnabled</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">state</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">applyButton</span><span class="o">.</span><span class="n">setEnabled</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_Head.addJointMoverToOutliner"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Add the joint movers for this module to the outliner.</span>
+
+<span class="sd"> Depending on the module settings, different joint movers may or may not be added. Also, each &quot;joint&quot; usually</span>
+<span class="sd"> has three movers: global, offset, and geo. However, not all joints do, so this method is also used to specify</span>
+<span class="sd"> which joint movers for each joint are added to the outliner.</span>
+
+<span class="sd"> .. image:: /images/outliner.png</span>
+
+<span class="sd"> &quot;&quot;&quot;</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">topLevelItemCount</span><span class="p">()</span>
+
+ <span class="c1"># Add the module to the tree widget in the outliner tab of the rig creator UI</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="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QTreeWidgetItem</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="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">topLevelItem</span><span class="p">(</span><span class="n">index</span><span class="p">)</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="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+ <span class="n">foreground</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QBrush</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="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="o">.</span><span class="n">setForeground</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">foreground</span><span class="p">)</span>
+
+ <span class="c1"># add the neck 01</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;_neck_01&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QTreeWidgetItem</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">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;_neck_01&quot;</span><span class="p">]</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createGlobalMoverButton</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;_neck_01&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</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="bp">self</span><span class="o">.</span><span class="n">createOffsetMoverButton</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;_neck_01&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</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="bp">self</span><span class="o">.</span><span class="n">createMeshMoverButton</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;_neck_01&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</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="c1"># add neck 02</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;_neck_02&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QTreeWidgetItem</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;_neck_01&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</span><span class="p">]</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createGlobalMoverButton</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;_neck_02&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</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="bp">self</span><span class="o">.</span><span class="n">createOffsetMoverButton</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;_neck_02&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</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="bp">self</span><span class="o">.</span><span class="n">createMeshMoverButton</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;_neck_02&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</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="c1"># add neck 03</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;_neck_03&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QTreeWidgetItem</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;_neck_02&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</span><span class="p">]</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createGlobalMoverButton</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;_neck_03&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</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="bp">self</span><span class="o">.</span><span class="n">createOffsetMoverButton</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;_neck_03&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</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="bp">self</span><span class="o">.</span><span class="n">createMeshMoverButton</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;_neck_03&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</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="c1"># add head</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;_head&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">QtWidgets</span><span class="o">.</span><span class="n">QTreeWidgetItem</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">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;_head&quot;</span><span class="p">]</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_head&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createGlobalMoverButton</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;_head&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_head&quot;</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="bp">self</span><span class="o">.</span><span class="n">createOffsetMoverButton</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;_head&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_head&quot;</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="bp">self</span><span class="o">.</span><span class="n">createMeshMoverButton</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;_head&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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_head&quot;</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="c1"># create selection script job for module</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">createScriptJob</span><span class="p">()</span>
+
+ <span class="c1"># update based on spinBox values</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">updateOutliner</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">treeWidget</span><span class="o">.</span><span class="n">expandAll</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_Head.updateOutliner"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Whenever changes are made to the module settings, update the outliner to show the new or removed movers</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="c1"># NECK</span>
+ <span class="n">numNeck</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">numNeck</span><span class="o">.</span><span class="n">value</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">numNeck</span> <span class="o">==</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">numNeck</span> <span class="o">==</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="n">numNeck</span> <span class="o">==</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_01&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_02&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</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="bp">self</span><span class="o">.</span><span class="n">originalName</span> <span class="o">+</span> <span class="s2">&quot;_neck_03&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">setHidden</span><span class="p">(</span><span class="kc">False</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_Head.pinModule"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Pin the module in place so the parent does not move the module. Each module has to define how it needs to be</span>
+<span class="sd"> pinned.</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">topLevelMover</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;_neck_01_mover_grp&quot;</span>
+
+ <span class="k">if</span> <span class="n">state</span><span class="p">:</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="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">loc</span> <span class="o">+</span> <span class="s2">&quot;.v&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="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">topLevelMover</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="n">const</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">loc</span><span class="p">,</span> <span class="n">topLevelMover</span><span class="p">)[</span><span class="mi">0</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">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.pinConstraint&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">networkNode</span><span class="p">,</span> <span class="n">ln</span><span class="o">=</span><span class="s2">&quot;pinConstraint&quot;</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="n">at</span><span class="o">=</span><span class="s2">&quot;message&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">const</span> <span class="o">+</span> <span class="s2">&quot;.message&quot;</span><span class="p">,</span> <span class="n">networkNode</span> <span class="o">+</span> <span class="s2">&quot;.pinConstraint&quot;</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">state</span><span class="p">:</span>
+
+ <span class="n">connections</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;.pinConstraint&quot;</span><span class="p">)</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">connections</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="n">constraint</span> <span class="o">=</span> <span class="n">connections</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="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></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_Head.skinProxyGeo"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Skin the proxy geo brought in by the module. Each module has to define how it wants to skin its proxy geo.</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="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">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">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="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="c1"># get this module&#39;s proxy geo meshes</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">proxyGeoMeshes</span> <span class="o">=</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="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;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="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">each</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="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="n">proxyGeoMeshes</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="c1"># skin the proxy geo meshes</span>
+ <span class="k">for</span> <span class="n">mesh</span> <span class="ow">in</span> <span class="n">proxyGeoMeshes</span><span class="p">:</span>
+ <span class="n">dupeMesh</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="s2">&quot;skin_&quot;</span> <span class="o">+</span> <span class="n">mesh</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">dupeMesh</span> <span class="o">+</span> <span class="s2">&quot;.overrideEnabled&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">dupeMesh</span> <span class="o">+</span> <span class="s2">&quot;.overrideDisplayType&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="c1"># create skinned geo group</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;skinned_proxy_geo&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;skinned_proxy_geo&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">dupeMesh</span><span class="p">,</span> <span class="s2">&quot;skinned_proxy_geo&quot;</span><span class="p">)</span>
+
+ <span class="n">boneName</span> <span class="o">=</span> <span class="n">mesh</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_&quot;</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">boneName</span> <span class="o">=</span> <span class="n">boneName</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s2">&quot;_proxy_geo&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">joint</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">boneName</span> <span class="o">+</span> <span class="n">suffix</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">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">dupeMesh</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">dupeMesh</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">skinCluster</span><span class="p">(</span><span class="n">tsb</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">maximumInfluences</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">obeyMaxInfluences</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">bindMethod</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">skinMethod</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">normalizeWeights</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></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_Head.buildRigCustom"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Build the rigs for this module.</span>
+
+<span class="sd"> This method defines what rigs are built and how they are built when the asset is published. It posts any build</span>
+<span class="sd"> info to the passed in textEdit.</span>
+
+<span class="sd"> :param textEdit: passed in text edit that the rig build can post updates to</span>
+<span class="sd"> :param uiInst: passed in instance of the buildProgressUI</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="k">if</span> <span class="n">textEdit</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">textEdit</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; Building &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; Rig..&quot;</span><span class="p">)</span>
+
+ <span class="c1"># get the created joints</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">parentBone</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">joints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">returnCreatedJoints</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># create groups and settings</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+
+ <span class="c1"># create the rig group</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigGrp</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_group&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">parentBone</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigGrp</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"># create the rig settings group</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigSettings</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_settings&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="bp">self</span><span class="o">.</span><span class="n">rigSettings</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigGrp</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="n">cmds</span><span class="o">.</span><span class="n">listAttr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigSettings</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="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">rigSettings</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">True</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"># create the ctrl group (what will get the constraint to the parent)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">rigCtrlGrp</span> <span class="o">=</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="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_ctrl_grp&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">parentBone</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigCtrlGrp</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="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rigCtrlGrp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigGrp</span><span class="p">)</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># Build the FK Neck Rig</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+
+ <span class="n">fkControls</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">topNode</span> <span class="o">=</span> <span class="kc">None</span>
+
+ <span class="c1"># get number of neck bones</span>
+ <span class="n">numNeck</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;.neckJoints&quot;</span><span class="p">)</span>
+ <span class="n">neckJoints</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="nb">len</span><span class="p">(</span><span class="n">joints</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
+ <span class="n">neckJoints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">joints</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
+
+ <span class="c1"># create FK controls for neck joints, adding space switching to base neck joint</span>
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">neckJoints</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">joint</span> <span class="o">==</span> <span class="n">joints</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createControlFromMover</span><span class="p">(</span><span class="n">joint</span><span class="p">,</span> <span class="n">networkNode</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">fkControl</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim&quot;</span><span class="p">)</span>
+ <span class="n">animGrp</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim_grp&quot;</span><span class="p">)</span>
+ <span class="n">spaceSwitcher</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim_space_switcher&quot;</span><span class="p">)</span>
+ <span class="n">spaceSwitchFollow</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim_space_switcher_follow&quot;</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">topNode</span> <span class="o">=</span> <span class="n">spaceSwitchFollow</span>
+
+ <span class="n">fkControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">spaceSwitchFollow</span><span class="p">,</span> <span class="n">fkControl</span><span class="p">,</span> <span class="n">joint</span><span class="p">])</span>
+ <span class="c1"># color the control</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">colorControl</span><span class="p">(</span><span class="n">fkControl</span><span class="p">,</span> <span class="mi">18</span><span class="p">)</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createControlFromMover</span><span class="p">(</span><span class="n">joint</span><span class="p">,</span> <span class="n">networkNode</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="n">fkControl</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim&quot;</span><span class="p">)</span>
+ <span class="n">animGrp</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim_grp&quot;</span><span class="p">)</span>
+
+ <span class="n">fkControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">animGrp</span><span class="p">,</span> <span class="n">fkControl</span><span class="p">,</span> <span class="n">joint</span><span class="p">])</span>
+
+ <span class="c1"># color the control</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">colorControl</span><span class="p">(</span><span class="n">fkControl</span><span class="p">,</span> <span class="mi">18</span><span class="p">)</span>
+
+ <span class="c1"># create hierarchy</span>
+ <span class="n">fkControls</span><span class="o">.</span><span class="n">reverse</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">fkControls</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="n">fkControls</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">fkControls</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
+ <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+ <span class="k">pass</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># Build the FK Head Rig</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="n">headJoint</span> <span class="o">=</span> <span class="n">joints</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+ <span class="n">data</span> <span class="o">=</span> <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createControlFromMover</span><span class="p">(</span><span class="n">headJoint</span><span class="p">,</span> <span class="n">networkNode</span><span class="p">,</span> <span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+
+ <span class="n">headControl</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">headJoint</span> <span class="o">+</span> <span class="s2">&quot;_anim&quot;</span><span class="p">)</span>
+ <span class="n">animGrp</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">headJoint</span> <span class="o">+</span> <span class="s2">&quot;_anim_grp&quot;</span><span class="p">)</span>
+ <span class="n">spaceSwitcher</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">headJoint</span> <span class="o">+</span> <span class="s2">&quot;_anim_space_switcher&quot;</span><span class="p">)</span>
+ <span class="n">spaceSwitchFollow</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">headJoint</span> <span class="o">+</span> <span class="s2">&quot;_anim_space_switcher_follow&quot;</span><span class="p">)</span>
+
+ <span class="c1"># color the control</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">colorControl</span><span class="p">(</span><span class="n">headControl</span><span class="p">,</span> <span class="mi">17</span><span class="p">)</span>
+
+ <span class="c1"># parent head to neck</span>
+ <span class="n">lastNeck</span> <span class="o">=</span> <span class="n">fkControls</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="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="n">spaceSwitchFollow</span><span class="p">,</span> <span class="n">lastNeck</span><span class="p">)</span>
+
+ <span class="n">fkControls</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">animGrp</span><span class="p">,</span> <span class="n">headControl</span><span class="p">,</span> <span class="n">headJoint</span><span class="p">])</span>
+
+ <span class="c1"># parent head rig to rigGrp</span>
+ <span class="n">cmds</span><span class="o">.</span><span class="n">parent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">topNode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rigCtrlGrp</span><span class="p">)</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># lock attrs</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">fkControls</span><span class="p">:</span>
+ <span class="n">control</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">if</span> <span class="n">control</span> <span class="o">!=</span> <span class="n">headControl</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;.scaleX&quot;</span><span class="p">,</span> <span class="s2">&quot;.scaleY&quot;</span><span class="p">,</span> <span class="s2">&quot;.globalScale&quot;</span><span class="p">,</span> <span class="s2">&quot;.visibility&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">control</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">True</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">else</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;.visibility&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">control</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">True</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"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># hook up to driver skeleton</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">fkControls</span><span class="p">:</span>
+ <span class="n">control</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="n">joint</span> <span class="o">=</span> <span class="n">each</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">pointConstraint</span><span class="p">(</span><span class="n">control</span><span class="p">,</span> <span class="s2">&quot;driver_&quot;</span> <span class="o">+</span> <span class="n">joint</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">orientConstraint</span><span class="p">(</span><span class="n">control</span><span class="p">,</span> <span class="s2">&quot;driver_&quot;</span> <span class="o">+</span> <span class="n">joint</span><span class="p">)</span>
+
+ <span class="c1"># plug master control scale into a new mult node that takes joint.scale into input 1, and master.scale</span>
+ <span class="c1"># into input 2, and plugs that into driver 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="s2">&quot;master_anim&quot;</span><span class="p">):</span>
+ <span class="n">globalScaleMult</span> <span class="o">=</span> <span class="n">cmds</span><span class="o">.</span><span class="n">shadingNode</span><span class="p">(</span><span class="s2">&quot;multiplyDivide&quot;</span><span class="p">,</span> <span class="n">asUtility</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">joint</span> <span class="o">+</span> <span class="s2">&quot;_globalScale&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="s2">&quot;master_anim.scale&quot;</span><span class="p">,</span> <span class="n">globalScaleMult</span> <span class="o">+</span> <span class="s2">&quot;.input1&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">control</span> <span class="o">+</span> <span class="s2">&quot;.scale&quot;</span><span class="p">,</span> <span class="n">globalScaleMult</span> <span class="o">+</span> <span class="s2">&quot;.input2&quot;</span><span class="p">)</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createConstraint</span><span class="p">(</span><span class="n">globalScaleMult</span><span class="p">,</span> <span class="s2">&quot;driver_&quot;</span> <span class="o">+</span> <span class="n">joint</span><span class="p">,</span> <span class="s2">&quot;scale&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;output&quot;</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">riggingUtils</span><span class="o">.</span><span class="n">createConstraint</span><span class="p">(</span><span class="n">control</span><span class="p">,</span> <span class="s2">&quot;driver_&quot;</span> <span class="o">+</span> <span class="n">joint</span><span class="p">,</span> <span class="s2">&quot;scale&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># add info to module</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="n">fkRigData</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">fkControls</span><span class="p">:</span>
+ <span class="n">fkRigData</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">1</span><span class="p">])</span>
+
+ <span class="c1"># add created control info to module</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;.fkControls&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">networkNode</span><span class="p">,</span> <span class="n">ln</span><span class="o">=</span><span class="s2">&quot;fkControls&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">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">fkRigData</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;.fkControls&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="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # Parent Under Offset Ctrl # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># parent under offset_anim if it exists(it always should)</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="s2">&quot;offset_anim&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="bp">self</span><span class="o">.</span><span class="n">rigGrp</span><span class="p">,</span> <span class="s2">&quot;offset_anim&quot;</span><span class="p">)</span>
+
+ <span class="c1"># return data</span>
+ <span class="n">parentBone</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="k">try</span><span class="p">:</span>
+ <span class="n">uiInst</span><span class="o">.</span><span class="n">rigData</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">rigCtrlGrp</span><span class="p">,</span> <span class="s2">&quot;driver_&quot;</span> <span class="o">+</span> <span class="n">parentBone</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="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># update progress</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="c1"># # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</span>
+ <span class="k">if</span> <span class="n">textEdit</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+ <span class="n">textEdit</span><span class="o">.</span><span class="n">setTextColor</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">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">18</span><span class="p">))</span>
+ <span class="n">textEdit</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; SUCCESS: FK Build Complete!&quot;</span><span class="p">)</span>
+ <span class="n">textEdit</span><span class="o">.</span><span class="n">setTextColor</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></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_Head.pickerUI"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.pickerUI">[docs]</a> <span class="k">def</span> <span class="nf">pickerUI</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">center</span><span class="p">,</span> <span class="n">animUI</span><span class="p">,</span> <span class="n">networkNode</span><span class="p">,</span> <span class="n">namespace</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd"> Build the animation picker for the module.</span>
+
+
+<span class="sd"> :param center: the center of the QGraphicsScene</span>
+<span class="sd"> :param animUI: the instance of the AnimationUI</span>
+<span class="sd"> :param networkNode: the module&#39;s network node</span>
+<span class="sd"> :param namespace: the namespace of the character</span>
+
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="bp">self</span><span class="o">.</span><span class="n">namespace</span> <span class="o">=</span> <span class="n">namespace</span>
+ <span class="n">neckJoints</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;.neckJoints&quot;</span><span class="p">)</span>
+
+ <span class="c1"># create qBrushes</span>
+ <span class="n">yellowBrush</span> <span class="o">=</span> <span class="n">QtCore</span><span class="o">.</span><span class="n">Qt</span><span class="o">.</span><span class="n">yellow</span>
+ <span class="n">blueBrush</span> <span class="o">=</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">220</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span>
+ <span class="n">greenBrush</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QColor</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+ <span class="n">clearBrush</span> <span class="o">=</span> <span class="n">QtGui</span><span class="o">.</span><span class="n">QBrush</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">black</span><span class="p">)</span>
+ <span class="n">clearBrush</span><span class="o">.</span><span class="n">setStyle</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">NoBrush</span><span class="p">)</span>
+
+ <span class="c1"># create the picker border item</span>
+ <span class="k">if</span> <span class="n">networkNode</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">moduleNode</span> <span class="o">=</span> <span class="n">networkNode</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="k">else</span><span class="p">:</span>
+ <span class="n">moduleNode</span> <span class="o">=</span> <span class="n">networkNode</span>
+
+ <span class="n">borderItem</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerBorderItem</span><span class="p">(</span><span class="n">center</span><span class="o">.</span><span class="n">x</span><span class="p">()</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="n">center</span><span class="o">.</span><span class="n">y</span><span class="p">()</span> <span class="o">-</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="n">clearBrush</span><span class="p">,</span> <span class="n">moduleNode</span><span class="p">)</span>
+
+ <span class="c1"># get controls</span>
+ <span class="n">fkControls</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;.fkControls&quot;</span><span class="p">))</span>
+ <span class="n">fkControls</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
+ <span class="n">buttonData</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># create buttons</span>
+ <span class="n">headButton</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span>
+ <span class="p">[[</span><span class="mi">10</span><span class="p">,</span> <span class="mi">60</span><span class="p">],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">60</span><span class="p">],</span> <span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">40</span><span class="p">],</span> <span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">10</span><span class="p">],</span> <span class="p">[</span><span class="mi">35</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
+ <span class="p">[</span><span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">40</span><span class="p">],</span> <span class="p">[</span><span class="mi">10</span><span class="p">,</span> <span class="mi">60</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
+ <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">yellowBrush</span><span class="p">,</span> <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">headButton</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">yellowBrush</span><span class="p">])</span>
+
+ <span class="k">if</span> <span class="n">neckJoints</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+ <span class="n">neck1Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span>
+ <span class="p">[[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">8</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">32</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">35</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">85</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">85</span><span class="p">],</span>
+ <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span>
+ <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck1Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="k">if</span> <span class="n">neckJoints</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">neck1Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span>
+ <span class="p">[[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">8</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">32</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">35</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="mi">68</span><span class="p">],</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">68</span><span class="p">],</span>
+ <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span>
+ <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck1Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="n">neck2Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="p">[[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">70</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="mi">70</span><span class="p">],</span> <span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">80</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">80</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
+ <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span> <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck2Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="k">if</span> <span class="n">neckJoints</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
+ <span class="n">neck1Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span>
+ <span class="p">[[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">8</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">32</span><span class="p">,</span> <span class="mi">63</span><span class="p">],</span> <span class="p">[</span><span class="mi">35</span><span class="p">,</span> <span class="mi">55</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="mi">68</span><span class="p">],</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">68</span><span class="p">],</span>
+ <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">55</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span>
+ <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck1Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="n">neck2Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="p">[[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">70</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="mi">70</span><span class="p">],</span> <span class="p">[</span><span class="mi">38</span><span class="p">,</span> <span class="mi">76</span><span class="p">],</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">76</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
+ <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span> <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck2Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="n">neck3Button</span> <span class="o">=</span> <span class="n">interfaceUtils</span><span class="o">.</span><span class="n">pickerButtonCustom</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="p">[[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">78</span><span class="p">],</span> <span class="p">[</span><span class="mi">38</span><span class="p">,</span> <span class="mi">78</span><span class="p">],</span> <span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">84</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">84</span><span class="p">]],</span> <span class="p">[</span><span class="mi">30</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span>
+ <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">,</span> <span class="n">borderItem</span><span class="p">)</span>
+ <span class="n">buttonData</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">neck3Button</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">+</span> <span class="n">fkControls</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">blueBrush</span><span class="p">])</span>
+
+ <span class="c1"># =======================================================================</span>
+ <span class="c1"># go through button data, adding menu items</span>
+ <span class="c1"># =======================================================================</span>
+ <span class="k">for</span> <span class="n">each</span> <span class="ow">in</span> <span class="n">buttonData</span><span class="p">:</span>
+ <span class="n">button</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">zeroIcon1</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">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/zeroAll.png&quot;</span><span class="p">))))</span>
+ <span class="n">zeroIcon2</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">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/zeroSel.png&quot;</span><span class="p">))))</span>
+ <span class="n">selectIcon</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">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/select.png&quot;</span><span class="p">))))</span>
+
+ <span class="n">button</span><span class="o">.</span><span class="n">menu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">selectIcon</span><span class="p">,</span> <span class="s2">&quot;Select All Controls&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">selectRigControls</span><span class="p">))</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">menu</span><span class="o">.</span><span class="n">addSeparator</span><span class="p">()</span>
+
+ <span class="n">button</span><span class="o">.</span><span class="n">menu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">zeroIcon1</span><span class="p">,</span> <span class="s2">&quot;Zero Out Attrs (All)&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">resetRigControls</span><span class="p">,</span> <span class="kc">True</span><span class="p">))</span>
+ <span class="n">button</span><span class="o">.</span><span class="n">menu</span><span class="o">.</span><span class="n">addAction</span><span class="p">(</span><span class="n">zeroIcon2</span><span class="p">,</span> <span class="s2">&quot;Zero Out Attrs (Sel)&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">resetRigControls</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span>
+
+ <span class="c1"># =======================================================================</span>
+ <span class="c1"># #Create scriptJob for selection. Set scriptJob number to borderItem.data(5)</span>
+ <span class="c1"># =======================================================================</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">selectionScriptJob_animUI</span><span class="p">,</span> <span class="n">buttonData</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">borderItem</span><span class="o">.</span><span class="n">setData</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">scriptJob</span><span class="p">)</span>
+ <span class="n">animUI</span><span class="o">.</span><span class="n">selectionScriptJobs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">scriptJob</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="p">[</span><span class="n">borderItem</span><span class="p">,</span> <span class="kc">False</span><span class="p">,</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_Head.importFBX"><a class="viewcode-back" href="../../head.html#RigModules.ART_Head.ART_Head.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"> Import FBX motion onto this module&#39;s rig controls.</span>
+
+<span class="sd"> :param importMethod: The import method to be used (options defined in the file attributes)</span>
+<span class="sd"> :param character: the namespace of the character</span>
+
+<span class="sd"> Each module has to define what import methods it offers (at the very top of the module file) and then define</span>
+<span class="sd"> how motion is imported using those methods.</span>
+<span class="sd"> &quot;&quot;&quot;</span>
+
+ <span class="n">returnControls</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="c1"># get basic info of node</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">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">baseModuleName</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="c1"># find prefix/suffix of module name</span>
+ <span class="n">prefixSuffix</span> <span class="o">=</span> <span class="n">moduleName</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">baseModuleName</span><span class="p">)</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="k">if</span> <span class="n">prefixSuffix</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">prefixSuffix</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+ <span class="k">if</span> <span class="n">prefixSuffix</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">prefixSuffix</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="c1"># get joints</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="c1"># IMPORT FK</span>
+ <span class="k">if</span> <span class="n">importMethod</span> <span class="o">==</span> <span class="s2">&quot;FK&quot;</span><span class="p">:</span>
+
+ <span class="k">for</span> <span class="n">joint</span> <span class="ow">in</span> <span class="n">createdJoints</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">character</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim&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="p">,</span> <span class="n">character</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim&quot;</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">character</span> <span class="o">+</span> <span class="s2">&quot;:&quot;</span> <span class="o">+</span> <span class="s2">&quot;fk_&quot;</span> <span class="o">+</span> <span class="n">joint</span> <span class="o">+</span> <span class="s2">&quot;_anim&quot;</span><span class="p">)</span>
+
+ <span class="c1"># IMPORT NONE</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="k">pass</span>
+
+ <span class="k">return</span> <span class="n">returnControls</span></div></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