diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 0000000..dd2ab95 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,20 @@ +engines: + pep8: + enabled: true + +ratings: + paths: + - "**.py" + +exclude_paths: + - "*/**/widget.py" + - "scripts/mgear/maya/shifter/component/**" + - "**UI.py" + +checks: + file-lines: + config: + threshold: 1000 + method-lines: + config: + threshold: 100 diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..72d0440 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,5 @@ +[run] +source = scripts + +[report] +include = scripts/* diff --git a/.gitignore b/.gitignore index b023134..cd00bb1 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,6 @@ excons.cache /mgear.env.tmp /mgear.config /mGear_cmd.cmd -/mGear.mod +cover/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 955d252..a089f4a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "cvwrap"] path = cvwrap url = https://github.com/miquelcampos/cvwrap.git +[submodule "Qtdotpy"] + path = Qtdotpy + url = https://github.com/mottosso/Qt.py diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..3ed47d0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: python + +python: + - 2.7 + +services: + - docker + +install: + - docker build -t mgear . + +script: + - docker run -ti --rm -v $(pwd):/workspace mgear + diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..744fae2 --- /dev/null +++ b/BUILD.md @@ -0,0 +1,62 @@ +# How to build mGear + +## Prerequisites + +Git (of course) + +Python 2.7 + +SCons + +Maya 2014 ~ 2018 (*) + +A C++ compiler: (*) +- gcc on linux +- clang on OSX +- Visual Studio on windows (**) + +(*) Only when building the plugins + +(**) The version should match the one used by the target Maya version + +## Step by step process + +1. Clone the repository and initialize it + +``` +$ git clone https://github.com/miquelcampos/mgear.git +$ git submodule update --init +``` + +2. Checkout the desired branch or tag + +- **develop** : latest developments +- **master** : latest official release +- **RB-x.x** : latest version in x.x series (i.e. 2.2.5 in RB-2.2) + +``` +$ git checkout develop +$ git submodule update +``` + +3. Compile + +The available targets are: +- **mgear_core** : Only mgear python module. +- **mgear_solvers** : Solvers maya plugin. +- **cvwrap** : cvwrap maya plugin. +- **mgear** : everything (*default*) + +``` +$ scons with-maya=2017 +... +(let it cook) +``` + +To show all available build options: + +```$ scons -h``` + + + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8c5de0f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,252 @@ +## Contributing to mGear + +### Argument shorthands + +In Maya, some arguments have a short equivalent. Don't use it. + +**Wrong** + +```python +pm.workspace(q=True, rd=True) +``` + +**Right** + +```python +pm.workspace(query=True, rootDirectory=True) +``` + +The reason is readability. The second reason is that these shorthands are provided not to make *your* code shorter, but to reduce the filesize of Maya's own internal scene format, the `.ma` files. It's not Pythonic, it's an optimisation. + +
+ +### Members & `__init__` + +Always declare all members of a class in the `__init__` method. + +**Wrong** + +```python +class MyClass(object): + def __init__(self): + super(MyClass, self).__init__() + + self.height = 5 + + def resize(self, width, height): + self.height = height + self.width = width +``` + +**Right** + +```python +class MyClass(object): + def __init__(self): + super(MyClass, self).__init__() + + self.height = 5 + self.width = 5 + + def resize(self, width, height): + self.height = height + self.width = width +``` + +The reason is discoverability. When members are attached to `self` in any subsequent method, it becomes difficult to tell whether it is being created, or modified. More importantly, it becomes impossible to tell which member is used externally. + +```python +from mymodule import MyClass + +myclass = MyClass() +myclass.width = 5 +print(myclass.other_member) +``` + +And at that point, impossible to maintain backwards compatibility should any of the methods creating new members be removed or refactored. + +
+ +### Relative imports + +Where possible, relatively reference the root mgear package. + +**Wrong** + +```python +from mgear.maya import rigbits +``` + +**Right** + +```python +from .maya import rigbits +``` + +This enables mgear to be bundled together with another library, e.g. `from .vendor.mgear import maya` and also avoids mgear being picked up from another location on a user's machine and PYTHONPATH. It also shortens the import line, which is always nice. + +
+ +### Avoid `import as` + +Where possible, avoid the use of `import ... as ...`. + +```python +from mgear.maya import rigbits as rb +``` + +This makes it more difficult to understand where a particular call is coming from, when read by someone who didn't initially make that import. + +```python +swg.run_important_function() +# What does this do? :O +``` + +
+ +### Tuple versus List + +Use List when mutability is required or intended, tuple otherwise. + +```python +for item in ("good", "use", "of", "tuple"): + pass +``` + +Tuples will tell you and the user when used them in an unintended way. + +```python +# You +immutable = (1, 2, 3) + +# User +immutable.append(4) +# ERROR +``` + +Whereas a list would not, and cause a difficult-to-debug error. The fabled "Works on my machine (tm)". + +
+ +### Mutable arguments + +Never use a mutable object in an argument signature. + +```python +def function(wrong=[]): + wrong.append(1) + print(wrong) + + +function() +# [1] +function() +# [1, 1] +function() +# [1, 1, 1] +``` + +The same goes for `{}`. Instead, pass `None` and convert internally. + +```python +def function(wrong=None): + wrong = wrong or [] + wrong.append(1) + print(wrong) + +function() +# [1] +function() +# [1] +function() +# [1] +``` + +
+ +### Docstrings + +All docstrings are written in Google Napoleon format. + +```python +def function(a, b=True): + """Summary here, no line breaks + + Long description here. + + Arguments: + a (str): A first argument, mandatory + b (bool, optional): A second argument + + Example: + >>> print("A doctest") + 'A doctest' + + """ +``` + +
+ +### Quotation Marks + +Default to double-ticks, fallback to single-tick. + +```python +# Right +side = "Right" + +# Wrong +side = 'Left' + +# Right +def function(): + """It's a single tick""" + +# Wrong +def function(): + '''It's a single tick""" +``` + +
+ +### Code Style + +We are refactoring all the code to [PEP8](https://www.python.org/dev/peps/pep-0008/) +If you want to contribute please follow the PEP8 standard + +
+ +#### Ignore PEP8 Errors + +"W503": [Break bfore or after binary operator](https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator) + +#### Line break for long arguments + +```python + +# No +function(arg1, arg2, + kwarg=False, kwarg2=True) + +# No +function( + arg1, arg2, + kwarg=False, kwarg2=True) + +# Yes +function(arg1, + arg2, + kwarg=False, + kwarg2=True) +# Yes +function( + arg1, arg2, kwarg=False, kwarg2=True) + +# OK +function( + arg1, + arg2, + kwarg=False, + kwarg2=True) + +``` \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..82bf01c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM mottosso/maya:2016sp1 + +RUN wget https://bootstrap.pypa.io/get-pip.py && \ + mayapy get-pip.py && \ + mayapy -m pip install \ + nose \ + nose-exclude \ + coverage \ + sphinx \ + six \ + sphinxcontrib-napoleon \ + python-coveralls + +# Support building of Maya plug-ins +RUN yum groupinstall -y 'Development Tools' && \ + yum install -y scons + +RUN git clone https://github.com/autodesk-adn/Maya-devkit.git /devkit && \ + rm -rf /usr/autodesk/maya/devkit \ + /usr/autodesk/maya/mkspecs \ + /usr/autodesk/maya/include && \ + ln -s /devkit/linux/devkit /usr/autodesk/maya/devkit && \ + ln -s /devkit/linux/mkspecs /usr/autodesk/maya/mkspecs && \ + ln -s /devkit/linux/include /usr/autodesk/maya/include + +# Avoid creation of auxilliary files +ENV PYTHONDONTWRITEBYTECODE=1 + +WORKDIR /workspace + +ENTRYPOINT \ + scons no-cache=1 with-maya=2016 with-mayadevkit=/usr/autodesk/maya/devkit && \ + mayapy -u run_tests.py diff --git a/Qtdotpy b/Qtdotpy new file mode 160000 index 0000000..ebf8493 --- /dev/null +++ b/Qtdotpy @@ -0,0 +1 @@ +Subproject commit ebf8493636b3d1b16bebbb22781dd7dfc9435233 diff --git a/README.md b/README.md index 349c0d4..5b8bcf0 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Originally mGear was design and develope by Jeremie Passerin , since 2013 Miquel MGEAR is under the terms of the MIT License -*Latest release: 2.2.4 ( Release Log: https://miquelcampos.github.io/mgear/releaseLog.html) +*Latest release: 2.3.0 ( Release Log: https://miquelcampos.github.io/mgear/releaseLog.html) For the official release, with compiled solvers and example data please download mGear from: https://gumroad.com/l/mgear @@ -14,4 +14,4 @@ Official Documentation: https://miquelcampos.github.io/mgear/ mGear Goggle group: https://groups.google.com/forum/#!forum/mgearusergroup -Youtube channel: https://www.youtube.com/channel/UCJsN2KCAD7qkA6-fOeB2fOw +Youtube channel: https://www.youtube.com/c/mgearriggingframework diff --git a/SConstruct b/SConstruct index 5aeda06..1514480 100644 --- a/SConstruct +++ b/SConstruct @@ -9,7 +9,7 @@ maya.SetupMscver() env = excons.MakeBaseEnv() -version = (2, 2, 4) +version = (2, 3, 0) versionstr = "%d.%d.%d" % version platname = {"win32": "windows", "darwin": "osx"}.get(sys.platform, "linux") outprefix = "platforms/%s/%s/%s/plug-ins" % (maya.Version(nice=True), platname, excons.arch_dir) @@ -19,8 +19,11 @@ outdir = excons.OutputBaseDirectory() gen = excons.config.AddGenerator(env, "mgear", {"MGEAR_VERSION": "[%d, %d, %d]" % version, "MGEAR_MAJMIN_VERSION": "%d.%d" % (version[0], version[1])}) -mgearinit = gen(outdir + "/scripts/mgear/__init__.py", "scripts/mgear/__init__.py.in") +mgearinit = gen("scripts/mgear/__init__.py", "scripts/mgear/__init__.py.in") mgearmod = gen("mGear.mod", "mGear.mod.in") +mgearpy = filter(lambda x: not os.path.basename(x).startswith("__init__.py"), excons.glob("scripts/mgear/*")) +qtpy = ["Qtdotpy/Qt.py"] +NoClean(mgearinit + mgearmod) defines = [] if sys.platform == "win32": @@ -33,6 +36,16 @@ def CVWrapSetup(env): env.Append(CCFLAGS=["-mavx"]) targets = [ + { + "name": "mgear_core", + "type": "install", + "desc": "mgear core python modules", + "install": {"scripts": excons.glob("scripts/*.py"), + "scripts/mgear": mgearpy + mgearinit, + "scripts/mgear/vendor": qtpy, + "tests": excons.glob("tests/*.py"), + "": mgearmod} + }, { "name": "mgear_solvers", "type": "dynamicmodule", @@ -43,12 +56,7 @@ targets = [ "defs": defines, "incdirs": ["src"], "srcs": excons.glob("src/*.cpp"), - "custom": [maya.Require], - "install": {"scripts": excons.glob("scripts/*.py"), - "scripts/mgear": filter(lambda x: not x.endswith(".py.in"), excons.glob("scripts/mgear/*")), - "tests": excons.glob("tests/*.py"), - "": mgearmod}, - "deps": mgearinit + "custom": [maya.Require] }, { "name": "cvwrap", @@ -66,11 +74,11 @@ targets = [ } ] -excons.AddHelpTargets(mgear="mgear maya framework") +excons.AddHelpTargets(mgear="mgear maya framework (mgear_core, mgear_solvers, cvwrap)") td = excons.DeclareTargets(env, targets) -env.Alias("mgear", mgearinit + [td["mgear_solvers"], td["cvwrap"]]) +env.Alias("mgear", [td["mgear_core"], td["mgear_solvers"], td["cvwrap"]]) td["python"] = filter(lambda x: os.path.splitext(str(x))[1] != ".mel", Glob(outdir + "/scripts/*")) td["scripts"] = Glob(outdir + "/scripts/*.mel") diff --git a/cvwrap b/cvwrap index c7b447a..5822afc 160000 --- a/cvwrap +++ b/cvwrap @@ -1 +1 @@ -Subproject commit c7b447aaf29d69ec92ff43ae349955538122b71b +Subproject commit 5822afc50cafd6805ab40ee0010a57de430ca415 diff --git a/docs/source/conf.py b/docs/source/conf.py index 7f7eb11..ce5a2d6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,8 +19,8 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # sys.path.insert(0, os.path.abspath('.')) -sys.path.insert(0, os.path.abspath('C:\\datawork\\repo\\mgear\\scripts')) - +# sys.path.insert(0, os.path.abspath('C:\\datawork\\repo\\mgear\\scripts')) +sys.path.insert(0, os.path.abspath('../')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -29,7 +29,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon', 'sphinx.ext.autosummary'] +extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon', 'sphinx.ext.autosummary', 'sphinx.ext.changelog_links'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -55,9 +55,9 @@ # built documents. # # The short X.Y version. -version = u'2.2' +version = u'2.3' # The full version, including alpha/beta/rc tags. -release = u'2.2.0' +release = u'2.3.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -289,5 +289,6 @@ autosummary_generate = True # autodoc_default_flags = ['special-members'] autoclass_content = "both" +github_issues_url = 'https://github.com/miquelcampos/mgear/issues/' # exclude_patterns = ['mgear/maya/*'] diff --git a/docs/source/generated/mgear.maya.applyop.rst b/docs/source/generated/mgear.maya.applyop.rst index 62eabc1..e8a52e5 100644 --- a/docs/source/generated/mgear.maya.applyop.rst +++ b/docs/source/generated/mgear.maya.applyop.rst @@ -1,5 +1,5 @@ -mgear.maya.applyop -================== +mgear\.maya\.applyop +==================== .. automodule:: mgear.maya.applyop @@ -10,6 +10,7 @@ mgear.maya.applyop .. autosummary:: aimCns + curvecns_op gear_curvecns_op gear_curveslide2_op gear_ikfk2bone_op diff --git a/docs/source/generated/mgear.maya.attribute.rst b/docs/source/generated/mgear.maya.attribute.rst index 166d798..dac940a 100644 --- a/docs/source/generated/mgear.maya.attribute.rst +++ b/docs/source/generated/mgear.maya.attribute.rst @@ -1,5 +1,5 @@ -mgear.maya.attribute -==================== +mgear\.maya\.attribute +====================== .. automodule:: mgear.maya.attribute @@ -13,10 +13,22 @@ mgear.maya.attribute addColorAttribute addEnumAttribute addFCurve + addProxyAttribute + connectSet + getSelectedChannels + getSelectedObjectChannels + get_default_value lockAttribute + moveChannel + reset_SRT + reset_selected_channels_value setInvertMirror setKeyableAttributes + setNotKeyableAttributes setRotOrder + set_default_value + smart_reset + unlockAttribute diff --git a/docs/source/generated/mgear.maya.curve.rst b/docs/source/generated/mgear.maya.curve.rst index d714ae3..4175676 100644 --- a/docs/source/generated/mgear.maya.curve.rst +++ b/docs/source/generated/mgear.maya.curve.rst @@ -1,5 +1,5 @@ -mgear.maya.curve -================ +mgear\.maya\.curve +================== .. automodule:: mgear.maya.curve @@ -12,6 +12,7 @@ mgear.maya.curve addCnsCurve addCurve createCurveFromCurve + createCurveFromOrderedEdges createCuveFromEdges findLenghtFromParam getCurveParamAtPosition diff --git a/docs/source/generated/mgear.maya.dag.rst b/docs/source/generated/mgear.maya.dag.rst index 21c726c..11a49a6 100644 --- a/docs/source/generated/mgear.maya.dag.rst +++ b/docs/source/generated/mgear.maya.dag.rst @@ -1,5 +1,5 @@ -mgear.maya.dag -============== +mgear\.maya\.dag +================ .. automodule:: mgear.maya.dag @@ -13,6 +13,7 @@ mgear.maya.dag findChildren findChildrenPartial findComponentChildren + findComponentChildren2 getShapes getTopParent diff --git a/docs/source/generated/mgear.maya.fcurve.rst b/docs/source/generated/mgear.maya.fcurve.rst index a295283..87be5ab 100644 --- a/docs/source/generated/mgear.maya.fcurve.rst +++ b/docs/source/generated/mgear.maya.fcurve.rst @@ -1,5 +1,5 @@ -mgear.maya.fcurve -================= +mgear\.maya\.fcurve +=================== .. automodule:: mgear.maya.fcurve diff --git a/docs/source/generated/mgear.maya.icon.rst b/docs/source/generated/mgear.maya.icon.rst index e621358..426cb84 100644 --- a/docs/source/generated/mgear.maya.icon.rst +++ b/docs/source/generated/mgear.maya.icon.rst @@ -1,5 +1,5 @@ -mgear.maya.icon -=============== +mgear\.maya\.icon +================= .. automodule:: mgear.maya.icon diff --git a/docs/source/generated/mgear.maya.log.rst b/docs/source/generated/mgear.maya.log.rst index f2c2e1a..73db35b 100644 --- a/docs/source/generated/mgear.maya.log.rst +++ b/docs/source/generated/mgear.maya.log.rst @@ -1,5 +1,5 @@ -mgear.maya.log -============== +mgear\.maya\.log +================ .. automodule:: mgear.maya.log diff --git a/docs/source/generated/mgear.maya.meshNavigation.rst b/docs/source/generated/mgear.maya.meshNavigation.rst index 1c90c13..2d033fe 100644 --- a/docs/source/generated/mgear.maya.meshNavigation.rst +++ b/docs/source/generated/mgear.maya.meshNavigation.rst @@ -1,5 +1,5 @@ -mgear.maya.meshNavigation -========================= +mgear\.maya\.meshNavigation +=========================== .. automodule:: mgear.maya.meshNavigation diff --git a/docs/source/generated/mgear.maya.node.rst b/docs/source/generated/mgear.maya.node.rst index 3edb9a0..6d21093 100644 --- a/docs/source/generated/mgear.maya.node.rst +++ b/docs/source/generated/mgear.maya.node.rst @@ -1,5 +1,5 @@ -mgear.maya.node -=============== +mgear\.maya\.node +================= .. automodule:: mgear.maya.node @@ -23,10 +23,15 @@ mgear.maya.node createMulDivNode createMulNode createMulNodeMulti + createMultMatrixNode createNegateNodeMulti createPairBlend + createPlusMinusAverage1D + createPowNode createReverseNode + createSetRangeNode createSubNode + createVertexPositionNode diff --git a/docs/source/generated/mgear.maya.primitive.rst b/docs/source/generated/mgear.maya.primitive.rst index a53fec5..c0cfc61 100644 --- a/docs/source/generated/mgear.maya.primitive.rst +++ b/docs/source/generated/mgear.maya.primitive.rst @@ -1,5 +1,5 @@ -mgear.maya.primitive -==================== +mgear\.maya\.primitive +====================== .. automodule:: mgear.maya.primitive diff --git a/docs/source/generated/mgear.maya.rst b/docs/source/generated/mgear.maya.rst index d15bc36..ffa8039 100644 --- a/docs/source/generated/mgear.maya.rst +++ b/docs/source/generated/mgear.maya.rst @@ -1,5 +1,5 @@ -mgear.maya -========== +mgear\.maya +=========== .. automodule:: mgear.maya @@ -9,6 +9,7 @@ mgear.maya .. autosummary:: + aboutMgear getMayaVer diff --git a/docs/source/generated/mgear.maya.shifter.component.guide.rst b/docs/source/generated/mgear.maya.shifter.component.guide.rst index d19b17b..b1f3909 100644 --- a/docs/source/generated/mgear.maya.shifter.component.guide.rst +++ b/docs/source/generated/mgear.maya.shifter.component.guide.rst @@ -1,5 +1,5 @@ -mgear.maya.shifter.component.guide -================================== +mgear\.maya\.shifter\.component\.guide +====================================== .. automodule:: mgear.maya.shifter.component.guide @@ -14,9 +14,9 @@ mgear.maya.shifter.component.guide .. autosummary:: ComponentGuide - MainGuide MinMax - partial + componentMainSettings + mainSettingsTab diff --git a/docs/source/generated/mgear.maya.shifter.component.rst b/docs/source/generated/mgear.maya.shifter.component.rst index 8b11afc..57005af 100644 --- a/docs/source/generated/mgear.maya.shifter.component.rst +++ b/docs/source/generated/mgear.maya.shifter.component.rst @@ -1,5 +1,5 @@ -mgear.maya.shifter.component -============================ +mgear\.maya\.shifter\.component +=============================== .. automodule:: mgear.maya.shifter.component @@ -13,6 +13,7 @@ mgear.maya.shifter.component .. autosummary:: + Main MainComponent diff --git a/docs/source/generated/mgear.maya.shifter.gui.rst b/docs/source/generated/mgear.maya.shifter.gui.rst index 00c6db9..99194ec 100644 --- a/docs/source/generated/mgear.maya.shifter.gui.rst +++ b/docs/source/generated/mgear.maya.shifter.gui.rst @@ -1,5 +1,5 @@ -mgear.maya.shifter.gui -====================== +mgear\.maya\.shifter\.gui +========================= .. automodule:: mgear.maya.shifter.gui @@ -14,7 +14,6 @@ mgear.maya.shifter.gui .. autosummary:: Guide_UI - partial diff --git a/docs/source/generated/mgear.maya.shifter.guide.rst b/docs/source/generated/mgear.maya.shifter.guide.rst index f1d5f9c..a60331e 100644 --- a/docs/source/generated/mgear.maya.shifter.guide.rst +++ b/docs/source/generated/mgear.maya.shifter.guide.rst @@ -1,5 +1,5 @@ -mgear.maya.shifter.guide -======================== +mgear\.maya\.shifter\.guide +=========================== .. automodule:: mgear.maya.shifter.guide @@ -13,8 +13,18 @@ mgear.maya.shifter.guide .. autosummary:: + CustomStepTab + GuideSettings + GuideSettingsTab + HelperSlots + Main MainGuide + Rig RigGuide + customStepTab + guideSettings + guideSettingsTab + helperSlots diff --git a/docs/source/generated/mgear.maya.shifter.rst b/docs/source/generated/mgear.maya.shifter.rst index 2994782..e4c76e8 100644 --- a/docs/source/generated/mgear.maya.shifter.rst +++ b/docs/source/generated/mgear.maya.shifter.rst @@ -1,10 +1,18 @@ -mgear.maya.shifter -================== +mgear\.maya\.shifter +==================== .. automodule:: mgear.maya.shifter + .. rubric:: Functions + + .. autosummary:: + + getComponentDirectories + importComponent + importComponentGuide + @@ -13,9 +21,7 @@ mgear.maya.shifter .. autosummary:: - MainComponent Rig - RigGuide diff --git a/docs/source/generated/mgear.maya.skin.rst b/docs/source/generated/mgear.maya.skin.rst index c455c7d..7b0dd04 100644 --- a/docs/source/generated/mgear.maya.skin.rst +++ b/docs/source/generated/mgear.maya.skin.rst @@ -1,5 +1,5 @@ -mgear.maya.skin -=============== +mgear\.maya\.skin +================= .. automodule:: mgear.maya.skin @@ -13,11 +13,13 @@ mgear.maya.skin collectData collectInfluenceWeights exportSkin + exportSkinPack getCurrentWeights getGeometryComponents getObjsFromSkinFile getSkinCluster importSkin + importSkinPack selectDeformers setBlendWeights setData diff --git a/docs/source/generated/mgear.maya.synoptic.rst b/docs/source/generated/mgear.maya.synoptic.rst index 663bba9..afe5063 100644 --- a/docs/source/generated/mgear.maya.synoptic.rst +++ b/docs/source/generated/mgear.maya.synoptic.rst @@ -1,5 +1,5 @@ -mgear.maya.synoptic -=================== +mgear\.maya\.synoptic +===================== .. automodule:: mgear.maya.synoptic @@ -9,10 +9,8 @@ mgear.maya.synoptic .. autosummary:: - getMayaWindow + importTab open - wrapInstance - wrapinstance2 @@ -23,6 +21,7 @@ mgear.maya.synoptic .. autosummary:: Synoptic + SynopticTabWrapper diff --git a/docs/source/generated/mgear.maya.synoptic.utils.rst b/docs/source/generated/mgear.maya.synoptic.utils.rst index 2e6ab81..a0bf06a 100644 --- a/docs/source/generated/mgear.maya.synoptic.utils.rst +++ b/docs/source/generated/mgear.maya.synoptic.utils.rst @@ -1,5 +1,5 @@ -mgear.maya.synoptic.utils -========================= +mgear\.maya\.synoptic\.utils +============================ .. automodule:: mgear.maya.synoptic.utils @@ -9,28 +9,51 @@ mgear.maya.synoptic.utils .. autosummary:: + applyMirror + bakeSprings bindPose + calculateMirrorData changeSpace + clearSprings + gatherMirrorData getComboIndex getComboKeys getControlers + getInvertCheckButtonAttrName getModel + getNamespace + getNode getSynopticWidget ikFkMatch + isSideElement keyAll + keyGroup keyObj keySel + listAttrForMirror mirrorPose + mirrorPoseOld quickSel resetSelTrans selAll + selGroup selectObj + stripNamespace + swapSideLabel toggleAttr + .. rubric:: Classes + + .. autosummary:: + + AbstractAnimationTransfer + IkFkTransfer + ParentSpaceTransfer + diff --git a/docs/source/generated/mgear.maya.synoptic.widgets.rst b/docs/source/generated/mgear.maya.synoptic.widgets.rst index ad88960..5094651 100644 --- a/docs/source/generated/mgear.maya.synoptic.widgets.rst +++ b/docs/source/generated/mgear.maya.synoptic.widgets.rst @@ -1,5 +1,5 @@ -mgear.maya.synoptic.widgets -=========================== +mgear\.maya\.synoptic\.widgets +============================== .. automodule:: mgear.maya.synoptic.widgets @@ -20,34 +20,74 @@ mgear.maya.synoptic.widgets SelectBtn_CFk SelectBtn_CFkBox SelectBtn_CFkCircle + SelectBtn_CFkOutlineBox + SelectBtn_CFkOutlineCircle SelectBtn_CIk SelectBtn_CIkBox SelectBtn_CIkCircle + SelectBtn_CIkOutlineBox + SelectBtn_CIkOutlineCircle SelectBtn_Circle SelectBtn_LFk SelectBtn_LFkBox SelectBtn_LFkCircle + SelectBtn_LFkOutlineBox + SelectBtn_LFkOutlineCircle + SelectBtn_LFkTriangleLeft SelectBtn_LIk SelectBtn_LIkBox SelectBtn_LIkCircle + SelectBtn_LIkOutlineBox + SelectBtn_LIkOutlineCircle + SelectBtn_LIkTriangleLeft + SelectBtn_OutlineBox + SelectBtn_OutlineCircle + SelectBtn_OutlineTriangleLeft + SelectBtn_OutlineTriangleRight SelectBtn_RFk SelectBtn_RFkBox SelectBtn_RFkCircle + SelectBtn_RFkOutlineBox + SelectBtn_RFkOutlineCircle + SelectBtn_RFkTriangleRight SelectBtn_RIk SelectBtn_RIkBox SelectBtn_RIkCircle + SelectBtn_RIkOutlineBox + SelectBtn_RIkOutlineCircle + SelectBtn_RIkTriangleRight + SelectBtn_TriangleLeft + SelectBtn_TriangleRight + SelectBtn_blueBox + SelectBtn_blueCircle + SelectBtn_blueOutlineCircle SelectBtn_darkGreen SelectBtn_darkGreenBox + SelectBtn_darkGreenOutlineBox SelectBtn_green SelectBtn_greenBox SelectBtn_greenCircle + SelectBtn_greenOutlineBox + SelectBtn_greenOutlineCircle + SelectBtn_greenTriangleLeft + SelectBtn_greenTriangleRight + SelectBtn_redBox + SelectBtn_redCircle + SelectBtn_redOutlineCircle SelectBtn_yellow SelectBtn_yellowBox + SelectBtn_yellowCircle + SelectBtn_yellowOutlineBox + SelectBtn_yellowOutlineCircle SelectButton - bakeMocap + bakeSprings + clearSprings ikfkMatchButton + keyGroup + klass resetBindPose resetTransform + selGroup toggleAttrButton toggleCombo diff --git a/docs/source/generated/mgear.maya.transform.rst b/docs/source/generated/mgear.maya.transform.rst index 84b61b2..5d107fd 100644 --- a/docs/source/generated/mgear.maya.transform.rst +++ b/docs/source/generated/mgear.maya.transform.rst @@ -1,5 +1,5 @@ -mgear.maya.transform -==================== +mgear\.maya\.transform +====================== .. automodule:: mgear.maya.transform diff --git a/docs/source/generated/mgear.maya.utils.rst b/docs/source/generated/mgear.maya.utils.rst index 009f8dd..3b6027a 100644 --- a/docs/source/generated/mgear.maya.utils.rst +++ b/docs/source/generated/mgear.maya.utils.rst @@ -1,5 +1,5 @@ -mgear.maya.utils -================ +mgear\.maya\.utils +================== .. automodule:: mgear.maya.utils @@ -9,7 +9,12 @@ mgear.maya.utils .. autosummary:: + gatherCustomModuleDirectories + getModuleBasePath + importFromStandardOrCustomDirectories is_odd + one_undo + viewport_off diff --git a/docs/source/generated/mgear.maya.vector.rst b/docs/source/generated/mgear.maya.vector.rst index 562f037..1b682df 100644 --- a/docs/source/generated/mgear.maya.vector.rst +++ b/docs/source/generated/mgear.maya.vector.rst @@ -1,5 +1,5 @@ -mgear.maya.vector -================= +mgear\.maya\.vector +=================== .. automodule:: mgear.maya.vector diff --git a/docs/source/generated/mgear.string.rst b/docs/source/generated/mgear.string.rst index 908d498..80e1caf 100644 --- a/docs/source/generated/mgear.string.rst +++ b/docs/source/generated/mgear.string.rst @@ -1,5 +1,5 @@ -mgear.string -============ +mgear\.string +============= .. automodule:: mgear.string diff --git a/docs/source/mgear/maya/rigbits/channelWrangler.rst b/docs/source/mgear/maya/rigbits/channelWrangler.rst new file mode 100644 index 0000000..91151d9 --- /dev/null +++ b/docs/source/mgear/maya/rigbits/channelWrangler.rst @@ -0,0 +1,6 @@ +mgear.maya.rigbits.channelWrangler +================================== + +.. automodule:: mgear.maya.rigbits.channelWrangler + :members: + :undoc-members: diff --git a/docs/source/releaseLog.rst b/docs/source/releaseLog.rst index 8bd9b48..00b0822 100644 --- a/docs/source/releaseLog.rst +++ b/docs/source/releaseLog.rst @@ -1,30 +1,65 @@ Release Log =========== +2.3.0 +----- +**Enhancements** + * mGear: Attribute: addAttribute not setting default attribute value. [#84] + * mGear: Attribute: update with lock and unlock attribute functions [#83] + * mGear: PEP8 Style Refactor [#100] + * mGear: Refactor all exception handling [#88] + * mGear: Vendoring QT [#89] + * Shifter: Build command review and log popup window [#73] + * Shifter: Change Global_C0_ctl to World_ctl [#66] + * Shifter: Control_01: Add option to have mirror behaviour [#68] + * Shifter: Improve rig build speed [#65] + * Shifter: Leg_2jnts_freeTangents_01:no ikFoot in upvref attribute [#62] + * Shifter: Reload components in custom path [#78] + * Shifter: Update guide structure in pre custom step [#101] + * Simple Rig: Update functionality revision [#71] + * Synoptic: spring bake util [#61] + +**Bug Fix** + * Rigbits: createCTL function issue [#59] + * Rigbits: export skin pack error with crvs [#56] + * Rigbits: skin: There is a case in exportSkin function breaks the existing file [#58] + * Shifter: 3 joint leg: soft Ik range min in graph editor [#82] + * Shifter: arm_2jnt_freeTangents_01 no attribute 'rollRef' [#63] + * Shifter: Arms auto upvector and shoulder space jump [#85] + * Shifter: Chain_spring_01: pop if manipulate FK ctl after Bake [#75] + * Shifter: Connect Ctl_vis [#103] + * Shifter: Control_01: rotation axis is missing Y lock [#74] + * Shifter: Japanese Ascii [#79] + * Shifter: Spring chain: lock control parent and bake spring bug [#67] + * Shifter: Synoptic: IK/FK Match with arm_ms_2jnt_01 [#80] + +**Known Issues** + * Shifter: Undo Build from selection crash maya [#74] + 2.2.4 ----- **Enhancements** - * Issue #50: Global scale and size of controllers. + * Shifter: Global scale and size of controllers. [#50] 2.2.3 ----- **Enhancements** - * Issue #43: Shifter: Custom Steps: Added Stop Build and Try again option if step fail. + * Shifter: Custom Steps: Added Stop Build and Try again option if step fail.[#43] **Bug Fix** - * Issue #54: Synoptic: Match IK/FK with split ctl for trans and rot + * Synoptic: Match IK/FK with split ctl for trans and rot [#54] 2.2.2 ----- **Enhancements** - * Issue #47: Shifter: Components: Legs: Mirror axis behavior on upv and mid ctl - * Issue #48: Shifter: Componets: Arms: IK ctl mirror behaviour - * Issue #53: Shifter: arm roll new reference connector + * Shifter: Components: Legs: Mirror axis behavior on upv and mid ctl [#47] + * Shifter: Componets: Arms: IK ctl mirror behaviour [#48] + * Shifter: arm roll new reference connector [#53] **Bug Fix** - * Issue #42: Shifter: component UI min division hang. Check all components - * Issue #44: mGear quadruped rig not being created in 2018 - * Issue #49: Shifter: Close settings Exception on Maya 2018: Note: This is a workaround. The issue comes from Maya 2018 + * Shifter: component UI min division hang. Check all components [#42] + * Shifter: quadruped rig not being created in 2018 [ #44] + * Shifter: Close settings Exception on Maya 2018: Note: This is a workaround. The issue comes from Maya 2018 [#49] 2.2.1 ----- @@ -40,7 +75,7 @@ Release Log * Simple autorig This a new rigging sytem for basic props. * Channel Wrangler: Channel manager with export import options. -**Improvements** +**Enhancements** * Synoptic: key/select all for custom widgets * Skin IO: IO skin for curves & nurbs * Skin IO: Now can export with Skin Packs. Every object will be in a separated file. diff --git a/docs/source/shifterModules.rst b/docs/source/shifterModules.rst index 8e7665b..5248b30 100644 --- a/docs/source/shifterModules.rst +++ b/docs/source/shifterModules.rst @@ -9,7 +9,7 @@ Shifter Rig Builder Introduction ------------ -Shifter is the default autorigging modular system included with mGear. This system is provided with the hope to solve the majority of your rigging necesities. From a freelancer or small boutique to a big studio. +Shifter is the default autorigging modular system included with mGear. This system is provided with the hope to solve the majority of your rigging necesities. From a freelancer or small boutique to a big studio. Shifter can be use in a wide variety of projects. Animated feature films, video games, VR, VFX, TV series, etc... and can build rigs for any kind of asset. i.e: cartoon characters, creatures, robots, props, vehicles, etc... diff --git a/docs/source/shifterUserDocumentation.rst b/docs/source/shifterUserDocumentation.rst index aeae029..e2888a1 100644 --- a/docs/source/shifterUserDocumentation.rst +++ b/docs/source/shifterUserDocumentation.rst @@ -2,7 +2,7 @@ Shifter User Documentation ========================== WIP section: Please visit: -`mGear Youtube channel `_ +`mGear Youtube channel `_ * components * creating new components diff --git a/docs/source/solvers.rst b/docs/source/solvers.rst index c739224..d71a510 100644 --- a/docs/source/solvers.rst +++ b/docs/source/solvers.rst @@ -4,4 +4,4 @@ Custom Solvers/Nodes mGear custom C++ Solvers/Nodes Documentation WIP section: Please visit: -`mGear Youtube channel `_ +`mGear Youtube channel `_ diff --git a/docs/source/synopticUserDocumentation.rst b/docs/source/synopticUserDocumentation.rst index 055c138..7a1913f 100644 --- a/docs/source/synopticUserDocumentation.rst +++ b/docs/source/synopticUserDocumentation.rst @@ -2,7 +2,7 @@ Synoptic User Documentation ============================ WIP section: Please visit: -`mGear Youtube channel `_ +`mGear Youtube channel `_ * Basic operations diff --git a/docs/source/tools.rst b/docs/source/tools.rst index a6ecbb2..e08da61 100644 --- a/docs/source/tools.rst +++ b/docs/source/tools.rst @@ -4,7 +4,7 @@ Tools tools from mGear maya menu WIP section: Please visit: -`mGear Youtube channel `_ +`mGear Youtube channel `_ .. toctree:: diff --git a/docs/source/videoTutorials.rst b/docs/source/videoTutorials.rst index 053bff6..24de14f 100644 --- a/docs/source/videoTutorials.rst +++ b/docs/source/videoTutorials.rst @@ -2,12 +2,4 @@ Video Tutorials =============== WIP section: Please visit: -`mGear Youtube channel `_ - - -.. raw:: html - - -

mGear: Framework overview from Miquel Campos on Vimeo.

- - \ No newline at end of file +`mGear Youtube channel `_ diff --git a/excons b/excons index 1cb87d3..0dd42d1 160000 --- a/excons +++ b/excons @@ -1 +1 @@ -Subproject commit 1cb87d37f150b9db075fd23a30a85e9c5a2d08a3 +Subproject commit 0dd42d140d68730d8ec17f58a907415e62c749b6 diff --git a/mGear.mod b/mGear.mod new file mode 100644 index 0000000..b43a330 --- /dev/null +++ b/mGear.mod @@ -0,0 +1,71 @@ ++ MAYAVERSION:2013 PLATFORM:win64 mGear 2.3 ./platforms/2013/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2013 PLATFORM:linux mGear 2.3 ./platforms/2013/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2013 PLATFORM:mac mGear 2.3 ./platforms/2013/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2013.5 PLATFORM:win64 mGear 2.3 ./platforms/2013.5/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2013.5 PLATFORM:linux mGear 2.3 ./platforms/2013.5/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2013.5 PLATFORM:mac mGear 2.3 ./platforms/2013.5/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2014 PLATFORM:win64 mGear 2.3 ./platforms/2014/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2014 PLATFORM:linux mGear 2.3 ./platforms/2014/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2014 PLATFORM:mac mGear 2.3 ./platforms/2014/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2015 PLATFORM:win64 mGear 2.3 ./platforms/2015/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2015 PLATFORM:linux mGear 2.3 ./platforms/2015/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2015 PLATFORM:mac mGear 2.3 ./platforms/2015/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016 PLATFORM:win64 mGear 2.3 ./platforms/2016/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016 PLATFORM:linux mGear 2.3 ./platforms/2016/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016 PLATFORM:mac mGear 2.3 ./platforms/2016/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016.5 PLATFORM:win64 mGear 2.3 ./platforms/2016.5/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016.5 PLATFORM:linux mGear 2.3 ./platforms/2016.5/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2016.5 PLATFORM:mac mGear 2.3 ./platforms/2016.5/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2017 PLATFORM:win64 mGear 2.3 ./platforms/2017/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2017 PLATFORM:linux mGear 2.3 ./platforms/2017/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2017 PLATFORM:mac mGear 2.3 ./platforms/2017/osx/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2018 PLATFORM:win64 mGear 2.3 ./platforms/2018/windows/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2018 PLATFORM:linux mGear 2.3 ./platforms/2018/linux/x64 +scripts: ../../../../scripts + ++ MAYAVERSION:2018 PLATFORM:mac mGear 2.3 ./platforms/2018/osx/x64 +scripts: ../../../../scripts diff --git a/mGear.mod.in b/mGear.mod.in index 3c900f2..02ee01f 100644 --- a/mGear.mod.in +++ b/mGear.mod.in @@ -64,5 +64,8 @@ scripts: ../../../../scripts + MAYAVERSION:2018 PLATFORM:win64 mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/windows/x64 scripts: ../../../../scripts ++ MAYAVERSION:2018 PLATFORM:linux mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/linux/x64 +scripts: ../../../../scripts + + MAYAVERSION:2018 PLATFORM:mac mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/osx/x64 -scripts: ../../../../scripts \ No newline at end of file +scripts: ../../../../scripts diff --git a/mgear.status b/mgear.status new file mode 100644 index 0000000..4f13d9a --- /dev/null +++ b/mgear.status @@ -0,0 +1,3 @@ +MGEAR_VERSION [2, 3, 0] +MGEAR_MAJMIN_VERSION 2.3 + diff --git a/run_tests.py b/run_tests.py new file mode 100644 index 0000000..d41fc6a --- /dev/null +++ b/run_tests.py @@ -0,0 +1,104 @@ +"""Use Mayapy for testing + +Usage: + $ mayapy run_tests.py + +""" + +import os +import sys +import nose +import logging +import contextlib + +import six + +from maya import standalone +from nose_exclude import NoseExclude + + +def null(*args, **kwargs): + pass + + +@contextlib.contextmanager +def mute(): + try: + sys.stdout = six.moves.StringIO() + sys.stderr = six.moves.StringIO() + yield + + finally: + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + +if __name__ == "__main__": + # Expose mgear Python package to tests + dirname = os.path.dirname(__file__) + sys.path.insert(0, os.path.join(dirname, "scripts")) + + print("\n" + "-" * 70) + print("Initialising Maya..") + + with mute(): + standalone.initialize() + import pymel.core + import pymel.internal.startup + pymel.internal.startup.fixMayapy2011SegFault() + + for name, logger in logging.Logger.manager.loggerDict.items(): + if "pymel" in name: + logger.disabled = True + + argv = sys.argv[:] + argv.extend([ + + # Sometimes, files from Windows accessed + # from Linux cause the executable flag to be + # set, and Nose has an aversion to these + # per default. + "--exe", + + # Produce nice, easily readable output from each test + "--verbose", + + # Run through the docstring of every module + # and run anything prefixed with ">>> " + "--with-doctest", + + # Produce a coverage report post-tests + "--with-coverage", + "--cover-html", + "--cover-tests", + "--cover-erase", + + "--exclude-dir=cvwrap", + "--exclude-dir=docs", + "--exclude-dir=excons", + "--exclude-dir=src", + + "tests", + "scripts", + ]) + + # Visually separate output from the above Maya initialisation + # and the actual tests. + # TODO: Mute Maya output entirely; I don't know how it manages to still + # output anything when sys.stdout and err are discarded.. + print("\n" + "-" * 70) + print("Running tests..\n") + + try: + # Disable messages via PyMEL, they obfuscate the report + pymel.core.displayWarning = null + pymel.core.displayError = null + + nose.main(argv=argv, addplugins=[NoseExclude()]) + + finally: + # Only bother when running when on Travis + if os.getenv("TRAVIS_JOB_ID"): + __import__("coveralls").wear() + else: + sys.stdout.write("Skipping coveralls\n") diff --git a/scripts/mGear_guidesTemplates.py b/scripts/mGear_guidesTemplates.py index 13d9d8c..9d7be44 100644 --- a/scripts/mGear_guidesTemplates.py +++ b/scripts/mGear_guidesTemplates.py @@ -1,75 +1,37 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - import os import pymel.core as pm -import mgear -import mgear.maya.shifter.gui as gui -import mgear.maya.shifter as rg -import mgear.maya.shifter.component as comp - +from mgear.maya import shifter +from mgear.maya.shifter import gui, component def guideUI(*args): - """ - Open shifter UI. - """ + """Open shifter UI""" gui.Guide_UI() + +# @utils.one_undo def buildFromSelection(*args): - """ - Build the rig from the guide root selection or a component root. - """ - print mgear.logInfos() - rig = rg.Rig() - rig.buildFromSelection() + """Build the rig from the guide root selection or a component root""" + gui.Guide_UI.buildFromSelection() + def updateGuide(*args): - """ - Update the guide rig. - """ + """Update the guide rig""" if pm.selected(): - rgGuide = rg.RigGuide() + rgGuide = shifter.guide.Rig() rgGuide.update(pm.selected()[0]) else: pm.displayWarning("Please select the guide top node") def bipedGuide(*args): - """ - Import the basic biped template. - """ - path = os.path.dirname(comp.__file__) + """Import the basic biped template""" + path = os.path.dirname(component.__file__) pm.importFile(os.path.join(path, "_templates", "biped_guide.ma")) + def quadrupedGuide(*args): - """ - Import the basic quadruped template. - """ - path = os.path.dirname(comp.__file__) + """Import the basic quadruped template""" + path = os.path.dirname(component.__file__) pm.importFile(os.path.join(path, "_templates", "quadruped.ma")) diff --git a/scripts/mGear_menu.py b/scripts/mGear_menu.py index 573df7e..c79739b 100644 --- a/scripts/mGear_menu.py +++ b/scripts/mGear_menu.py @@ -1,206 +1,245 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import os import sys import subprocess - from functools import partial -import pymel.core as pm - -#mGear Tools -import mGear_guidesTemplates -import mGear_mocapTools +import pymel.core as pm -#mGear modules import mgear -import mgear.maya.synoptic as syn -import mgear.maya.skin as skin -# simple rig -import mgear.maya.simpleRig as srig - -#import rigbits -import mgear.maya.rigbits as rigbits -import mgear.maya.rigbits.postSpring as postSpring -import mgear.maya.rigbits.rope as rope -import mgear.maya.rigbits.proxySlicer as proxySlicer -import mgear.maya.rigbits.utils as utils -import mgear.maya.rigbits.channelWrangler as channelWrangler +from mgear.maya import synoptic, skin, simpleRig, rigbits, attribute, shifter +from mgear.maya.rigbits import ( + postSpring, + rope, + proxySlicer, + utils, + channelWrangler +) + +from mGear_guidesTemplates import ( + guideUI, + buildFromSelection, + bipedGuide, + quadrupedGuide, + updateGuide +) +from mGear_mocapTools import ( + importSkeletonBiped, + characterizeBiped, + bakeMocap, +) def openFile(file, *args): - - if sys.platform.startswith('darwin'): - subprocess.call(('open', file)) - elif os.name == 'nt': + if sys.platform.startswith("darwin"): + subprocess.call(("open", file)) + elif os.name == "nt": os.startfile(file) - elif os.name == 'posix': - subprocess.call(('xdg-open', file)) - - -def CreateMenu(): - - if pm.menu('mGear', exists=1): - pm.deleteUI('mGear') - mGearM = pm.menu('mGear', p='MayaWindow', tearOff=1, allowOptionBoxes=1, label='mGear') - - ## Rigging systems - ## Shifter rigging builder - shifterM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Shifter') - pm.menuItem(label="Guides UI", command=partial(mGear_guidesTemplates.guideUI)) - pm.menuItem( divider=True ) - pm.menuItem(label="Build From Selection", command=partial(mGear_guidesTemplates.buildFromSelection)) - pm.menuItem( divider=True ) - pm.menuItem(label="Import Biped Guide", command=partial(mGear_guidesTemplates.bipedGuide)) - pm.menuItem(label="Import Quadruped Guide", command=partial(mGear_guidesTemplates.quadrupedGuide)) - pm.menuItem( divider=True ) - pm.menuItem(label="Update Guide", command=partial(mGear_guidesTemplates.updateGuide)) - + elif os.name == "posix": + subprocess.call(("xdg-open", file)) + else: + raise OSError("Unsupported platform '%s'" % os.name) + + +def createMenu(): + if pm.menu("mGear", exists=True): + pm.deleteUI("mGear") + + mGearM = pm.menu("mGear", + parent="MayaWindow", + tearOff=True, + allowOptionBoxes=True, + label="mGear") + + # Rigging systems + # Shifter rigging builder + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Shifter") + pm.menuItem(label="Guides UI", command=guideUI) + pm.menuItem(divider=True) + pm.menuItem(label="Build From Selection", + command=buildFromSelection) + pm.menuItem(divider=True) + pm.menuItem(label="Import Biped Guide", + command=bipedGuide) + pm.menuItem(label="Import Quadruped Guide", + command=quadrupedGuide) + pm.menuItem(divider=True) + pm.menuItem(label="Update Guide", command=updateGuide) + pm.menuItem(divider=True) + pm.menuItem(label="Reload Components", command=shifter.reloadComponents) pm.setParent(mGearM, menu=True) - pm.menuItem( divider=True ) - - #simple rig - - pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Simple Rig') - pm.menuItem(label="Simple Rig Generate", command=partial(srig.simpleRig, "rig", False)) - pm.menuItem( divider=True ) - pm.menuItem(label="Create Root", command=partial(srig.createRoot)) - pm.menuItem( divider=True ) - pm.menuItem(label="Set User Pivot", command=partial(srig.setUserRigPivot)) - pm.menuItem(label="Add To User Pivot", command=partial(srig.addToUserPivot)) - pm.menuItem(label="Select Objects In User Pivot", command=partial(srig.selectObjectInUserRootPivot)) + pm.menuItem(divider=True) + + # Simple rig + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Simple Rig") + pm.menuItem(label="Simple Rig Generate", + command=partial(simpleRig.simpleRig, "rig", False)) + pm.menuItem(divider=True) + pm.menuItem(label="Create Root", command=simpleRig.createRoot) + pm.menuItem(divider=True) + pm.menuItem(label="Set User Pivot", command=simpleRig.setUserRigPivot) + pm.menuItem(label="Add To User Pivot", command=simpleRig.addToUserPivot) + pm.menuItem(label="Select Objects In User Pivot", + command=simpleRig.selectObjectInUserRootPivot) pm.setParent(mGearM, menu=True) - pm.menuItem( divider=True ) - - ## Rigging Tools - riggingM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Rigging') - pm.menuItem(label="Add NPO", command=partial(rigbits.addNPO, None)) - pm.menuItem(subMenu=True, tearOff=True, label='Gimmick Joints') - pm.menuItem(label="Add Joint", command=partial(rigbits.addJnt, False, False)) - pm.menuItem( divider=True ) - pm.menuItem(label="Add Blended Joint", command=partial(rigbits.addBlendedJoint, False, False)) - pm.menuItem(label="Add Support Joint", command=partial(rigbits.addSupportJoint, False, False)) + pm.menuItem(divider=True) + + # Rigging Tools + riggingM = pm.menuItem(parent="mGear", + subMenu=True, + tearOff=True, + label="Rigging") + pm.menuItem(label="Add NPO", command=rigbits.addNPO) + pm.menuItem(subMenu=True, tearOff=True, label="Gimmick Joints") + pm.menuItem(label="Add Joint", + command=rigbits.addJnt) + pm.menuItem(divider=True) + pm.menuItem(label="Add Blended Joint", + command=rigbits.addBlendedJoint) + pm.menuItem(label="Add Support Joint", + command=rigbits.addSupportJoint) pm.setParent(riggingM, menu=True) - pm.menuItem( divider=True ) - pm.menuItem(label="Replace Shape", command=partial(rigbits.replaceShape, None, None)) - pm.menuItem( divider=True ) - pm.menuItem(label="Match All Transform", command=partial(rigbits.matchWorldXform)) - pm.menuItem(label="Match Pos with BBox", command=partial(rigbits.matchPosfromBBox)) - pm.menuItem(label="Align Ref Axis", command=partial(rigbits.alignToPointsLoop, None, None, None)) + pm.menuItem(divider=True) + pm.menuItem(label="Replace Shape", + command=rigbits.replaceShape) + pm.menuItem(divider=True) + pm.menuItem(label="Match All Transform", command=rigbits.matchWorldXform) + pm.menuItem(label="Match Pos with BBox", command=rigbits.matchPosfromBBox) + pm.menuItem(label="Align Ref Axis", command=rigbits.alignToPointsLoop) pm.setParent(riggingM, menu=True) - pm.menuItem( divider=True ) - pm.menuItem(subMenu=True, tearOff=True, label='CTL as Parent') + pm.menuItem(divider=True) + pm.menuItem(subMenu=True, tearOff=True, label="CTL as Parent") pm.menuItem(label="Square", command=partial(rigbits.createCTL, "square")) pm.menuItem(label="Circle", command=partial(rigbits.createCTL, "circle")) pm.menuItem(label="Cube", command=partial(rigbits.createCTL, "cube")) pm.menuItem(label="Diamond", command=partial(rigbits.createCTL, "diamond")) pm.menuItem(label="Sphere", command=partial(rigbits.createCTL, "sphere")) pm.menuItem(label="Cross", command=partial(rigbits.createCTL, "cross")) - pm.menuItem(label="Cross Arrow", command=partial(rigbits.createCTL, "crossarrow")) - pm.menuItem(label="Pyramid", command=partial(rigbits.createCTL, "pyramid")) - pm.menuItem(label="Cube With Peak", command=partial(rigbits.createCTL, "cubewithpeak")) + pm.menuItem(label="Cross Arrow", + command=partial(rigbits.createCTL, "crossarrow")) + pm.menuItem(label="Pyramid", + command=partial(rigbits.createCTL, "pyramid")) + pm.menuItem(label="Cube With Peak", + command=partial(rigbits.createCTL, "cubewithpeak")) pm.setParent(riggingM, menu=True) - pm.menuItem(subMenu=True, tearOff=True, label='CTL as Child') - pm.menuItem(label="Square", command=partial(rigbits.createCTL, "square", True)) - pm.menuItem(label="Circle", command=partial(rigbits.createCTL, "circle", True)) - pm.menuItem(label="Cube", command=partial(rigbits.createCTL, "cube", True)) - pm.menuItem(label="Diamond", command=partial(rigbits.createCTL, "diamond", True)) - pm.menuItem(label="Sphere", command=partial(rigbits.createCTL, "sphere", True)) - pm.menuItem(label="Cross", command=partial(rigbits.createCTL, "cross", True)) - pm.menuItem(label="Cross Arrow", command=partial(rigbits.createCTL, "crossarrow", True)) - pm.menuItem(label="Pyramid", command=partial(rigbits.createCTL, "pyramid", True)) - pm.menuItem(label="Cube With Peak", command=partial(rigbits.createCTL, "cubewithpeak", True)) + pm.menuItem(subMenu=True, tearOff=True, label="CTL as Child") + pm.menuItem(label="Square", + command=partial(rigbits.createCTL, "square", True)) + pm.menuItem(label="Circle", + command=partial(rigbits.createCTL, "circle", True)) + pm.menuItem(label="Cube", + command=partial(rigbits.createCTL, "cube", True)) + pm.menuItem(label="Diamond", + command=partial(rigbits.createCTL, "diamond", True)) + pm.menuItem(label="Sphere", + command=partial(rigbits.createCTL, "sphere", True)) + pm.menuItem(label="Cross", + command=partial(rigbits.createCTL, "cross", True)) + pm.menuItem(label="Cross Arrow", + command=partial(rigbits.createCTL, "crossarrow", True)) + pm.menuItem(label="Pyramid", + command=partial(rigbits.createCTL, "pyramid", True)) + pm.menuItem(label="Cube With Peak", + command=partial(rigbits.createCTL, "cubewithpeak", True)) pm.setParent(riggingM, menu=True) - pm.menuItem( divider=True ) - pm.menuItem(label="Duplicate symmetrical", command=partial(rigbits.duplicateSym)) - pm.menuItem( divider=True ) - pm.menuItem(label="Space Jumper", command=partial(rigbits.spaceJump)) - pm.menuItem(label="Interpolated Transform", command=partial(rigbits.createInterpolateTransform)) - - pm.menuItem(subMenu=True, tearOff=True, label='Connect local SRT') - pm.menuItem(label="connect SRT", command=partial(rigbits.connectLocalTransform, None, 1, 1, 1)) - pm.menuItem(label="connect T", command=partial(rigbits.connectLocalTransform, None, 0, 0, 1)) - pm.menuItem(label="connect R", command=partial(rigbits.connectLocalTransform, None, 0, 1, 0)) - pm.menuItem(label="connect S", command=partial(rigbits.connectLocalTransform, None, 1, 0, 0)) + pm.menuItem(divider=True) + pm.menuItem(label="Duplicate symmetrical", + command=rigbits.duplicateSym) + pm.menuItem(divider=True) + pm.menuItem(label="Space Jumper", + command=rigbits.spaceJump) + pm.menuItem(label="Interpolated Transform", + command=rigbits.createInterpolateTransform) + + pm.menuItem(subMenu=True, tearOff=True, label="Connect local SRT") + pm.menuItem(label="connect SRT", + command=partial(rigbits.connectLocalTransform, None, 1, 1, 1)) + pm.menuItem(label="connect T", + command=partial(rigbits.connectLocalTransform, None, 0, 0, 1)) + pm.menuItem(label="connect R", + command=partial(rigbits.connectLocalTransform, None, 0, 1, 0)) + pm.menuItem(label="connect S", + command=partial(rigbits.connectLocalTransform, None, 1, 0, 0)) pm.setParent(riggingM, menu=True) - pm.menuItem( divider=True ) - pm.menuItem(label="Spring", command=partial(postSpring.spring_UI)) - pm.menuItem(label="Rope", command=partial(rope.rope_UI)) - pm.menuItem( divider=True ) - pm.menuItem(label="Channel Wrangler", command=partial(channelWrangler.openChannelWrangler)) - - ## skinning tools - skinM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Skinning') + pm.menuItem(divider=True) + pm.menuItem(label="Spring", command=postSpring.spring_UI) + pm.menuItem(label="Rope", command=rope.rope_UI) + pm.menuItem(divider=True) + pm.menuItem(label="Channel Wrangler", + command=channelWrangler.openChannelWrangler) + + # skinning tools + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Skinning") pm.menuItem(label="Copy Skin", command=partial(skin.skinCopy, None, None)) - pm.menuItem(label="Select Skin Deformers", command=partial(skin.selectDeformers)) - pm.menuItem( divider=True ) - pm.menuItem(label="Import Skin", command=partial(skin.importSkin, None, False)) - pm.menuItem(label="Import Skin Pack", command=partial(skin.importSkinPack, None)) - pm.menuItem( divider=True ) - pm.menuItem(label="Export Skin", command=partial(skin.exportSkin, None, None)) - pm.menuItem(label="Export Skin Pack", command=partial(skin.exportSkinPack, None, None)) - pm.menuItem( divider=True ) - pm.menuItem(label="Get Names in gSkin File", command=partial(skin.getObjsFromSkinFile, None, False)) - - ## Modeling tools - modelM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Modeling') - pm.menuItem(label="Proxy Slicer", command=partial(proxySlicer.slice)) - pm.menuItem(label="Proxy Slicer Parenting", command=partial(proxySlicer.slice, True)) - - ## Animation Tools - animationM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Animation') - pm.menuItem(label="Synoptic", command=partial(syn.open)) - pm.menuItem( divider=True ) - pm.menuItem(label="Import Mocap Skeleton Biped", command=partial(mGear_mocapTools.importSkeletonBiped)) - pm.menuItem(label="Characterize Biped", command=partial(mGear_mocapTools.characterizeBiped)) - pm.menuItem(label="Bake Mocap Biped", command=partial(mGear_mocapTools.bakeMocap)) - - ## util Tools + pm.menuItem(label="Select Skin Deformers", command=skin.selectDeformers) + pm.menuItem(divider=True) + pm.menuItem(label="Import Skin", command=skin.importSkin) + pm.menuItem(label="Import Skin Pack", command=skin.importSkinPack) + pm.menuItem(divider=True) + pm.menuItem(label="Export Skin", command=skin.exportSkin) + pm.menuItem(label="Export Skin Pack", command=skin.exportSkinPack) + pm.menuItem(divider=True) + pm.menuItem(label="Get Names in gSkin File", + command=skin.getObjsFromSkinFile) + + # Modeling tools + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Modeling") + pm.menuItem(label="Proxy Slicer", + command=partial(proxySlicer.slice)) + pm.menuItem(label="Proxy Slicer Parenting", + command=partial(proxySlicer.slice, True)) + + # Animation Tools + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Animation") + pm.menuItem(label="Synoptic", command=synoptic.open) + pm.menuItem(divider=True) + pm.menuItem(label="Import Mocap Skeleton Biped", + command=importSkeletonBiped) + pm.menuItem(label="Characterize Biped", + command=characterizeBiped) + pm.menuItem(label="Bake Mocap Biped", command=bakeMocap) + pm.menuItem(divider=True) + pm.menuItem(label="Smart Reset Attribute/SRT", + command=attribute.smart_reset) + + # util Tools pm.setParent(mGearM, menu=True) - pm.menuItem( divider=True ) - utilM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Utilities') + pm.menuItem(divider=True) + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Utilities") pm.menuItem(label="Reload", command=partial(mgear.reloadModule, "mgear")) - pm.menuItem( divider=True ) - pm.menuItem(label="Compile PyQt ui", command=partial(utils.ui2py, None)) - pm.menuItem( divider=True ) - pm.menuItem(label="Create mGear Hotkeys", command=partial(utils.createHotkeys, None)) + pm.menuItem(divider=True) + pm.menuItem(label="Compile PyQt ui", command=utils.ui2py) + pm.menuItem(divider=True) + pm.menuItem(label="Create mGear Hotkeys", + command=utils.createHotkeys) - ## Help + # Help pm.setParent(mGearM, menu=True) - pm.menuItem( divider=True ) - helpM = pm.menuItem(parent='mGear', subMenu=True, tearOff=True, label='Help') - pm.menuItem(label="Documentation", command=partial(openFile, "https://miquelcampos.github.io/mgear/")) - pm.menuItem(label="Release Log", command=partial(openFile, "https://miquelcampos.github.io/mgear/releaseLog.html")) - pm.menuItem( divider=True ) - pm.menuItem(label="User Group", command=partial(openFile, "https://groups.google.com/forum/#!forum/mgearusergroup")) - pm.menuItem( divider=True ) - pm.menuItem(label="GitHub", command=partial(openFile, "https://github.com/miquelcampos/mgear")) - pm.menuItem( divider=True ) + pm.menuItem(divider=True) + pm.menuItem(parent="mGear", subMenu=True, tearOff=True, label="Help") + pm.menuItem(label="Documentation", + command=partial( + openFile, + "https://miquelcampos.github.io/mgear/")) + pm.menuItem(label="Release Log", + command=partial( + openFile, + "https://miquelcampos.github.io/mgear/releaseLog.html")) + pm.menuItem(divider=True) + pm.menuItem(label="User Group", + command=partial( + openFile, + "https://groups.google.com/forum/#!forum/mgearusergroup")) + pm.menuItem(divider=True) + pm.menuItem(label="GitHub", + command=partial( + openFile, + "https://github.com/miquelcampos/mgear")) + pm.menuItem(divider=True) pm.menuItem(label="About", command=mgear.maya.aboutMgear) + + +# Backwards compatibiltiy +CreateMenu = createMenu diff --git a/scripts/mGear_mocapTools.py b/scripts/mGear_mocapTools.py index 2dc7a6e..10962c7 100644 --- a/scripts/mGear_mocapTools.py +++ b/scripts/mGear_mocapTools.py @@ -1,101 +1,209 @@ -# MGEAR is under the terms of the MIT License +import os -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +import pymel.core as pm -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: +import mgear.maya.transform as tra +import mgear.maya.shifter.component as comp +import mgear.maya.attribute as att -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +skelFK = [ + u"mGear_Mocap_interface_" + joint + for joint in ( + u"Hips", + u"LeftUpLeg", + u"LeftLeg", + u"LeftFoot", + u"LeftToeBase", + u"RightUpLeg", + u"RightLeg", + u"RightFoot", + u"RightToeBase", + u"Spine", + u"Spine1", + u"Spine2", + u"LeftShoulder", + u"LeftArm", + u"LeftForeArm", + u"LeftHand", + u"LeftHandThumb1", + u"LeftHandThumb2", + u"LeftHandThumb3", + u"LeftHandIndex1", + u"LeftHandIndex2", + u"LeftHandIndex3", + u"LeftHandMiddle1", + u"LeftHandMiddle2", + u"LeftHandMiddle3", + u"LeftHandRing1", + u"LeftHandRing2", + u"LeftHandRing3", + u"LeftHandPinky1", + u"LeftHandPinky2", + u"LeftHandPinky3", + u"RightShoulder", + u"RightArm", + u"RightForeArm", + u"RightHand", + u"RightHandThumb1", + u"RightHandThumb2", + u"RightHandThumb3", + u"RightHandIndex1", + u"RightHandIndex2", + u"RightHandIndex3", + u"RightHandMiddle1", + u"RightHandMiddle2", + u"RightHandMiddle3", + u"RightHandRing1", + u"RightHandRing2", + u"RightHandRing3", + u"RightHandPinky1", + u"RightHandPinky2", + u"RightHandPinky3", + u"Neck", + u"Neck1", + u"Head" + ) +] -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +gearFK = [ + u"body_C0_ctl", + u"leg_L0_fk0_ctl", + u"leg_L0_fk1_ctl", + u"leg_L0_fk2_ctl", + u"foot_L0_fk0_ctl", + u"leg_R0_fk0_ctl", + u"leg_R0_fk1_ctl", + u"leg_R0_fk2_ctl", + u"foot_R0_fk0_ctl", + u"spine_C0_fk0_ctl", + u"spine_C0_fk1_ctl", + u"spine_C0_fk2_ctl", + u"shoulder_L0_ctl", + u"arm_L0_fk0_ctl", + u"arm_L0_fk1_ctl", + u"arm_L0_fk2_ctl", + u"thumb_L0_fk0_ctl", + u"thumb_L0_fk1_ctl", + u"thumb_L0_fk2_ctl", + u"finger_L0_fk0_ctl", + u"finger_L0_fk1_ctl", + u"finger_L0_fk2_ctl", + u"finger_L1_fk0_ctl", + u"finger_L1_fk1_ctl", + u"finger_L1_fk2_ctl", + u"finger_L2_fk0_ctl", + u"finger_L2_fk1_ctl", + u"finger_L2_fk2_ctl", + u"finger_L3_fk0_ctl", + u"finger_L3_fk1_ctl", + u"finger_L3_fk2_ctl", + u"shoulder_R0_ctl", + u"arm_R0_fk0_ctl", + u"arm_R0_fk1_ctl", + u"arm_R0_fk2_ctl", + u"thumb_R0_fk0_ctl", + u"thumb_R0_fk1_ctl", + u"thumb_R0_fk2_ctl", + u"finger_R0_fk0_ctl", + u"finger_R0_fk1_ctl", + u"finger_R0_fk2_ctl", + u"finger_R1_fk0_ctl", + u"finger_R1_fk1_ctl", + u"finger_R1_fk2_ctl", + u"finger_R2_fk0_ctl", + u"finger_R2_fk1_ctl", + u"finger_R2_fk2_ctl", + u"finger_R3_fk0_ctl", + u"finger_R3_fk1_ctl", + u"finger_R3_fk2_ctl", + u"neck_C0_fk0_ctl", + u"neck_C0_fk1_ctl", + u"neck_C0_head_ctl" +] -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +alignFK = [ + u"arm_L0_fk2_ctl", + u"arm_L0_ikcns_ctl", + u"arm_L0_fk1_ctl", + u"arm_R0_fk2_ctl", + u"arm_R0_ikcns_ctl", + u"arm_R0_fk1_ctl"] -import os +alignIK = [ + u"arm_L0_ikcns_ctl", + u"arm_L0_ik_ctl", + u"arm_L0_upv_ctl", + u"arm_R0_ikcns_ctl", + u"arm_R0_ik_ctl", + u"arm_R0_upv_ctl" +] -# Maya -import pymel.core as pm +skelIK = [ + u"mGear_Mocap_interface_LeftFoot", + u"mGear_Mocap_interface_RightFoot", + u"mGear_Mocap_interface_LeftUpLeg", + u"mGear_Mocap_interface_RightUpLeg", + u"mGear_Mocap_interface_LeftHand", -#mGear -import mgear.maya.transform as tra -import mgear.maya.shifter.component as comp -import mgear.maya.attribute as att + u"mGear_Mocap_interface_LeftForeArm", + u"mGear_Mocap_interface_RightHand", + u"mGear_Mocap_interface_RightForeArm", + u"mGear_Mocap_interface_LeftLeg", + u"mGear_Mocap_interface_RightLeg", -skelFK = [ u'mGear_Mocap_interface_Hips', u'mGear_Mocap_interface_LeftUpLeg', u'mGear_Mocap_interface_LeftLeg', u'mGear_Mocap_interface_LeftFoot', - u'mGear_Mocap_interface_LeftToeBase', u'mGear_Mocap_interface_RightUpLeg', u'mGear_Mocap_interface_RightLeg', u'mGear_Mocap_interface_RightFoot', - u'mGear_Mocap_interface_RightToeBase', u'mGear_Mocap_interface_Spine', u'mGear_Mocap_interface_Spine1', u'mGear_Mocap_interface_Spine2', - u'mGear_Mocap_interface_LeftShoulder', u'mGear_Mocap_interface_LeftArm', u'mGear_Mocap_interface_LeftForeArm', u'mGear_Mocap_interface_LeftHand', - u'mGear_Mocap_interface_LeftHandThumb1', u'mGear_Mocap_interface_LeftHandThumb2', u'mGear_Mocap_interface_LeftHandThumb3', u'mGear_Mocap_interface_LeftHandIndex1', - u'mGear_Mocap_interface_LeftHandIndex2', u'mGear_Mocap_interface_LeftHandIndex3', u'mGear_Mocap_interface_LeftHandMiddle1', u'mGear_Mocap_interface_LeftHandMiddle2', - u'mGear_Mocap_interface_LeftHandMiddle3', u'mGear_Mocap_interface_LeftHandRing1', u'mGear_Mocap_interface_LeftHandRing2', u'mGear_Mocap_interface_LeftHandRing3', - u'mGear_Mocap_interface_LeftHandPinky1', u'mGear_Mocap_interface_LeftHandPinky2', u'mGear_Mocap_interface_LeftHandPinky3', u'mGear_Mocap_interface_RightShoulder', - u'mGear_Mocap_interface_RightArm', u'mGear_Mocap_interface_RightForeArm', u'mGear_Mocap_interface_RightHand', u'mGear_Mocap_interface_RightHandThumb1', - u'mGear_Mocap_interface_RightHandThumb2', u'mGear_Mocap_interface_RightHandThumb3', u'mGear_Mocap_interface_RightHandIndex1', u'mGear_Mocap_interface_RightHandIndex2', - u'mGear_Mocap_interface_RightHandIndex3', u'mGear_Mocap_interface_RightHandMiddle1', u'mGear_Mocap_interface_RightHandMiddle2', u'mGear_Mocap_interface_RightHandMiddle3', - u'mGear_Mocap_interface_RightHandRing1', u'mGear_Mocap_interface_RightHandRing2', u'mGear_Mocap_interface_RightHandRing3', u'mGear_Mocap_interface_RightHandPinky1', - u'mGear_Mocap_interface_RightHandPinky2', u'mGear_Mocap_interface_RightHandPinky3', u'mGear_Mocap_interface_Neck', u'mGear_Mocap_interface_Neck1', u'mGear_Mocap_interface_Head'] - -gearFK = [ u'body_C0_ctl', u'leg_L0_fk0_ctl', u'leg_L0_fk1_ctl', u'leg_L0_fk2_ctl', u'foot_L0_fk0_ctl', u'leg_R0_fk0_ctl', u'leg_R0_fk1_ctl', u'leg_R0_fk2_ctl', - u'foot_R0_fk0_ctl', u'spine_C0_fk0_ctl', u'spine_C0_fk1_ctl', u'spine_C0_fk2_ctl', u'shoulder_L0_ctl', u'arm_L0_fk0_ctl', u'arm_L0_fk1_ctl', - u'arm_L0_fk2_ctl', u'thumb_L0_fk0_ctl', u'thumb_L0_fk1_ctl', u'thumb_L0_fk2_ctl', u'finger_L0_fk0_ctl', u'finger_L0_fk1_ctl', u'finger_L0_fk2_ctl', - u'finger_L1_fk0_ctl', u'finger_L1_fk1_ctl', u'finger_L1_fk2_ctl', u'finger_L2_fk0_ctl', u'finger_L2_fk1_ctl', u'finger_L2_fk2_ctl', - u'finger_L3_fk0_ctl', u'finger_L3_fk1_ctl', u'finger_L3_fk2_ctl', u'shoulder_R0_ctl', u'arm_R0_fk0_ctl', u'arm_R0_fk1_ctl', u'arm_R0_fk2_ctl', - u'thumb_R0_fk0_ctl', u'thumb_R0_fk1_ctl', u'thumb_R0_fk2_ctl', u'finger_R0_fk0_ctl', u'finger_R0_fk1_ctl', u'finger_R0_fk2_ctl', u'finger_R1_fk0_ctl', - u'finger_R1_fk1_ctl', u'finger_R1_fk2_ctl', u'finger_R2_fk0_ctl', u'finger_R2_fk1_ctl', u'finger_R2_fk2_ctl', u'finger_R3_fk0_ctl', u'finger_R3_fk1_ctl', - u'finger_R3_fk2_ctl', u'neck_C0_fk0_ctl', u'neck_C0_fk1_ctl', u'neck_C0_head_ctl'] - -alignFK = [u'arm_L0_fk2_ctl',u'arm_L0_ikcns_ctl', u'arm_L0_fk1_ctl', u'arm_R0_fk2_ctl',u'arm_R0_ikcns_ctl', u'arm_R0_fk1_ctl'] -alignIK = [u'arm_L0_ikcns_ctl',u'arm_L0_ik_ctl', u'arm_L0_upv_ctl', u'arm_R0_ikcns_ctl',u'arm_R0_ik_ctl', u'arm_R0_upv_ctl'] - -skelIK = [ u'mGear_Mocap_interface_LeftFoot', u'mGear_Mocap_interface_RightFoot', u'mGear_Mocap_interface_LeftUpLeg', u'mGear_Mocap_interface_RightUpLeg', u'mGear_Mocap_interface_LeftHand', - u'mGear_Mocap_interface_LeftForeArm', u'mGear_Mocap_interface_RightHand', u'mGear_Mocap_interface_RightForeArm', u'mGear_Mocap_interface_LeftLeg', u'mGear_Mocap_interface_RightLeg', - u'mGear_Mocap_interface_LeftForeArm', u'mGear_Mocap_interface_RightForeArm'] -gearIK = [ u'leg_L0_ik_ctl', u'leg_R0_ik_ctl', u'leg_L0_upv_ctl', u'leg_R0_upv_ctl', u'arm_L0_ik_ctl', u'arm_L0_upv_ctl', u'arm_R0_ik_ctl', u'arm_R0_upv_ctl', u'leg_L0_mid_ctl', u'leg_R0_mid_ctl', - u'arm_L0_mid_ctl', u'arm_R0_mid_ctl'] + u"mGear_Mocap_interface_LeftForeArm", + u"mGear_Mocap_interface_RightForeArm" +] -def importSkeletonBiped(*args): +gearIK = [ + u"leg_L0_ik_ctl", + u"leg_R0_ik_ctl", + u"leg_L0_upv_ctl", + u"leg_R0_upv_ctl", + u"arm_L0_ik_ctl", + u"arm_L0_upv_ctl", + u"arm_R0_ik_ctl", + u"arm_R0_upv_ctl", + u"leg_L0_mid_ctl", + u"leg_R0_mid_ctl", + u"arm_L0_mid_ctl", + u"arm_R0_mid_ctl" +] + +def importSkeletonBiped(*args): path = os.path.dirname(comp.__file__) pm.importFile(os.path.join(path, "_templates", "MOCAP_interface_01.ma")) -def characterizeBiped(*args): +def characterizeBiped(*args): try: - gCtl = pm.PyNode('global_C0_ctl') - mocapAttach = att.addAttribute(gCtl, "mocapAttach", "float", 1.0, minValue=0.0, maxValue=1.0) - - except: + gCtl = pm.PyNode("global_C0_ctl") + mocapAttach = att.addAttribute( + gCtl, + "mocapAttach", + "float", + 1.0, + minValue=0.0, + maxValue=1.0 + ) + except Exception: pm.displayWarning("global_C0_ctl: Is not in the scene") return - - # Align skeleton for a, b in zip(skelFK, gearFK): try: oA = pm.PyNode(a) - except: + except Exception: pm.displayWarning(a + ": Is not in the scene") try: oB = pm.PyNode(b) - except: + except Exception: pm.displayWarning(b + ": Is not in the scene") tra.matchWorldTransform(oB, oA) - #constrain FK controls + # Constrain FK controls for a, b in zip(skelFK, gearFK): oA = pm.PyNode(a) oB = pm.PyNode(b) @@ -103,39 +211,42 @@ def characterizeBiped(*args): pb_node = pm.createNode("pairBlend") - pm.connectAttr(cns+".constraintRotateX", pb_node+".inRotateX2") - pm.connectAttr(cns+".constraintRotateY", pb_node+".inRotateY2") - pm.connectAttr(cns+".constraintRotateZ", pb_node+".inRotateZ2") - pm.connectAttr( pb_node+".outRotateX", oB+".rotateX", f=True) - pm.connectAttr( pb_node+".outRotateY", oB+".rotateY", f=True) - pm.connectAttr( pb_node+".outRotateZ", oB+".rotateZ", f=True) - pm.setKeyframe( oB, at="rotateX") - pm.setKeyframe( oB, at="rotateY") - pm.setKeyframe( oB, at="rotateZ") - - pm.connectAttr(cns+".constraintTranslateX", pb_node+".inTranslateX2") - pm.connectAttr(cns+".constraintTranslateY", pb_node+".inTranslateY2") - pm.connectAttr(cns+".constraintTranslateZ", pb_node+".inTranslateZ2") - pm.connectAttr( pb_node+".outTranslateX", oB+".translateX", f=True) - pm.connectAttr( pb_node+".outTranslateY", oB+".translateY", f=True) - pm.connectAttr( pb_node+".outTranslateZ", oB+".translateZ", f=True) - pm.setKeyframe( oB, at="translateX") - pm.setKeyframe( oB, at="translateY") - pm.setKeyframe( oB, at="translateZ") + pm.connectAttr(cns + ".constraintRotateX", pb_node + ".inRotateX2") + pm.connectAttr(cns + ".constraintRotateY", pb_node + ".inRotateY2") + pm.connectAttr(cns + ".constraintRotateZ", pb_node + ".inRotateZ2") + pm.connectAttr(pb_node + ".outRotateX", oB + ".rotateX", f=True) + pm.connectAttr(pb_node + ".outRotateY", oB + ".rotateY", f=True) + pm.connectAttr(pb_node + ".outRotateZ", oB + ".rotateZ", f=True) + pm.setKeyframe(oB, at="rotateX") + pm.setKeyframe(oB, at="rotateY") + pm.setKeyframe(oB, at="rotateZ") + + pm.connectAttr(cns + ".constraintTranslateX", + pb_node + ".inTranslateX2") + pm.connectAttr(cns + ".constraintTranslateY", + pb_node + ".inTranslateY2") + pm.connectAttr(cns + ".constraintTranslateZ", + pb_node + ".inTranslateZ2") + pm.connectAttr(pb_node + ".outTranslateX", oB + ".translateX", f=True) + pm.connectAttr(pb_node + ".outTranslateY", oB + ".translateY", f=True) + pm.connectAttr(pb_node + ".outTranslateZ", oB + ".translateZ", f=True) + pm.setKeyframe(oB, at="translateX") + pm.setKeyframe(oB, at="translateY") + pm.setKeyframe(oB, at="translateZ") pm.connectAttr(mocapAttach, pb_node.attr("weight")) - #align IK controls with FK controls + # Align IK controls with FK controls for a, b in zip(alignIK, alignFK): oA = pm.PyNode(a) oB = pm.PyNode(b) tra.matchWorldTransform(oB, oA) - if a in [u'arm_L0_upv_ctl', u'arm_R0_upv_ctl']: + if a in [u"arm_L0_upv_ctl", u"arm_R0_upv_ctl"]: oA.attr("tz").set(-3) - if a == u'arm_L0_ikcns_ctl': - oA.attr("rx").set((oA.attr("rx").get()+90)) - if a == u'arm_R0_ikcns_ctl': - oA.attr("rx").set((oA.attr("rx").get()-90)) + if a == u"arm_L0_ikcns_ctl": + oA.attr("rx").set((oA.attr("rx").get() + 90)) + if a == u"arm_R0_ikcns_ctl": + oA.attr("rx").set((oA.attr("rx").get() - 90)) # constrain IK controls for a, b in zip(skelIK, gearIK): @@ -144,48 +255,58 @@ def characterizeBiped(*args): print b pb_node = pm.createNode("pairBlend") try: - if b in [u'leg_L0_upv_ctl', u'leg_R0_upv_ctl']: + if b in (u"leg_L0_upv_ctl", u"leg_R0_upv_ctl"): att.lockAttribute(pm.PyNode(b), lock=False, keyable=True) - if b in [ u'leg_L0_mid_ctl', u'leg_R0_mid_ctl', u'arm_L0_mid_ctl', u'arm_R0_mid_ctl']: + if b in (u"leg_L0_mid_ctl", + u"leg_R0_mid_ctl", + u"arm_L0_mid_ctl", + u"arm_R0_mid_ctl"): cns = pm.pointConstraint(oA, oB, mo=True) else: cns = pm.parentConstraint(oA, oB, mo=True) - pm.connectAttr(cns+".constraintRotateX", pb_node+".inRotateX2") - pm.connectAttr(cns+".constraintRotateY", pb_node+".inRotateY2") - pm.connectAttr(cns+".constraintRotateZ", pb_node+".inRotateZ2") - pm.connectAttr( pb_node+".outRotateX", oB+".rotateX", f=True) - pm.connectAttr( pb_node+".outRotateY", oB+".rotateY", f=True) - pm.connectAttr( pb_node+".outRotateZ", oB+".rotateZ", f=True) - pm.setKeyframe( oB, at="rotateX") - pm.setKeyframe( oB, at="rotateY") - pm.setKeyframe( oB, at="rotateZ") - except: + pm.connectAttr(cns + ".constraintRotateX", pb_node + ".inRotateX2") + pm.connectAttr(cns + ".constraintRotateY", pb_node + ".inRotateY2") + pm.connectAttr(cns + ".constraintRotateZ", pb_node + ".inRotateZ2") + pm.connectAttr(pb_node + ".outRotateX", oB + ".rotateX", f=True) + pm.connectAttr(pb_node + ".outRotateY", oB + ".rotateY", f=True) + pm.connectAttr(pb_node + ".outRotateZ", oB + ".rotateZ", f=True) + pm.setKeyframe(oB, at="rotateX") + pm.setKeyframe(oB, at="rotateY") + pm.setKeyframe(oB, at="rotateZ") + except Exception: cns = pm.pointConstraint(oA, oB, mo=True) - pm.connectAttr(cns+".constraintTranslateX", pb_node+".inTranslateX2") - pm.connectAttr(cns+".constraintTranslateY", pb_node+".inTranslateY2") - pm.connectAttr(cns+".constraintTranslateZ", pb_node+".inTranslateZ2") - pm.connectAttr( pb_node+".outTranslateX", oB+".translateX", f=True) - pm.connectAttr( pb_node+".outTranslateY", oB+".translateY", f=True) - pm.connectAttr( pb_node+".outTranslateZ", oB+".translateZ", f=True) - pm.setKeyframe( oB, at="translateX") - pm.setKeyframe( oB, at="translateY") - pm.setKeyframe( oB, at="translateZ") + pm.connectAttr(cns + ".constraintTranslateX", + pb_node + ".inTranslateX2") + pm.connectAttr(cns + ".constraintTranslateY", + pb_node + ".inTranslateY2") + pm.connectAttr(cns + ".constraintTranslateZ", + pb_node + ".inTranslateZ2") + pm.connectAttr(pb_node + ".outTranslateX", oB + ".translateX", f=True) + pm.connectAttr(pb_node + ".outTranslateY", oB + ".translateY", f=True) + pm.connectAttr(pb_node + ".outTranslateZ", oB + ".translateZ", f=True) + pm.setKeyframe(oB, at="translateX") + pm.setKeyframe(oB, at="translateY") + pm.setKeyframe(oB, at="translateZ") pm.connectAttr(mocapAttach, pb_node.attr("weight")) + def bakeMocap(*args): - start = pm.playbackOptions(q=True, min=True) - end = pm.playbackOptions(q=True, max=True) + start = pm.playbackOptions(query=True, min=True) + end = pm.playbackOptions(query=True, max=True) - if pm.selected() and pm.selected()[0].name()[-3:] =="ctl": + if pm.selected() and pm.selected()[0].name()[-3:] == "ctl": controls = gearFK + gearIK - if len(pm.selected()[0].name().split(":"))==2: + + if len(pm.selected()[0].name().split(":")) == 2: for i, x in enumerate(controls): controls[i] = pm.selected()[0].name().split(":")[0] + ":" + x - # we are using a custom bake system, because bakeResults is super slow with pairblend nodes - for x in range(int(start), int(end+1)): + # Using a custom bake system because bakeResults is + # slow with pairblend nodes. + for x in range(int(start), int(end + 1)): pm.currentTime(x) pm.setKeyframe(controls) else: - pm.displayWarning("Please select on control of the rig to determine wich character will be baked") + pm.displayWarning("Please select on control of the rig to " + "determine wich character will be baked") diff --git a/scripts/mGear_postSpring.py b/scripts/mGear_postSpring.py index 1087f5b..8533100 100644 --- a/scripts/mGear_postSpring.py +++ b/scripts/mGear_postSpring.py @@ -1,28 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - +from maya import cmds from mgear.maya.rigbits.postSpring import * -print("[mgear] DEPRECATED: You should import mgear.maya.rigbits.postSpring instead of mGear_postSpring.") +cmds.warning( + "[mgear] DEPRECATED: You should import mgear.maya.rigbits.postSpring " + "instead of mGear_postSpring." +) diff --git a/scripts/mGear_proxySlicer.py b/scripts/mGear_proxySlicer.py index 663b21d..2f2b7df 100644 --- a/scripts/mGear_proxySlicer.py +++ b/scripts/mGear_proxySlicer.py @@ -1,28 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - +from maya import cmds from mgear.maya.rigbits.proxySlicer import * -print("[mgear] DEPRECATED: You should import mgear.maya.rigbits.proxySlicer instead of mGear_proxySlicer.") +cmds.warning( + "[mgear] DEPRECATED: You should import mgear.maya.rigbits.proxySlicer " + "instead of mGear_proxySlicer." +) diff --git a/scripts/mGear_pyqt.py b/scripts/mGear_pyqt.py index f0dfe54..e8fa3a2 100644 --- a/scripts/mGear_pyqt.py +++ b/scripts/mGear_pyqt.py @@ -1,35 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -mGear Qt python binding abstraction. -""" - import os + def _qt_import(binding, shi=False, cui=False): QtGui = None QtCore = None @@ -53,7 +24,6 @@ def _qt_import(binding, shi=False, cui=False): from PyQt4 import QtGui from PyQt4 import QtCore import PyQt4.QtGui as QtWidgets - from PyQt4.QtCore import QObject, pyqtSignal from sip import wrapinstance as wrapInstance from PyQt4.uic import compileUi print("Warning: 'shiboken' is not supported in 'PyQt4' Qt binding") @@ -69,7 +39,7 @@ def _qt_import(binding, shi=False, cui=False): rv.append(compileUi) return rv -## Master qt import function ## + def qt_import(shi=False, cui=False): """ import pyside/pyQt @@ -88,10 +58,15 @@ def qt_import(shi=False, cui=False): for binding in lookup: try: return _qt_import(binding, shi, cui) - except: + except Exception: pass raise _qt_import("ThisBindingSurelyDoesNotExist", False, False) -QtGui, QtCore, QtWidgets, wrapInstance, shiboken, compileUi = qt_import(shi=True, cui=True) +(QtGui, + QtCore, + QtWidgets, + wrapInstance, + shiboken, + compileUi) = qt_import(shi=True, cui=True) diff --git a/scripts/mGear_riggingTools.py b/scripts/mGear_riggingTools.py index 31f898c..b74318f 100644 --- a/scripts/mGear_riggingTools.py +++ b/scripts/mGear_riggingTools.py @@ -1,28 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - +from maya import cmds from mgear.maya.rigbits import * -print("[mgear] DEPRECATED: You should import mgear.maya.rigbits instead of mGear_riggingTools.") +cmds.warning( + "[mgear] DEPRECATED: You should import mgear.maya.rigbits " + "instead of mGear_riggingTools." +) diff --git a/scripts/mGear_rope.py b/scripts/mGear_rope.py index 6802a42..3f3ece1 100644 --- a/scripts/mGear_rope.py +++ b/scripts/mGear_rope.py @@ -1,28 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - +from maya import cmds from mgear.maya.rigbits.rope import * -print("[mgear] DEPRECATED: You should import mgear.maya.rigbits.rope instead of mGear_rope.") +cmds.warning( + "[mgear] DEPRECATED: You should import mgear.maya.rigbits.rope " + "instead of mGear_rope." +) diff --git a/scripts/mGear_utils.py b/scripts/mGear_utils.py index 5c7246d..ad9337b 100644 --- a/scripts/mGear_utils.py +++ b/scripts/mGear_utils.py @@ -1,28 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - +from maya import cmds from mgear.maya.rigbits.utils import * -print("[mgear] DEPRECATED: You should import mgear.maya.rigbits.utils instead of mGear_utils.") +cmds.warning( + "[mgear] DEPRECATED: You should import mgear.maya.rigbits.utils " + "instead of mGear_utils." +) diff --git a/scripts/mgear/__init__.py b/scripts/mgear/__init__.py new file mode 100644 index 0000000..e230d63 --- /dev/null +++ b/scripts/mgear/__init__.py @@ -0,0 +1,206 @@ +"""mGear init module""" + +import os +import sys +import exceptions + +# Debug mode for the logger +logDebug = False + +# Severity for logged messages +sev_fatal = 1 +sev_error = 2 +sev_warning = 4 +sev_info = 8 +sev_verbose = 16 +sev_comment = 32 + +# gear version +VERSION = [2, 3, 0] + +########################################################## +# METHODS +########################################################## + + +def logInfos(): + """Log version of Gear""" + print "GEAR version : " + getVersion() + + +def getVersion(): + """Get mGear version + + Returns: + mgear version + + """ + return ".".join([str(i) for i in VERSION]) + + +def reloadModule(name="mgear", *args): + """Reload a module and its sub-modules from a given module name. + + Args: + name (str): Module Name. Default value is "mgear". + + """ + debugMode = setDebug(False) + module = __import__(name, globals(), locals(), ["*"], -1) + + path = module.__path__[0] + + __reloadRecursive(path, name) + + setDebug(debugMode) + + +def __reloadRecursive(path, parentName): + """search subfolders recursive + + Args: + path (str): Path to search subfolder recursive + parentName (str): parent name + + """ + for root, dirs, files in os.walk(path, True, None): + + # parse all the files of given path and reload python modules + for sfile in files: + if sfile.endswith(".py"): + if sfile == "__init__.py": + name = parentName + else: + name = parentName + "." + sfile[:-3] + + log("reload : %s" % name) + try: + module = __import__(name, globals(), locals(), ["*"], -1) + reload(module) + except ImportError as e: + for arg in e.args: + log(arg, sev_error) + except Exception as e: + for arg in e.args: + log(arg, sev_error) + + # Now reload sub modules + for dirName in dirs: + __reloadRecursive(path + "/" + dirName, parentName + "." + dirName) + break + +########################################################## +# LOGGER +########################################################## + + +def setDebug(b): + """Set the debug mode to given value. + + Args: + b (bool): boolean + + Returns: + bool: The previous value of the debug mode + + """ + global logDebug + original_value = logDebug + logDebug = b + return original_value + + +def toggleDebug(): + """Toggle the debug mode value. + + Returns; + bool: The new debug mode value. + + """ + global logDebug + logDebug = not logDebug + return logDebug + + +def log(message, severity=sev_comment, infos=False): + """Log a message using severity and additional info from the file itself. + + Severity has been taken from Softimage one: + * 1. Fatal + * 2. Error + * 4. Warning + * 8. Info + * 16. Verbose + * 32. Comment + + Args: + messages(str): The message + severity (int): Severity level. + infos (bool): Add extra infos from the module, class, method and + line number. + + """ + message = str(message) + + if infos or logDebug: + message = getInfos(1) + "\n" + message + + sys.stdout.write(message + "\n") + +# ======================================================== +# Exception + + +class FakeException(exceptions.Exception): + pass + + +def getInfos(level): + """Get information from where the method has been fired. + Such as module name, method, line number... + + Args: + level (int): Level + + Returns: + str: The info + + """ + try: + raise FakeException("this is fake") + except Exception: + # get the current execution frame + f = sys.exc_info()[2].tb_frame + + # go back as many call-frames as was specified + while level >= 0: + f = f.f_back + level = level - 1 + + infos = "" + + # Module Name + moduleName = f.f_globals["__name__"] + if moduleName != "__ax_main__": + infos += moduleName + " | " + + # Class Name + # if there is a self variable in the caller's local namespace then + # we'll make the assumption that the caller is a class method + obj = f.f_locals.get("self", None) + if obj: + infos += obj.__class__.__name__ + "::" + + # Function Name + functionName = f.f_code.co_name + if functionName != "": + infos += functionName + "()" + + # Line Number + lineNumber = str(f.f_lineno) + infos += " line " + lineNumber + "" + + if infos: + infos = "[" + infos + "]" + + return infos diff --git a/scripts/mgear/__init__.py.in b/scripts/mgear/__init__.py.in index 2f26984..b2ee490 100644 --- a/scripts/mgear/__init__.py.in +++ b/scripts/mgear/__init__.py.in @@ -1,40 +1,7 @@ -# MGEAR is under the terms of the MIT License +"""mGear init module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -mGear init module. -""" - -########################################################## -# GLOBAL -########################################################## -# built-in import os import sys -import string import exceptions # Debug mode for the logger @@ -51,31 +18,28 @@ sev_comment = 32 # gear version VERSION = @MGEAR_VERSION@ - ########################################################## # METHODS ########################################################## + def logInfos(): - """ - Log version of Gear - """ - print "GEAR version : "+getVersion() + """Log version of Gear""" + print "GEAR version : " + getVersion() def getVersion(): - """ - Get mGear version + """Get mGear version Returns: mgear version + """ return ".".join([str(i) for i in VERSION]) def reloadModule(name="mgear", *args): - """ - Reload a module and its sub-modules from a given module name. + """Reload a module and its sub-modules from a given module name. Args: name (str): Module Name. Default value is "mgear". @@ -92,12 +56,12 @@ def reloadModule(name="mgear", *args): def __reloadRecursive(path, parentName): - """ - search subfolders recursive + """search subfolders recursive Args: path (str): Path to search subfolder recursive parentName (str): parent name + """ for root, dirs, files in os.walk(path, True, None): @@ -107,37 +71,38 @@ def __reloadRecursive(path, parentName): if sfile == "__init__.py": name = parentName else: - name = parentName+"."+sfile[:-3] + name = parentName + "." + sfile[:-3] - log("reload : %s"%name) + log("reload : %s" % name) try: module = __import__(name, globals(), locals(), ["*"], -1) reload(module) - except ImportError, e: + except ImportError as e: for arg in e.args: log(arg, sev_error) - except Exception, e: + except Exception as e: for arg in e.args: log(arg, sev_error) # Now reload sub modules for dirName in dirs: - __reloadRecursive(path+"/"+dirName, parentName+"."+dirName) + __reloadRecursive(path + "/" + dirName, parentName + "." + dirName) break ########################################################## # LOGGER ########################################################## + def setDebug(b): - """ - Set the debug mode to given value. + """Set the debug mode to given value. Args: b (bool): boolean Returns: bool: The previous value of the debug mode + """ global logDebug original_value = logDebug @@ -146,11 +111,11 @@ def setDebug(b): def toggleDebug(): - """ - Toggle the debug mode value. + """Toggle the debug mode value. Returns; bool: The new debug mode value. + """ global logDebug logDebug = not logDebug @@ -158,8 +123,7 @@ def toggleDebug(): def log(message, severity=sev_comment, infos=False): - """ - Log a message using severity and additional info from the file itself. + """Log a message using severity and additional info from the file itself. Severity has been taken from Softimage one: * 1. Fatal @@ -172,23 +136,27 @@ def log(message, severity=sev_comment, infos=False): Args: messages(str): The message severity (int): Severity level. - infos (bool): Add extra infos from the module, class, method and line number. + infos (bool): Add extra infos from the module, class, method and + line number. + """ message = str(message) if infos or logDebug: - message = getInfos(1) +"\n"+ message + message = getInfos(1) + "\n" + message sys.stdout.write(message + "\n") # ======================================================== -## Exception +# Exception + + class FakeException(exceptions.Exception): pass + def getInfos(level): - """ - Get information from where the method has been fired. + """Get information from where the method has been fired. Such as module name, method, line number... Args: @@ -196,17 +164,18 @@ def getInfos(level): Returns: str: The info + """ try: raise FakeException("this is fake") - except Exception, e: - #get the current execution frame + except Exception: + # get the current execution frame f = sys.exc_info()[2].tb_frame - #go back as many call-frames as was specified + # go back as many call-frames as was specified while level >= 0: f = f.f_back - level = level-1 + level = level - 1 infos = "" @@ -216,22 +185,22 @@ def getInfos(level): infos += moduleName + " | " # Class Name - #if there is a self variable in the caller's local namespace then - #we'll make the assumption that the caller is a class method + # if there is a self variable in the caller's local namespace then + # we'll make the assumption that the caller is a class method obj = f.f_locals.get("self", None) if obj: - infos += obj.__class__.__name__+"::" + infos += obj.__class__.__name__ + "::" # Function Name functionName = f.f_code.co_name if functionName != "": - infos += functionName+"()" + infos += functionName + "()" # Line Number lineNumber = str(f.f_lineno) - infos += " line "+lineNumber+"" + infos += " line " + lineNumber + "" if infos: - infos = "["+infos+"]" + infos = "[" + infos + "]" return infos diff --git a/scripts/mgear/maya/__init__.py b/scripts/mgear/maya/__init__.py index c0be313..288497c 100644 --- a/scripts/mgear/maya/__init__.py +++ b/scripts/mgear/maya/__init__.py @@ -1,42 +1,18 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import pymel.core as pm import mgear + def getMayaVer(): - """ - Get Maya version + """Get Maya version :return: Maya version """ version = pm.versions.current() return version + def aboutMgear(*args): + """About mgear""" version = mgear.getVersion() note = """ @@ -46,15 +22,15 @@ def aboutMgear(*args): Copyright (c) 2016 Jeremie Passerin, Miquel Campos - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -64,9 +40,8 @@ def aboutMgear(*args): ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com - Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com + Authors: Jeremie Passerin, Miquel Campos """.format(version) - pm.confirmDialog( title='About mGear', message=note, button=["OK"], - defaultButton='OK', cancelButton='OK', dismissString='OK' ) + pm.confirmDialog(title='About mGear', message=note, button=["OK"], + defaultButton='OK', cancelButton='OK', dismissString='OK') diff --git a/scripts/mgear/maya/applyop.py b/scripts/mgear/maya/applyop.py index c44980e..1f492d0 100644 --- a/scripts/mgear/maya/applyop.py +++ b/scripts/mgear/maya/applyop.py @@ -1,29 +1,3 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - """ **Apply operator module** @@ -39,29 +13,44 @@ # GLOBAL ############################################# import pymel.core as pm -import pymel.core.datatypes as dt - +from pymel.core import datatypes ############################################# # BUILT IN NODES ############################################# + +def curvecns_op(crv, inputs=[]): + + for i, item in enumerate(inputs): + node = pm.createNode("decomposeMatrix") + pm.connectAttr(item + ".worldMatrix[0]", node + ".inputMatrix") + pm.connectAttr(node + ".outputTranslate", + crv + ".controlPoints[%s]" % i) + + return node + + def splineIK(name, chn, parent=None, cParent=None, curve=None): - """ - Apply a splineIK solver to a chain. + """Apply a splineIK solver to a chain. - Args: + Arguments: name (str): Name of the operator node. - chn (list of joints): List of joints. At less 2 joints should be in the list. + chn (list of joints): List of joints. At less 2 joints should be in + the list. parent (dagNode): Parent for the ikHandle. cParent (dagNode): Parent for the curve. - curve (dagNode): Specifies the curve to be used by the ikSplineHandle. This param is optional. + curve (dagNode): Specifies the curve to be used by the ikSplineHandle. + This param is optional. Returns: list: ikHandle node and splinecrv in a list Example: - >>> aop.splineIK(self.getName("rollRef"), self.rollRef, parent=self.root, cParent=self.bone0 ) + >>> aop.splineIK(self.getName("rollRef"), + self.rollRef, + parent=self.root, + cParent=self.bone0 ) """ data = {} @@ -73,10 +62,9 @@ def splineIK(name, chn, parent=None, cParent=None, curve=None): if curve is not None: data["curve"] = curve - node, effector, splineCrv = pm.ikHandle(**data) - #converting to pyNode - node = pm.PyNode("|"+node) + # converting to pyNode + node = pm.PyNode("|" + node) effector = pm.PyNode(effector) splineCrv = pm.PyNode(splineCrv) @@ -93,13 +81,16 @@ def splineIK(name, chn, parent=None, cParent=None, curve=None): def oriCns(driver, driven, maintainOffset=False): - """ - Apply orientation constraint changing XYZ default connexions by rotate compound connexions + """Apply orientation constraint + + Apply orientation constraint changing XYZ default connexions by + rotate compound connexions Note: - We have found an evaluation difference in the values if the connexion is compound or by axis + We have found an evaluation difference in the values if the connexion + is compound or by axis - Args: + Arguments: driver (dagNode or dagNode list): Driver object. driven (dagNode): Driven object. maintainOffset (bool): Keep the offset. @@ -119,8 +110,9 @@ def oriCns(driver, driven, maintainOffset=False): """ oriCns = pm.orientConstraint(driver, driven, maintainOffset=maintainOffset) for axis in "XYZ": - pm.disconnectAttr(oriCns+".constraintRotate"+axis, driven+".rotate"+axis) - pm.connectAttr(oriCns+".constraintRotate", driven+".rotate", f=True) + pm.disconnectAttr(oriCns + ".constraintRotate" + axis, + driven + ".rotate" + axis) + pm.connectAttr(oriCns + ".constraintRotate", driven + ".rotate", f=True) return oriCns @@ -129,11 +121,13 @@ def pathCns(obj, curve, cnsType=False, u=0, tangent=False): """ Apply a path constraint or curve constraint. - Args: + Arguments: obj (dagNode): Constrained object. curve (Nurbscurve): Constraining Curve. - cnsType (int): 0 for Path Constraint, 1 for Curve Constraint (Parametric). - u (float): Position of the object on the curve (from 0 to 100 for path constraint, from 0 to 1 for Curve cns). + cnsType (int): 0 for Path Constraint, 1 for Curve + Constraint (Parametric). + u (float): Position of the object on the curve (from 0 to 100 for path + constraint, from 0 to 1 for Curve cns). tangent (bool): Keep tangent orientation option. Returns: @@ -152,15 +146,23 @@ def pathCns(obj, curve, cnsType=False, u=0, tangent=False): return node -#TODO: review function to make wupObject optional -def aimCns(obj, master, axis="xy", wupType="objectrotation", wupVector=[0,1,0], wupObject=None, maintainOffset=False): - """ - Apply a direction constraint +# TODO: review function to make wupObject optional + + +def aimCns(obj, + master, + axis="xy", + wupType="objectrotation", + wupVector=[0, 1, 0], + wupObject=None, + maintainOffset=False): + """Apply a direction constraint - Args: + Arguments: obj (dagNode): Constrained object. master (dagNode): Constraining Object. - axis (str): Define pointing axis and upvector axis (combination of xyz and -x-y-z). + axis (str): Define pointing axis and upvector + axis (combination of xyz and -x-y-z). wupType (str): scene, object, objectrotation, vector, or none. wupVector (list of 3 float): world up vector. Exp: [0.0,1.0,0.0]. wupObject (pyNode): world up object. @@ -168,39 +170,75 @@ def aimCns(obj, master, axis="xy", wupType="objectrotation", wupVector=[0,1,0], Returns: pyNode: Newly created constraint. + """ - node = pm.aimConstraint(master, obj, worldUpType=wupType, worldUpVector=wupVector, worldUpObject=wupObject, maintainOffset=maintainOffset) - - if axis == "xy": a = [1,0,0,0,1,0] - elif axis == "xz": a = [1,0,0,0,0,1] - elif axis == "yx": a = [0,1,0,1,0,0] - elif axis == "yz": a = [0,1,0,0,0,1] - elif axis == "zx": a = [0,0,1,1,0,0] - elif axis == "zy": a = [0,0,1,0,1,0] - - elif axis == "-xy": a = [-1,0,0,0,1,0] - elif axis == "-xz": a = [-1,0,0,0,0,1] - elif axis == "-yx": a = [0,-1,0,1,0,0] - elif axis == "-yz": a = [0,-1,0,0,0,1] - elif axis == "-zx": a = [0,0,-1,1,0,0] - elif axis == "-zy": a = [0,0,-1,0,1,0] - - elif axis == "x-y": a = [1,0,0,0,-1,0] - elif axis == "x-z": a = [1,0,0,0,0,-1] - elif axis == "y-x": a = [0,1,0,-1,0,0] - elif axis == "y-z": a = [0,1,0,0,0,-1] - elif axis == "z-x": a = [0,0,1,-1,0,0] - elif axis == "z-y": a = [0,0,1,0,-1,0] - - elif axis == "-x-y": a = [-1,0,0,0,-1,0] - elif axis == "-x-z": a = [-1,0,0,0,0,-1] - elif axis == "-y-x": a = [0,-1,0,-1,0,0] - elif axis == "-y-z": a = [0,-1,0,0,0,-1] - elif axis == "-z-x": a = [0,0,-1,-1,0,0] - elif axis == "-z-y": a = [0,0,-1,0,-1,0] - - for i, name in enumerate(["aimVectorX", "aimVectorY", "aimVectorZ", "upVectorX", "upVectorY", "upVectorZ"]): - pm.setAttr(node+"."+name, a[i]) + node = pm.aimConstraint(master, + obj, + worldUpType=wupType, + worldUpVector=wupVector, + worldUpObject=wupObject, + maintainOffset=maintainOffset) + + if axis == "xy": + a = [1, 0, 0, 0, 1, 0] + elif axis == "xz": + a = [1, 0, 0, 0, 0, 1] + elif axis == "yx": + a = [0, 1, 0, 1, 0, 0] + elif axis == "yz": + a = [0, 1, 0, 0, 0, 1] + elif axis == "zx": + a = [0, 0, 1, 1, 0, 0] + elif axis == "zy": + a = [0, 0, 1, 0, 1, 0] + + elif axis == "-xy": + a = [-1, 0, 0, 0, 1, 0] + elif axis == "-xz": + a = [-1, 0, 0, 0, 0, 1] + elif axis == "-yx": + a = [0, -1, 0, 1, 0, 0] + elif axis == "-yz": + a = [0, -1, 0, 0, 0, 1] + elif axis == "-zx": + a = [0, 0, -1, 1, 0, 0] + elif axis == "-zy": + a = [0, 0, -1, 0, 1, 0] + + elif axis == "x-y": + a = [1, 0, 0, 0, -1, 0] + elif axis == "x-z": + a = [1, 0, 0, 0, 0, -1] + elif axis == "y-x": + a = [0, 1, 0, -1, 0, 0] + elif axis == "y-z": + a = [0, 1, 0, 0, 0, -1] + elif axis == "z-x": + a = [0, 0, 1, -1, 0, 0] + elif axis == "z-y": + a = [0, 0, 1, 0, -1, 0] + + elif axis == "-x-y": + a = [-1, 0, 0, 0, -1, 0] + elif axis == "-x-z": + a = [-1, 0, 0, 0, 0, -1] + elif axis == "-y-x": + a = [0, -1, 0, -1, 0, 0] + elif axis == "-y-z": + a = [0, -1, 0, 0, 0, -1] + elif axis == "-z-x": + a = [0, 0, -1, -1, 0, 0] + elif axis == "-z-y": + a = [0, 0, -1, 0, -1, 0] + + for i, name in enumerate(["aimVectorX", + "aimVectorY", + "aimVectorZ", + "upVectorX", + "upVectorY", + "upVectorZ"]): + + pm.setAttr(node + "." + name, a[i]) return node @@ -208,11 +246,11 @@ def aimCns(obj, master, axis="xy", wupType="objectrotation", wupVector=[0,1,0], # CUSTOM NODES ############################################# + def gear_spring_op(in_obj, goal=False): - """ - Apply mGear spring node. + """Apply mGear spring node. - Args: + Arguments: in_obj (dagNode): Constrained object. goal (dagNode): By default is False. @@ -224,69 +262,74 @@ def gear_spring_op(in_obj, goal=False): node = pm.createNode("mgear_springNode") - pm.connectAttr("time1.outTime", node+".time") + pm.connectAttr("time1.outTime", node + ".time") dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(goal+".parentMatrix", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", node+".goal") + pm.connectAttr(goal + ".parentMatrix", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", node + ".goal") cm_node = pm.createNode("composeMatrix") - pm.connectAttr(node+".output", cm_node+".inputTranslate") + pm.connectAttr(node + ".output", cm_node + ".inputTranslate") mm_node = pm.createNode("mgear_mulMatrix") - - pm.connectAttr(cm_node+".outputMatrix", mm_node+".matrixA") - pm.connectAttr(in_obj+".parentInverseMatrix", mm_node+".matrixB") + pm.connectAttr(cm_node + ".outputMatrix", mm_node + ".matrixA") + pm.connectAttr(in_obj + ".parentInverseMatrix", mm_node + ".matrixB") dm_node2 = pm.createNode("decomposeMatrix") - pm.connectAttr(mm_node+".output", dm_node2+".inputMatrix") - pm.connectAttr(dm_node2+".outputTranslate", in_obj+".translate") + pm.connectAttr(mm_node + ".output", dm_node2 + ".inputMatrix") + pm.connectAttr(dm_node2 + ".outputTranslate", in_obj + ".translate") - pm.setAttr(node+".stiffness", 0.5) - pm.setAttr(node+".damping", 0.5) + pm.setAttr(node + ".stiffness", 0.5) + pm.setAttr(node + ".damping", 0.5) return node def gear_mulmatrix_op(mA, mB, target=False, transform='srt'): - """ - Create mGear multiply Matrix node. + """Create mGear multiply Matrix node. Note: - This node have same functionality as the default Maya matrix multiplication. + This node have same functionality as the default Maya matrix + multiplication. - Args: + Arguments: mA (matrix): input matrix A. mB (matrix): input matrix B. target (dagNode): object target to apply the transformation - transform (str): if target is True. out transform to SRT valid value s r t + transform (str): if target is True. out transform to SRT valid + value s r t Returns: pyNode: Newly created mGear_multMatrix node + """ node = pm.createNode("mgear_mulMatrix") for m, mi in zip([mA, mB], ['matrixA', 'matrixB']): - if isinstance(m, dt.Matrix): + if isinstance(m, datatypes.Matrix): pm.setAttr(node.attr(mi), m) else: pm.connectAttr(m, node.attr(mi)) if target: dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") + pm.connectAttr(node + ".output", dm_node + ".inputMatrix") if 't' in transform: - pm.connectAttr(dm_node+".outputTranslate", target.attr("translate"), f=True) + pm.connectAttr(dm_node + ".outputTranslate", + target.attr("translate"), f=True) if 'r' in transform: - pm.connectAttr(dm_node+".outputRotate", target.attr("rotate"), f=True) + pm.connectAttr(dm_node + ".outputRotate", + target.attr("rotate"), f=True) if 's' in transform: - pm.connectAttr(dm_node+".outputScale", target.attr("scale"), f=True) + pm.connectAttr(dm_node + ".outputScale", + target.attr("scale"), f=True) return node + def gear_intmatrix_op(mA, mB, blend=0): """ create mGear interpolate Matrix node. - Args: + Arguments: mA (matrix): Input matrix A. mB (matrix): Input matrix A. blend (float or connection): Blending value. @@ -296,23 +339,27 @@ def gear_intmatrix_op(mA, mB, blend=0): """ node = pm.createNode("mgear_intMatrix") - pm.connectAttr(mA, node+".matrixA") - pm.connectAttr(mB, node+".matrixB") + pm.connectAttr(mA, node + ".matrixA") + pm.connectAttr(mB, node + ".matrixB") - if isinstance(blend, str) or isinstance(blend, unicode) or isinstance(blend, pm.Attribute): - pm.connectAttr(blend, node+".blend") + if (isinstance(blend, str) + or isinstance(blend, unicode) + or isinstance(blend, pm.Attribute)): + pm.connectAttr(blend, node + ".blend") else: - pm.setAttr(node+".blend", blend) + pm.setAttr(node + ".blend", blend) return node + def gear_curvecns_op(crv, inputs=[]): """ create mGear curvecns node. - Args: + Arguments: crv (nurbsCurve): Nurbs curve. - inputs (List of dagNodes): Input object to drive the curve. Should be same number as crv points. + inputs (List of dagNodes): Input object to drive the curve. Should be + same number as crv points. Also the order should be the same as the points Returns: @@ -322,15 +369,20 @@ def gear_curvecns_op(crv, inputs=[]): node = pm.deformer(type="mgear_curveCns")[0] for i, item in enumerate(inputs): - pm.connectAttr(item+".worldMatrix", node+".inputs[%s]"%i) + pm.connectAttr(item + ".worldMatrix", node + ".inputs[%s]" % i) return node -def gear_curveslide2_op(outcrv, incrv, position=0, maxstretch=1, maxsquash=1, softness=0): - """ - Apply a sn_curveslide2_op operator - Args: +def gear_curveslide2_op(outcrv, + incrv, + position=0, + maxstretch=1, + maxsquash=1, + softness=0): + """Apply a sn_curveslide2_op operator + + Arguments: outcrv (NurbsCurve): Out Curve. incrv (NurbsCurve): In Curve. position (float): Default position value (from 0 to 1). @@ -344,24 +396,26 @@ def gear_curveslide2_op(outcrv, incrv, position=0, maxstretch=1, maxsquash=1, so pm.select(outcrv) node = pm.deformer(type="mgear_slideCurve2")[0] - pm.connectAttr(incrv+".local", node+".master_crv") - pm.connectAttr(incrv+".worldMatrix", node+".master_mat") + pm.connectAttr(incrv + ".local", node + ".master_crv") + pm.connectAttr(incrv + ".worldMatrix", node + ".master_mat") - pm.setAttr(node+".master_length", pm.arclen(incrv)) - pm.setAttr(node+".slave_length", pm.arclen(incrv)) - pm.setAttr(node+".position", 0) - pm.setAttr(node+".maxstretch", 1) - pm.setAttr(node+".maxsquash", 1) - pm.setAttr(node+".softness", 0) + pm.setAttr(node + ".master_length", pm.arclen(incrv)) + pm.setAttr(node + ".slave_length", pm.arclen(incrv)) + pm.setAttr(node + ".position", 0) + pm.setAttr(node + ".maxstretch", 1) + pm.setAttr(node + ".maxsquash", 1) + pm.setAttr(node + ".softness", 0) return node + def gear_spinePointAtOp(cns, startobj, endobj, blend=.5, axis="-Z"): """ Apply a SpinePointAt operator - Args: - cns (Constraint): The constraint to apply the operator on (must be a curve, path or direction constraint). + Arguments: + cns (Constraint): The constraint to apply the operator on (must be a + curve, path or direction constraint). startobj (dagNode): Start Reference. endobj (dagNode): End Reference. blend (float): Blend influence value from 0 to 1. @@ -373,16 +427,16 @@ def gear_spinePointAtOp(cns, startobj, endobj, blend=.5, axis="-Z"): node = pm.createNode("mgear_spinePointAt") # Inputs - pm.setAttr(node+".blend", blend) - pm.setAttr(node+".axe", ["X", "Y", "Z", "-X", "-Y", "-Z"].index(axis)) + pm.setAttr(node + ".blend", blend) + pm.setAttr(node + ".axe", ["X", "Y", "Z", "-X", "-Y", "-Z"].index(axis)) - pm.connectAttr(startobj+".rotate", node+".rotA") - pm.connectAttr(endobj+".rotate", node+".rotB") + pm.connectAttr(startobj + ".rotate", node + ".rotA") + pm.connectAttr(endobj + ".rotate", node + ".rotB") # Outputs - pm.setAttr(cns+".worldUpType", 3) + pm.setAttr(cns + ".worldUpType", 3) - pm.connectAttr(node+".pointAt", cns+".worldUpVector") + pm.connectAttr(node + ".pointAt", cns + ".worldUpVector") return node @@ -391,8 +445,9 @@ def gear_spinePointAtOpWM(cns, startobj, endobj, blend=.5, axis="-Z"): """ Apply a SpinePointAt operator using world matrix - Args: - cns Constraint: The constraint to apply the operator on (must be a curve, path or direction constraint). + Arguments: + cns Constraint: The constraint to apply the operator on (must be a + curve, path or direction constraint). startobj (dagNode): Start Reference. endobj (dagNode): End Reference. blend (float): Blend influence value from 0 to 1. @@ -404,39 +459,51 @@ def gear_spinePointAtOpWM(cns, startobj, endobj, blend=.5, axis="-Z"): node = pm.createNode("mgear_spinePointAt") # Inputs - pm.setAttr(node+".blend", blend) - pm.setAttr(node+".axe", ["X", "Y", "Z", "-X", "-Y", "-Z"].index(axis)) + pm.setAttr(node + ".blend", blend) + pm.setAttr(node + ".axe", ["X", "Y", "Z", "-X", "-Y", "-Z"].index(axis)) dem_node1 = pm.createNode("decomposeMatrix") dem_node2 = pm.createNode("decomposeMatrix") - pm.connectAttr(startobj+".worldMatrix", dem_node1+".inputMatrix") - pm.connectAttr(endobj+".worldMatrix", dem_node2+".inputMatrix") + pm.connectAttr(startobj + ".worldMatrix", dem_node1 + ".inputMatrix") + pm.connectAttr(endobj + ".worldMatrix", dem_node2 + ".inputMatrix") - - - pm.connectAttr(dem_node1+".outputRotate", node+".rotA") - pm.connectAttr(dem_node2+".outputRotate", node+".rotB") + pm.connectAttr(dem_node1 + ".outputRotate", node + ".rotA") + pm.connectAttr(dem_node2 + ".outputRotate", node + ".rotB") # Outputs - pm.setAttr(cns+".worldUpType", 3) + pm.setAttr(cns + ".worldUpType", 3) - pm.connectAttr(node+".pointAt", cns+".worldUpVector") + pm.connectAttr(node + ".pointAt", cns + ".worldUpVector") return node -def gear_ikfk2bone_op(out=[], root=None, eff=None, upv=None, fk0=None, fk1=None, fk2=None, lengthA=5, lengthB=3, negate=False, blend=0): - """ - Apply a sn_ikfk2bone_op operator - Args: - out (list of dagNodes): The constrained outputs order must be respected (BoneA, BoneB, Center, CenterN, Eff), - set it to None if you don't want one of the output. +def gear_ikfk2bone_op(out=[], + root=None, + eff=None, + upv=None, + fk0=None, + fk1=None, + fk2=None, + lengthA=5, + lengthB=3, + negate=False, + blend=0): + """Apply a sn_ikfk2bone_op operator + + Arguments: + out (list of dagNodes): The constrained outputs order must be respected + (BoneA, BoneB, Center, CenterN, Eff), set it to None if you don't + want one of the output. root (dagNode): Object that will act as the root of the chain. eff (dagNode): Object that will act as the eff controler of the chain. upv (dagNode): Object that will act as the up vector of the chain. - fk0 (dagNode): Object that will act as the first fk controler of the chain. - fk1 (dagNode): Object that will act as the second fk controler of the chain. - fk2 (dagNode): Object that will act as the fk effector controler of the chain. + fk0 (dagNode): Object that will act as the first fk controler of the + chain. + fk1 (dagNode): Object that will act as the second fk controler of the + chain. + fk2 (dagNode): Object that will act as the fk effector controler of the + chain. lengthA (float): Length of first bone. lengthB (float): Length of second bone. negate (bool): Use with negative Scale. @@ -444,72 +511,73 @@ def gear_ikfk2bone_op(out=[], root=None, eff=None, upv=None, fk0=None, fk1=None, Returns: pyNode: The newly created operator. + """ node = pm.createNode("mgear_ikfk2Bone") # Inputs - pm.setAttr(node+".lengthA", lengthA) - pm.setAttr(node+".lengthB", lengthB) - pm.setAttr(node+".negate", negate) - pm.setAttr(node+".blend", blend) - - pm.connectAttr(root+".worldMatrix", node+".root") - pm.connectAttr(eff+".worldMatrix", node+".ikref") - pm.connectAttr(upv+".worldMatrix", node+".upv") - pm.connectAttr(fk0+".worldMatrix", node+".fk0") - pm.connectAttr(fk1+".worldMatrix", node+".fk1") - pm.connectAttr(fk2+".worldMatrix", node+".fk2") - + pm.setAttr(node + ".lengthA", lengthA) + pm.setAttr(node + ".lengthB", lengthB) + pm.setAttr(node + ".negate", negate) + pm.setAttr(node + ".blend", blend) + + pm.connectAttr(root + ".worldMatrix", node + ".root") + pm.connectAttr(eff + ".worldMatrix", node + ".ikref") + pm.connectAttr(upv + ".worldMatrix", node + ".upv") + pm.connectAttr(fk0 + ".worldMatrix", node + ".fk0") + pm.connectAttr(fk1 + ".worldMatrix", node + ".fk1") + pm.connectAttr(fk2 + ".worldMatrix", node + ".fk2") # Outputs if out[0] is not None: - pm.connectAttr(out[0]+".parentMatrix", node+".inAparent") + pm.connectAttr(out[0] + ".parentMatrix", node + ".inAparent") dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".outA", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", out[0]+".translate") - pm.connectAttr(dm_node+".outputRotate", out[0]+".rotate") - pm.connectAttr(dm_node+".outputScale", out[0]+".scale") + pm.connectAttr(node + ".outA", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", out[0] + ".translate") + pm.connectAttr(dm_node + ".outputRotate", out[0] + ".rotate") + pm.connectAttr(dm_node + ".outputScale", out[0] + ".scale") if out[1] is not None: - pm.connectAttr(out[1]+".parentMatrix", node+".inBparent") + pm.connectAttr(out[1] + ".parentMatrix", node + ".inBparent") dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".outB", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", out[1]+".translate") - pm.connectAttr(dm_node+".outputRotate", out[1]+".rotate") - pm.connectAttr(dm_node+".outputScale", out[1]+".scale") + pm.connectAttr(node + ".outB", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", out[1] + ".translate") + pm.connectAttr(dm_node + ".outputRotate", out[1] + ".rotate") + pm.connectAttr(dm_node + ".outputScale", out[1] + ".scale") if out[2] is not None: - pm.connectAttr(out[2]+".parentMatrix", node+".inCenterparent") + pm.connectAttr(out[2] + ".parentMatrix", node + ".inCenterparent") dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".outCenter", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", out[2]+".translate") - pm.connectAttr(dm_node+".outputRotate", out[2]+".rotate") - #connectAttr(dm_node+".outputScale", out[2]+".scale") # the scaling is not working with FK blended to 1. \ - #The output is from the solver I need to review the c++ solver + pm.connectAttr(node + ".outCenter", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", out[2] + ".translate") + pm.connectAttr(dm_node + ".outputRotate", out[2] + ".rotate") + # connectAttr(dm_node+".outputScale", out[2]+".scale") # the scaling + # is not working with FK blended to 1. + # The output is from the solver I need to review the c++ solver if out[3] is not None: - pm.connectAttr(out[3]+".parentMatrix", node+".inEffparent") + pm.connectAttr(out[3] + ".parentMatrix", node + ".inEffparent") dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".outEff", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", out[3]+".translate") - pm.connectAttr(dm_node+".outputRotate", out[3]+".rotate") - pm.connectAttr(dm_node+".outputScale", out[3]+".scale") + pm.connectAttr(node + ".outEff", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", out[3] + ".translate") + pm.connectAttr(dm_node + ".outputRotate", out[3] + ".rotate") + pm.connectAttr(dm_node + ".outputScale", out[3] + ".scale") return node def gear_rollsplinekine_op(out, controlers=[], u=.5, subdiv=10): - """ - Apply a sn_rollsplinekine_op operator + """Apply a sn_rollsplinekine_op operator - Args: + Arguments: out (dagNode): onstrained Object. - controlers (list of dagNodes): Objects that will act as controler of the bezier curve. - Objects must have a parent that will be used as an input for the operator. + controlers (list of dagNodes): Objects that will act as controler of + the bezier curve. Objects must have a parent that will be used as + an input for the operator. u (float): Position of the object on the bezier curve (from 0 to 1). subdiv (int): spline subdivision precision. @@ -519,71 +587,78 @@ def gear_rollsplinekine_op(out, controlers=[], u=.5, subdiv=10): node = pm.createNode("mgear_rollSplineKine") # Inputs - pm.setAttr(node+".u", u) - pm.setAttr(node+".subdiv", subdiv) + pm.setAttr(node + ".u", u) + pm.setAttr(node + ".subdiv", subdiv) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", out+".translate") - pm.connectAttr(dm_node+".outputRotate", out+".rotate") + pm.connectAttr(node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", out + ".translate") + pm.connectAttr(dm_node + ".outputRotate", out + ".rotate") # connectAttr(dm_node+".outputScale", out+".scale") - pm.connectAttr(out+".parentMatrix", node+".outputParent") + pm.connectAttr(out + ".parentMatrix", node + ".outputParent") for i, obj in enumerate(controlers): - pm.connectAttr(obj+".parentMatrix", node+".ctlParent[%s]"%i) + pm.connectAttr(obj + ".parentMatrix", node + ".ctlParent[%s]" % i) - pm.connectAttr(obj+".worldMatrix", node+".inputs[%s]"%i) - pm.connectAttr(obj+".rx", node+".inputsRoll[%s]"%i) + pm.connectAttr(obj + ".worldMatrix", node + ".inputs[%s]" % i) + pm.connectAttr(obj + ".rx", node + ".inputsRoll[%s]" % i) return node -def gear_squashstretch2_op(out, sclref=None, length=5, axis="x", scaleComp=None): - """ - Apply a sn_squashstretch2_op operator - Args: +def gear_squashstretch2_op(out, + sclref=None, + length=5, + axis="x", + scaleComp=None): + """Apply a sn_squashstretch2_op operator + + Arguments: out (dagNode): Constrained object. sclref (dagNode): Global scaling reference object. length (float): Rest Length of the S&S. axis (str): 'x' for scale all except x axis... - scaleComp (list of float): extra scale compensation to avoid double scale in some situations. + scaleComp (list of float): extra scale compensation to avoid double + scale in some situations. Returns: pyNode: The newly created operator. """ node = pm.createNode("mgear_squashStretch2") - pm.setAttr(node+".global_scaleX", 1) - pm.setAttr(node+".global_scaleY", 1) - pm.setAttr(node+".global_scaleZ", 1) - pm.setAttr(node+".driver_ctr", length) - pm.setAttr(node+".driver_max", length * 2) - pm.setAttr(node+".driver_min", length / 2) - pm.setAttr(node+".axis", "xyz".index(axis)) + pm.setAttr(node + ".global_scaleX", 1) + pm.setAttr(node + ".global_scaleY", 1) + pm.setAttr(node + ".global_scaleZ", 1) + pm.setAttr(node + ".driver_ctr", length) + pm.setAttr(node + ".driver_max", length * 2) + pm.setAttr(node + ".driver_min", length / 2) + pm.setAttr(node + ".axis", "xyz".index(axis)) - # we use a mult div node to force the evaluation in a composed attribute in osx + # we use a mult div node to force the evaluation in a composed attribute in + # osx # Also helper connection for scale compensation (scaleComp) mult_node = pm.createNode("multiplyDivide") - pm.connectAttr(node+".output", mult_node+".input1") + pm.connectAttr(node + ".output", mult_node + ".input1") for axis in "XYZ": - pm.connectAttr(mult_node+".output%s"%axis, out+".scale%s"%axis) + pm.connectAttr(mult_node + ".output%s" % axis, out + ".scale%s" % axis) if scaleComp: - pm.connectAttr(scaleComp, mult_node+".input2") + pm.connectAttr(scaleComp, mult_node + ".input2") if sclref is not None: dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(sclref+".worldMatrix", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputScale", node+".global_scale") + pm.connectAttr(sclref + ".worldMatrix", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputScale", node + ".global_scale") return node + def gear_inverseRotorder_op(out_obj, in_obj): """ Apply a sn_inverseRotorder_op operator - Args: + Arguments: out_obj (dagNode): Output object. in_obj (dagNode): Input object. @@ -592,7 +667,7 @@ def gear_inverseRotorder_op(out_obj, in_obj): """ node = pm.createNode("mgear_inverseRotOrder") - pm.connectAttr(in_obj+".ro", node+".ro") - pm.connectAttr(node+".output", out_obj+".ro") + pm.connectAttr(in_obj + ".ro", node + ".ro") + pm.connectAttr(node + ".output", out_obj + ".ro") return node diff --git a/scripts/mgear/maya/attribute.py b/scripts/mgear/maya/attribute.py index 9b160ed..41227bd 100644 --- a/scripts/mgear/maya/attribute.py +++ b/scripts/mgear/maya/attribute.py @@ -1,55 +1,39 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Attribute creation functions. -""" +"""Attribute creation functions""" ############################################# # GLOBAL -#############################################\ +############################################# import collections import mgear import pymel.core as pm -import pymel.core.datatypes as dt +import maya.cmds as cmds +import pymel.core.datatypes as datatypes ############################################# # NODE ############################################# -def addAttribute(node, longName, attributeType, value, niceName=None, shortName=None, minValue=None, - maxValue=None, keyable=True, readable=True, storable=True, writable=True, channelBox=False): - """ - Add attribute to a node - - Args: +def addAttribute(node, + longName, + attributeType, + value=None, + niceName=None, + shortName=None, + minValue=None, + maxValue=None, + keyable=True, + readable=True, + storable=True, + writable=True, + channelBox=False): + """Add attribute to a node + + Arguments: node (dagNode): The object to add the new attribute. longName (str): The attribute name. - attributeType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + attributeType (str): The Attribute Type. Exp: 'string', 'bool', + 'long', etc.. value (float or int): The default value. niceName (str): The attribute nice name. (optional) shortName (str): The attribute short name. (optional) @@ -59,7 +43,8 @@ def addAttribute(node, longName, attributeType, value, niceName=None, shortName= readable (bool): Set if the attribute is readable or not. (optional) storable (bool): Set if the attribute is storable or not. (optional) writable (bool): Set if the attribute is writable or not. (optional) - channelBox (bool): Set if the attribute is in the channelBox or not, when the attribute is not keyable. (optional) + channelBox (bool): Set if the attribute is in the channelBox or not, + when the attribute is not keyable. (optional) Returns: str: The long name of the new attribute @@ -88,24 +73,37 @@ def addAttribute(node, longName, attributeType, value, niceName=None, shortName= data["readable"] = readable data["storable"] = storable data["writable"] = writable + + if value is not None and attributeType not in ["string"]: + data["defaultValue"] = value + node.addAttr(longName, **data) + if value is not None: node.setAttr(longName, value) + if channelBox: node.attr(longName).set(channelBox=True) return node.attr(longName) -def addColorAttribute(node, longName, value=False, keyable=True, readable=True, storable=True, - writable=True, niceName=None, shortName=None): - +def addColorAttribute(node, + longName, + value=False, + keyable=True, + readable=True, + storable=True, + writable=True, + niceName=None, + shortName=None): """ Add a color attribute to a node - Args: + Arguments: node (dagNode): The object to add the new attribute. longName (str): The attribute name. - value (list of flotat): The default value in a list for RGB. exp [1.0, 0.99, 0.13]. + value (list of flotat): The default value in a list for RGB. + exp [1.0, 0.99, 0.13]. keyable (bool): Set if the attribute is keyable or not. (optional) readable (bool): Set if the attribute is readable or not. (optional) storable (bool): Set if the attribute is storable or not. (optional) @@ -115,6 +113,7 @@ def addColorAttribute(node, longName, value=False, keyable=True, readable=True, Returns: str: The long name of the new attribute + """ if node.hasAttr(longName): mgear.log("Attribute already exists", mgear.error) @@ -134,7 +133,7 @@ def addColorAttribute(node, longName, value=False, keyable=True, readable=True, data["storable"] = storable data["writable"] = writable - #child nested attr + # child nested attr dataChild = {} dataChild["attributeType"] = 'float' dataChild["parent"] = longName @@ -145,19 +144,27 @@ def addColorAttribute(node, longName, value=False, keyable=True, readable=True, node.addAttr(longName + "_b", **dataChild) if value: - node.setAttr(longName+ "_r", value[0]) - node.setAttr(longName+ "_g", value[1]) - node.setAttr(longName+ "_b", value[2]) + node.setAttr(longName + "_r", value[0]) + node.setAttr(longName + "_g", value[1]) + node.setAttr(longName + "_b", value[2]) return node.attr(longName) -def addEnumAttribute(node, longName, value, enum, niceName=None, shortName=None, keyable=True, readable=True, - storable=True, writable=True): +def addEnumAttribute(node, + longName, + value, + enum, + niceName=None, + shortName=None, + keyable=True, + readable=True, + storable=True, + writable=True): """ Add an enumerate attribute to a node - Args: + Arguments: node (dagNode): The object to add the new attribute. longName (str): The attribute name. value (int): The default value. @@ -174,7 +181,8 @@ def addEnumAttribute(node, longName, value, enum, niceName=None, shortName=None, """ if node.hasAttr(longName): - mgear.log("Attribute '"+longName+"' already exists", mgear.sev_warning) + mgear.log("Attribute '" + longName + "' already exists", + mgear.sev_warning) return data = {} @@ -197,22 +205,27 @@ def addEnumAttribute(node, longName, value, enum, niceName=None, shortName=None, return node.attr(longName) -def addProxyAttribute(sourceAttrs, targets, duplicatedPolicy=None): + +def addProxyAttribute(sourceAttrs, targets, duplicatedPolicy=None): """Add proxy paramenter to a list of target dagNode Duplicated channel policy, stablish the rule in case the channel already exist on the target. Duplicate policy options - ================ ================================================================= - index This policy will add an index to avoid clashing channel names - fullName This policy will add the name of the source object to the channel + ================ ======================================================= + index This policy will add an index to avoid clashing channel + names + fullName This policy will add the name of the source object to + the channel merge This policy will merge the channels - ================ ================================================================= + ================ ======================================================= - Args: - sourceAttrs (attr or list of attr): The parameters to be connected as proxy - targets (dagNode or list of dagNode): The list of dagNode to add the proxy paramenter + Arguments: + sourceAttrs (attr or list of attr): The parameters to be connected as + proxy + targets (dagNode or list of dagNode): The list of dagNode to add the + proxy paramenter duplicatedPolicy (string, optional): Set the duplicated channel policy """ if not isinstance(targets, list): @@ -225,16 +238,19 @@ def addProxyAttribute(sourceAttrs, targets, duplicatedPolicy=None): if target.hasAttr(sourceAttr.longName()): if duplicatedPolicy == "index": i = 0 - while target.hasAttr(sourceAttr.longName()+str(i)): - i+=1 - attrName = sourceAttr.longName()+str(i) + while target.hasAttr(sourceAttr.longName() + str(i)): + i += 1 + attrName = sourceAttr.longName() + str(i) elif duplicatedPolicy == "fullName": - attrName = "{}_{}".format(sourceAttr.nodeName(), sourceAttr.longName()) + attrName = "{}_{}".format(sourceAttr.nodeName(), + sourceAttr.longName()) if not target.hasAttr(attrName): target.addAttr(attrName, pxy=sourceAttr) else: - pm.displayWarning("The proxy channel %s already exist on: %s."%(sourceAttr.longName(), target.name())) + pm.displayWarning( + "The proxy channel %s already exist on: %s." + % (sourceAttr.longName(), target.name())) def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): @@ -246,13 +262,15 @@ def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): Duplicate policy options - ================ ================================================================= - index This policy will add an index to avoid clashing channel names - fullName This policy will add the name of the source object to the channel + ================ ======================================================= + index This policy will add an index to avoid clashing channel + names + fullName This policy will add the name of the source object to + the channel merge This policy will merge the channels - ================ ================================================================= + ================ ======================================================= - Args: + Arguments: attr (str): Name of the channel to move sourceNode (PyNoe or str): The source node with the channel targetNode (PyNoe or str): The target node for the channel @@ -266,25 +284,29 @@ def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): try: at = sourceNode.attr(attr) if pm.addAttr(at, q=True, usedAsProxy=True): - pm.displayWarning("{} is a proxy channel and move operation is not yet supported.".format(attr)) + pm.displayWarning("{} is a proxy channel and move operation is " + "not yet supported.".format(attr)) return - except: - pm.displayWarning("Looks like the {} is not in the source: {}".format(attr, sourceNode.name())) + except Exception: + pm.displayWarning("Looks like the {} is not in the" + " source: {}".format(attr, sourceNode.name())) return - atType = at.type() + atType = at.type() if atType in ["double", "enum"]: newAtt = None attrName = attr - nName = pm.attributeQuery(at.shortName(), node=at.node(), niceName=True ) + nName = pm.attributeQuery( + at.shortName(), node=at.node(), niceName=True) # define duplicated attribute policy - if sourceNode.name() != targetNode.name(): #this policy doesn't apply for rearrange channels - if pm.attributeQuery( attr, node=targetNode, exists=True ): + if sourceNode.name() != targetNode.name(): + # this policy doesn't apply for rearrange channels + if pm.attributeQuery(attr, node=targetNode, exists=True): if duplicatedPolicy == "index": i = 0 - while targetNode.hasAttr(attr+str(i)): - i+=1 - attrName = attr+str(i) + while targetNode.hasAttr(attr + str(i)): + i += 1 + attrName = attr + str(i) elif duplicatedPolicy == "fullName": attrName = "{}_{}".format(sourceNode.name(), attr) @@ -292,26 +314,28 @@ def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): newAtt = pm.PyNode(".".join([targetNode.name(), attr])) else: - pm.displayWarning( "Duplicated channel policy, is not defined. \ - Move channel operation will fail if the channel \ - already exist on the target.") + pm.displayWarning("Duplicated channel policy, is not " + "defined. Move channel operation will " + "fail if the channel already exist on " + "the target.") return False outcnx = at.listConnections(p=True) if not newAtt: - #get the attr data + # get the attr data value = at.get() if atType == "double": kwargs = {} min = at.getMin() if min: - kwargs["min"]= min + kwargs["min"] = min max = at.getMax() if max: - kwargs["max"]= max + kwargs["max"] = max elif atType == "enum": en = at.getEnums() - oEn = collections.OrderedDict(sorted(en.items(), key=lambda t: t[1])) + oEn = collections.OrderedDict(sorted(en.items(), + key=lambda t: t[1])) enStr = ":".join([n for n in oEn]) # delete old attr @@ -319,9 +343,21 @@ def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): # rebuild the attr if atType == "double": - pm.addAttr(targetNode, ln=attrName, niceName=nName, at="double", dv=value, k=True, **kwargs) + pm.addAttr(targetNode, + ln=attrName, + niceName=nName, + at="double", + dv=value, + k=True, + **kwargs) elif atType == "enum": - pm.addAttr(targetNode, ln=attrName, niceName=nName, at="enum", en=enStr, dv=value, k=True) + pm.addAttr(targetNode, + ln=attrName, + niceName=nName, + at="enum", + en=enStr, + dv=value, + k=True) newAtt = pm.PyNode(".".join([targetNode.name(), attrName])) else: @@ -331,43 +367,92 @@ def moveChannel(attr, sourceNode, targetNode, duplicatedPolicy=None): try: pm.connectAttr(newAtt, cnx, f=True) except RuntimeError: - pm.displayError("There is a problem connecting the channel %s maybe is already move? Please check your configuration"% newAtt.name()) - + pm.displayError("There is a problem connecting the " + "channel %s maybe is already move? Please " + "check your configuration" % newAtt.name()) else: - pm.displayWarning("MoveChannel function can't handle an attribute of type: %s. Only supported 'double' adn 'enum' types."%atType) + pm.displayWarning("MoveChannel function can't handle an attribute " + "of type: %s. Only supported 'double' adn 'enum' " + "types." % atType) -def lockAttribute(node, attributes=["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz", "v"]): - """ - Lock attributes of a node. By defaul will lock the rotation, scale and translation. +def lockAttribute(node, + attributes=["tx", "ty", "tz", + "rx", "ry", "rz", + "sx", "sy", "sz", + "v"]): + """Lock attributes of a node. - Args: + By defaul will lock the rotation, scale and translation. + + Arguments: node(dagNode): The node with the attributes to lock. attributes (list of str): The list of the attributes to lock. Example: >>> att.lockAttribute(self.root_ctl, ["sx", "sy", "sz", "v"]) + + """ + _lockUnlockAttribute(node, attributes, lock=True, keyable=False) + + +def unlockAttribute(node, + attributes=["tx", "ty", "tz", + "rx", "ry", "rz", + "sx", "sy", "sz", + "v"]): + """Unlock attributes of a node. + + By defaul will unlock the rotation, scale and translation. + + Arguments: + node(dagNode): The node with the attributes to unlock. + attributes (list of str): The list of the attributes to unlock. + + Example: + >>> att.unlockAttribute(self.root_ctl, ["sx", "sy", "sz", "v"]) + + """ + _lockUnlockAttribute(node, attributes, lock=False, keyable=True) + + +def _lockUnlockAttribute(node, attributes, lock, keyable): + """Lock or unlock attributes of a node. + + Arguments: + node(dagNode): The node with the attributes to lock/unlock. + attributes (list of str): The list of the attributes to lock/unlock. + """ if not isinstance(attributes, list): attributes = [attributes] for attr_name in attributes: - node.setAttr(attr_name, lock=True, keyable=False) + node.setAttr(attr_name, lock=lock, keyable=keyable) -def setKeyableAttributes(nodes, params=["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz"]): - """ - Set keyable attributes of a node. By defaul will set keyable the rotation, scale and translation. +def setKeyableAttributes(nodes, + params=["tx", "ty", "tz", + "ro", "rx", "ry", "rz", + "sx", "sy", "sz"]): + """Set keyable attributes of a node. - Args: + By defaul will set keyable the rotation, scale and translation. + + Arguments: node(dagNode): The node with the attributes to set keyable. - attributes (list of str): The list of the attributes to set keyable. Attrs not in the list will be locked - if None, ["tx", "ty", "tz", "rorder", "rx", "ry", "rz", "sx", "sy", "sz"] is used + attributes (list of str): The list of the attributes to set keyable. + Attrs not in the list will be locked + if None, ["tx", "ty", "tz", "rorder", "rx", "ry", "rz", "sx", "sy", + "sz"] is used """ - localParams = ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz", "v"] + localParams = ["tx", "ty", "tz", + "ro", "rx", "ry", "rz", + "sx", "sy", "sz", + "v"] if not isinstance(nodes, list): nodes = [nodes] @@ -382,13 +467,18 @@ def setKeyableAttributes(nodes, params=["tx", "ty", "tz", "ro", "rx", "ry", "rz" node.setAttr(attr_name, lock=True, keyable=False) -def setNotKeyableAttributes(nodes, attributes=["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz", "v"]): - """ - Set not keyable attributes of a node. By defaul will set not keyable the rotation, scale and translation. +def setNotKeyableAttributes(nodes, + attributes=["tx", "ty", "tz", + "ro", "rx", "ry", "rz", + "sx", "sy", "sz", + "v"]): + """Set not keyable attributes of a node. - Args: + By defaul will set not keyable the rotation, scale and translation. + + Arguments: node(dagNode): The node with the attributes to set keyable. - attributes (list of str): The list of the attributes to set not keyable. + attributes (list of str): The list of the attributes to set not keyable """ if not isinstance(nodes, list): @@ -399,71 +489,70 @@ def setNotKeyableAttributes(nodes, attributes=["tx", "ty", "tz", "ro", "rx", "ry node.setAttr(attr_name, lock=False, keyable=False, cb=True) - def setRotOrder(node, s="XYZ"): - """ - Set the rotorder of the object. + """Set the rotorder of the object. - Args: + Arguments: node (dagNode): The object to set the rot order on. - s (str): Value of the rotorder. Possible values : ("XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX") + s (str): Value of the rotorder. + Possible values : ("XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX") """ a = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"] if s not in a: - mgear.log("Invalid Rotorder : "+s, mgear.siError) + mgear.log("Invalid Rotorder : " + s, mgear.siError) return False - # Unless Softimage there is no event on the rotorder parameter to automatically adapt the angle values + # Unless Softimage there is no event on the rotorder parameter to + # automatically adapt the angle values # So let's do it manually using the EulerRotation class - er = dt.EulerRotation([pm.getAttr(node+".rx"),pm.getAttr(node+".ry"),pm.getAttr(node+".rz")], unit="degrees") + er = datatypes.EulerRotation([pm.getAttr(node + ".rx"), + pm.getAttr(node + ".ry"), + pm.getAttr(node + ".rz")], + unit="degrees") er.reorderIt(s) node.setAttr("ro", a.index(s)) node.setAttr("rotate", er.x, er.y, er.z) -# ======================================================== -## Set invert mirror pose values -# @param node X3DObject - The object to set invert mirror Values -# @param params List of String - The parameter to invert in a mirror pose\n -# @return def setInvertMirror(node, invList=None): - """ - Set invert mirror pose values + """Set invert mirror pose values - Args: + Arguments: node (dagNode): The object to set invert mirror Values """ - aDic = {"tx":"invTx", "ty":"invTy", "tz":"invTz", "rx":"invRx", "ry":"invRy", "rz":"invRz", "sx":"invSx", "sy":"invSy", "sz":"invSz"} + aDic = {"tx": "invTx", + "ty": "invTy", + "tz": "invTz", + "rx": "invRx", + "ry": "invRy", + "rz": "invRz", + "sx": "invSx", + "sy": "invSy", + "sz": "invSz"} for axis in invList: if axis not in aDic: - mgear.log("Invalid Invert Axis : "+axis, mgear.siError) + mgear.log("Invalid Invert Axis : " + axis, mgear.siError) return False node.setAttr(aDic[axis], True) -######################################################## -# FCurve attribute (just a animCurveUU node connected to an attribute) -####################################################### -# ===================================================== -## FCurve(animCurveUU) attribute -# @param node X3DObject - The object to add the new fcurve attribute -# @param name String - The attribute name -# @return Fcurve and attribute name -def addFCurve( node, name="fcurve", keys=[]): - """ - FCurve attribute (just a animCurveUU node connected to an attribute) + +def addFCurve(node, name="fcurve", keys=[]): + """FCurve attribute + + Just a animCurveUU node connected to an attribute Warning: This Method is deprecated. - Args: + Arguments: node (dagNode): The object to add the new fcurve attribute name (str): The attribute name key (list): list of keyframes and values @@ -472,17 +561,20 @@ def addFCurve( node, name="fcurve", keys=[]): Fcurve and attribute name """ - attr_name = addAttribute(node, name, "double", 0) attrDummy_name = addAttribute(node, name + "_dummy", "double", 0) - for key in keys: - # we use setDrivenKeyframe, because is the only workaround that I found to create an animCurveUU with keyframes - # fCurve = pm.PyNode(pm.createNode("animCurveUU")) - pm.setDrivenKeyframe(attr_name, cd= attrDummy_name, dv=key[0], v=key[1], itt=key[2], ott=key[2]) - - #clean dummy attr + # we use setDrivenKeyframe, because is the only workaround that I found + # to create an animCurveUU with keyframes + pm.setDrivenKeyframe(attr_name, + cd=attrDummy_name, + dv=key[0], + v=key[1], + itt=key[2], + ott=key[2]) + + # clean dummy attr pm.deleteAttr(attrDummy_name) fCurve = pm.PyNode(attr_name).listConnections(type="animCurveUU")[0] @@ -492,20 +584,24 @@ def addFCurve( node, name="fcurve", keys=[]): ########################################################## # PARAMETER DEFINITION ########################################################## -# ======================================================== + + class ParamDef(object): - """ - ParamDef (read as Parameter Definition) encapsulate the attribute creation arguments in a handy object. + """ParamDef (read as Parameter Definition) + + Encapsulate the attribute creation arguments in a handy object. Also include a creation method. Example: - This can be use later to create attr or export the description to xml or json file + This can be use later to create attr or export the description to xml + or json file - Args: + Arguments: scriptName (str): Attribute fullName paranDef (dic): The stored param definition """ + def __init__(self, scriptName): self.scriptName = scriptName @@ -513,24 +609,34 @@ def __init__(self, scriptName): self.valueType = None def create(self, node): - """ - Add a parameter to property using the parameter definition. + """Add a parameter to property using the parameter definition. - Args: + Arguments: node (dagNode): The node to add the attribute """ - attr_name = addAttribute(node, self.scriptName, self.valueType, self.value, self.niceName, self.shortName, self.minimum, self.maximum, self.keyable, self.readable, self.storable, self.writable) + attr_name = addAttribute(node, + self.scriptName, + self.valueType, + self.value, + self.niceName, + self.shortName, + self.minimum, + self.maximum, + self.keyable, + self.readable, + self.storable, + self.writable) return node, attr_name class ParamDef2(ParamDef): - """ - ParamDef2 inherit from ParamDef + """ParamDef2 inherit from ParamDef - Args: + Arguments: scriptName (str): Parameter scriptname. - valueType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + valueType (str): The Attribute Type. Exp: 'string', 'bool', + 'long', etc.. value (float or int): Default parameter value. niceName (str): Parameter niceName. shortName (str): Parameter shortName. @@ -545,7 +651,19 @@ class ParamDef2(ParamDef): ParamDef: The stored parameter definition. """ - def __init__(self, scriptName, valueType, value, niceName=None, shortName=None, minimum=None, maximum=None, keyable=True, readable=True, storable=True, writable=True): + + def __init__(self, + scriptName, + valueType, + value, + niceName=None, + shortName=None, + minimum=None, + maximum=None, + keyable=True, + readable=True, + storable=True, + writable=True): self.scriptName = scriptName self.niceName = niceName @@ -561,17 +679,21 @@ def __init__(self, scriptName, valueType, value, niceName=None, shortName=None, class FCurveParamDef(ParamDef): - """ - Create an Fcurve parameter definition. + """Create an Fcurve parameter definition. - Args: + Arguments: scriptName (str): Attribute fullName. keys (list): The keyframes to define the function curve. interpolation (int): the curve interpolation. extrapolation (int): the curve extrapolation. """ - def __init__(self, scriptName, keys=None, interpolation=0, extrapolation=0): + + def __init__(self, + scriptName, + keys=None, + interpolation=0, + extrapolation=0): self.scriptName = scriptName self.keys = keys @@ -581,44 +703,48 @@ def __init__(self, scriptName, keys=None, interpolation=0, extrapolation=0): self.valueType = None def create(self, node): - """ - Add a parameter to property using the parameter definition. + """Add a parameter to property using the parameter definition. - Args: + Arguments: node (dagNode): The node to add the attribute - """ + """ attr_name = addAttribute(node, self.scriptName, "double", 0) - attrDummy_name = addAttribute(node, self.scriptName + "_dummy", "double", 0) + + attrDummy_name = addAttribute( + node, self.scriptName + "_dummy", "double", 0) for key in self.keys: - pm.setDrivenKeyframe(attr_name, cd= attrDummy_name, dv=key[0], v=key[1]) + pm.setDrivenKeyframe( + attr_name, cd=attrDummy_name, dv=key[0], v=key[1]) - #clean dummy attr + # clean dummy attr pm.deleteAttr(attrDummy_name) return node, attr_name class colorParamDef(ParamDef): - """ - Create a Color parameter definition. + """Create a Color parameter definition. - Args: + Arguments: scriptName (str): Attribute fullName - value (list of float): The default value in a list for RGB. exp [1.0, 0.99, 0.13]. + value (list of float): The default value in a list for RGB. + exp [1.0, 0.99, 0.13]. + """ + def __init__(self, scriptName, value=False): self.scriptName = scriptName self.value = value def create(self, node): - """ - Add a parameter to property using the parameter definition. + """Add a parameter to property using the parameter definition. - Args: + Arguments: node (dagNode): The node to add the attribute + """ attr_name = addColorAttribute(node, self.scriptName, value=self.value) @@ -626,16 +752,16 @@ def create(self, node): class enumParamDef(ParamDef): - """ - Create an enumarator parameter definition. + """Create an enumarator parameter definition. - Args: + Arguments: scriptName (str): Attribute fullName enum (list of str): The list of elements in the enumerate control. value (int): The default value. """ - def __init__(self, scriptName, enum, value=False ): + + def __init__(self, scriptName, enum, value=False): self.scriptName = scriptName self.value = value @@ -643,51 +769,139 @@ def __init__(self, scriptName, enum, value=False ): self.valueType = None def create(self, node): - """ - Add a parameter to property using the parameter definition. + """Add a parameter to property using the parameter definition. - Args: + Arguments: node (dagNode): The node to add the attribute """ - attr_name = addEnumAttribute(node, self.scriptName, enum=self.enum, value=self.value) + attr_name = addEnumAttribute( + node, self.scriptName, enum=self.enum, value=self.value) return node, attr_name +########################################################## +# Default Values functions +########################################################## + +def get_default_value(node, attribute): + """Get the default attribute value + + Args: + node (str, PyNode): The object with the attribute + attribute (str): The attribute to get the value + + Returns: + variant: The attribute value + """ + return pm.attributeQuery(attribute, + node=node, + listDefault=True)[0] + + +def set_default_value(node, attribute): + """Set the default value to the attribute + + Args: + node (str, PyNode): The object with the attribute to reset + attribute (str): The attribute to reset + """ + if not isinstance(node, pm.PyNode): + node = pm.PyNode(node) + + defVal = get_default_value(node, attribute) + try: + node.attr(attribute).set(defVal) + except RuntimeError: + pass + + +def reset_selected_channels_value(objects=None, attributes=None): + """Reset the the selected channels if not attribute is provided + + Args: + objects (None, optional): The objects to reset the channels + attribute (list, optional): The attribute to reset + """ + if not objects: + objects = cmds.ls(selection=True) + if not attributes: + attributes = getSelectedChannels() + + for obj in objects: + for attr in attributes: + set_default_value(obj, attr) + + +def reset_SRT(objects=None, + attributes=["tx", "ty", "tz", + "rx", "ry", "rz", + "sx", "sy", "sz", + "v"]): + """Reset Scale Rotation and translation attributes to default value + + Args: + objects (None, optional): The objects to reset the channels + attribute (list): The attribute to reset + """ + reset_selected_channels_value(objects, attributes) + + +def smart_reset(*args): + """Reset the SRT or the selected channels + + Checks first if we have channels selected. If not, will try to reset SRT + + Args: + *args: Dummy + """ + attributes = getSelectedChannels() + if attributes: + reset_selected_channels_value(objects=None, attributes=attributes) + else: + reset_SRT() + ########################################################## # GETTERS ########################################################## -# ======================================================== + def getSelectedChannels(userDefine=False): """Get the selected channels on the channel box - Args: - userDefine (bool, optional): If True, will return only the user defined channels. Other channels will be skipped. + Arguments: + userDefine (bool, optional): If True, will return only the user + defined channels. Other channels will be skipped. Returns: list: The list of selected channels names + """ - channelBox = pm.mel.eval('global string $gChannelBoxName; $temp=$gChannelBoxName;') #fetch maya's main channelbox + # fetch maya's main channelbox + mel_str = 'global string $gChannelBoxName; $temp=$gChannelBoxName;' + channelBox = pm.mel.eval(mel_str) attrs = pm.channelBox(channelBox, q=True, sma=True) if userDefine: oSel = pm.selected()[0] uda = oSel.listAttr(ud=True) if attrs: - attrs = [x for x in attrs if oSel.attr(x) in uda] + attrs = [x for x in attrs if oSel.attr(x) in uda] else: return None return attrs + def getSelectedObjectChannels(oSel=None, userDefine=False, animatable=False): """Get the selected object channels. - Args: + Arguments: oSel (None, optional): The pynode with channels to get - userDefine (bool, optional): If True, will return only the user defined channels. Other channels will be skipped. - animatable (bool, optional): If True, only animatable parameters will be return + userDefine (bool, optional): If True, will return only the user + defined channels. Other channels will be skipped. + animatable (bool, optional): If True, only animatable parameters + will be return Returns: list: The list of the selected object channels names @@ -695,6 +909,30 @@ def getSelectedObjectChannels(oSel=None, userDefine=False, animatable=False): if not oSel: oSel = pm.selected()[0] - channels = [x.name().rsplit(".", 1)[1] for x in oSel.listAttr(ud=userDefine, k=animatable)] + channels = [x.name().rsplit(".", 1)[1] + for x in oSel.listAttr(ud=userDefine, k=animatable)] return channels + + +########################################################## +# UTIL +########################################################## + +def connectSet(source, target, testInstance): + """Connect or set attributes + + Connects or set attributes depending if is instance of a instance check + + Args: + source (str or Attr): Striname of the attribute or PyNode attribute + target (str or Attr): Striname of the attribute or PyNode attribute + testInstance (tuple): Tuple of types to check + """ + if not isinstance(testInstance, tuple): + testInstance = tuple(testInstance) + + if isinstance(source, testInstance): + pm.connectAttr(source, target) + else: + pm.setAttr(target, source) diff --git a/scripts/mgear/maya/curve.py b/scripts/mgear/maya/curve.py index 5cd81a7..bda7e3f 100644 --- a/scripts/mgear/maya/curve.py +++ b/scripts/mgear/maya/curve.py @@ -1,52 +1,24 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -NurbsCurve creation functions -""" +"""NurbsCurve creation functions""" ############################################# # GLOBAL ############################################# import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes import maya.OpenMaya as om -import mgear.maya.applyop as aop +from mgear.maya import applyop ############################################# # CURVE ############################################# + def addCnsCurve(parent, name, centers, degree=1): - """ - Create a curve attached to given centers. One point per center + """Create a curve attached to given centers. One point per center - Args: + Arguments: parent (dagNode): Parent object. name (str): Name centers (list of dagNode): Object that will drive the curve. @@ -62,23 +34,28 @@ def addCnsCurve(parent, name, centers, degree=1): elif len(centers) == 3: centers.append(centers[-1]) - points = [dt.Vector() for center in centers ] + points = [datatypes.Vector() for center in centers] node = addCurve(parent, name, points, False, degree) - aop.gear_curvecns_op(node, centers) + applyop.gear_curvecns_op(node, centers) return node -def addCurve(parent, name, points, close=False, degree=3, m=dt.Matrix()): - """ - Create a NurbsCurve with a single subcurve. +def addCurve(parent, + name, + points, + close=False, + degree=3, + m=datatypes.Matrix()): + """Create a NurbsCurve with a single subcurve. - Args: + Arguments: parent (dagNode): Parent object. name (str): Name - positions (list of float): points of the curve in a one dimension array [point0X, point0Y, point0Z, 1, point1X, point1Y, point1Z, 1, ...]. + positions (list of float): points of the curve in a one dimension array + [point0X, point0Y, point0Z, 1, point1X, point1Y, point1Z, 1, ...]. close (bool): True to close the curve. degree (bool): 1 for linear curve, 3 for Cubic. m (matrix): Global transform. @@ -88,7 +65,7 @@ def addCurve(parent, name, points, close=False, degree=3, m=dt.Matrix()): """ if close: points.extend(points[:degree]) - knots = range(len(points)+degree-1) + knots = range(len(points) + degree - 1) node = pm.curve(n=name, d=degree, p=points, per=close, k=knots) else: node = pm.curve(n=name, d=degree, p=points) @@ -101,10 +78,15 @@ def addCurve(parent, name, points, close=False, degree=3, m=dt.Matrix()): return node -def createCurveFromOrderedEdges(edgeLoop, startVertex, name, parent=None, degree=3): + +def createCurveFromOrderedEdges(edgeLoop, + startVertex, + name, + parent=None, + degree=3): """Create a curve for a edgeloop ordering the list from starting vertex - Args: + Arguments: edgeLoop (list ): List of edges startVertex (vertex): Starting vertex name (str): Name of the new curve. @@ -129,7 +111,7 @@ def createCurveFromOrderedEdges(edgeLoop, startVertex, name, parent=None, degree pass if len(orderedEdges) == len(edgeLoop): break - count +=1 + count += 1 if count > 100: break @@ -146,11 +128,15 @@ def createCurveFromOrderedEdges(edgeLoop, startVertex, name, parent=None, degree crv = addCurve(parent, name, orderedVertexPos, degree=degree) return crv -def createCuveFromEdges(edgeList, name, parent=None, degree=3, sortingAxis="x"): - """ - Create curve from a edge list. - Args: +def createCuveFromEdges(edgeList, + name, + parent=None, + degree=3, + sortingAxis="x"): + """Create curve from a edge list. + + Arguments: edgeList (list): List of edges. name (str): Name of the new curve. parent (dagNode): Parent of the new curve. @@ -170,7 +156,6 @@ def createCuveFromEdges(edgeList, name, parent=None, degree=3, sortingAxis="x"): vList = pm.polyListComponentConversion(edgeList, fe=True, tv=True) - centers = [] centersOrdered = [] xOrder = [] @@ -191,10 +176,9 @@ def createCuveFromEdges(edgeList, name, parent=None, degree=3, sortingAxis="x"): def createCurveFromCurve(srcCrv, name, nbPoints, parent=None): - """ - Create a curve from a curve + """Create a curve from a curve - Args: + Arguments: srcCrv (curve): The source curve. name (str): The new curve name. nbPoints (int): Number of control points for the new curve. @@ -208,7 +192,7 @@ def createCurveFromCurve(srcCrv, name, nbPoints, parent=None): length = srcCrv.length() parL = srcCrv.findParamFromLength(length) param = [] - increment = parL / (nbPoints-1) + increment = parL / (nbPoints - 1) p = 0.0 for x in range(nbPoints): # we need to check that the param value never exceed the parL @@ -222,17 +206,17 @@ def createCurveFromCurve(srcCrv, name, nbPoints, parent=None): def getCurveParamAtPosition(crv, position): - """ - Get curve parameter from a position + """Get curve parameter from a position - Args: - position (list of float): Represents the position in worldSpace exp: [1.4, 3.55, 42.6] + Arguments: + position (list of float): Represents the position in worldSpace + exp: [1.4, 3.55, 42.6] crv (curve): The source curve to get the parameter. Returns: list: paramenter and curve length """ - point = om.MPoint(position[0],position[1],position[2]) + point = om.MPoint(position[0], position[1], position[2]) dag = om.MDagPath() obj = om.MObject() @@ -244,11 +228,11 @@ def getCurveParamAtPosition(crv, position): length = curveFn.length() crv.findParamFromLength(length) - paramUtill=om.MScriptUtil() - paramPtr=paramUtill.asDoublePtr() + paramUtill = om.MScriptUtil() + paramPtr = paramUtill.asDoublePtr() - point = curveFn.closestPoint(point,paramPtr,0.001,om.MSpace.kObject) - curveFn.getParamAtPoint(point , paramPtr,0.001,om.MSpace.kObject) + point = curveFn.closestPoint(point, paramPtr, 0.001, om.MSpace.kObject) + curveFn.getParamAtPoint(point, paramPtr, 0.001, om.MSpace.kObject) param = paramUtill.getDouble(paramPtr) @@ -259,7 +243,7 @@ def findLenghtFromParam(crv, param): """ Find lengtht from a curve parameter - Args: + Arguments: param (float): The parameter to get the legth crv (curve): The source curve. @@ -275,7 +259,8 @@ def findLenghtFromParam(crv, param): """ node = pm.createNode("arcLengthDimension") - pm.connectAttr(crv.getShape().attr("worldSpace[0]"), node.attr("nurbsGeometry")) + pm.connectAttr(crv.getShape().attr("worldSpace[0]"), + node.attr("nurbsGeometry")) node.attr("uParamValue").set(param) uLength = node.attr("arcLength").get() pm.delete(node.getParent()) diff --git a/scripts/mgear/maya/dag.py b/scripts/mgear/maya/dag.py index 817920b..6b316c0 100644 --- a/scripts/mgear/maya/dag.py +++ b/scripts/mgear/maya/dag.py @@ -1,45 +1,20 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Navigate the DAG hierarchy. -""" -############################################# -# GLOBAL -############################################# +"""Nvigate the DAG hierarchy""" +import maya.cmds as cmds +import pymel.core as pm + ############################################# # DAG ############################################# + + def getTopParent(node): - """ - Returns the first parent of the hierarchy. (usually the 'Model' in Softimage) + """Returns the first parent of the hierarchy. + + usually the 'Model' in Softimage terminology - Args: + Arguments: node (dagNode): The input node to search. Returns: @@ -48,12 +23,11 @@ def getTopParent(node): """ return node.getParent(generations=-1) -# =========================================== + def getShapes(node): - """ - Returns the shape of the dagNode + """Returns the shape of the dagNode - Args: + Arguments: node (dagNode): The input node to search the shape Returns: @@ -62,28 +36,30 @@ def getShapes(node): """ return node.listRelatives(shapes=True) -# =========================================== + def findChild(node, name): - """ - Returns the first child of input node, with a matching name. + """Returns the first child of input node, with a matching name. - Args: + Arguments: node (dagNode): The input node to search name (str): The name to search Returns: dagNode: The first child - >>> parent = dag.findChild(self.model, mgear.string.convertRLName(comp_guide.root.name())) + >>> parent = dag.findChild(self.model, + mgear.string.convertRLName( + comp_guide.root.name())) """ - return __findChildren(node, name, True) + # return __findChildren(node, name, True) + return __findChild(node, name) + def findChildren(node, name): - """ - Returns all the children of input node, with a matching name. + """Returns all the children of input node, with a matching name. - Args: + Arguments: node (dagNode): The input node to search name (str): The name to search @@ -93,11 +69,12 @@ def findChildren(node, name): """ return __findChildren(node, name, False) + def findChildrenPartial(node, name): """ Returns the children of input node, with a partial matching name. - Args: + Arguments: node (dagNode): The input node to search name (str): The name to search @@ -107,12 +84,19 @@ def findChildrenPartial(node, name): """ return __findChildren(node, name, False, True) + def __findChildren(node, name, firstOnly=False, partialName=False): if partialName: - children = [item for item in node.listRelatives(ad=True, type="transform") if item.name().split("|")[-1].split("_")[-1] == name] + children = [item for item + in node.listRelatives(allDescendents=True, + type="transform") + if item.name().split("|")[-1].split("_")[-1] == name] else: - children = [item for item in node.listRelatives(ad=True, type="transform") if item.name().split("|")[-1] == name] + children = [item for item + in node.listRelatives(allDescendents=True, + type="transform") + if item.name().split("|")[-1] == name] if not children: return False if firstOnly: @@ -120,14 +104,72 @@ def __findChildren(node, name, firstOnly=False, partialName=False): return children -def findComponentChildren(node, name, sideIndex): + +def __findChild(node, name): + """This find children function will stop search after firs child found.child + + This is a faster version of __findchildren + + Arguments: + node (dagNode): The input node to search + name (str): The name to search + + Returns: + dagNode: Children node """ - Returns the component children of input component root. + try: + for item in cmds.listRelatives(node.name(), + allDescendents=True, + type="transform"): + if item.split("|")[-1] == name: + return pm.PyNode(item) + except pm.MayaNodeError: + for item in node.listRelatives(allDescendents=True, + type="transform"): + if item.split("|")[-1] == name: + return item + + return False + + +def __findChildren2(node, name, firstOnly=False, partialName=False): + """This function is using Maya cmds instead of PyMel + + Arguments: + node (TYPE): Description + name (TYPE): Description + firstOnly (bool, optional): Description + partialName (bool, optional): Description + + Returns: + TYPE: Description + """ + oName = node.name() + if partialName: + children = [item for item + in cmds.listRelatives(oName, allDescendents=True, + type="transform") + if item.split("|")[-1].split("_")[-1] == name] + else: + children = [item for item + in cmds.listRelatives(oName, allDescendents=True, + type="transform") + if item.split("|")[-1] == name] + if not children: + return False + if firstOnly: + return pm.PyNode(children[0]) + + return [pm.PyNode(x) for x in children] + + +def findComponentChildren(node, name, sideIndex): + """Returns the component children of input component root. Note: This method is specific to work with shifter guides naming conventions - Args: + Arguments: node (dagNode): The input node to search name (str): The name to search sideIndex (str): the side @@ -135,14 +177,47 @@ def findComponentChildren(node, name, sideIndex): Returns: dagNode list: The children dagNodes - >>> objList = dag.findComponentChildren(self.parent, oldName, oldSideIndex) + >>> objList = dag.findComponentChildren(self.parent, + oldName, + oldSideIndex) """ - children = [] - for item in node.listRelatives(ad=True, type="transform"): + for item in node.listRelatives(allDescendents=True, + type="transform"): checkName = item.name().split("|")[-1].split("_") if checkName[0] == name and checkName[1] == sideIndex: children.append(item) return children + + +def findComponentChildren2(node, name, sideIndex): + """Returns the component children of input component root. + + This function is using Maya cmds instead of PyMel + + Note: + This method is specific to work with shifter guides naming conventions + + Arguments: + node (dagNode): The input node to search + name (str): The name to search + sideIndex (str): the side + + Returns: + dagNode list: The children dagNodes + + >>> objList = dag.findComponentChildren(self.parent, + oldName, + oldSideIndex) + + """ + children = [] + for item in cmds.listRelatives(node.name(), allDescendents=True, + type="transform"): + checkName = item.split("|")[-1].split("_") + if checkName[0] == name and checkName[1] == sideIndex: + children.append(item) + + return [pm.PyNode(x) for x in children] diff --git a/scripts/mgear/maya/fcurve.py b/scripts/mgear/maya/fcurve.py index 60c3b01..acd8c06 100644 --- a/scripts/mgear/maya/fcurve.py +++ b/scripts/mgear/maya/fcurve.py @@ -1,62 +1,27 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to work with animation curves -""" - -############################################# -# GLOBAL -############################################# import pymel.core as pm -############################################# -# FCURVE -############################################# def getFCurveValues(fcv_node, division, factor=1): - """ - Get X values evenly spaced on the FCurve. + """Get X values evenly spaced on the FCurve. - Args: + Arguments: fcv_node (pyNode or str): The FCurve to evaluate. - division (int): The number of division you want to evaluate on the FCurve. + division (int): The number of division you want to evaluate on + the FCurve. factor (float): Multiplication factor. Default = 1. (optional) Returns: list of float: The values in a list float. - >>> self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) + >>> self.st_value = fcu.getFCurveValues(self.settings["st_profile"], + self.divisions) """ - incr = 1 / (division-1.0) + incr = 1 / (division - 1.0) values = [] for i in range(division): - pm.setAttr(fcv_node+".input", i*incr) - values.append(pm.getAttr(fcv_node+".output") * factor) + pm.setAttr(fcv_node + ".input", i * incr) + values.append(pm.getAttr(fcv_node + ".output") * factor) return values diff --git a/scripts/mgear/maya/icon.py b/scripts/mgear/maya/icon.py index b8d9061..1e022d8 100644 --- a/scripts/mgear/maya/icon.py +++ b/scripts/mgear/maya/icon.py @@ -1,88 +1,177 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Predefined nurbsCurve shapes to be use as a rigging control Icons -""" +"""Predefined nurbsCurve shapes to be use as a rigging control Icons""" ############################################# # GLOBAL ############################################# import pymel.core as pm -import pymel.util as pmu -import pymel.core.datatypes as dt - import maya.OpenMaya as om +import pymel.util as pmu +from pymel.core import datatypes import mgear -import mgear.maya.curve as cur -import mgear.maya.attribute as att +from . import curve, attribute ############################################# # ICON ############################################# -def create(parent=None, name="icon", m=dt.Matrix(), color=[0,0,0], icon="cube", **kwargs): - """ + +def create(parent=None, + name="icon", + m=datatypes.Matrix(), + color=[0, 0, 0], + icon="cube", + **kwargs): + """Icon master function + **Create icon master function.** This function centralize all the icons creation - Args: + Arguments: parent (dagNode): The parent for the new icon name (str): Name of the Icon. m (matrix): Transformation matrix of the icon color (int or list of float): The color in index base or RGB. - icon (str): Icon type. Options: "cube", "pyramid", "square", "flower", "circle", "cylinder", "compas", "diamond", - "cubewithpeak", "sphere", "arrow", "crossarrow", "cross", "null" + icon (str): Icon type. Options: "cube", "pyramid", "square", + "flower", "circle", "cylinder", "compas", "diamond", + "cubewithpeak", "sphere", "arrow", "crossarrow", + "cross", "null" kwargs: The keyword arguments can vary depending of the icon type. Please refear to the specific icon method for more info. Returns: dagNode: The newly created icon. + """ - if "w" not in kwargs.keys(): kwargs["w"] = 1 - if "h" not in kwargs.keys(): kwargs["h"] = 1 - if "d" not in kwargs.keys(): kwargs["d"] = 1 - if "po" not in kwargs.keys(): kwargs["po"] = None - if "ro" not in kwargs.keys(): kwargs["ro"] = None - - if icon == "cube": ctl = cube(parent, name, kwargs["w"], kwargs["h"], kwargs["d"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "pyramid": ctl = pyramid(parent, name, kwargs["w"], kwargs["h"], kwargs["d"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "square": ctl = square(parent, name, kwargs["w"], kwargs["d"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "flower": ctl = flower(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "circle": ctl = circle(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "cylinder": ctl = cylinder(parent, name, kwargs["w"], kwargs["h"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "compas": ctl = compas(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "diamond": ctl = diamond(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "cubewithpeak": ctl = cubewithpeak(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "sphere": ctl = sphere(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "arrow": ctl = arrow(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "crossarrow": ctl = crossarrow(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "cross": ctl = cross(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) - elif icon == "null": ctl = null(parent, name, kwargs["w"], color, m, kwargs["po"], kwargs["ro"]) + if "w" not in kwargs.keys(): + kwargs["w"] = 1 + if "h" not in kwargs.keys(): + kwargs["h"] = 1 + if "d" not in kwargs.keys(): + kwargs["d"] = 1 + if "po" not in kwargs.keys(): + kwargs["po"] = None + if "ro" not in kwargs.keys(): + kwargs["ro"] = None + + if icon == "cube": + ctl = cube(parent, + name, + kwargs["w"], + kwargs["h"], + kwargs["d"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "pyramid": + ctl = pyramid(parent, + name, + kwargs["w"], + kwargs["h"], + kwargs["d"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "square": + ctl = square(parent, + name, + kwargs["w"], + kwargs["d"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "flower": + ctl = flower(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "circle": + ctl = circle(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "cylinder": + ctl = cylinder(parent, + name, + kwargs["w"], + kwargs["h"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "compas": + ctl = compas(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "diamond": + ctl = diamond(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "cubewithpeak": + ctl = cubewithpeak(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "sphere": + ctl = sphere(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "arrow": + ctl = arrow(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "crossarrow": + ctl = crossarrow(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "cross": + ctl = cross(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) + elif icon == "null": + ctl = null(parent, + name, + kwargs["w"], + color, + m, + kwargs["po"], + kwargs["ro"]) else: mgear.log("invalid type of ico", mgear.sev_error) @@ -91,11 +180,18 @@ def create(parent=None, name="icon", m=dt.Matrix(), color=[0,0,0], icon="cube", return ctl -def cube(parent=None, name="cube", width=1, height=1, depth=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CUBE shape. +def cube(parent=None, + name="cube", + width=1, + height=1, + depth=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CUBE shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. @@ -103,8 +199,10 @@ def cube(parent=None, name="cube", width=1, height=1, depth=1, color=[0,0,0], m= depth (float): Depth of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve + from its center. + rot_offset (vector): The xyz rotation offset of the curve + from its center. xyz in radians Returns: dagNode: The newly created icon. @@ -114,29 +212,41 @@ def cube(parent=None, name="cube", width=1, height=1, depth=1, color=[0,0,0], m= lenZ = depth * 0.5 # p is positive, N is negative - ppp = dt.Vector(lenX,lenY,lenZ) - ppN = dt.Vector(lenX,lenY,lenZ*-1) - pNp = dt.Vector(lenX,lenY*-1,lenZ) - Npp = dt.Vector(lenX*-1,lenY,lenZ) - pNN = dt.Vector(lenX,lenY*-1,lenZ*-1) - NNp = dt.Vector(lenX*-1,lenY*-1,lenZ) - NpN = dt.Vector(lenX*-1,lenY,lenZ*-1) - NNN = dt.Vector(lenX*-1,lenY*-1,lenZ*-1) + ppp = datatypes.Vector(lenX, lenY, lenZ) + ppN = datatypes.Vector(lenX, lenY, lenZ * -1) + pNp = datatypes.Vector(lenX, lenY * -1, lenZ) + Npp = datatypes.Vector(lenX * -1, lenY, lenZ) + pNN = datatypes.Vector(lenX, lenY * -1, lenZ * -1) + NNp = datatypes.Vector(lenX * -1, lenY * -1, lenZ) + NpN = datatypes.Vector(lenX * -1, lenY, lenZ * -1) + NNN = datatypes.Vector(lenX * -1, lenY * -1, lenZ * -1) + + v_array = [ppp, ppN, NpN, NNN, NNp, Npp, NpN, Npp, ppp, pNp, NNp, pNp, pNN, + ppN, pNN, NNN] - points = getPointArrayWithOffset([ppp, ppN, NpN, NNN, NNp, Npp, NpN, Npp, ppp, pNp, NNp, pNp, pNN, ppN, pNN, NNN], pos_offset, rot_offset) + points = getPointArrayWithOffset(v_array, + pos_offset, + rot_offset) - node = cur.addCurve(parent, name, points, False, 1, m) + node = curve.addCurve(parent, name, points, False, 1, m) setcolor(node, color) return node -def pyramid(parent=None, name="pyramid", width=1, height=1, depth=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a PYRAMIDE shape. +def pyramid(parent=None, + name="pyramid", + width=1, + height=1, + depth=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a PYRAMIDE shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. @@ -144,208 +254,249 @@ def pyramid(parent=None, name="pyramid", width=1, height=1, depth=1, color=[0,0, depth (float): Depth of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve + from its center. + rot_offset (vector): The xyz rotation offset of the curve + from its center. xyz in radians Returns: dagNode: The newly created icon. + """ lenX = width * 0.5 lenY = height lenZ = depth * 0.5 # p is positive, N is negative - top = dt.Vector(0,lenY,0) - pp = dt.Vector(lenX, 0, lenZ) - pN = dt.Vector(lenX,0,lenZ*-1) - Np = dt.Vector(lenX*-1,0,lenZ) - NN = dt.Vector(lenX*-1,0,lenZ*-1) + top = datatypes.Vector(0, lenY, 0) + pp = datatypes.Vector(lenX, 0, lenZ) + pN = datatypes.Vector(lenX, 0, lenZ * -1) + Np = datatypes.Vector(lenX * -1, 0, lenZ) + NN = datatypes.Vector(lenX * -1, 0, lenZ * -1) - points = getPointArrayWithOffset([pp, top, pN, pp, Np, top, NN, Np, NN, pN], pos_offset, rot_offset) + v_array = [pp, top, pN, pp, Np, top, NN, Np, NN, pN] - node = cur.addCurve(parent, name, points, False, 1, m) + points = getPointArrayWithOffset(v_array, pos_offset, rot_offset) + + node = curve.addCurve(parent, name, points, False, 1, m) setcolor(node, color) return node -def square(parent=None, name="square", width=1, depth=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a SQUARE shape. +def square(parent=None, + name="square", + width=1, + depth=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a SQUARE shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. depth (float): Depth of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. + """ lenX = width * 0.5 lenZ = depth * 0.5 - v0 = dt.Vector(lenX , 0, lenZ) - v1 = dt.Vector(lenX , 0, lenZ*-1) - v2 = dt.Vector(lenX*-1, 0, lenZ*-1) - v3 = dt.Vector(lenX*-1, 0, lenZ) + v0 = datatypes.Vector(lenX, 0, lenZ) + v1 = datatypes.Vector(lenX, 0, lenZ * -1) + v2 = datatypes.Vector(lenX * -1, 0, lenZ * -1) + v3 = datatypes.Vector(lenX * -1, 0, lenZ) points = getPointArrayWithOffset([v0, v1, v2, v3], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 1, m) + node = curve.addCurve(parent, name, points, True, 1, m) setcolor(node, color) return node -def flower(parent=None, name="flower", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a FLOWER shape. +def flower(parent=None, + name="flower", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a FLOWER shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width - v0 = dt.Vector(0, -dlen, 0) - v1 = dt.Vector(-dlen * .4, dlen * .4, 0) - v2 = dt.Vector(dlen, 0, 0) - v3 = dt.Vector(-dlen * .4, -dlen * .4, 0) - v4 = dt.Vector(0, dlen, 0) - v5 = dt.Vector(dlen * .4, -dlen * .4, 0) - v6 = dt.Vector(-dlen, 0, 0) - v7 = dt.Vector(dlen * .4, dlen * .4, 0) + v0 = datatypes.Vector(0, -dlen, 0) + v1 = datatypes.Vector(-dlen * .4, dlen * .4, 0) + v2 = datatypes.Vector(dlen, 0, 0) + v3 = datatypes.Vector(-dlen * .4, -dlen * .4, 0) + v4 = datatypes.Vector(0, dlen, 0) + v5 = datatypes.Vector(dlen * .4, -dlen * .4, 0) + v6 = datatypes.Vector(-dlen, 0, 0) + v7 = datatypes.Vector(dlen * .4, dlen * .4, 0) - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) + points = getPointArrayWithOffset( + [v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 3, m) + node = curve.addCurve(parent, name, points, True, 3, m) setcolor(node, color) return node -def circle(parent=None, name="circle", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CIRCLE shape. +def circle(parent=None, + name="circle", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CIRCLE shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. + """ dlen = width * 0.5 - v0 = dt.Vector(0, 0, -dlen * 1.108) - v1 = dt.Vector(dlen * .78 , 0, -dlen * .78) - v2 = dt.Vector(dlen * 1.108, 0, 0) - v3 = dt.Vector(dlen * .78 , 0, dlen * .78) - v4 = dt.Vector(0, 0, dlen * 1.108) - v5 = dt.Vector(-dlen * .78 , 0, dlen * .78) - v6 = dt.Vector(-dlen * 1.108, 0, 0) - v7 = dt.Vector(-dlen * .78 , 0, -dlen * .78) + v0 = datatypes.Vector(0, 0, -dlen * 1.108) + v1 = datatypes.Vector(dlen * .78, 0, -dlen * .78) + v2 = datatypes.Vector(dlen * 1.108, 0, 0) + v3 = datatypes.Vector(dlen * .78, 0, dlen * .78) + v4 = datatypes.Vector(0, 0, dlen * 1.108) + v5 = datatypes.Vector(-dlen * .78, 0, dlen * .78) + v6 = datatypes.Vector(-dlen * 1.108, 0, 0) + v7 = datatypes.Vector(-dlen * .78, 0, -dlen * .78) - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) + points = getPointArrayWithOffset( + [v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 3, m) + node = curve.addCurve(parent, name, points, True, 3, m) setcolor(node, color) return node -def cylinder(parent=None, name="cylinder", width=1, heigth=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CYLINDER shape. +def cylinder(parent=None, + name="cylinder", + width=1, + heigth=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CYLINDER shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. height (float): Height of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * .5 dhei = heigth * .5 # upper circle - v0 = dt.Vector(0, dhei, -dlen * 1.108) - v1 = dt.Vector(dlen * .78 , dhei, -dlen * .78) - v2 = dt.Vector(dlen * 1.108, dhei, 0) - v3 = dt.Vector(dlen * .78 , dhei, dlen * .78) - v4 = dt.Vector(0, dhei, dlen * 1.108) - v5 = dt.Vector(-dlen * .78 , dhei, dlen * .78) - v6 = dt.Vector(-dlen * 1.108, dhei, 0) - v7 = dt.Vector(-dlen * .78 , dhei, -dlen * .78) + v0 = datatypes.Vector(0, dhei, -dlen * 1.108) + v1 = datatypes.Vector(dlen * .78, dhei, -dlen * .78) + v2 = datatypes.Vector(dlen * 1.108, dhei, 0) + v3 = datatypes.Vector(dlen * .78, dhei, dlen * .78) + v4 = datatypes.Vector(0, dhei, dlen * 1.108) + v5 = datatypes.Vector(-dlen * .78, dhei, dlen * .78) + v6 = datatypes.Vector(-dlen * 1.108, dhei, 0) + v7 = datatypes.Vector(-dlen * .78, dhei, -dlen * .78) # lower circle - v8 = dt.Vector(0, -dhei, -dlen * 1.108) - v9 = dt.Vector(dlen * .78 , -dhei, -dlen * .78) - v10 = dt.Vector(dlen * 1.108, -dhei, 0) - v11 = dt.Vector(dlen * .78 , -dhei, dlen * .78) - v12 = dt.Vector(0, -dhei, dlen * 1.108) - v13 = dt.Vector(-dlen * .78 , -dhei, dlen * .78) - v14 = dt.Vector(-dlen * 1.108, -dhei, 0) - v15 = dt.Vector(-dlen * .78 , -dhei, -dlen * .78) + v8 = datatypes.Vector(0, -dhei, -dlen * 1.108) + v9 = datatypes.Vector(dlen * .78, -dhei, -dlen * .78) + v10 = datatypes.Vector(dlen * 1.108, -dhei, 0) + v11 = datatypes.Vector(dlen * .78, -dhei, dlen * .78) + v12 = datatypes.Vector(0, -dhei, dlen * 1.108) + v13 = datatypes.Vector(-dlen * .78, -dhei, dlen * .78) + v14 = datatypes.Vector(-dlen * 1.108, -dhei, 0) + v15 = datatypes.Vector(-dlen * .78, -dhei, -dlen * .78) # curves - v16 = dt.Vector(0, dhei, -dlen) - v17 = dt.Vector(0, -dhei, -dlen) - v18 = dt.Vector(0, -dhei, dlen) - v19 = dt.Vector(0, dhei, dlen) + v16 = datatypes.Vector(0, dhei, -dlen) + v17 = datatypes.Vector(0, -dhei, -dlen) + v18 = datatypes.Vector(0, -dhei, dlen) + v19 = datatypes.Vector(0, dhei, dlen) - v20 = dt.Vector(dlen, dhei, 0) - v21 = dt.Vector(dlen, -dhei, 0) - v22 = dt.Vector(-dlen, -dhei, 0) - v23 = dt.Vector(-dlen, dhei, 0) + v20 = datatypes.Vector(dlen, dhei, 0) + v21 = datatypes.Vector(dlen, -dhei, 0) + v22 = datatypes.Vector(-dlen, -dhei, 0) + v23 = datatypes.Vector(-dlen, dhei, 0) - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 3, m) + points = getPointArrayWithOffset( + [v0, v1, v2, v3, v4, v5, v6, v7], pos_offset, rot_offset) + node = curve.addCurve(parent, name, points, True, 3, m) - points = getPointArrayWithOffset([v8, v9, v10, v11, v12, v13, v14, v15], pos_offset, rot_offset) - crv_0 = cur.addCurve(parent, node+"_0crv", points, True, 3, m) + points = getPointArrayWithOffset( + [v8, v9, v10, v11, v12, v13, v14, v15], pos_offset, rot_offset) + crv_0 = curve.addCurve(parent, node + "_0crv", points, True, 3, m) points = getPointArrayWithOffset([v16, v17], pos_offset, rot_offset) - crv_1 = cur.addCurve(parent, node+"_1crv", points, True, 1, m) + crv_1 = curve.addCurve(parent, node + "_1crv", points, True, 1, m) points = getPointArrayWithOffset([v18, v19], pos_offset, rot_offset) - crv_2 = cur.addCurve(parent, node+"_2crv", points, True, 1, m) + crv_2 = curve.addCurve(parent, node + "_2crv", points, True, 1, m) points = getPointArrayWithOffset([v20, v21], pos_offset, rot_offset) - crv_3 = cur.addCurve(parent, node+"_3crv", points, True, 1, m) + crv_3 = curve.addCurve(parent, node + "_3crv", points, True, 1, m) points = getPointArrayWithOffset([v22, v23], pos_offset, rot_offset) - crv_4 = cur.addCurve(parent, node+"_4crv", points, True, 1, m) + crv_4 = curve.addCurve(parent, node + "_4crv", points, True, 1, m) for crv in [crv_0, crv_1, crv_2, crv_3, crv_4]: for shp in crv.listRelatives(shapes=True): @@ -357,51 +508,63 @@ def cylinder(parent=None, name="cylinder", width=1, heigth=1, color=[0,0,0], m=d return node -def compas(parent=None, name="compas", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a COMPAS shape. +def compas(parent=None, + name="compas", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a COMPAS shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * 0.5 division = 24 point_pos = [] - v = dt.Vector(0, 0, dlen) + v = datatypes.Vector(0, 0, dlen) for i in range(division): - if i == division/2: - w = dt.Vector(v.x, v.y, v.z-dlen*.4) + if i == division / 2: + w = datatypes.Vector(v.x, v.y, v.z - dlen * .4) else: - w = dt.Vector(v.x, v.y, v.z) + w = datatypes.Vector(v.x, v.y, v.z) point_pos.append(w) - v = v.rotateBy((0,(2*pmu.math.pi)/(division+0.0),0)) + v = v.rotateBy((0, (2 * pmu.math.pi) / (division + 0.0), 0)) points = getPointArrayWithOffset(point_pos, pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 3, m) + node = curve.addCurve(parent, name, points, True, 3, m) setcolor(node, color) return node -def diamond(parent=None, name="diamond", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a DIAMOND shape. +def diamond(parent=None, + name="diamond", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a DIAMOND shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. @@ -409,109 +572,133 @@ def diamond(parent=None, name="diamond", width=1, color=[0,0,0], m=dt.Matrix(), depth (float): Depth of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * 0.5 - top = dt.Vector(0,dlen,0) - pp = dt.Vector(dlen,0,dlen) - pN = dt.Vector(dlen,0,dlen*-1) - Np = dt.Vector(dlen*-1,0,dlen) - NN = dt.Vector(dlen*-1,0,dlen*-1) - bottom = (0,-dlen,0) + top = datatypes.Vector(0, dlen, 0) + pp = datatypes.Vector(dlen, 0, dlen) + pN = datatypes.Vector(dlen, 0, dlen * -1) + Np = datatypes.Vector(dlen * -1, 0, dlen) + NN = datatypes.Vector(dlen * -1, 0, dlen * -1) + bottom = (0, -dlen, 0) + + v_array = [pp, top, pN, pp, Np, top, NN, Np, NN, pN, bottom, NN, bottom, + Np, bottom, pp] - points = getPointArrayWithOffset([pp,top,pN,pp,Np,top,NN,Np,NN,pN,bottom,NN,bottom,Np,bottom,pp], pos_offset, rot_offset) + points = getPointArrayWithOffset(v_array, pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, False, 1, m) + node = curve.addCurve(parent, name, points, False, 1, m) setcolor(node, color) return node -def cubewithpeak(parent=None, name="cubewithpeak", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CUBE WITH PEAK shape. +def cubewithpeak(parent=None, + name="cubewithpeak", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CUBE WITH PEAK shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * 0.5 - peak = dt.Vector(0,width,0) - ppp = dt.Vector(dlen,dlen,dlen) - ppN = dt.Vector(dlen,dlen,dlen*-1) - pNp = dt.Vector(dlen,0,dlen) - Npp = dt.Vector(dlen*-1,dlen,dlen) - pNN = dt.Vector(dlen,0,dlen*-1) - NNp = dt.Vector(dlen*-1,0,dlen) - NpN = dt.Vector(dlen*-1,dlen,dlen*-1) - NNN = dt.Vector(dlen*-1,0,dlen*-1) + peak = datatypes.Vector(0, width, 0) + ppp = datatypes.Vector(dlen, dlen, dlen) + ppN = datatypes.Vector(dlen, dlen, dlen * -1) + pNp = datatypes.Vector(dlen, 0, dlen) + Npp = datatypes.Vector(dlen * -1, dlen, dlen) + pNN = datatypes.Vector(dlen, 0, dlen * -1) + NNp = datatypes.Vector(dlen * -1, 0, dlen) + NpN = datatypes.Vector(dlen * -1, dlen, dlen * -1) + NNN = datatypes.Vector(dlen * -1, 0, dlen * -1) + + v_array = [peak, ppp, ppN, peak, NpN, ppN, NpN, peak, Npp, NpN, NNN, NNp, + Npp, NpN, Npp, ppp, pNp, NNp, pNp, pNN, ppN, pNN, NNN] - points = getPointArrayWithOffset([peak,ppp,ppN,peak,NpN,ppN,NpN,peak,Npp,NpN,NNN,NNp,Npp,NpN,Npp,ppp,pNp,NNp,pNp,pNN,ppN,pNN,NNN], pos_offset, rot_offset) + points = getPointArrayWithOffset(v_array, pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, False, 1, m) + node = curve.addCurve(parent, name, points, False, 1, m) setcolor(node, color) return node -def sphere(parent=None, name="sphere", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a SPHERE shape. +def sphere(parent=None, + name="sphere", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a SPHERE shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width - v0 = dt.Vector(0.75*dlen, 0, 0) - v1 = dt.Vector(0, -.75*dlen, 0) - v2 = dt.Vector(-.75*dlen, 0, 0) - v3 = dt.Vector(0, 0.75*dlen, 0) - v4 = dt.Vector(0.75*dlen, 0, 0) - v5 = dt.Vector(0, 0, -.75*dlen) - v6 = dt.Vector(-.75*dlen, 0, 0) - v7 = dt.Vector(0, 0, 0.75*dlen) - v8 = dt.Vector(0, 0, 0.75*dlen) - v9 = dt.Vector(0, -.75*dlen, 0) - v10 = dt.Vector(0, 0, -.75*dlen) - v11 = dt.Vector(0, 0.75*dlen, 0) + v0 = datatypes.Vector(0.75 * dlen, 0, 0) + v1 = datatypes.Vector(0, -.75 * dlen, 0) + v2 = datatypes.Vector(-.75 * dlen, 0, 0) + v3 = datatypes.Vector(0, 0.75 * dlen, 0) + v4 = datatypes.Vector(0.75 * dlen, 0, 0) + v5 = datatypes.Vector(0, 0, -.75 * dlen) + v6 = datatypes.Vector(-.75 * dlen, 0, 0) + v7 = datatypes.Vector(0, 0, 0.75 * dlen) + v8 = datatypes.Vector(0, 0, 0.75 * dlen) + v9 = datatypes.Vector(0, -.75 * dlen, 0) + v10 = datatypes.Vector(0, 0, -.75 * dlen) + v11 = datatypes.Vector(0, 0.75 * dlen, 0) points = getPointArrayWithOffset([v0, v1, v2, v3], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 3, m) + node = curve.addCurve(parent, name, points, True, 3, m) points = getPointArrayWithOffset([v4, v5, v6, v7], pos_offset, rot_offset) - crv_0 = cur.addCurve(parent, node+"_0crv", points, True, 3, m) + crv_0 = curve.addCurve(parent, node + "_0crv", points, True, 3, m) - points = getPointArrayWithOffset([v8, v9, v10, v11], pos_offset, rot_offset) - crv_1 = cur.addCurve(parent, node+"_1crv", points, True, 3, m) + points = getPointArrayWithOffset( + [v8, v9, v10, v11], pos_offset, rot_offset) + + crv_1 = curve.addCurve(parent, node + "_1crv", points, True, 3, m) for crv in [crv_0, crv_1]: for shp in crv.listRelatives(shapes=True): @@ -523,175 +710,209 @@ def sphere(parent=None, name="sphere", width=1, color=[0,0,0], m=dt.Matrix(), po return node -def arrow(parent=None, name="arrow", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a ARROW shape. +def arrow(parent=None, + name="arrow", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a ARROW shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * 0.5 - v0 = dt.Vector(0, 0.3*dlen, -dlen) - v1 = dt.Vector(0, 0.3*dlen, 0.3*dlen) - v2 = dt.Vector(0, 0.6*dlen, 0.3*dlen) - v3 = dt.Vector(0, 0, dlen) - v4 = dt.Vector(0, -0.6*dlen, 0.3*dlen) - v5 = dt.Vector(0, -0.3*dlen, 0.3*dlen) - v6 = dt.Vector(0, -0.3*dlen, -dlen) + v0 = datatypes.Vector(0, 0.3 * dlen, -dlen) + v1 = datatypes.Vector(0, 0.3 * dlen, 0.3 * dlen) + v2 = datatypes.Vector(0, 0.6 * dlen, 0.3 * dlen) + v3 = datatypes.Vector(0, 0, dlen) + v4 = datatypes.Vector(0, -0.6 * dlen, 0.3 * dlen) + v5 = datatypes.Vector(0, -0.3 * dlen, 0.3 * dlen) + v6 = datatypes.Vector(0, -0.3 * dlen, -dlen) - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6], pos_offset, rot_offset) + points = getPointArrayWithOffset( + [v0, v1, v2, v3, v4, v5, v6], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, True, 1, m) + node = curve.addCurve(parent, name, points, True, 1, m) setcolor(node, color) return node -def crossarrow(parent=None, name="crossArrow", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CROSS ARROW shape. +def crossarrow(parent=None, + name="crossArrow", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CROSS ARROW shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * 0.5 - v0 = dt.Vector(0.2*dlen, 0, 0.2*dlen) - v1 = dt.Vector(0.2*dlen, 0, 0.6*dlen) - v2 = dt.Vector(0.4*dlen, 0, 0.6*dlen) - v3 = dt.Vector(0, 0, dlen) - v4 = dt.Vector(-0.4*dlen, 0, 0.6*dlen) - v5 = dt.Vector(-0.2*dlen, 0, 0.6*dlen) - v6 = dt.Vector(-0.2*dlen, 0, 0.2*dlen) - v7 = dt.Vector(-0.6*dlen, 0, 0.2*dlen) - v8 = dt.Vector(-0.6*dlen, 0, 0.4*dlen) - v9 = dt.Vector(-dlen, 0, 0) - v10 = dt.Vector(-0.6*dlen, 0, -0.4*dlen) - v11 = dt.Vector(-0.6*dlen, 0, -0.2*dlen) - v12 = dt.Vector(-0.2*dlen, 0, -0.2*dlen) - v13 = dt.Vector(-0.2*dlen, 0, -0.6*dlen) - v14 = dt.Vector(-0.4*dlen, 0, -0.6*dlen) - v15 = dt.Vector(0, 0, -dlen) - v16 = dt.Vector(0.4*dlen, 0, -0.6*dlen) - v17 = dt.Vector(0.2*dlen, 0, -0.6*dlen) - v18 = dt.Vector(0.2*dlen, 0, -0.2*dlen) - v19 = dt.Vector(0.6*dlen, 0, -0.2*dlen) - v20 = dt.Vector(0.6*dlen, 0, -0.4*dlen) - v21 = dt.Vector(dlen, 0, 0) - v22 = dt.Vector(0.6*dlen, 0, 0.4*dlen) - v23 = dt.Vector(0.6*dlen, 0, 0.2*dlen) - - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23], pos_offset, rot_offset) - - node = cur.addCurve(parent, name, points, True, 1, m) + v0 = datatypes.Vector(0.2 * dlen, 0, 0.2 * dlen) + v1 = datatypes.Vector(0.2 * dlen, 0, 0.6 * dlen) + v2 = datatypes.Vector(0.4 * dlen, 0, 0.6 * dlen) + v3 = datatypes.Vector(0, 0, dlen) + v4 = datatypes.Vector(-0.4 * dlen, 0, 0.6 * dlen) + v5 = datatypes.Vector(-0.2 * dlen, 0, 0.6 * dlen) + v6 = datatypes.Vector(-0.2 * dlen, 0, 0.2 * dlen) + v7 = datatypes.Vector(-0.6 * dlen, 0, 0.2 * dlen) + v8 = datatypes.Vector(-0.6 * dlen, 0, 0.4 * dlen) + v9 = datatypes.Vector(-dlen, 0, 0) + v10 = datatypes.Vector(-0.6 * dlen, 0, -0.4 * dlen) + v11 = datatypes.Vector(-0.6 * dlen, 0, -0.2 * dlen) + v12 = datatypes.Vector(-0.2 * dlen, 0, -0.2 * dlen) + v13 = datatypes.Vector(-0.2 * dlen, 0, -0.6 * dlen) + v14 = datatypes.Vector(-0.4 * dlen, 0, -0.6 * dlen) + v15 = datatypes.Vector(0, 0, -dlen) + v16 = datatypes.Vector(0.4 * dlen, 0, -0.6 * dlen) + v17 = datatypes.Vector(0.2 * dlen, 0, -0.6 * dlen) + v18 = datatypes.Vector(0.2 * dlen, 0, -0.2 * dlen) + v19 = datatypes.Vector(0.6 * dlen, 0, -0.2 * dlen) + v20 = datatypes.Vector(0.6 * dlen, 0, -0.4 * dlen) + v21 = datatypes.Vector(dlen, 0, 0) + v22 = datatypes.Vector(0.6 * dlen, 0, 0.4 * dlen) + v23 = datatypes.Vector(0.6 * dlen, 0, 0.2 * dlen) + + v_array = [v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, + v15, v16, v17, v18, v19, v20, v21, v22, v23] + points = getPointArrayWithOffset(v_array, pos_offset, rot_offset) + + node = curve.addCurve(parent, name, points, True, 1, m) setcolor(node, color) return node -def cross(parent=None, name="cross", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a CROSS shape. +def cross(parent=None, + name="cross", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a CROSS shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ width = width * 0.35 offset1 = width * .5 offset2 = width * 1.5 - v0 = dt.Vector(width,offset2,0) - v1 = dt.Vector(offset2,width,0) - v2 = dt.Vector(offset1,0,0) + v0 = datatypes.Vector(width, offset2, 0) + v1 = datatypes.Vector(offset2, width, 0) + v2 = datatypes.Vector(offset1, 0, 0) - v3 = dt.Vector(offset2,-width,0) - v4 = dt.Vector(width,-offset2,0) - v5 = dt.Vector(0,-offset1,0) + v3 = datatypes.Vector(offset2, -width, 0) + v4 = datatypes.Vector(width, -offset2, 0) + v5 = datatypes.Vector(0, -offset1, 0) - v6 = dt.Vector(-width,-offset2,0) - v7 = dt.Vector(-offset2,-width,0) - v8 = dt.Vector(-offset1,0,0) + v6 = datatypes.Vector(-width, -offset2, 0) + v7 = datatypes.Vector(-offset2, -width, 0) + v8 = datatypes.Vector(-offset1, 0, 0) - v9 = dt.Vector(-offset2,width,0) - v10 = dt.Vector(-width,offset2,0) - v11 = dt.Vector(0,offset1,0) + v9 = datatypes.Vector(-offset2, width, 0) + v10 = datatypes.Vector(-width, offset2, 0) + v11 = datatypes.Vector(0, offset1, 0) - points = getPointArrayWithOffset([v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11], pos_offset, rot_offset) + points = getPointArrayWithOffset( + [v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11], + pos_offset, + rot_offset) - node = cur.addCurve(parent, name, points, True, 1, m) + node = curve.addCurve(parent, name, points, True, 1, m) setcolor(node, color) return node -def null(parent=None, name="null", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a NULL shape. +def null(parent=None, + name="null", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a NULL shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * .5 - v0 = dt.Vector(dlen, 0, 0) - v1 = dt.Vector(-dlen, 0, 0) - v2 = dt.Vector(0,dlen, 0) - v3 = dt.Vector(0, -dlen, 0) - v4 = dt.Vector(0, 0, dlen) - v5 = dt.Vector(0, 0, -dlen) + v0 = datatypes.Vector(dlen, 0, 0) + v1 = datatypes.Vector(-dlen, 0, 0) + v2 = datatypes.Vector(0, dlen, 0) + v3 = datatypes.Vector(0, -dlen, 0) + v4 = datatypes.Vector(0, 0, dlen) + v5 = datatypes.Vector(0, 0, -dlen) points = getPointArrayWithOffset([v0, v1], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, False, 1, m) + node = curve.addCurve(parent, name, points, False, 1, m) points = getPointArrayWithOffset([v2, v3], pos_offset, rot_offset) - crv_0 = cur.addCurve(parent, name, points, False, 1, m) + crv_0 = curve.addCurve(parent, name, points, False, 1, m) points = getPointArrayWithOffset([v4, v5], pos_offset, rot_offset) - crv_1 = cur.addCurve(parent, name, points, False, 1, m) + crv_1 = curve.addCurve(parent, name, points, False, 1, m) for crv in [crv_0, crv_1]: for shp in crv.listRelatives(shapes=True): @@ -703,41 +924,47 @@ def null(parent=None, name="null", width=1, color=[0,0,0], m=dt.Matrix(), pos_of return node -def axis(parent=None, name="axis", width=1, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a AXIS shape. +def axis(parent=None, + name="axis", + width=1, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a AXIS shape. - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ dlen = width * .5 - v0 = dt.Vector(0, 0, 0) - v1 = dt.Vector(dlen, 0, 0) - v2 = dt.Vector(0,dlen, 0) - v3 = dt.Vector(0, 0, dlen) - + v0 = datatypes.Vector(0, 0, 0) + v1 = datatypes.Vector(dlen, 0, 0) + v2 = datatypes.Vector(0, dlen, 0) + v3 = datatypes.Vector(0, 0, dlen) points = getPointArrayWithOffset([v0, v1], pos_offset, rot_offset) - node = cur.addCurve(parent, name, points, False, 1, m) + node = curve.addCurve(parent, name, points, False, 1, m) setcolor(node, 4) points = getPointArrayWithOffset([v0, v2], pos_offset, rot_offset) - crv_0 = cur.addCurve(parent, name, points, False, 1, m) + crv_0 = curve.addCurve(parent, name, points, False, 1, m) setcolor(crv_0, 14) points = getPointArrayWithOffset([v0, v3], pos_offset, rot_offset) - crv_1 = cur.addCurve(parent, name, points, False, 1, m) + crv_1 = curve.addCurve(parent, name, points, False, 1, m) setcolor(crv_1, 6) for crv in [crv_0, crv_1]: @@ -752,35 +979,50 @@ def axis(parent=None, name="axis", width=1, color=[0,0,0], m=dt.Matrix(), pos_of # Guide Icons ########################################################## -def guideRootIcon(parent=None, name="root", width=.5, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a ROOT GUIDE shape. +def guideRootIcon(parent=None, + name="root", + width=.5, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a ROOT GUIDE shape. Note: This icon is specially design for **Shifter** root guides - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ + """ rootIco = null(parent, name, width, color, m, pos_offset, rot_offset) - cubeWidth = width/2.0 - cubeIco = cube(parent, name, cubeWidth, cubeWidth, cubeWidth, color, m, pos_offset, rot_offset) + cubeWidth = width / 2.0 + cubeIco = cube(parent, + name, + cubeWidth, + cubeWidth, + cubeWidth, + color, + m, + pos_offset, + rot_offset) for shp in cubeIco.listRelatives(shapes=True): rootIco.addChild(shp, add=True, shape=True) pm.delete(cubeIco) - att.setNotKeyableAttributes(rootIco) + attribute.setNotKeyableAttributes(rootIco) rootIco.addAttr("isGearGuide", at="bool", dv=True) # Set the control shapes isHistoricallyInteresting for oShape in rootIco.getShapes(): @@ -789,34 +1031,43 @@ def guideRootIcon(parent=None, name="root", width=.5, color=[0,0,0], m=dt.Matri return rootIco -def guideLocatorIcon(parent=None, name="locator", width=.5, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a LOCATOR GUIDE shape. +def guideLocatorIcon(parent=None, + name="locator", + width=.5, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a LOCATOR GUIDE shape. Note: This icon is specially design for **Shifter** locator guides - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. width (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. """ rootIco = null(parent, name, width, color, m, pos_offset, rot_offset) - spheWidth = width/2.0 - sphereIco = sphere(parent, name, spheWidth, color, m, pos_offset, rot_offset) + spheWidth = width / 2.0 + + sphereIco = sphere( + parent, name, spheWidth, color, m, pos_offset, rot_offset) for shp in sphereIco.listRelatives(shapes=True): rootIco.addChild(shp, add=True, shape=True) pm.delete(sphereIco) - att.setNotKeyableAttributes(rootIco) + attribute.setNotKeyableAttributes(rootIco) rootIco.addAttr("isGearGuide", at="bool", dv=True) # Set the control shapes isHistoricallyInteresting for oShape in rootIco.getShapes(): @@ -825,38 +1076,45 @@ def guideLocatorIcon(parent=None, name="locator", width=.5, color=[0,0,0], m=dt. return rootIco -def guideBladeIcon(parent=None, name="blade",lenX=1.0, color=[0,0,0], m=dt.Matrix(), pos_offset=None, rot_offset=None): - """ - Create a curve with a BLADE GUIDE shape. +def guideBladeIcon(parent=None, + name="blade", + lenX=1.0, + color=[0, 0, 0], + m=datatypes.Matrix(), + pos_offset=None, + rot_offset=None): + """Create a curve with a BLADE GUIDE shape. Note: This icon is specially design for **Shifter** blade guides - Args: + Arguments: parent (dagNode): The parent object of the newly created curve. name (str): Name of the curve. lenX (float): Width of the shape. color (int or list of float): The color in index base or RGB. m (matrix): The global transformation of the curve. - pos_offset (vector): The xyz position offset of the curve from its center. - rot_offset (vector): The xyz rotation offset of the curve from its center. xyz in radians + pos_offset (vector): The xyz position offset of the curve from + its center. + rot_offset (vector): The xyz rotation offset of the curve from + its center. xyz in radians Returns: dagNode: The newly created icon. - """ - - v0 = dt.Vector(0 , 0, 0) - v1 = dt.Vector(lenX , 0, 0) - v2 = dt.Vector(0, lenX/3, 0) + """ + v0 = datatypes.Vector(0, 0, 0) + v1 = datatypes.Vector(lenX, 0, 0) + v2 = datatypes.Vector(0, lenX / 3, 0) - points = getPointArrayWithOffset([v0, v1, v2 ], pos_offset, rot_offset) + points = getPointArrayWithOffset( + [v0, v1, v2], pos_offset, rot_offset) - bladeIco = cur.addCurve(parent, name, points, True, 1, m) + bladeIco = curve.addCurve(parent, name, points, True, 1, m) setcolor(bladeIco, color) - att.setNotKeyableAttributes(bladeIco) + attribute.setNotKeyableAttributes(bladeIco) # Set the control shapes isHistoricallyInteresting for oShape in bladeIco.getShapes(): oShape.isHistoricallyInteresting.set(False) @@ -868,26 +1126,33 @@ def guideBladeIcon(parent=None, name="blade",lenX=1.0, color=[0,0,0], m=dt.Matri ########################################################## # ======================================================== + def getPointArrayWithOffset(point_pos, pos_offset=None, rot_offset=None): - """ - Convert a list of vector to a List of float and add the position and rotation offset. + """Get Point array with offset - Args: + Convert a list of vector to a List of float and add the position and + rotation offset. + + Arguments: point_pos (list of vector): Point positions. - pos_offset (vector): The position offset of the curve from its center. - rot_offset (vector): The rotation offset of the curve from its center. In radians. + pos_offset (vector): The position offset of the curve from its + center. + rot_offset (vector): The rotation offset of the curve from its + center. In radians. Returns: list of vector: the new point positions """ - points = [] for v in point_pos: if rot_offset: - mv = om.MVector(v.x,v.y,v.z) - mv = mv.rotateBy(om.MEulerRotation(rot_offset.x, rot_offset.y, rot_offset.z, om.MEulerRotation.kXYZ)) - v = dt.Vector(mv.x,mv.y,mv.z) + mv = om.MVector(v.x, v.y, v.z) + mv = mv.rotateBy(om.MEulerRotation(rot_offset.x, + rot_offset.y, + rot_offset.z, + om.MEulerRotation.kXYZ)) + v = datatypes.Vector(mv.x, mv.y, mv.z) if pos_offset: v = v + pos_offset @@ -897,17 +1162,16 @@ def getPointArrayWithOffset(point_pos, pos_offset=None, rot_offset=None): def setcolor(node, color): - """ - Set the color in the Icons. + """Set the color in the Icons. - Args: + Arguments: node(dagNode): The object color (int or list of float): The color in index base or RGB. """ - - #TODO: configure this funcion to work with RGB or Index color base on Maya version. + # TODO: configure this funcion to work with RGB or Index color base + # on Maya version. # version = mgear.maya.getMayaver() if isinstance(color, int): @@ -919,4 +1183,4 @@ def setcolor(node, color): for shp in node.listRelatives(shapes=True): shp.overrideEnabled.set(1) shp.overrideRGBColors.set(1) - shp.overrideColorRGB.set(color[0],color[1],color[2]) + shp.overrideColorRGB.set(color[0], color[1], color[2]) diff --git a/scripts/mgear/maya/log.py b/scripts/mgear/maya/log.py index 85520a3..0c55b2f 100644 --- a/scripts/mgear/maya/log.py +++ b/scripts/mgear/maya/log.py @@ -1,45 +1,17 @@ -# MGEAR is under the terms of the MIT License +"""Logging Maya data""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Logging Maya data. -""" def matrix4(m, msg="matrix4"): - """ - Print matrix 4x4 data. + """Print matrix 4x4 data. - Args: + Arguments: m (matrix): 4x4 Matrix msg (str): Message in front of the data print. """ s = msg + " : \n"\ - +"| %s , %s , %s , %s |\n"%(m[0][0], m[0][1], m[0][2], m[0][3])\ - +"| %s , %s , %s , %s |\n"%(m[1][0], m[1][1], m[1][2], m[1][3])\ - +"| %s , %s , %s , %s |\n"%(m[2][0], m[2][1], m[2][2], m[2][3])\ - +"| %s , %s , %s , %s |"%(m[3][0], m[3][1], m[3][2], m[3][3]) + + "| %s , %s , %s , %s |\n" % (m[0][0], m[0][1], m[0][2], m[0][3])\ + + "| %s , %s , %s , %s |\n" % (m[1][0], m[1][1], m[1][2], m[1][3])\ + + "| %s , %s , %s , %s |\n" % (m[2][0], m[2][1], m[2][2], m[2][3])\ + + "| %s , %s , %s , %s |" % (m[3][0], m[3][1], m[3][2], m[3][3]) - print (s) + print(s) diff --git a/scripts/mgear/maya/meshNavigation.py b/scripts/mgear/maya/meshNavigation.py index 6155dff..4420e19 100644 --- a/scripts/mgear/maya/meshNavigation.py +++ b/scripts/mgear/maya/meshNavigation.py @@ -1,39 +1,11 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to help navigate the mesh topology. -""" +"""Functions to help navigate the mesh topology""" ############################################# # GLOBAL ############################################# import pymel.core as pm -import pymel.core.datatypes as dt -import maya.OpenMaya as OpenMaya +import pymel.core.datatypes as datatypes +from maya import OpenMaya ############################################# @@ -41,14 +13,17 @@ ############################################# def getExtremeVertexFromLoop(edgeList=None, sideRange=False): - """ - Get extreme vertex X and Y, min and max positions from edge loop + """Get extreme vertex X and Y - Args: + min and max positions from edge loop + + Arguments: edgeList (list): Edge list - sideRange (bool): If True will calculate the extreme position of Z instead of X + sideRange (bool): If True will calculate the extreme position + of Z instead of X Returns: list: upPos, lowPos, inPos, outPos, edgeList, vertexList + """ if not edgeList: edgeList = [x for x in pm.selected(fl=1)] @@ -58,10 +33,10 @@ def getExtremeVertexFromLoop(edgeList=None, sideRange=False): for v in cv: if v not in vertexList: vertexList.append(v) - maxX= None + maxX = None maxY = None - minX= None + minX = None minY = None upPos = None @@ -88,21 +63,21 @@ def getExtremeVertexFromLoop(edgeList=None, sideRange=False): minY = pos[1] lowPos = x if sideRange: - return upPos,lowPos,outPos,inPos, edgeList, vertexList + return upPos, lowPos, outPos, inPos, edgeList, vertexList else: - return upPos,lowPos,inPos,outPos, edgeList, vertexList + return upPos, lowPos, inPos, outPos, edgeList, vertexList -def getConcentricVertexLoop(loop, nbLoops ): - """ - Get concentric vertex loops +def getConcentricVertexLoop(loop, nbLoops): + """Get concentric vertex loops - Args: + Arguments: loop (list): Vertex loop list nbLoops (int): Number of loops to search Returns: list: the loop list + """ loopList = [] allLoops = [] @@ -127,21 +102,22 @@ def getConcentricVertexLoop(loop, nbLoops ): return loopList + def getVertexRowsFromLoops(loopList): - """ - Get vertex rows from edge loops + """Get vertex rows from edge loops - Args: + Arguments: loopList (list): Edge loop list Returns: list: vertex rows + """ rows = [] for x in loopList[0]: rows.append([x]) - loopListLength = len(loopList)-1 + loopListLength = len(loopList) - 1 for i in range(loopListLength): for e, r in enumerate(rows): @@ -153,25 +129,24 @@ def getVertexRowsFromLoops(loopList): if cvs2: for cv in cvs2: - if cv in loopList[i+1]: + if cv in loopList[i + 1]: rows[e].append(cv) continue for cv in cvs: - if cv in loopList[i+1]: + if cv in loopList[i + 1]: rows[e].append(cv) continue return rows ################################################# -## EDGE LOOPS and ROWS +# EDGE LOOPS and ROWS ################################################# def edgeRangeInLoopFromMid(edgeList, midPos, endA, endB): - """ - Return a range of edges in the same loop from a mid position + """Return a range of edges in the same loop from a mid position - Args: + Arguments: edgeList (list): selection edge loop midPos (vertex): mid vertex endA (vertex): endA vertex @@ -179,6 +154,7 @@ def edgeRangeInLoopFromMid(edgeList, midPos, endA, endB): Returns: list: loop range + """ extremeEdges = [] @@ -201,8 +177,10 @@ def edgeRangeInLoopFromMid(edgeList, midPos, endA, endB): midEdges.append(e) cv = e.connectedVertices() for v in cv: - if v.index() in [endA.index(), endB.index()] and e not in extremeEdges: - #extra check to ensure that the 2 edges selected are not attach to the same vertex + if (v.index() in [endA.index(), endB.index()] + and e not in extremeEdges): + # extra check to ensure that the 2 edges + # selected are not attach to the same vertex if v.index() not in indexcheck: extremeEdges.append(e) indexcheck.append(v.index()) @@ -217,28 +195,26 @@ def edgeRangeInLoopFromMid(edgeList, midPos, endA, endB): cv = e.connectedVertices() for v in cv: if v not in scanPoint and v not in scannedPoints: - if v.index() not in [endA.index(), endB.index() ]: + if v.index() not in [endA.index(), endB.index()]: scanPoint.append(v) if stop: break - count +=1 + count += 1 if count > 50: break loopRange = set(midEdges + extremeEdges) return loopRange - ################################################# -## Bounding box info +# Bounding box info ################################################# def bboxCenter(obj, radius=False): - """ - Get bounding box center of mesh object + """Get bounding box center of mesh object - Args: + Arguments: obj (dagNode): mesh object radius (bool): If True return a list the center + the radius @@ -246,26 +222,27 @@ def bboxCenter(obj, radius=False): list of float: the bounding box center in world space >>> center = mnav.bboxCenter(source, radius=False) + """ bbx = obj.getBoundingBox(invisible=True, space='world') center = [(bbx[0][x] + bbx[1][x]) / 2.0 for x in range(3)] if radius: - r = abs((bbx[0][0] - bbx[1][0])/2) + r = abs((bbx[0][0] - bbx[1][0]) / 2) return center, r return center def bBoxData(obj=None, yZero=False, *args): - """ - Get bounding box data of a mesh object + """Get bounding box data of a mesh object - Args: + Arguments: obj (dagNode): Mesh object - yZero (bool): If True, sets the Y axis value to 0 in world space. + yZero (bool): If True, sets the Y axis value to 0 in world space args: Returns: list: center, radio, bounding box full data + """ volCenter = False @@ -274,33 +251,33 @@ def bBoxData(obj=None, yZero=False, *args): shapes = pm.listRelatives(obj, ad=True, s=True) if shapes: bb = pm.polyEvaluate(shapes, b=True) - volCenter = [ (axis[0] + axis[1]) /2 for axis in bb ] + volCenter = [(axis[0] + axis[1]) / 2 for axis in bb] if yZero: volCenter[1] = bb[1][0] - radio = max([bb[0][1] - bb[0][0],bb[2][1] - bb[2][0]])/1.7 + radio = max([bb[0][1] - bb[0][0], bb[2][1] - bb[2][0]]) / 1.7 return volCenter, radio, bb ################################################# -## CLOSEST LOCATIONS +# CLOSEST LOCATIONS ################################################# def getClosestPolygonFromTransform(geo, loc): - """ - Get closest polygon from transform + """Get closest polygon from transform - Args: + Arguments: geo (dagNode): Mesh object loc (matrix): location transform Returns: Closest Polygon + """ if isinstance(loc, pm.nodetypes.Transform): pos = loc.getTranslation(space='world') else: - pos = dt.Vector(loc[0], loc[1], loc[2]) + pos = datatypes.Vector(loc[0], loc[1], loc[2]) nodeDagPath = OpenMaya.MObject() try: @@ -308,8 +285,9 @@ def getClosestPolygonFromTransform(geo, loc): selectionList.add(geo.name()) nodeDagPath = OpenMaya.MDagPath() selectionList.getDagPath(0, nodeDagPath) - except: - raise RuntimeError('OpenMaya.MDagPath() failed on %s' % geo.name()) + except Exception as e: + raise RuntimeError("OpenMaya.MDagPath() failed " + "on {}. \n {}".format(geo.name(), e)) mfnMesh = OpenMaya.MFnMesh(nodeDagPath) @@ -328,10 +306,9 @@ def getClosestPolygonFromTransform(geo, loc): def getClosestVertexFromTransform(geo, loc): - """ - Get closest vertex from transform + """Get closest vertex from transform - Args: + Arguments: geo (dagNode): Mesh object loc (matrix): location transform @@ -339,8 +316,8 @@ def getClosestVertexFromTransform(geo, loc): Closest Vertex >>> v = mn.getClosestVertexFromTransform(geometry, joint) - """ + """ polygon, pos = getClosestPolygonFromTransform(geo, loc) faceVerts = [geo.vtx[i] for i in polygon.getVertices()] diff --git a/scripts/mgear/maya/node.py b/scripts/mgear/maya/node.py index 2ecc434..3206c72 100644 --- a/scripts/mgear/maya/node.py +++ b/scripts/mgear/maya/node.py @@ -1,102 +1,80 @@ -# MGEAR is under the terms of the MIT License +"""Functions to create and connect nodes.""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to create and connect nodes. -""" - -############################################# -# GLOBAL -############################################# import pymel.core as pm -import pymel.core.datatypes as dt - +import pymel.core.datatypes as datatypes +from . import attribute ############################################# # CREATE SIMPLE NODES ############################################# + def createMultMatrixNode(mA, mB, target=False, transform='srt'): - """ - Create Maya multiply Matrix node. + """Create Maya multiply Matrix node. Note: - This node have same functionality as the default Maya matrix multiplication. + This node have same functionality as the default Maya matrix + multiplication. - Args: + Arguments: mA (matrix): input matrix A. mB (matrix): input matrix B. target (dagNode): object target to apply the transformation - transform (str): if target is True. out transform to SRT valid value s r t + transform (str): if target is True. out transform to SRT valid + value s r t Returns: pyNode: Newly created mGear_multMatrix node + """ node = pm.createNode("multMatrix") for m, mi in zip([mA, mB], ['matrixIn[0]', 'matrixIn[1]']): - if isinstance(m, dt.Matrix): + if isinstance(m, datatypes.Matrix): pm.setAttr(node.attr(mi), m) else: pm.connectAttr(m, node.attr(mi)) if target: dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".matrixSum", dm_node+".inputMatrix") + pm.connectAttr(node + ".matrixSum", + dm_node + ".inputMatrix") if 't' in transform: - pm.connectAttr(dm_node+".outputTranslate", target.attr("translate"), f=True) + pm.connectAttr(dm_node + ".outputTranslate", + target.attr("translate"), f=True) if 'r' in transform: - pm.connectAttr(dm_node+".outputRotate", target.attr("rotate"), f=True) + pm.connectAttr(dm_node + ".outputRotate", + target.attr("rotate"), f=True) if 's' in transform: - pm.connectAttr(dm_node+".outputScale", target.attr("scale"), f=True) + pm.connectAttr(dm_node + ".outputScale", + target.attr("scale"), f=True) return node + def createDecomposeMatrixNode(m): """ Create and connect a decomposeMatrix node. - Args: + Arguments: m(str or attr): The matrix attribute name. Returns: pyNode: the newly created node. >>> dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") + """ node = pm.createNode("decomposeMatrix") - pm.connectAttr(m, node+".inputMatrix") + pm.connectAttr(m, node + ".inputMatrix") return node def createDistNode(objA, objB, output=None): - """ - Create and connect a distance node. + """Create and connect a distance node. - Args: + Arguments: objA (dagNode): The dagNode A. objB (dagNode): The dagNode B. output (attr): Output attribute. @@ -105,28 +83,31 @@ def createDistNode(objA, objB, output=None): pyNode: the newly created node. >>> distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - """ + """ node = pm.createNode("distanceBetween") dm_nodeA = pm.createNode("decomposeMatrix") dm_nodeB = pm.createNode("decomposeMatrix") - pm.connectAttr(objA+".worldMatrix", dm_nodeA+".inputMatrix") - pm.connectAttr(objB+".worldMatrix", dm_nodeB+".inputMatrix") + pm.connectAttr(objA + ".worldMatrix", dm_nodeA + ".inputMatrix") + pm.connectAttr(objB + ".worldMatrix", dm_nodeB + ".inputMatrix") - pm.connectAttr(dm_nodeA+".outputTranslate", node+".point1") - pm.connectAttr(dm_nodeB+".outputTranslate", node+".point2") + pm.connectAttr(dm_nodeA + ".outputTranslate", node + ".point1") + pm.connectAttr(dm_nodeB + ".outputTranslate", node + ".point2") if output: - pm.connectAttr(node+".distance", output) + pm.connectAttr(node + ".distance", output) return node -def createConditionNode(firstTerm=False, secondTerm=False, operator=0, ifTrue=False, ifFalse=False): - """ - Create and connect a condition node. +def createConditionNode(firstTerm=False, + secondTerm=False, + operator=0, + ifTrue=False, + ifFalse=False): + """Create and connect a condition node. ======== ====== operator index @@ -139,49 +120,64 @@ def createConditionNode(firstTerm=False, secondTerm=False, operator=0, ifTrue=Fa <= 5 ======== ====== - Args: - firstTerm (attr): The attribute string name for the first conditions. - secondTerm (attr): The attribute string for the second conditions. + Arguments: + firstTerm (attr): The attribute string name for the first + conditions. + secondTerm (attr): The attribute string for the second + conditions. operator (int): The operator to make the condition. - ifTrue (bool or attr): If an attribute is provided will connect ifTrue output. - ifFalse (bool or attr): If an attribute is provided will connect ifFalse output. + ifTrue (bool or attr): If an attribute is provided will connect + ifTrue output. + ifFalse (bool or attr): If an attribute is provided will connect + ifFalse output. Returns: pyNode: the newly created node. - >>> cond1_node = nod.createConditionNode(self.soft_attr, 0, 2,subtract3_node+".output1D", plusTotalLength_node+".output1D") - """ + >>> cond1_node = nod.createConditionNode(self.soft_attr, + 0, + 2, + subtract3_node+".output1D", + plusTotalLength_node+".output1D") + """ + check_list = (pm.Attribute, unicode, str) node = pm.createNode("condition") - pm.setAttr(node+".operation", operator) + pm.setAttr(node + ".operation", operator) if firstTerm: - pm.connectAttr(firstTerm, node+".firstTerm") + attribute.connectSet(firstTerm, node + ".firstTerm", check_list) + if secondTerm: - pm.connectAttr(secondTerm, node+".secondTerm") + attribute.connectSet(secondTerm, node + ".secondTerm", check_list) + if ifTrue: - pm.connectAttr(ifTrue, node+".colorIfTrueR") + attribute.connectSet(ifTrue, node + ".colorIfTrueR", check_list) + if ifFalse: - pm.connectAttr(ifFalse, node+".colorIfFalseR") + attribute.connectSet(ifFalse, node + ".colorIfFalseR", check_list) return node def createBlendNode(inputA, inputB, blender=.5): - """ - Create and connect a createBlendNode node. + """Create and connect a createBlendNode node. - Args: + Arguments: inputA (attr or list of 3 attr): The attribute input A inputB (attr or list of 3 attr): The attribute input B - blender (float or attr): Float in 0 to 1 range or attribute string name. + blender (float or attr): Float in 0 to 1 range or attribute + string name. Returns: pyNode: the newly created node. - >>> blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori_att) - """ + >>> blend_node = nod.createBlendNode( + [dm_node+".outputRotate%s"%s for s in "XYZ"], + [cns+".rotate%s"%s for s in "XYZ"], + self.lock_ori_att) + """ node = pm.createNode("blendColors") if not isinstance(inputA, list): @@ -191,35 +187,51 @@ def createBlendNode(inputA, inputB, blender=.5): inputB = [inputB] for item, s in zip(inputA, "RGB"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): - pm.connectAttr(item, node+".color1"+s) + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): + pm.connectAttr(item, node + ".color1" + s) else: - pm.setAttr(node+".color1"+s, item) + pm.setAttr(node + ".color1" + s, item) for item, s in zip(inputB, "RGB"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): - pm.connectAttr(item, node+".color2"+s) + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): + pm.connectAttr(item, node + ".color2" + s) else: - pm.setAttr(node+".color2"+s, item) + pm.setAttr(node + ".color2" + s, item) - if isinstance(blender, str) or isinstance(blender, unicode) or isinstance(blender, pm.Attribute): - pm.connectAttr(blender, node+".blender") + if (isinstance(blender, str) + or isinstance(blender, unicode) + or isinstance(blender, pm.Attribute)): + pm.connectAttr(blender, node + ".blender") else: - pm.setAttr(node+".blender", blender) + pm.setAttr(node + ".blender", blender) return node -def createPairBlend(inputA=None, inputB=None, blender=.5, rotInterpolation=0, output=None): - """ - Create and connect a PairBlend node. +def createPairBlend(inputA=None, + inputB=None, + blender=.5, + rotInterpolation=0, + output=None, + trans=True, + rot=True): + """Create and connect a PairBlend node. - Args: + Arguments: inputA (dagNode): The transfomr input 1 inputB (dagNode): The transfomr input 2 - blender (float or attr): Float in 0 to 1 range or attribute string name. - rotInterpolation (int): Rotation interpolation option. 0=Euler. 1=Quaternion. - output (dagNode): The output node with the blend transfomr applied. + blender (float or attr): Float in 0 to 1 range or attribute + string name. + rotInterpolation (int): Rotation interpolation option. 0=Euler. + 1=Quaternion. + output (dagNode): The output node with the blend transfomr + applied. + trans (bool): If true connects translation. + rot (bool): If true connects rotation. Returns: pyNode: the newly created node. @@ -227,138 +239,166 @@ def createPairBlend(inputA=None, inputB=None, blender=.5, rotInterpolation=0, ou Example: .. code-block:: python - blend_node = nod.createPairBlend(self.legBonesFK[i], self.legBonesIK[i], self.blend_att, 1) + blend_node = nod.createPairBlend(self.legBonesFK[i], + self.legBonesIK[i], + self.blend_att, + 1) pm.connectAttr(blend_node + ".outRotate", x+".rotate") pm.connectAttr(blend_node + ".outTranslate", x+".translate") - """ + """ node = pm.createNode("pairBlend") node.attr("rotInterpolation").set(rotInterpolation) if inputA: - pm.connectAttr(inputA+".translate", node+".inTranslate1") - pm.connectAttr(inputA+".rotate", node+".inRotate1") + if trans: + pm.connectAttr(inputA + ".translate", node + ".inTranslate1") + if rot: + pm.connectAttr(inputA + ".rotate", node + ".inRotate1") if inputB: - pm.connectAttr(inputB+".translate", node+".inTranslate2") - pm.connectAttr(inputB+".rotate", node+".inRotate2") - - if isinstance(blender, str) or isinstance(blender, unicode) or isinstance(blender, pm.Attribute): - pm.connectAttr(blender, node+".weight") + if trans: + pm.connectAttr(inputB + ".translate", node + ".inTranslate2") + if rot: + pm.connectAttr(inputB + ".rotate", node + ".inRotate2") + + if (isinstance(blender, str) + or isinstance(blender, unicode) + or isinstance(blender, pm.Attribute)): + pm.connectAttr(blender, node + ".weight") else: - pm.setAttr(node+".weight", blender) + pm.setAttr(node + ".weight", blender) if output: - pm.connectAttr(node+".outRotate", output+".rotate") - pm.connectAttr(node+".outTranslate", output+".translate") + if rot: + pm.connectAttr(node + ".outRotate", output + ".rotate") + if trans: + pm.connectAttr(node + ".outTranslate", output + ".translate") return node -def createSetRangeNode(input, oldMin, oldMax, newMin=0, newMax=1, output=None, name="setRange"): + +def createSetRangeNode(input, + oldMin, + oldMax, + newMin=0, + newMax=1, + output=None, + name="setRange"): + """Create Set Range Node""" + node = pm.createNode("setRange", n=name) if not isinstance(input, list): input = [input] for item, s in zip(input, "XYZ"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): - pm.connectAttr(item, node+".value"+s) + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): + pm.connectAttr(item, node + ".value" + s) else: - pm.setAttr(node+".value"+s, item) + pm.setAttr(node + ".value" + s, item) - if isinstance(oldMin, str) or isinstance(oldMin, unicode) or isinstance(oldMin, pm.Attribute): - pm.connectAttr(oldMin, node+".oldMin"+s) + if (isinstance(oldMin, str) + or isinstance(oldMin, unicode) + or isinstance(oldMin, pm.Attribute)): + pm.connectAttr(oldMin, node + ".oldMin" + s) else: - pm.setAttr(node+".oldMin"+s, oldMin) + pm.setAttr(node + ".oldMin" + s, oldMin) - if isinstance(oldMax, str) or isinstance(oldMax, unicode) or isinstance(oldMax, pm.Attribute): - pm.connectAttr(oldMax, node+".oldMax"+s) + if (isinstance(oldMax, str) + or isinstance(oldMax, unicode) + or isinstance(oldMax, pm.Attribute)): + pm.connectAttr(oldMax, node + ".oldMax" + s) else: - pm.setAttr(node+".oldMax"+s, oldMax) + pm.setAttr(node + ".oldMax" + s, oldMax) - if isinstance(newMin, str) or isinstance(newMin, unicode) or isinstance(newMin, pm.Attribute): - pm.connectAttr(newMin, node+".min"+s) + if (isinstance(newMin, str) + or isinstance(newMin, unicode) + or isinstance(newMin, pm.Attribute)): + pm.connectAttr(newMin, node + ".min" + s) else: - pm.setAttr(node+".min"+s, newMin) + pm.setAttr(node + ".min" + s, newMin) - if isinstance(newMax, str) or isinstance(newMax, unicode) or isinstance(newMax, pm.Attribute): - pm.connectAttr(newMax, node+".max"+s) + if (isinstance(newMax, str) + or isinstance(newMax, unicode) + or isinstance(newMax, pm.Attribute)): + pm.connectAttr(newMax, node + ".max" + s) else: - pm.setAttr(node+".max"+s, newMax) - + pm.setAttr(node + ".max" + s, newMax) if output: if not isinstance(output, list): output = [output] for out, s in zip(output, "XYZ"): - pm.connectAttr(node+".outValue"+s, out, f=True) - + pm.connectAttr(node + ".outValue" + s, out, f=True) return node + def createReverseNode(input, output=None): - """ - Create and connect a reverse node. + """Create and connect a reverse node. - Args: + Arguments: input (attr or list of 3 attr): The attribute input. - output (attr or list of 3 attr): The attribute to connect the output. + output (attr or list of 3 attr): The attribute to connect the + output. Returns: pyNode: the newly created node. >>> fkvis_node = nod.createReverseNode(self.blend_att) - """ + """ node = pm.createNode("reverse") if not isinstance(input, list): input = [input] for item, s in zip(input, "XYZ"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): - pm.connectAttr(item, node+".input"+s) + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): + pm.connectAttr(item, node + ".input" + s) else: - pm.setAttr(node+".input"+s, item) + pm.setAttr(node + ".input" + s, item) if output: if not isinstance(output, list): output = [output] for out, s in zip(output, "XYZ"): - pm.connectAttr(node+".output"+s, out, f=True) - + pm.connectAttr(node + ".output" + s, out, f=True) return node def createCurveInfoNode(crv): - """ - Create and connect a curveInfo node. + """Create and connect a curveInfo node. - Args: + Arguments: crv (dagNode): The curve. Returns: pyNode: the newly created node. >>> crv_node = nod.createCurveInfoNode(self.slv_crv) - """ + """ node = pm.createNode("curveInfo") shape = pm.listRelatives(crv, shapes=True)[0] - pm.connectAttr(shape+".local", node+".inputCurve") + pm.connectAttr(shape + ".local", node + ".inputCurve") return node # TODO: update using plusMinusAverage node def createAddNode(inputA, inputB): - """ - Create and connect a addition node. + """Create and connect a addition node. - Args: + Arguments: inputA (attr or float): The attribute input A inputB (attr or float): The attribute input B @@ -366,29 +406,32 @@ def createAddNode(inputA, inputB): pyNode: the newly created node. >>> add_node = nod.createAddNode(self.roundness_att, .001) - """ + """ node = pm.createNode("addDoubleLinear") - if isinstance(inputA, str) or isinstance(inputA, unicode) or isinstance(inputA, pm.Attribute): - pm.connectAttr(inputA, node+".input1") + if (isinstance(inputA, str) + or isinstance(inputA, unicode) + or isinstance(inputA, pm.Attribute)): + pm.connectAttr(inputA, node + ".input1") else: - pm.setAttr(node+".input1", inputA) + pm.setAttr(node + ".input1", inputA) - if isinstance(inputB, str) or isinstance(inputB, unicode) or isinstance(inputB, pm.Attribute): - pm.connectAttr(inputB, node+".input2") + if (isinstance(inputB, str) + or isinstance(inputB, unicode) + or isinstance(inputB, pm.Attribute)): + pm.connectAttr(inputB, node + ".input2") else: - pm.setAttr(node+".input2", inputB) + pm.setAttr(node + ".input2", inputB) return node # TODO: update using plusMinusAverage node def createSubNode(inputA, inputB): - """ - Create and connect a subtraction node. + """Create and connect a subtraction node. - Args: + Arguments: inputA (attr or float): The attribute input A inputB (attr or float): The attribute input B @@ -396,33 +439,38 @@ def createSubNode(inputA, inputB): pyNode: the newly created node. >>> sub_nod = nod.createSubNode(self.roll_att, angle_outputs[i-1]) - """ + """ node = pm.createNode("addDoubleLinear") - if isinstance(inputA, str) or isinstance(inputA, unicode) or isinstance(inputA, pm.Attribute): - pm.connectAttr(inputA, node+".input1") + if (isinstance(inputA, str) + or isinstance(inputA, unicode) + or isinstance(inputA, pm.Attribute)): + pm.connectAttr(inputA, node + ".input1") else: - pm.setAttr(node+".input1", inputA) + pm.setAttr(node + ".input1", inputA) - if isinstance(inputB, str) or isinstance(inputB, unicode) or isinstance(inputB, pm.Attribute): + if (isinstance(inputB, str) + or isinstance(inputB, unicode) + or isinstance(inputB, pm.Attribute)): neg_node = pm.createNode("multiplyDivide") - pm.connectAttr(inputB, neg_node+".input1X") - pm.setAttr(neg_node+".input2X", -1) - pm.connectAttr(neg_node+".outputX", node+".input2") + pm.connectAttr(inputB, neg_node + ".input1X") + pm.setAttr(neg_node + ".input2X", -1) + pm.connectAttr(neg_node + ".outputX", node + ".input2") else: - pm.setAttr(node+".input2", -inputB) + pm.setAttr(node + ".input2", -inputB) return node + def createPowNode(inputA, inputB, output=None): - """ - Create and connect a power node. + """Create and connect a power node. - Args: + Arguments: inputA (attr, float or list of float): The attribute input A inputB (attr, float or list of float): The attribute input B - output (attr or list of attr): The attribute to connect the output. + output (attr or list of attr): The attribute to connect the + output. Returns: pyNode: the newly created node. @@ -432,13 +480,13 @@ def createPowNode(inputA, inputB, output=None): def createMulNode(inputA, inputB, output=None): - """ - Create and connect a Multiply node. + """Create and connect a Multiply node. - Args: + Arguments: inputA (attr, float or list of float): The attribute input A inputB (attr, float or list of float): The attribute input B - output (attr or list of attr): The attribute to connect the output. + output (attr or list of attr): The attribute to connect the + output. Returns: pyNode: the newly created node. @@ -448,13 +496,13 @@ def createMulNode(inputA, inputB, output=None): def createDivNode(inputA, inputB, output=None): - """ - Create and connect a Divide node. + """Create and connect a Divide node. - Args: + Arguments: inputA (attr, float or list of float): The attribute input A inputB (attr, float or list of float): The attribute input B - output (attr or list of attr): The attribute to connect the output. + output (attr or list of attr): The attribute to connect the + output. Returns: pyNode: the newly created node. @@ -466,30 +514,32 @@ def createDivNode(inputA, inputB, output=None): div1_node = pm.createNode("multiplyDivide") div1_node.setAttr("operation", 2) div1_node.setAttr("input1X", 1) - pm.connectAttr(self.rig.global_ctl+".sx", div1_node+".input2X") + pm.connectAttr(self.rig.global_ctl+".sx", + div1_node+".input2X") # mGear style = 1 line - div1_node = nod.createDivNode(1.0, self.rig.global_ctl+".sx") + div1_node = nod.createDivNode(1.0, + self.rig.global_ctl+".sx") """ return createMulDivNode(inputA, inputB, 2, output) def createMulDivNode(inputA, inputB, operation=1, output=None): - """ - Create and connect a Multiply or Divide node. + """Create and connect a Multiply or Divide node. - Args: + Arguments: inputA (attr, float or list of float): The attribute input A inputB (attr, float or list of float): The attribute input B - output (attr or list of attr): The attribute to connect the output. + output (attr or list of attr): The attribute to connect the + output. Returns: pyNode: the newly created node. """ node = pm.createNode("multiplyDivide") - pm.setAttr(node+".operation", operation) + pm.setAttr(node + ".operation", operation) if not isinstance(inputA, list): inputA = [inputA] @@ -498,41 +548,48 @@ def createMulDivNode(inputA, inputB, operation=1, output=None): inputB = [inputB] for item, s in zip(inputA, "XYZ"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): try: - pm.connectAttr(item, node+".input1"+s, f=True) - except RuntimeError: - pm.connectAttr(item, node+".input1", f=True) + pm.connectAttr(item, node + ".input1" + s, f=True) + except(UnicodeEncodeError, RuntimeError): + # Maya in Japanese have an issue with unicodeEndoce + # UnicodeEncodeError is a workaround + pm.connectAttr(item, node + ".input1", f=True) break else: - pm.setAttr(node+".input1"+s, item) + pm.setAttr(node + ".input1" + s, item) for item, s in zip(inputB, "XYZ"): - if isinstance(item, str) or isinstance(item, unicode) or isinstance(item, pm.Attribute): + if (isinstance(item, str) + or isinstance(item, unicode) + or isinstance(item, pm.Attribute)): try: - pm.connectAttr(item, node+".input2"+s, f=True) - except RuntimeError: - pm.connectAttr(item, node+".input2", f=True) + pm.connectAttr(item, node + ".input2" + s, f=True) + except(UnicodeEncodeError, RuntimeError): + # Maya in Japanese have an issue with unicodeEndoce + # UnicodeEncodeError is a workaround + pm.connectAttr(item, node + ".input2", f=True) break else: - pm.setAttr(node+".input2"+s, item) + pm.setAttr(node + ".input2" + s, item) if output: if not isinstance(output, list): output = [output] for item, s in zip(output, "XYZ"): - pm.connectAttr(node+".output"+s, item, f=True) + pm.connectAttr(node + ".output" + s, item, f=True) return node def createClampNode(input, in_min, in_max): - """ - Create and connect a clamp node + """Create and connect a clamp node - Args: + Arguments: input (attr, float or list): The input value to clamp in_min (float): The minimun value to clamp in_max (float): The maximun value to clamp @@ -540,7 +597,10 @@ def createClampNode(input, in_min, in_max): Returns: pyNode: the newly created node. - >>> clamp_node = nod.createClampNode([self.roll_att, self.bank_att, self.bank_att], [0, -180, 0], [180,0,180]) + >>> clamp_node = nod.createClampNode( + [self.roll_att, self.bank_att, self.bank_att], + [0, -180, 0], + [180,0,180]) """ node = pm.createNode("clamp") @@ -554,30 +614,36 @@ def createClampNode(input, in_min, in_max): for in_item, min_item, max_item, s in zip(input, in_min, in_max, "RGB"): - if isinstance(in_item, str) or isinstance(in_item, unicode) or isinstance(in_item, pm.Attribute): - pm.connectAttr(in_item, node+".input"+s) + if (isinstance(in_item, str) + or isinstance(in_item, unicode) + or isinstance(in_item, pm.Attribute)): + pm.connectAttr(in_item, node + ".input" + s) else: - pm.setAttr(node+".input"+s, in_item) + pm.setAttr(node + ".input" + s, in_item) - if isinstance(min_item, str) or isinstance(min_item, unicode) or isinstance(min_item, pm.Attribute): - pm.connectAttr(min_item, node+".min"+s) + if (isinstance(min_item, str) + or isinstance(min_item, unicode) + or isinstance(min_item, pm.Attribute)): + pm.connectAttr(min_item, node + ".min" + s) else: - pm.setAttr(node+".min"+s, min_item) + pm.setAttr(node + ".min" + s, min_item) - if isinstance(max_item, str) or isinstance(max_item, unicode) or isinstance(max_item, pm.Attribute): - pm.connectAttr(max_item, node+".max"+s) + if (isinstance(max_item, str) + or isinstance(max_item, unicode) + or isinstance(max_item, pm.Attribute)): + pm.connectAttr(max_item, node + ".max" + s) else: - pm.setAttr(node+".max"+s, max_item) + pm.setAttr(node + ".max" + s, max_item) return node def createPlusMinusAverage1D(input, operation=1, output=None): - """ - Create a multiple average node 1D. - Args: + """Create a multiple average node 1D. + Arguments: input (attr, float or list): The input values. - operation (int): Node operation. 0=None, 1=sum, 2=subtract, 3=average + operation (int): Node operation. 0=None, 1=sum, 2=subtract, + 3=average output (attr): The attribute to connect the result. Returns: @@ -592,172 +658,179 @@ def createPlusMinusAverage1D(input, operation=1, output=None): for i, x in enumerate(input): try: - pm.connectAttr(x, node+".input1D[%s]"%str(i)) - except: - pm.setAttr( node+".input1D[%s]"%str(i), x) + pm.connectAttr(x, node + ".input1D[%s]" % str(i)) + except RuntimeError: + pm.setAttr(node + ".input1D[%s]" % str(i), x) if output: - pm.connectAttr(node+".output1D", output) - + pm.connectAttr(node + ".output1D", output) return node -def createVertexPositionNode(inShape, vId=0, output=None, name="mgear_vertexPosition"): - """ - Creates a mgear_vertexPosition node - """ +def createVertexPositionNode(inShape, + vId=0, + output=None, + name="mgear_vertexPosition"): + """Creates a mgear_vertexPosition node""" node = pm.createNode("mgear_vertexPosition", n=name) inShape.worldMesh.connect(node.inputShape) node.vertex.set(vId) if output: - pm.connectAttr(output.parentInverseMatrix, node.drivenParentInverseMatrix) + pm.connectAttr(output.parentInverseMatrix, + node.drivenParentInverseMatrix) pm.connectAttr(node.output, output.translate) return node - ############################################# # CREATE MULTI NODES ############################################# def createNegateNodeMulti(name, inputs=[]): - """ - Create and connect multiple negate nodes + """Create and connect multiple negate nodes - Args: + Arguments: name (str): The name for the new node. inputs (list of attr): The list of attributes to negate Returns: list: The output attributes list. - """ + """ s = "XYZ" - count=0 - i=0 + count = 0 + i = 0 outputs = [] for input in inputs: - if count==0: - real_name = name+"_"+str(i) + if count == 0: + real_name = name + "_" + str(i) node_name = pm.createNode("multiplyDivide", n=real_name) - i+=1 + i += 1 - pm.connectAttr(input, node_name+".input1"+s[count], f=True) - pm.setAttr(node_name+".input2"+s[count], -1) + pm.connectAttr(input, node_name + ".input1" + s[count], f=True) + pm.setAttr(node_name + ".input2" + s[count], -1) - outputs.append(node_name+".output"+s[count]) - count = (count+1)%3 + outputs.append(node_name + ".output" + s[count]) + count = (count + 1) % 3 return outputs def createAddNodeMulti(inputs=[]): - """ - Create and connect multiple add nodes + """Create and connect multiple add nodes - Args: + Arguments: inputs (list of attr): The list of attributes to add Returns: list: The output attributes list. >>> angle_outputs = nod.createAddNodeMulti(self.angles_att) - """ + """ outputs = [inputs[0]] for i, input in enumerate(inputs[1:]): node_name = pm.createNode("addDoubleLinear") - if isinstance(outputs[-1], str) or isinstance(outputs[-1], unicode) or isinstance(outputs[-1], pm.Attribute): - pm.connectAttr(outputs[-1], node_name+".input1", f=True) + if (isinstance(outputs[-1], str) + or isinstance(outputs[-1], unicode) + or isinstance(outputs[-1], pm.Attribute)): + pm.connectAttr(outputs[-1], node_name + ".input1", f=True) else: - pm.setAttr(node_name+".input1", outputs[-1]) + pm.setAttr(node_name + ".input1", outputs[-1]) - if isinstance(input, str) or isinstance(input, unicode) or isinstance(input, pm.Attribute): - pm.connectAttr(input, node_name+".input2", f=True) + if (isinstance(input, str) + or isinstance(input, unicode) + or isinstance(input, pm.Attribute)): + pm.connectAttr(input, node_name + ".input2", f=True) else: - pm.setAttr(node_name+".input2", input) + pm.setAttr(node_name + ".input2", input) - outputs.append(node_name+".output") + outputs.append(node_name + ".output") return outputs def createMulNodeMulti(name, inputs=[]): - """ - Create and connect multiple multiply nodes + """Create and connect multiple multiply nodes - Args: + Arguments: name (str): The name for the new node. inputs (list of attr): The list of attributes to multiply Returns: list: The output attributes list. - """ + """ outputs = [inputs[0]] for i, input in enumerate(inputs[1:]): - real_name = name+"_"+str(i) + real_name = name + "_" + str(i) node_name = pm.createNode("multiplyDivide", n=real_name) - pm.setAttr(node_name+".operation", 1) + pm.setAttr(node_name + ".operation", 1) - if isinstance(outputs[-1], str) or isinstance(outputs[-1], unicode) or isinstance(outputs[-1], pm.Attribute): - pm.connectAttr(outputs[-1], node_name+".input1X", f=True) + if (isinstance(outputs[-1], str) + or isinstance(outputs[-1], unicode) + or isinstance(outputs[-1], pm.Attribute)): + pm.connectAttr(outputs[-1], node_name + ".input1X", f=True) else: - pm.setAttr(node_name+".input1X", outputs[-1]) + pm.setAttr(node_name + ".input1X", outputs[-1]) - if isinstance(input, str) or isinstance(input, unicode) or isinstance(input, pm.Attribute): - pm.connectAttr(input, node_name+".input2X", f=True) + if (isinstance(input, str) + or isinstance(input, unicode) + or isinstance(input, pm.Attribute)): + pm.connectAttr(input, node_name + ".input2X", f=True) else: - pm.setAttr(node_name+".input2X", input) + pm.setAttr(node_name + ".input2X", input) - outputs.append(node_name+".output") + outputs.append(node_name + ".output") return outputs def createDivNodeMulti(name, inputs1=[], inputs2=[]): - """ - Create and connect multiple divide nodes + """Create and connect multiple divide nodes - Args: + Arguments: name (str): The name for the new node. inputs1 (list of attr): The list of attributes inputs2 (list of attr): The list of attributes Returns: list: The output attributes list. - """ + """ for i, input in enumerate(pm.inputs[1:]): - real_name = name+"_"+str(i) + real_name = name + "_" + str(i) node_name = pm.createNode("multiplyDivide", n=real_name) - pm.setAttr(node_name+".operation", 2) + pm.setAttr(node_name + ".operation", 2) - if isinstance(pm.outputs[-1], str) or isinstance(pm.outputs[-1], unicode) or isinstance(pm.outputs[-1], pm.Attribute): - pm.connectAttr(pm.outputs[-1], node_name+".input1X", f=True) + if (isinstance(pm.outputs[-1], str) + or isinstance(pm.outputs[-1], unicode) + or isinstance(pm.outputs[-1], pm.Attribute)): + pm.connectAttr(pm.outputs[-1], node_name + ".input1X", f=True) else: - pm.setAttr(node_name+".input1X", pm.outputs[-1]) + pm.setAttr(node_name + ".input1X", pm.outputs[-1]) - if isinstance(input, str) or isinstance(input, unicode) or isinstance(input, pm.Attribute): - pm.connectAttr(input, node_name+".input2X", f=True) + if (isinstance(input, str) + or isinstance(input, unicode) + or isinstance(input, pm.Attribute)): + pm.connectAttr(input, node_name + ".input2X", f=True) else: - pm.setAttr(node_name+".input2X", input) + pm.setAttr(node_name + ".input2X", input) - pm.outputs.append(node_name+".output") + pm.outputs.append(node_name + ".output") return pm.outputs def createClampNodeMulti(name, inputs=[], in_min=[], in_max=[]): - """ - Create and connect multiple clamp nodes + """Create and connect multiple clamp nodes - Args: + Arguments: name (str): The name for the new node. inputs (list of attr): The list of attributes in_min (list of attr): The list of attributes @@ -765,31 +838,35 @@ def createClampNodeMulti(name, inputs=[], in_min=[], in_max=[]): Returns: list: The output attributes list. - """ + """ s = "RGB" - count=0 - i=0 + count = 0 + i = 0 outputs = [] for input, min, max in zip(inputs, in_min, in_max): - if count==0: - real_name = name+"_"+str(i) + if count == 0: + real_name = name + "_" + str(i) node_name = pm.createNode("clamp", n=real_name) - i+=1 + i += 1 - pm.connectAttr(input, node_name+".input"+s[count], f=True) + pm.connectAttr(input, node_name + ".input" + s[count], f=True) - if isinstance(min, str) or isinstance(min, unicode) or isinstance(min, pm.Attribute): - pm.connectAttr(min, node_name+".min"+s[count], f=True) + if (isinstance(min, str) + or isinstance(min, unicode) + or isinstance(min, pm.Attribute)): + pm.connectAttr(min, node_name + ".min" + s[count], f=True) else: - pm.setAttr(node_name+".min"+s[count], min) + pm.setAttr(node_name + ".min" + s[count], min) - if isinstance(max, str) or isinstance(max, unicode) or isinstance(max, pm.Attribute): - pm.connectAttr(max, node_name+".max"+s[count], f=True) + if (isinstance(max, str) + or isinstance(max, unicode) + or isinstance(max, pm.Attribute)): + pm.connectAttr(max, node_name + ".max" + s[count], f=True) else: - pm.setAttr(node_name+".max"+s[count], max) + pm.setAttr(node_name + ".max" + s[count], max) - outputs.append(node_name+".output"+s[count]) - count = (count+1)%3 + outputs.append(node_name + ".output" + s[count]) + count = (count + 1) % 3 return outputs diff --git a/scripts/mgear/maya/pickWalk.py b/scripts/mgear/maya/pickWalk.py index 36cbee1..85722a7 100644 --- a/scripts/mgear/maya/pickWalk.py +++ b/scripts/mgear/maya/pickWalk.py @@ -1,38 +1,9 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Custom Pick walk. -""" -############################################# -# GLOBAL -############################################# +"""Custom Pick walk""" + import pymel.core as pm -import mgear.string as stri +from mgear import string + ########################################################## # Utility funcsions @@ -40,11 +11,12 @@ def getWalkTag(node): """Get Controller tag - Args: + Arguments: node (dagNode): Controller object with tag Returns: tag: Controller tag + """ tag = node.listConnections(t="controller", et=True) if tag: @@ -53,34 +25,38 @@ def getWalkTag(node): def reorderControllerChildrenTags(tag): """Clean the order on the children connection. + This is important for the Left and right pick walk. Becasue is using the index of the connection. - Args: + Arguments: tag (controller tag): The tag to clean the children order + """ ch = tag.children.connections() - for i, c in enumerate(ch): - d = c.children.connections(c.parent, p=True)[0] + for i, c in enumerate(ch): + d = c.children.connections(c.parent, p=True)[0] pm.disconnectAttr(c.parent, d) - pm.connectAttr(c.parent, tag.attr("children[%s]"%str(i))) + pm.connectAttr(c.parent, tag.attr("children[%s]" % str(i))) def cleanOrphaneControllerTags(tag): - """security check, delete tags without controlObject plug + """Security check, delete tags without controlObject plug - Args: + Arguments: tag (controllers tag list): The tags to check Returns: list: The valid tags with controller object plugged + """ if not isinstance(tag, list): tag = [tag] validTags = [] for t in tag: if not t.controllerObject.connections(): - pm.displayWarning("The controller tag: %s have not controller object input. Auto Deleted!"%t.name()) + pm.displayWarning("The controller tag: %s have not controller " + "object input. Auto Deleted!" % t.name()) pm.delete(t) reorderControllerChildrenTags(t) else: @@ -89,21 +65,18 @@ def cleanOrphaneControllerTags(tag): ########################################################## -#PICK WALK +# PICK WALK ########################################################## -# ===================================================== -# controllers walkers - def _getControllerWalkNodes(tag): - """Get the node conneted to a controllers tag as - a controller object + """Get the node conneted to a controllers tag as a controller object - Args: + Arguments: tag (controller list): Maya's controller tag Returns: dagNode: The list of controller objects + """ nodes = [] if not isinstance(tag, list): @@ -114,45 +87,51 @@ def _getControllerWalkNodes(tag): nodes.append(cnx[0]) return nodes + def controllerWalkUp(node, add=False): - """ Walk up in the hierachy using the controller tag + """Walk up in the hierachy using the controller tag - Args: + Arguments: node (dagNode or list of dagNode): Node with controller tag add (bool, optional): If true add to selection + """ oParent = [] - if not isinstance(node,list): + if not isinstance(node, list): node = [node] - for n in node: + for n in node: tag = getWalkTag(n) if tag: cnx = tag.parent.connections() if cnx: oParent.append(cnx[0]) else: - pm.displayWarning("The selected object: %s without Controller tag will be skipped"%n.name()) + pm.displayWarning("The selected object: %s without Controller tag " + "will be skipped" % n.name()) if oParent: pm.select(_getControllerWalkNodes(oParent), add=add) else: pm.displayWarning("No parent to walk Up.") + def controllerWalkDown(node, add=False, multi=False): - """ Walk down in the hierachy using the controller tag + """Walk down in the hierachy using the controller tag - Args: + Arguments: node (dagNode or list of dagNode): Node with controller tag add (bool, optional): If true add to selection + """ oChild = [] - if not isinstance(node,list): + if not isinstance(node, list): node = [node] - for n in node: + for n in node: tag = getWalkTag(n) if tag: cnx = cleanOrphaneControllerTags(tag.children.connections()) else: - pm.displayWarning("The selected object: %s without Controller tag will be skipped"%n.name()) + pm.displayWarning("The selected object: %s without Controller tag " + "will be skipped" % n.name()) if cnx: if multi: oChild = oChild + cnx @@ -161,19 +140,21 @@ def controllerWalkDown(node, add=False, multi=False): if oChild: pm.select(_getControllerWalkNodes(oChild), add=add) else: - pm.displayWarning("No parent to walk Up.") + pm.displayWarning("No parent to walk Down.") def _getControllerWalkSiblings(node, direction="right", multi=False): - """ Get the sibling tag of the controller tag + """Get the sibling tag of the controller tag - Args: + Arguments: node (dagNode or list of dagNode): Node with the controller tag - direction (str, optional): Direction of the walk. Values "right" and "left" + direction (str, optional): Direction of the walk. Values "right" + and "left" multi (bool, optional): If true, selects all the siblings Returns: TYPE: Description + """ if direction == "right": d = 1 @@ -183,67 +164,72 @@ def _getControllerWalkSiblings(node, direction="right", multi=False): if not isinstance(node, list): node = [node] - siblingsTags =[] + siblingsTags = [] for n in node: tag = getWalkTag(n) if tag: pTag = tag.parent.connections() if pTag: - siblings = cleanOrphaneControllerTags(pTag[0].children.connections()) + siblings = cleanOrphaneControllerTags( + pTag[0].children.connections()) if multi: - siblingsTags = siblingsTags + siblings + siblingsTags = siblingsTags + siblings else: i = siblings.index(tag) - if i <= len(siblings)-2: - siblingsTags.append(siblings[i+d]) + if i <= len(siblings) - 2: + siblingsTags.append(siblings[i + d]) else: siblingsTags.append(siblings[0]) else: - pm.displayWarning("The tag: %s doesn't have parent tag"%tag.name()) + pm.displayWarning("The tag: %s doesn't have parent " + "tag" % tag.name()) else: - pm.displayWarning("The selected object: %s without Controller tag will be skipped"%n.name()) - + pm.displayWarning("The selected object: %s without Controller tag" + " will be skipped" % n.name()) siblingsNode = [] for t in siblingsTags: siblingsNode.append(t.controllerObject.connections()[0]) - return siblingsNode def controllerWalkLeft(node, add=False, multi=False): - """ Pick walks the next sibling to the left using controller tag + """Pick walks the next sibling to the left using controller tag - Args: + Arguments: node (TYPE): Description add (bool, optional): If true add to selection multi (bool, optional): If true, selects all the siblings """ - nodes = _getControllerWalkSiblings(pm.selected(), "left", multi) + nodes = _getControllerWalkSiblings(pm.selected(), "left", multi) pm.select(nodes, add=add) + def controllerWalkRight(node, add=False, multi=False): """ Pick walks the next sibling to the right using controller tag - Args: + Arguments: node (TYPE): Description add (bool, optional): If true add to selection multi (bool, optional): If true, selects all the siblings """ - nodes = _getControllerWalkSiblings(pm.selected(), "right", multi) + nodes = _getControllerWalkSiblings(pm.selected(), "right", multi) pm.select(nodes, add=add) # ===================================================== # transform walkers + + def transformWalkUp(node, add=False): - """ Walks to the parent transform dagNode on the hierarcy + """Walks to the parent transform dagNode on the hierarcy - Args: + Arguments: node (dagNode or list of dagNode): dagNode to walk add (bool, optional): if True, will add to the selection + """ oParent = [] if not isinstance(node, list): @@ -262,7 +248,7 @@ def transformWalkUp(node, add=False): def transformWalkDown(node, add=False, multi=False): """Walks to the child transform dagNode on the hierarcy - Args: + Arguments: node (dagNode or list of dagNode): dagNode to walk add (bool, optional): if True, will add to the selection multi (bool, optional): if True will select all the childrens @@ -286,13 +272,15 @@ def transformWalkDown(node, add=False, multi=False): def _getTransformWalkSiblings(node, direction="right", multi=False): """ Get the sibling transforms on the hierarchy - Args: + Arguments: node (dagNode or list of dagNode): dagNode to walk the siblings - direction (str, optional): Direction of the walk. Values "right" and "left" + direction (str, optional): Direction of the walk. Values "right" + and "left" multi (bool, optional): If true, selects all the siblings Returns: dagNode: list of dagNode + """ if direction == "right": d = 1 @@ -301,74 +289,86 @@ def _getTransformWalkSiblings(node, direction="right", multi=False): if not isinstance(node, list): node = [node] - siblings =[] + siblings = [] for n in node: p = n.getParent() sib = p.getChildren() - tSib = [t for t in sib if t.type()=="transform"] + tSib = [t for t in sib if t.type() == "transform"] if multi: siblings = siblings + tSib else: i = tSib.index(n) - if i <= len(tSib)-2: - siblings.append(tSib[i+d]) + if i <= len(tSib) - 2: + siblings.append(tSib[i + d]) else: siblings.append(tSib[0]) return siblings + def transformWalkLeft(node, add=False, multi=False): - """ Pick walks to the left the next sibling transform on the hierarchy + """Pick walks to the left the next sibling transform on the hierarchy - Args: - node (dagNode or list of dagNode): dagNode transform to navegate the hierarchy + Arguments: + node (dagNode or list of dagNode): dagNode transform to navegate + the hierarchy add (bool, optional): If true add to selection multi (bool, optional): If true, selects all the siblings + """ sib = _getTransformWalkSiblings(node, "left", multi) pm.select(sib, add=add) + def transformWalkRight(node, add=False, multi=False): - """ Pick walks to the right the next sibling transform on the hierarchy + """Pick walks to the right the next sibling transform on the hierarchy - Args: - node (dagNode or list of dagNode): dagNode transform to navegate the hierarchy + Arguments: + node (dagNode or list of dagNode): dagNode transform to navegate + the hierarchy add (bool, optional): If true add to selection multi (bool, optional): If true, selects all the siblings + """ sib = _getTransformWalkSiblings(node, "right", multi) pm.select(sib, add=add) # ===================================================== -#Walk mirror +# Walk mirror def getMirror(node): """Get the mirrored node usin _L and _R replacement - Args: - node (dagNode or list of dagNodes): The dagNode to look for a mirror + Arguments: + node (dagNode or list of dagNodes): The dagNode to look for a + mirror Returns: - dagNode or list of dagNodes: The dagNode contrapart on the other side _L or _R + dagNode or list of dagNodes: The dagNode contrapart on the other + side _L or _R + """ if not isinstance(node, list): node = [node] mirrorNodes = [] for n in node: try: - mirrorNodes.append(pm.PyNode(stri.convertRLName(n.name()))) - except: - pm.displayInfo("The object: %s doesn't have mirror _L or _R contrapart. Skipped!"%n.name()) + mirrorNodes.append(pm.PyNode(string.convertRLName(n.name()))) + except Exception: + pm.displayInfo("The object: %s doesn't have mirror _L or _R " + "contrapart. Skipped!" % n.name()) mirrorNodes.append(n) return mirrorNodes + def walkMirror(node, add=False): """Select the mirror dagNode - Args: + Arguments: node (dagNode or list of dagNode): The dagNode to look for a mirror add (bool, optional): If true add to selection + """ mN = getMirror(node) pm.select(mN, add=add) @@ -378,16 +378,23 @@ def walkMirror(node, add=False): # Main walkers def _walk(node, direction, add=False, multi=False): """Walk main function. - This function will check if the first object on the selection have Controller tag or not. - NOTE: The pick walk function on the following selected node will be decided by the firs in the selection - i.e: if the secon element on the selection doesn't controller tag. This element will be discarted. + This function will check if the first object on the selection have + Controller tag or not. + + NOTE: The pick walk function on the following selected node will be + decided by the firs in the selection + i.e: if the secon element on the selection doesn't controller tag. + This element will be discarted. - Args: - node (dagNode or list of dagNode): the starting object for the pickwalk - direction (string): the direction of the navigation : "up", "down", "left" and "right" + Arguments: + node (dagNode or list of dagNode): the starting object for the + pickwalk + direction (string): the direction of the navigation : "up", + "down", "left" and "right" add (bool, optional): If True add to selection multi (bool, optional): If true, selects all the siblings + """ if not isinstance(node, list): node = [node] @@ -403,7 +410,7 @@ def _walk(node, direction, add=False, multi=False): elif direction == "right": controllerWalkRight(node, add, multi) - else: # there is no tag. We pick walk only transforms. + else: # there is no tag. We pick walk only transforms. pm.displayInfo("Transform PickWalk") if direction == "up": transformWalkUp(node, add) @@ -418,40 +425,51 @@ def _walk(node, direction, add=False, multi=False): def walkUp(node, add=False, multi=False): """Walk up - Args: - node (dagNode or list of dagNode): the starting object for the pickwalk + Arguments: + node (dagNode or list of dagNode): the starting object for the + pickwalk add (bool, optional): If True add to selection multi (bool, optional): If true, selects all the siblings + """ _walk(node, "up", add, multi) + def walkDown(node, add=False, multi=False): """Walk Down - Args: - node (dagNode or list of dagNode): the starting object for the pickwalk + Arguments: + node (dagNode or list of dagNode): the starting object for the + pickwalk add (bool, optional): If True add to selection multi (bool, optional): If true, selects all the siblings + """ _walk(node, "down", add, multi) + def walkLeft(node, add=False, multi=False): """Walk left - Args: - node (dagNode or list of dagNode): the starting object for the pickwalk + Arguments: + node (dagNode or list of dagNode): the starting object for the + pickwalk add (bool, optional): If True add to selection multi (bool, optional): If true, selects all the siblings + """ _walk(node, "left", add, multi) + def walkRight(node, add=False, multi=False): """Walk right - Args: - node (dagNode or list of dagNode): the starting object for the pickwalk + Arguments: + node (dagNode or list of dagNode): the starting object for the + pickwalk add (bool, optional): If True add to selection multi (bool, optional): If true, selects all the siblings + """ _walk(node, "right", add, multi) diff --git a/scripts/mgear/maya/primitive.py b/scripts/mgear/maya/primitive.py index 2851de9..35e191e 100644 --- a/scripts/mgear/maya/primitive.py +++ b/scripts/mgear/maya/primitive.py @@ -1,50 +1,19 @@ -# MGEAR is under the terms of the MIT License +"""Functions to create primitives (Non geometry)""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to create primitives (Non geometry) -""" - -############################################# -# GLOBAL -############################################# import pymel.core as pm -import pymel.core.datatypes as dt +import pymel.core.datatypes as datatypes -import mgear.maya.transform as tra +import mgear.maya.transform as transform ############################################# # PRIMITIVE ############################################# -def addTransform(parent, name, m=dt.Matrix()): - """ - Create a transform dagNode. - Args: +def addTransform(parent, name, m=datatypes.Matrix()): + """Create a transform dagNode. + + Arguments: parent (dagNode): The parent for the node. name (str): The Node name. m (matrix): The matrix for the node transformation (optional). @@ -53,7 +22,6 @@ def addTransform(parent, name, m=dt.Matrix()): dagNode: The newly created node. """ - node = pm.PyNode(pm.createNode("transform", n=name)) node.setTransformation(m) @@ -62,11 +30,11 @@ def addTransform(parent, name, m=dt.Matrix()): return node -def addTransformFromPos(parent, name, pos=dt.Vector(0,0,0)): - """ - Create a transform dagNode. - Args: +def addTransformFromPos(parent, name, pos=datatypes.Vector(0, 0, 0)): + """Create a transform dagNode. + + Arguments: parent (dagNode): The parent for the node. name (str): The Node name. pos (vector): The vector for the node position (optional). @@ -75,7 +43,6 @@ def addTransformFromPos(parent, name, pos=dt.Vector(0,0,0)): dagNode: The newly created node. """ - node = pm.PyNode(pm.createNode("transform", n=name)) node.setTranslation(pos, space="world") @@ -86,11 +53,12 @@ def addTransformFromPos(parent, name, pos=dt.Vector(0,0,0)): # =========================================== # LOCATOR -def addLocator(parent, name, m=dt.Matrix(), size=1): - """ - Create a space locator dagNode. - Args: + +def addLocator(parent, name, m=datatypes.Matrix(), size=1): + """Create a space locator dagNode. + + Arguments: parent (dagNode): The parent for the node. name (str): The Node name. m (matrix): The matrix for the node transformation (optional). @@ -100,7 +68,6 @@ def addLocator(parent, name, m=dt.Matrix(), size=1): dagNode: The newly created node. """ - node = pm.PyNode(pm.createNode("locator")).getParent() node.rename(name) node.setTransformation(m) @@ -111,11 +78,11 @@ def addLocator(parent, name, m=dt.Matrix(), size=1): return node -def addLocatorFromPos(parent, name, pos=dt.Vector(0,0,0), size=1): - """ - Create a space locator dagNode. - Args: +def addLocatorFromPos(parent, name, pos=datatypes.Vector(0, 0, 0), size=1): + """Create a space locator dagNode. + + Arguments: parent (dagNode): The parent for the node. name (str): The Node name. pos (vector): The vector for the node position (optional). @@ -123,9 +90,8 @@ def addLocatorFromPos(parent, name, pos=dt.Vector(0,0,0), size=1): Returns: dagNode: The newly created node. - """ - + """ node = pm.PyNode(pm.createNode("locator")).getParent() node.rename(name) node.setTranslation(pos, space="world") @@ -138,15 +104,16 @@ def addLocatorFromPos(parent, name, pos=dt.Vector(0,0,0), size=1): # =========================================== # JOINT -def addJoint(parent, name, m=dt.Matrix(), vis=True): - """ - Create a joint dagNode. + + +def addJoint(parent, name, m=datatypes.Matrix(), vis=True): + """Create a joint dagNode. Note: I'm not using the joint() comand because this is parenting the newly created joint to current selection which might not be desired - Args: + Arguments: parent (dagNode): The parent for the node. name (str): The node name. m (matrix): The matrix for the node transformation (optional). @@ -165,15 +132,15 @@ def addJoint(parent, name, m=dt.Matrix(), vis=True): return node -def addJointFromPos(parent, name, pos=dt.Vector(0,0,0)): - """ - Create a joint dagNode. + +def addJointFromPos(parent, name, pos=datatypes.Vector(0, 0, 0)): + """Create a joint dagNode. Note: I'm not using the joint() comand because this is parenting the newly created joint to current selection which might not be desired - Args: + Arguments: parent (dagNode): The parent for the node. name (str): The node name. pos (vector): The vector for the node position (optional). @@ -191,21 +158,25 @@ def addJointFromPos(parent, name, pos=dt.Vector(0,0,0)): return node + def add2DChain2(parent, name, positions, normal, negate=False, vis=True): - """ - Experimental 2D Chain creation function. Create a 2D joint chain. Like Softimage 2D chain. + """Experimental 2D Chain creation function. + + Create a 2D joint chain. Like Softimage 2D chain. Warning: This function is WIP and not ready for production. Warning: - This function will create un expected results if all the positions are not in the same 2D plane. + This function will create un expected results if all the + positions are not in the same 2D plane. - Args: + Arguments: parent (dagNode): The parent for the chain. name (str): The node name. positions(list of vectors): the positons to define the chain. - normal (vector): The normal vector to define the direction of the chain. + normal (vector): The normal vector to define the direction of + the chain. negate (bool): If True will negate the direction of the chain Returns; @@ -213,20 +184,24 @@ def add2DChain2(parent, name, positions, normal, negate=False, vis=True): - >>> self.chain3bones = pri.add2DChain2(self.setup, self.getName("chain3bones%s_jnt"), self.guide.apos[0:4], self.normal, False) + >>> self.chain3bones = pri.add2DChain2( + self.setup, + self.getName("chain3bones%s_jnt"), + self.guide.apos[0:4], + self.normal, + False) """ - - if "%s" not in name: + if "%s" not in name: name += "%s" - transforms = tra.getChainTransform(positions, normal, negate) - t = tra.setMatrixPosition(transforms[-1], positions[-1]) + transforms = transform.getChainTransform(positions, normal, negate) + t = transform.setMatrixPosition(transforms[-1], positions[-1]) transforms.append(t) chain = [] for i, t in enumerate(transforms): - node = addJoint(parent, name%i, t, vis) + node = addJoint(parent, name % i, t, vis) chain.append(node) parent = node @@ -235,13 +210,14 @@ def add2DChain2(parent, name, positions, normal, negate=False, vis=True): if i == 0: jnt.setAttr("jointOrient", jnt.getAttr("rotate")) - elif i == len(chain)-1: + elif i == len(chain) - 1: jnt.setAttr("jointOrient", 0, 0, 0) else: - # This will fail if chain is not always oriented the same way (like Z chain) - v0 = positions[i] - positions[i-1] - v1 = positions[i+1] - positions[i] - angle = dt.degrees(v0.angle(v1)) + # This will fail if chain is not always oriented the same + # way (like Z chain) + v0 = positions[i] - positions[i - 1] + v1 = positions[i + 1] - positions[i] + angle = datatypes.degrees(v0.angle(v1)) jnt.setAttr("jointOrient", 0, 0, angle) @@ -250,36 +226,43 @@ def add2DChain2(parent, name, positions, normal, negate=False, vis=True): return chain + def add2DChain(parent, name, positions, normal, negate=False, vis=True): - """ - Create a 2D joint chain. Like Softimage 2D chain. + """Create a 2D joint chain. Like Softimage 2D chain. Warning: - This function will create un expected results if all the positions are not in the same 2D plane. + This function will create un expected results if all the + positions are not in the same 2D plane. - Args: + Arguments: parent (dagNode): The parent for the chain. name (str): The node name. positions(list of vectors): the positons to define the chain. - normal (vector): The normal vector to define the direction of the chain. + normal (vector): The normal vector to define the direction of + the chain. negate (bool): If True will negate the direction of the chain Returns; list of dagNodes: The list containg all the joints of the chain - >>> self.rollRef = pri.add2DChain(self.root, self.getName("rollChain"), self.guide.apos[:2], self.normal, self.negate) - """ + >>> self.rollRef = pri.add2DChain( + self.root, + self.getName("rollChain"), + self.guide.apos[:2], + self.normal, + self.negate) - if "%s" not in name: + """ + if "%s" not in name: name += "%s" - transforms = tra.getChainTransform(positions, normal, negate) - t = tra.setMatrixPosition(transforms[-1], positions[-1]) + transforms = transform.getChainTransform(positions, normal, negate) + t = transform.setMatrixPosition(transforms[-1], positions[-1]) transforms.append(t) chain = [] for i, t in enumerate(transforms): - node = addJoint(parent, name%i, t, vis) + node = addJoint(parent, name % i, t, vis) chain.append(node) parent = node @@ -288,22 +271,26 @@ def add2DChain(parent, name, positions, normal, negate=False, vis=True): if i == 0: jnt.setAttr("jointOrient", jnt.getAttr("rotate")) jnt.setAttr("rotate", 0, 0, 0) - elif i == len(chain)-1: + elif i == len(chain) - 1: jnt.setAttr("jointOrient", 0, 0, 0) jnt.setAttr("rotate", 0, 0, 0) else: - # This will fail if chain is not always oriented the same way (like X chain) - v0 = positions[i] - positions[i-1] - v1 = positions[i+1] - positions[i] - angle = dt.degrees(v0.angle(v1)) + # This will fail if chain is not always oriented the same + # way (like X chain) + v0 = positions[i] - positions[i - 1] + v1 = positions[i + 1] - positions[i] + angle = datatypes.degrees(v0.angle(v1)) jnt.setAttr("rotate", 0, 0, 0) jnt.setAttr("jointOrient", 0, 0, angle) - # check if we have to negate Z angle by comparing the guide position and the resulting position. + # check if we have to negate Z angle by comparing the guide + # position and the resulting position. if i >= 1: # round the position values to 6 decimals precission - # TODO: test with less precision and new check after apply Ik solver - if [round(elem, 4) for elem in tra.getTranslation(jnt)] != [round(elem, 4) for elem in positions[i]]: + # TODO: test with less precision and new check after apply + # Ik solver + if ([round(elem, 4) for elem in transform.getTranslation(jnt)] + != [round(elem, 4) for elem in positions[i]]): jp = jnt.getParent() @@ -312,7 +299,8 @@ def add2DChain(parent, name, positions, normal, negate=False, vis=True): while jp.type() == "transform": jp = jp.getParent() - jp.setAttr("jointOrient", 0, 0, jp.attr("jointOrient").get()[2]*-1) + jp.setAttr( + "jointOrient", 0, 0, jp.attr("jointOrient").get()[2] * -1) jnt.setAttr("radius", 1.5) @@ -320,24 +308,31 @@ def add2DChain(parent, name, positions, normal, negate=False, vis=True): def addIkHandle(parent, name, chn, solver="ikRPsolver", poleV=None): - """ - Creates and connect an IKhandle to a joints chain. + """Creates and connect an IKhandle to a joints chain. - Args: + Arguments: parent (dagNode): The parent for the IKhandle. name (str): The node name. chn (list): List of joints. - solver (str): the solver to be use for the ikHandel. Default value is "ikRPsolver" + solver (str): the solver to be use for the ikHandel. Default + value is "ikRPsolver" poleV (dagNode): Pole vector for the IKHandle Returns: dagNode: The IKHandle - >>> self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.legChainUpvRef, "ikSCsolver") - """ + >>> self.ikHandleUpvRef = pri.addIkHandle( + self.root, + self.getName("ikHandleLegChainUpvRef"), + self.legChainUpvRef, + "ikSCsolver") + """ # creating a crazy name to avoid name clashing before convert to pyNode. - node = pm.ikHandle(n=name+"kjfjfklsdf049r58420582y829h3jnf", sj=chn[0], ee=chn[-1], solver=solver)[0] + node = pm.ikHandle(n=name + "kjfjfklsdf049r58420582y829h3jnf", + sj=chn[0], + ee=chn[-1], + solver=solver)[0] node = pm.PyNode(node) pm.rename(node, name) node.attr("visibility").set(False) @@ -348,5 +343,4 @@ def addIkHandle(parent, name, chn, solver="ikRPsolver", poleV=None): if poleV: pm.poleVectorConstraint(poleV, node) - return node diff --git a/scripts/mgear/maya/pyqt.py b/scripts/mgear/maya/pyqt.py index d07097e..1631f82 100644 --- a/scripts/mgear/maya/pyqt.py +++ b/scripts/mgear/maya/pyqt.py @@ -1,56 +1,24 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -pyQt/pySide widgets and helper functions for mGear -""" +"""pyQt/pySide widgets and helper functions for mGear""" ############################################# # GLOBAL ############################################# -import os -import pymel.core as pm -import maya.cmds as cmds -from pymel import versions - -from maya.app.general.mayaMixin import MayaQDockWidget - -from functools import partial import traceback import maya.OpenMayaUI as omui -from mGear_pyqt import QtGui, QtCore, QtWidgets, wrapInstance, qt_import +from mgear.vendor.Qt import QtWidgets, QtCompat + +# TODO: Delete after finish refactor +# not used in this module, but imported in others +from mGear_pyqt import qt_import ############################################# # helper Maya pyQt functions ############################################# + def maya_main_window(): - """ - Get Maya's main window + """Get Maya's main window Returns: QMainWindow: main window. @@ -58,9 +26,7 @@ def maya_main_window(): """ main_window_ptr = omui.MQtUtil.mainWindow() - # return wrapInstance(long(main_window_ptr), QtWidgets.QMainWindow) - return wrapInstance(long(main_window_ptr), QtWidgets.QWidget) - + return QtCompat.wrapInstance(long(main_window_ptr), QtWidgets.QWidget) def showDialog(dialog, dInst=True, *args): @@ -76,51 +42,53 @@ def showDialog(dialog, dInst=True, *args): for c in maya_main_window().children(): if isinstance(c, dialog): c.deleteLater() - except: + except Exception: pass # Create minimal dialog object - if versions.current() >= 20180000: - windw = dialog(maya_main_window()) - else: - windw = dialog() - windw.move(QtWidgets.QApplication.desktop().screen().rect().center()- windw.rect().center()) + # if versions.current() >= 20180000: + # windw = dialog(maya_main_window()) + # else: + windw = dialog() + windw.move(QtWidgets.QApplication.desktop().screen().rect().center() + - windw.rect().center()) # Delete the UI if errors occur to avoid causing winEvent # and event errors (in Maya 2014) try: windw.show() - except: + except Exception: windw.deleteLater() traceback.print_exc() def deleteInstances(dialog, checkinstance): - """ - Delete any instance of a given dialog and if the dialog is instance of checkinstance. + """Delete any instance of a given dialog + + Delete any instance of a given dialog and if the dialog is + instance of checkinstance. Attributes: dialog (QDialog): The dialog to delete. checkinstance (QDialog): The instance to check the type of dialog. """ - mayaMainWindow = maya_main_window() for obj in mayaMainWindow.children(): - if type( obj ) == checkinstance: + if isinstance(obj, checkinstance): if obj.widget().objectName() == dialog.toolName: print 'Deleting instance {0}'.format(obj) mayaMainWindow.removeDockWidget(obj) obj.setParent(None) obj.deleteLater() + def fakeTranslate(*args): - """ - fake QApplication.translate. This function helps to bypass the incompativility - for the Unicode utf8 deprecated in pyside2 + """Fake Translation + fake QApplication.translate. This function helps to bypass the + incompativility for the Unicode utf8 deprecated in pyside2 """ - return args[1] diff --git a/scripts/mgear/maya/rigbits/__init__.py b/scripts/mgear/maya/rigbits/__init__.py index 6290c6f..af7b1be 100644 --- a/scripts/mgear/maya/rigbits/__init__.py +++ b/scripts/mgear/maya/rigbits/__init__.py @@ -1,49 +1,23 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes from pymel import util as pmu import mgear -import mgear.maya.icon as ic -import mgear.maya.applyop as aop -import mgear.maya.node as nod -import mgear.maya.transform as tra -import mgear.maya.primitive as pri -import mgear.maya.meshNavigation as mnav import mgear.string +from mgear.maya import icon, applyop, node, transform +from mgear.maya import primitive, meshNavigation def addNPO(objs=None, *args): - """ - Add a transform node as a parent and in the same pose of each of the selected objects. - This way neutralize the local transfromation values. - NPO stands for "neutral position" terminology from the all mighty Softimage ;) + """Add a transform node as a neutral pose + + Add a transform node as a parent and in the same pose of each of the + selected objects. This way neutralize the local transfromation + values. + NPO stands for "neutral position" terminology from the all mighty + Softimage ;) + """ npoList = [] @@ -53,7 +27,10 @@ def addNPO(objs=None, *args): objs = [objs] for obj in objs: oParent = obj.getParent() - oTra = pm.createNode("transform", n= obj.name() + "_npo", p=oParent, ss=True) + oTra = pm.createNode("transform", + n=obj.name() + "_npo", + p=oParent, + ss=True) oTra.setTransformation(obj.getMatrix()) pm.parent(obj, oTra) npoList.append(oTra) @@ -62,73 +39,86 @@ def addNPO(objs=None, *args): def selectDeformers(*args): - """ - Select the deformers from the object skinCluster. - """ + """Select the deformers from the object skinCluster""" + oSel = pm.selected()[0] oColl = pm.skinCluster(oSel, query=True, influence=True) pm.select(oColl) -#Icon creator -def createCTL(type = "square", child=False, *args): - """ - Create a control for each selected object. The newly create control can be parent or child of the object. +# Icon creator +def createCTL(type="square", child=False, *args): + """Create a control for each selected object. + + The newly create control can be parent or child of the object. Args: type (str): The shape of the control. - child (bool): if True, the control will be created as a child of the object. + child (bool): if True, the control will be created as a + child of the object. + """ - iconList =[] + iconList = [] if child: if len(pm.selected()) > 0: for x in pm.selected(): - oChilds = [item for item in x.listRelatives(ad=True, type="transform") if item.longName().split("|")[-2] == x.name()] - - icon = ic.create(None, x.name() + "_ctl",None, [1, 0, 0], type) - iconList.append(icon) - icon.setTransformation(x.getMatrix(worldSpace=True)) - pm.parent(icon, x) + oChilds = [item for item + in x.listRelatives(ad=True, type="transform") + if item.longName().split("|")[-2] == x.name()] + + o_icon = icon.create( + None, x.name() + "_ctl", None, [1, 0, 0], type) + iconList.append(o_icon) + o_icon.setTransformation(x.getMatrix(worldSpace=True)) + pm.parent(o_icon, x) for child in oChilds: - pm.parent(child, icon) + pm.parent(child, o_icon) else: - icon = ic.create(None, type + "_ctl", pm.datatypes.Matrix(), [1, 0, 0], type) - iconList.append(icon) + o_icon = icon.create( + None, type + "_ctl", datatypes.Matrix(), [1, 0, 0], type) + iconList.append(o_icon) else: if len(pm.selected()) > 0: for x in pm.selected(): oParent = x.getParent() - icon = ic.create(oParent, x.name() + "_ctl", x.getMatrix(), [1, 0, 0], type) - iconList.append(icon) - icon.setTransformation(x.getMatrix()) - pm.parent(x, icon) + o_icon = icon.create(oParent, + x.name() + "_ctl", + x.getMatrix(), + [1, 0, 0], + type) + iconList.append(o_icon) + o_icon.setTransformation(x.getMatrix()) + pm.parent(x, o_icon) else: - icon = ic.create(None, type + "_ctl", pm.datatypes.Matrix(), [1, 0, 0], type) - iconList.append(icon) + o_icon = icon.create( + None, type + "_ctl", datatypes.Matrix(), [1, 0, 0], type) + iconList.append(o_icon) try: - defSet = pm.PyNode("rig_controlers_grp") + defSet = pm.PyNode("rig_controllers_grp") for ico in iconList: pm.sets(defSet, add=ico) - except: - print "not rig_controlers_grp found" + except TypeError: + print "not rig_controllers_grp found" pass def addJnt(obj=False, parent=False, noReplace=False, grp=None, *args): - - """ - Create one joint for each selected object. + """Create one joint for each selected object. Args: - obj (bool or dagNode, optional): The object to drive the new joint. If False will use the current selection. - parent (bool or dagNode, optional): The parent for the joint. If False will try to parent to jnt_org. - If jnt_org doesn't exist will parent the joint under the obj - noReplace (bool, optional): If True will add the extension "_jnt" to the new joint name - grp (pyNode or None, optional): The set to add the new joint. If none will use "rig_deformers_grp" + obj (bool or dagNode, optional): The object to drive the new + joint. If False will use the current selection. + parent (bool or dagNode, optional): The parent for the joint. + If False will try to parent to jnt_org. If jnt_org doesn't + exist will parent the joint under the obj + noReplace (bool, optional): If True will add the extension + "_jnt" to the new joint name + grp (pyNode or None, optional): The set to add the new joint. + If none will use "rig_deformers_grp" *args: Maya's dummy Returns: @@ -144,14 +134,14 @@ def addJnt(obj=False, parent=False, noReplace=False, grp=None, *args): if not parent: try: oParent = pm.PyNode("jnt_org") - except: + except TypeError: oParent = obj else: oParent = parent if noReplace: - jntName = "_".join(obj.name().split("_"))+"_jnt" + jntName = "_".join(obj.name().split("_")) + "_jnt" else: - jntName = "_".join(obj.name().split("_")[:-1])+"_jnt" + jntName = "_".join(obj.name().split("_")[:-1]) + "_jnt" jnt = pm.createNode("joint", n=jntName) if grp: @@ -160,7 +150,7 @@ def addJnt(obj=False, parent=False, noReplace=False, grp=None, *args): try: defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=jnt) - except: + except TypeError: pm.sets(n="rig_deformers_grp") defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=jnt) @@ -169,12 +159,14 @@ def addJnt(obj=False, parent=False, noReplace=False, grp=None, *args): jnt.setAttr("jointOrient", 0, 0, 0) try: - mulmat_node = nod.createMultMatrixNode(obj + ".worldMatrix", jnt + ".parentInverseMatrix") - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".matrixSum") - pm.connectAttr(dm_node+".outputTranslate", jnt+".t") - pm.connectAttr(dm_node+".outputRotate", jnt+".r") - pm.connectAttr(dm_node+".outputScale", jnt+".s") - except: + mulmat_node = node.createMultMatrixNode( + obj + ".worldMatrix", jnt + ".parentInverseMatrix") + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".matrixSum") + pm.connectAttr(dm_node + ".outputTranslate", jnt + ".t") + pm.connectAttr(dm_node + ".outputRotate", jnt + ".r") + pm.connectAttr(dm_node + ".outputScale", jnt + ".s") + except RuntimeError: for axis in ["tx", "ty", "tz", "rx", "ry", "rz"]: jnt.attr(axis).set(0.0) @@ -182,19 +174,18 @@ def addJnt(obj=False, parent=False, noReplace=False, grp=None, *args): def duplicateSym(*args): - """ - Duplicate one dag hierarchy to/from X/-X renaming "L" to "R" - """ + """Duplicate one dag hierarchy to/from X/-X renaming "L" to "R" """ + oSelection = pm.selected() if oSelection: oSel = oSelection[0] oTarget = pm.duplicate()[0] t = oSel.getTransformation() - t = tra.getSymmetricalTransform(t) + t = transform.getSymmetricalTransform(t) oTarget.setTransformation(t) - #Quick rename + # Quick rename pm.select(oTarget, hi=True) for x in pm.selected(): @@ -205,35 +196,40 @@ def duplicateSym(*args): def matchWorldXform(*args): - """ - Align 2 selected objects in world space. - """ - if len(pm.selected()) <2: - mgear.log( "2 objects or more must be selected. Source and Targets transform", mgear.sev_warning) + """Align 2 selected objects in world space""" + + if len(pm.selected()) < 2: + mgear.log("2 objects or more must be selected. Source and Targets " + "transform", mgear.sev_warning) else: source = pm.selected()[0] for target in pm.selected()[1:]: - tra.matchWorldTransform(source, target) + transform.matchWorldTransform(source, target) + def alignToPointsLoop(points=None, loc=None, name=None, *args): - """ - Create space locator align to the plain define by at less 3 vertex + """Create space locator align to the plain define by at less 3 vertex Args: - points (None or vertex list, optional): The reference vertex to align the ref locator + points (None or vertex list, optional): The reference vertex to align + the ref locator loc (None or dagNode, optional): If none will create a new locator name (None or string, optional): Name of the new locator *args: Description Returns: TYPE: Description - """ + """ if not points: oSel = pm.selected(fl=True) - if not oSel or len(oSel) < 3 or str(type(oSel[0])) != "": - pm.displayWarning("We need to select a points loop, with at less 3 or more points") + checkType = "" + if (not oSel + or len(oSel) < 3 + or str(type(oSel[0])) != checkType): + pm.displayWarning("We need to select a points loop, with at " + "less 3 or more points") return else: points = oSel @@ -243,29 +239,31 @@ def alignToPointsLoop(points=None, loc=None, name=None, *args): loc = pm.spaceLocator(n=name) oLen = len(points) - wPos = [0,0,0] + wPos = [0, 0, 0] for x in points: pos = x.getPosition(space="world") wPos[0] += pos[0] wPos[1] += pos[1] wPos[2] += pos[2] - centerPosition = dt.Vector([wPos[0]/oLen, wPos[1]/oLen, wPos[2]/oLen ]) - + centerPosition = datatypes.Vector([wPos[0] / oLen, + wPos[1] / oLen, + wPos[2] / oLen]) - lookat = dt.Vector(points[0].getPosition(space="world")) + lookat = datatypes.Vector(points[0].getPosition(space="world")) # NORMAL - a = lookat - centerPosition + a = lookat - centerPosition a.normalize() - nextV = dt.Vector(points[1].getPosition(space="world")) - b = nextV - centerPosition + nextV = datatypes.Vector(points[1].getPosition(space="world")) + b = nextV - centerPosition b.normalize() normal = pmu.cross(b, a) normal.normalize() - trans = tra.getTransformLookingAt(centerPosition,lookat, normal, axis="xy", negate=False) + trans = transform.getTransformLookingAt( + centerPosition, lookat, normal, axis="xy", negate=False) loc.setTransformation(trans) @@ -277,18 +275,20 @@ def connectWorldTransform(source, target): source (dagNode): Source dagNode. target (dagNode): target dagNode. """ - mulmat_node = nod.createMultMatrixNode(source + ".worldMatrix", target + ".parentInverseMatrix") - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".matrixSum") - pm.connectAttr(dm_node+".outputTranslate", target+".t") - pm.connectAttr(dm_node+".outputRotate", target+".r") - pm.connectAttr(dm_node+".outputScale", target+".s") + mulmat_node = node.createMultMatrixNode(source + ".worldMatrix", + target + ".parentInverseMatrix") + dm_node = node.createDecomposeMatrixNode(mulmat_node + ".matrixSum") + pm.connectAttr(dm_node + ".outputTranslate", target + ".t") + pm.connectAttr(dm_node + ".outputRotate", target + ".r") + pm.connectAttr(dm_node + ".outputScale", target + ".s") + def connectLocalTransform(objects=None, s=True, r=True, t=True, *args): - """ - Connect scale, rotatio and translation. + """Connect scale, rotatio and translation. Args: - objects (None or list of dagNode, optional): If None will use the current selection. + objects (None or list of dagNode, optional): If None will use the + current selection. s (bool, optional): If True will connect the local scale r (bool, optional): If True will connect the local rotation t (bool, optional): If True will connect the local translation @@ -299,7 +299,7 @@ def connectLocalTransform(objects=None, s=True, r=True, t=True, *args): source = objects[0] targets = objects[1:] - else : + else: source = pm.selected()[0] targets = pm.selected()[1:] @@ -313,13 +313,18 @@ def connectLocalTransform(objects=None, s=True, r=True, t=True, *args): else: pm.displayWarning("Please at less select 2 objects. Source + target/s") + def connectUserDefinedChannels(source, targets): - """ - Connects the user defined channels between 2 objects with the same channels. Usually a copy of the same object. + """Connects the user defined channels + + Connects the user defined channels between 2 objects with the same + channels. Usually a copy of the same object. Args: source (dagNode): The dagNode with the source user defined channels - targets (list of dagNode): The list of dagNodes with the same user defined channels to be connected. + targets (list of dagNode): The list of dagNodes with the same user + defined channels to be connected. + """ udc = source.listAttr(ud=True) if not isinstance(targets, list): @@ -328,8 +333,10 @@ def connectUserDefinedChannels(source, targets): for t in targets: try: pm.connectAttr(c, t.attr(c.name().split(".")[-1])) - except: - pm.displayWarning("%s don't have contrapart channel on %s"%(c, t)) + except RuntimeError: + pm.displayWarning("%s don't have contrapart channel " + "on %s" % (c, t)) + def connectInvertSRT(source, target, srt="srt", axis="xyz"): """Connect the locat transformations with inverted values. @@ -337,8 +344,9 @@ def connectInvertSRT(source, target, srt="srt", axis="xyz"): Args: source (dagNode): The source driver dagNode target (dagNode): The target driven dagNode - srt (string, optional): String value for the scale(s), rotate(r), translation(t). Default - value is "srt". Posible values "s", "r", "t" or any combination + srt (string, optional): String value for the scale(s), rotate(r), + translation(t). Default value is "srt". Posible values "s", "r", + "t" or any combination axis (string, optional): String value for the axis. Default value is "xyz". Posible values "x", "y", "z" or any combination """ @@ -347,30 +355,33 @@ def connectInvertSRT(source, target, srt="srt", axis="xyz"): invList = [] targetList = [] for a in axis: - soureList.append(source.attr(t+a)) + soureList.append(source.attr(t + a)) invList.append(-1) - targetList.append(target.attr(t+a)) + targetList.append(target.attr(t + a)) if soureList: - nod.createMulNode(soureList, invList, targetList) + node.createMulNode(soureList, invList, targetList) + def replaceShape(source=None, targets=None, *args): - """ - Replace the shape of one object by another. + """Replace the shape of one object by another. Args: source (None, PyNode): Source object with the original shape. - targets (None, list of pyNode): Targets object to apply the source shape. + targets (None, list of pyNode): Targets object to apply the + source shape. *args: Maya's dummy Returns: - None: Return non if nothing is selected or the source and targets are none + None: Return non if nothing is selected or the source and targets + are none + """ if not source and not targets: - oSel = pm.selected() - if len(oSel) <2: - pm.displayWarning( "At less 2 objects must be selected") + oSel = pm.selected() + if len(oSel) < 2: + pm.displayWarning("At less 2 objects must be selected") return None else: source = oSel[0] @@ -382,20 +393,23 @@ def replaceShape(source=None, targets=None, *args): pm.delete(shape) pm.parent(source2.getShapes(), target, r=True, s=True) - for i, sh in enumerate(target.getShapes()): - pm.rename( sh, target.name() + "_%s_Shape"%str(i) ) + for i, sh in enumerate(target.getShapes()): + pm.rename(sh, target.name() + "_%s_Shape" % str(i)) pm.delete(source2) def matchPosfromBBox(*args): - """ - Match the position of one object, using the boundig box center of another object. + """Match the position usin bounding box of another object another. + + Match the position of one object, using the boundig box center of + another object. + """ source = pm.selected()[0] target = pm.selected()[1] - center = mnav.bboxCenter(source, radius=False) + center = meshNavigation.bboxCenter(source, radius=False) target.setTranslation(center, space="world") @@ -405,8 +419,10 @@ def matchPosfromBBox(*args): ####################################### def spaceJump(ref=None, space=None, *args): - """ - This function create a local reference space from another space in the hierarchy + """Space Jump gimmick + + This function create a local reference space from another space in the + hierarchy Args: ref (None, optional): Transform reference @@ -415,20 +431,27 @@ def spaceJump(ref=None, space=None, *args): Returns: pyNode: Transform - """ + """ if not ref and not space: - if len(pm.selected())==2: + if len(pm.selected()) == 2: ref = pm.selected()[0] space = pm.selected()[1] else: - pm.displayWarning("Please select 2 objects. Reference Space and Jump Space") + pm.displayWarning("Please select 2 objects. Reference Space " + "and Jump Space") return - refLocal = pri.addTransform(ref, ref.name()+"_SPACE_"+space.name(), space.getMatrix(worldSpace=True)) - spaceLocal = pri.addTransform(space, ref.name()+"_JUMP_"+space.name(), space.getMatrix(worldSpace=True)) + refLocal = primitive.addTransform(ref, + ref.name() + "_SPACE_" + space.name(), + space.getMatrix(worldSpace=True)) + spaceLocal = primitive.addTransform(space, + ref.name() + "_JUMP_" + space.name(), + space.getMatrix(worldSpace=True)) - aop.gear_mulmatrix_op(refLocal.attr("worldMatrix"), spaceLocal.attr("parentInverseMatrix[0]"), spaceLocal) + applyop.gear_mulmatrix_op(refLocal.attr("worldMatrix"), + spaceLocal.attr("parentInverseMatrix[0]"), + spaceLocal) pm.displayInfo("Jump Space for local space: " + space.name() + "created") return spaceLocal @@ -436,29 +459,41 @@ def spaceJump(ref=None, space=None, *args): def createInterpolateTransform(objects=None, blend=.5, *args): """ - Create space locator and apply gear_intmatrix_op, to interpolate the his pose between 2 selected objects. + Create space locator and apply gear_intmatrix_op, to interpolate the his + pose between 2 selected objects. Args: - objects (None or list of 2 dagNode, optional): The 2 dagNode to interpolate the transform. + objects (None or list of 2 dagNode, optional): The 2 dagNode to + interpolate the transform. blend (float, optional): The interpolation blend factor. *args: Maya's dummy Returns: - pyNode: The new transformation witht the interpolate matrix node applied. + pyNode: The new transformation witht the interpolate matrix o_node + applied. + """ if objects or len(pm.selected()) >= 2: if objects: refA = objects[0] refB = objects[1] - else : + else: refA = pm.selected()[0] refB = pm.selected()[1] - intMatrix = aop.gear_intmatrix_op(refA.attr("worldMatrix"), refB.attr("worldMatrix"), blend) - intTrans = pri.addTransform(refA, refA.name()+"_INTER_"+refB.name(), dt.Matrix()) - aop.gear_mulmatrix_op(intMatrix.attr("output"), intTrans.attr("parentInverseMatrix[0]"), intTrans) - pm.displayInfo("Interpolated Transform: " + intTrans.name() + " created") + intMatrix = applyop.gear_intmatrix_op(refA.attr("worldMatrix"), + refB.attr("worldMatrix"), + blend) + intTrans = primitive.addTransform( + refA, refA.name() + "_INTER_" + refB.name(), datatypes.Matrix()) + + applyop.gear_mulmatrix_op(intMatrix.attr("output"), + intTrans.attr("parentInverseMatrix[0]"), + intTrans) + + pm.displayInfo( + "Interpolated Transform: " + intTrans.name() + " created") else: pm.displayWarning("Please select 2 objects. ") return @@ -466,19 +501,28 @@ def createInterpolateTransform(objects=None, blend=.5, *args): return intTrans -def addBlendedJoint(oSel=None, compScale=True, blend=.5, name=None, select=True, *args): - """Create a joint that rotate 50% of the selected joint. This operation is done using a - pairBlend node. +def addBlendedJoint(oSel=None, + compScale=True, + blend=.5, + name=None, + select=True, + *args): + """Create and gimmick blended joint + + Create a joint that rotate 50% of the selected joint. This operation is + done using a pairBlend node. Args: oSel (None or joint, optional): If None will use the selected joints. - compScale (bool, optional): Set the compScale option of the blended joint. Default is True. + compScale (bool, optional): Set the compScale option of the blended + joint. Default is True. blend (float, optional): blend rotation value - name (None, optional): Name for the blended node + name (None, optional): Name for the blended o_node *args: Maya's dummy Returns: list: blended joints list + """ if not oSel: oSel = pm.selected() @@ -489,30 +533,30 @@ def addBlendedJoint(oSel=None, compScale=True, blend=.5, name=None, select=True, if isinstance(x, pm.nodetypes.Joint): parent = x.getParent() if name: - name = 'blend_'+name + name = 'blend_' + name else: - name = 'blend_'+x.name() + name = 'blend_' + x.name() jnt = pm.createNode('joint', n=name, p=x) jnt_list.append(jnt) jnt.attr('radius').set(1.5) pm.parent(jnt, parent) - node = pm.createNode("pairBlend") - node.attr("rotInterpolation").set(1) - pm.setAttr(node+".weight", blend) - pm.connectAttr(x+".translate", node+".inTranslate1") - pm.connectAttr(x+".translate", node+".inTranslate2") - pm.connectAttr(x+".rotate", node+".inRotate1") + o_node = pm.createNode("pairBlend") + o_node.attr("rotInterpolation").set(1) + pm.setAttr(o_node + ".weight", blend) + pm.connectAttr(x + ".translate", o_node + ".inTranslate1") + pm.connectAttr(x + ".translate", o_node + ".inTranslate2") + pm.connectAttr(x + ".rotate", o_node + ".inRotate1") - pm.connectAttr(node+".outRotateX", jnt+".rotateX") - pm.connectAttr(node+".outRotateY", jnt+".rotateY") - pm.connectAttr(node+".outRotateZ", jnt+".rotateZ") + pm.connectAttr(o_node + ".outRotateX", jnt + ".rotateX") + pm.connectAttr(o_node + ".outRotateY", jnt + ".rotateY") + pm.connectAttr(o_node + ".outRotateZ", jnt + ".rotateZ") - pm.connectAttr(node+".outTranslateX", jnt+".translateX") - pm.connectAttr(node+".outTranslateY", jnt+".translateY") - pm.connectAttr(node+".outTranslateZ", jnt+".translateZ") + pm.connectAttr(o_node + ".outTranslateX", jnt + ".translateX") + pm.connectAttr(o_node + ".outTranslateY", jnt + ".translateY") + pm.connectAttr(o_node + ".outTranslateZ", jnt + ".translateZ") - pm.connectAttr(x+".scale", jnt+".scale") + pm.connectAttr(x + ".scale", jnt + ".scale") jnt.attr("overrideEnabled").set(1) jnt.attr("overrideColor").set(17) @@ -522,28 +566,34 @@ def addBlendedJoint(oSel=None, compScale=True, blend=.5, name=None, select=True, try: defSet = pm.PyNode("rig_deformers_grp") - except: + except TypeError: pm.sets(n="rig_deformers_grp") defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=jnt) else: - pm.displayWarning("Blended Joint can't be added to: %s. Because is not ot type Joint"%x.name()) + pm.displayWarning("Blended Joint can't be added to: %s. Because " + "is not ot type Joint" % x.name()) if jnt_list and select: pm.select(jnt_list) return jnt_list + def addSupportJoint(oSel=None, select=True, *args): - """Add an extra joint to the blended joint. This is meant to be use with SDK for game style deformation. + """Add an extra joint to the blended joint. + + This is meant to be use with SDK for game style deformation. Args: - oSel (None or blended joint, optional): If None will use the current selection. + oSel (None or blended joint, optional): If None will use the current + selection. *args: Mays's dummy Returns: list: blended joints list + """ if not oSel: oSel = pm.selected() @@ -553,9 +603,11 @@ def addSupportJoint(oSel=None, select=True, *args): jnt_list = [] for x in oSel: if x.name().split("_")[0] == "blend": - children = [item for item in pm.selected()[0].listRelatives(ad=True, type="joint")] + children = [item for item + in pm.selected()[0].listRelatives(ad=True, + type="joint")] i = len(children) - name = x.name().replace("blend", "blendSupport_%s"%str(i)) + name = x.name().replace("blend", "blendSupport_%s" % str(i)) jnt = pm.createNode('joint', n=name, p=x) jnt_list.append(jnt) jnt.attr('radius').set(1.5) @@ -564,14 +616,15 @@ def addSupportJoint(oSel=None, select=True, *args): try: defSet = pm.PyNode("rig_deformers_grp") - except: + except pm.MayaNodeError: pm.sets(n="rig_deformers_grp") defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=jnt) else: - pm.displayWarning("Support Joint can't be added to: %s. Because is not blend joint"%x.name()) + pm.displayWarning("Support Joint can't be added to: %s. Because " + "is not blend joint" % x.name()) if jnt_list and select: pm.select(jnt_list) diff --git a/scripts/mgear/maya/rigbits/blendShapes.py b/scripts/mgear/maya/rigbits/blendShapes.py index be97c5e..9b5f555 100644 --- a/scripts/mgear/maya/rigbits/blendShapes.py +++ b/scripts/mgear/maya/rigbits/blendShapes.py @@ -1,66 +1,56 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - - - - +"""Rigbits blendshapes utilities and tools""" import pymel.core as pm - def getBlendShape(obj): + """Get the blendshape node of an object. + + Args: + obj (PyNode): The object with the blendshape node - if isinstance(obj, basestring): + Returns: + PyNode: The blendshape node + """ + if isinstance(obj, basestring): obj = pm.PyNode(obj) try: - if pm.nodeType(obj.getShape()) in ["mesh", "nurbsSurface", "nurbsCurve"]: + if (pm.nodeType(obj.getShape()) + in ["mesh", "nurbsSurface", "nurbsCurve"]): blendShape = pm.listHistory(obj.getShape(), type="blendShape")[0] - except: + except Exception: blendShape = None return blendShape def connectWithBlendshape(mesh, bst, wgt=1.0): + """Connect 2 geometries using blendshape node + + Args: + mesh (PyNode): The Object to apply the blendshape target + bst (PyNode): The Blendshape target + wgt (float, optional): Description + Returns: + PyNode: The blenshape node + """ if isinstance(mesh, basestring): - mesh = pm.PyNode(mesh) + mesh = pm.PyNode(mesh) if isinstance(bst, basestring): - bst = pm.PyNode(bst) + bst = pm.PyNode(bst) bsnode = getBlendShape(mesh) if bsnode: - wc = pm.blendShape( bsnode, q=True, wc=True ) - # print wc - pm.blendShape( bsnode, edit=True, t=(mesh, wc, bst, 1.0) ) + wc = pm.blendShape(bsnode, q=True, wc=True) + pm.blendShape(bsnode, edit=True, t=(mesh, wc, bst, 1.0)) bsnode.attr(bst.name()).set(wgt) bs = bsnode else: - bs = pm.blendShape(bst, mesh, name="_".join([mesh.name(), "blendShape"]), foc=True, w=[(0, 1.0)]) + bs = pm.blendShape(bst, + mesh, + name="_".join([mesh.name(), "blendShape"]), + foc=True, + w=[(0, 1.0)]) return bs diff --git a/scripts/mgear/maya/rigbits/channelWrangler.py b/scripts/mgear/maya/rigbits/channelWrangler.py index 80f58be..4571aa8 100644 --- a/scripts/mgear/maya/rigbits/channelWrangler.py +++ b/scripts/mgear/maya/rigbits/channelWrangler.py @@ -1,45 +1,18 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +"""Channel wrangler tool, to manage user channel""" import json -import mgear.maya.pyqt as gqt -import mgear.maya.attribute as att -import mgear.maya.rigbits.channelWranglerUI as channelWranglerUI - import pymel.core as pm - - from maya.app.general.mayaMixin import MayaQWidgetDockableMixin -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() + +from mgear.maya import attribute, pyqt +import mgear.maya.rigbits.channelWranglerUI as channelWranglerUI +from mgear.vendor.Qt import QtWidgets, QtCore ###################################################################### -## Functions +# Functions ###################################################################### @@ -58,14 +31,18 @@ def _applyChannelConfig(configDic): node = pm.PyNode(sourceNode) sourceAttrs = node.attr(attr) target = pm.PyNode(targetNode) - att.addProxyAttribute(sourceAttrs, target, proxyPolicy) + attribute.addProxyAttribute(sourceAttrs, target, proxyPolicy) # move else: - att.moveChannel(attr, sourceNode, targetNode, movePolicy) + attribute.moveChannel(attr, sourceNode, targetNode, movePolicy) + +# apply the configuration stored in a json file. This will be to use outside +# the interface + -# apply the configuration stored in a json file. This will be to use outside the interface def applyChannelConfig(filePath): - """apply the configuration stored in a json file. + """Apply the configuration stored in a json file. + This will be to use outside the interface Args: @@ -76,10 +53,11 @@ def applyChannelConfig(filePath): ###################################################################### -## Dialog +# Dialog ###################################################################### class cwUI(QtWidgets.QDialog, channelWranglerUI.Ui_Form): + """Initialize the UI""" def __init__(self, parent=None): super(cwUI, self).__init__(parent) @@ -87,23 +65,30 @@ def __init__(self, parent=None): class channelWrangler(MayaQWidgetDockableMixin, QtWidgets.QDialog): + """Channel wrangler UI""" + valueChanged = QtCore.Signal(int) def __init__(self, parent=None): self.toolName = "ChannelWranglerWindow" - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.cwUIInst = cwUI() self.table = self.cwUIInst.channelMapping_tableWidget self.headerTable = self.table.horizontalHeader() - # we try setSectionResizeMode for Pyside2 if attributeError setResizeMode for PySide + # we try setSectionResizeMode for Pyside2 if attributeError + # setResizeMode for PySide for i in [1, 4]: try: - self.headerTable.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch) - self.headerTable.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) + self.headerTable.setSectionResizeMode( + i, QtWidgets.QHeaderView.Stretch) + self.headerTable.setSectionResizeMode( + 0, QtWidgets.QHeaderView.ResizeToContents) except AttributeError: - self.headerTable.setResizeMode(i, QtWidgets.QHeaderView.Stretch) - self.headerTable.setResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) + self.headerTable.setResizeMode( + i, QtWidgets.QHeaderView.Stretch) + self.headerTable.setResizeMode( + 0, QtWidgets.QHeaderView.ResizeToContents) self.setup_channelWranglerWindow() self.create_layout() @@ -112,7 +97,7 @@ def __init__(self, parent=None): self.setAttribute(QtCore.Qt.WA_DeleteOnClose) def setup_channelWranglerWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -127,33 +112,56 @@ def create_layout(self): self.setLayout(self.cw_layout) ########################### - #create connections SIGNALS + # create connections SIGNALS ########################### def create_connections(self): - self.cwUIInst.channel_pushButton.clicked.connect(self.populateChannelLineEdit) - self.cwUIInst.target_pushButton.clicked.connect(self.populateTargetLineEdit) - self.cwUIInst.setRow_pushButton.clicked.connect(self.setRow) - self.cwUIInst.setMultiChannel_pushButton.clicked.connect(self.setMultiChannel) - self.cwUIInst.setMultiTarget_pushButton.clicked.connect(self.setMultiTarget) - self.cwUIInst.clearAll_pushButton.clicked.connect(self.clearAllRows) - self.cwUIInst.clearSelectedRows_pushButton.clicked.connect(self.clearSelectedRows) - self.cwUIInst.setMoveOp_pushButton.clicked.connect(self.setMoveOperator) - self.cwUIInst.setProxyOp_pushButton.clicked.connect(self.setProxyOperator) - self.cwUIInst.export_pushButton.clicked.connect(self.exportConfig) - self.cwUIInst.import_pushButton.clicked.connect(self.importConfig) - self.cwUIInst.apply_pushButton.clicked.connect(self.applyChannelConfig) + self.cwUIInst.channel_pushButton.clicked.connect( + self.populateChannelLineEdit) + self.cwUIInst.target_pushButton.clicked.connect( + self.populateTargetLineEdit) + self.cwUIInst.setRow_pushButton.clicked.connect( + self.setRow) + self.cwUIInst.setMultiChannel_pushButton.clicked.connect( + self.setMultiChannel) + self.cwUIInst.setMultiTarget_pushButton.clicked.connect( + self.setMultiTarget) + self.cwUIInst.clearAll_pushButton.clicked.connect( + self.clearAllRows) + self.cwUIInst.clearSelectedRows_pushButton.clicked.connect( + self.clearSelectedRows) + self.cwUIInst.setMoveOp_pushButton.clicked.connect( + self.setMoveOperator) + self.cwUIInst.setProxyOp_pushButton.clicked.connect( + self.setProxyOperator) + self.cwUIInst.export_pushButton.clicked.connect( + self.exportConfig) + self.cwUIInst.import_pushButton.clicked.connect( + self.importConfig) + self.cwUIInst.apply_pushButton.clicked.connect( + self.applyChannelConfig) ################## # helper functions ################## - # set the row item + def _setRowItem(self, rowPosition, itemIndex, itemContent): + """Set the row item + + Args: + rowPosition (Int): Row Index + itemIndex (Int): Item Index + itemContent (Str): Item content + + Returns: + QTableWidgetItem: Item + """ item = QtWidgets.QTableWidgetItem(itemContent) - self.table.setItem(rowPosition , itemIndex, item) + self.table.setItem(rowPosition, itemIndex, item) return item - # the source is set at the same time as the channel def _setRowChannel(self, rowPosition, channel, source): + """The source is set at the same time as the channel""" + self._setRowItem(rowPosition, 0, str(rowPosition).zfill(3)) self._setRowItem(rowPosition, 1, channel) self._setRowItem(rowPosition, 2, source) @@ -168,13 +176,13 @@ def _setRowTarget(self, rowPosition, target): """ self._setRowItem(rowPosition, 3, target) - def _addNewRow(self, channel=None, source=None, target=None): """Add new row to the table Args: channel (str, optional): The channel to add to the table. - source (str, optional): The source node that has the channel to move. + source (str, optional): The source node that has the channel + to move. target (str, optional): The destionation node for the channel. Returns: @@ -192,7 +200,8 @@ def _addNewRow(self, channel=None, source=None, target=None): operation_comboBox.setObjectName("operation") operation_comboBox.addItem("Move Channel") operation_comboBox.addItem("Proxy Channel") - operation_comboBox.SizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContentsOnFirstShow) + operation_comboBox.SizeAdjustPolicy( + QtWidgets.QComboBox.AdjustToContentsOnFirstShow) self.table.setCellWidget(rowPosition, 4, operation_comboBox) return rowPosition @@ -209,7 +218,6 @@ def _getSelectedRowsIndex(self): return index_list - def _buildConfigDict(self): """build the config dictionary from the UI data @@ -219,65 +227,78 @@ def _buildConfigDict(self): configDict = {} mapList = [] - # this list will contain only the 3 main items list to avoid duplicated rules + # this list will contain only the 3 main items list to avoid + # duplicated rules checkDuplicatedList = [] for i in range(self.table.rowCount()): - checkItems = [self.table.item(i , x+1).text() for x in range(3)] + checkItems = [self.table.item(i, x + 1).text() for x in range(3)] if checkItems not in checkDuplicatedList: checkDuplicatedList.append(checkItems) - rowItems = checkItems + [self.table.cellWidget(i, 4).currentIndex()] + rowItems = checkItems + [self.table.cellWidget( + i, 4).currentIndex()] mapList.append(rowItems) configDict["map"] = mapList - configDict["movePolicy"]= ["merge", "index", "fullName"][self.cwUIInst.movePolicy_comboBox.currentIndex()] - configDict["proxyPolicy"]= ["index", "fullName"][self.cwUIInst.proxyPolicy_comboBox.currentIndex()] + mpIndex = self.cwUIInst.movePolicy_comboBox.currentIndex() + configDict["movePolicy"] = ["merge", "index", "fullName"][mpIndex] + pxyIndex = self.cwUIInst.proxyPolicy_comboBox.currentIndex() + configDict["proxyPolicy"] = ["index", "fullName"][pxyIndex] return configDict - ########################### - #SLOTS + # SLOTS ########################### - #buttons + # buttons def populateChannelLineEdit(self): oSel = pm.selected() if oSel: - chan = att.getSelectedChannels(True)[0] - self.cwUIInst.channel_lineEdit.setText("{}.{}".format(oSel[0].name(), chan)) + chan = attribute.getSelectedChannels(True)[0] + self.cwUIInst.channel_lineEdit.setText( + "{}.{}".format(oSel[0].name(), chan)) def populateTargetLineEdit(self): oSel = pm.selected() if oSel: self.cwUIInst.target_lineEdit.setText(oSel[0].name()) - # sets a new row with the information on the channel and target lineEdit def setRow(self): + """Sets a new row + + Sets a new row with the information on the channel and target lineEdit + """ fullChanName = self.cwUIInst.channel_lineEdit.text() if fullChanName: sourceName, chanName = fullChanName.split(".") targetName = self.cwUIInst.target_lineEdit.text() - if fullChanName and targetName: - #TODO: checker for the new rule, be sure is not duplicated + if fullChanName and targetName: + # TODO: checker for the new rule, be sure is not duplicated self._addNewRow(chanName, sourceName, targetName) else: pm.displayWarning("Channel and target are not set properly") - # sets new rows from the selectec channels. 1 channel for each row. def setMultiChannel(self): + """sets new rows from the selectec channels. 1 channel for each row""" oSel = pm.selected() if oSel: - channels = att.getSelectedChannels(True) + channels = attribute.getSelectedChannels(True) if not channels: - channels = att.getSelectedObjectChannels(oSel[0], True, True) + channels = attribute.getSelectedObjectChannels( + oSel[0], True, True) for ch in channels: self._addNewRow(ch, oSel[0].name(), oSel[0].name()) else: - pm.displayWarning("To set the source, you need to select at one source object") + pm.displayWarning("To set the source, you need to select at " + "one source object") - # set the target colum for the selected rows - # if only one object is selected will populate all the rows with the same object - # if there is more that one object selected, will iterate the selection adding one object to each row def setMultiTarget(self): + """set the target colum for the selected rows + + If only one object is selected will populate all the rows with the + same object + If there is more that one object selected, will iterate the selection + adding one object to each row + """ oSel = pm.selected() index_list = self._getSelectedRowsIndex() @@ -293,33 +314,31 @@ def setMultiTarget(self): for i in reversed(range(self.table.rowCount())): self._setRowTarget(i, oSel[0].name()) else: - pm.displayWarning("To set the target, you need to select at less one target object") + pm.displayWarning("To set the target, you need to select at less" + " one target object") - # clear selected rows def clearSelectedRows(self): - """Clear selected rows from the table - """ + """Clear selected rows from the table""" + index_list = self._getSelectedRowsIndex() for index in index_list: self.table.removeRow(index.row()) - # for x in range(4): - # self.table.item(index, x).clear() - # self.table.cellWidget(index, 4).deleteLater() - - # clear all the rows def clearAllRows(self): + """Clear all the rows""" + self.table.clear() for i in reversed(range(self.table.rowCount())): self.table.removeRow(i) - - # export channelWrangler configuration def exportConfig(self): + """Export channelWrangler configuration""" configDict = self._buildConfigDict() data_string = json.dumps(configDict, indent=4, sort_keys=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, - fileFilter='Channel Wrangler Configuration .cwc (*%s)' %".cwc") + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=0, + fileFilter='Channel Wrangler Configuration .cwc (*%s)' % ".cwc") if not filePath: return if not isinstance(filePath, basestring): @@ -328,60 +347,78 @@ def exportConfig(self): f.write(data_string) f.close() - - # import channel wrangler configuration def importConfig(self): - # TODO: if import dict ask to add to the current configuration or replace. + """Import channel wrangler configuration""" + + # TODO: if import dict ask to add to the current + # configuration or replace. startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2( dialogStyle=2, fileMode=1, startingDirectory=startDir, - fileFilter='Channel Wrangler Configuration .cwc (*%s)' %".cwc") + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + fileFilter='Channel Wrangler Configuration .cwc (*%s)' % ".cwc") if not filePath: return if not isinstance(filePath, basestring): filePath = filePath[0] configDict = json.load(open(filePath)) - # also ask for proxy and move policy if is not the same when we add to the current list + # also ask for proxy and move policy if is not the same when we add to + # the current list if self.table.rowCount(): - option = pm.confirmDialog( title='Channel Wrangler Configuration Import Style', - message='Do you want to repace current configuration or add it?\n\ - if add the move policy and proxy policy will not change', - button=['Replace','Add', 'Cancel'], defaultButton='Reaplace', - cancelButton='Cancel', dismissString='Cancel' ) + option = pm.confirmDialog( + title='Channel Wrangler Configuration Import Style', + message='Do you want to repace current configuration or' + ' add it?\n if add the move policy and proxy policy' + ' will not change', + button=['Replace', 'Add', 'Cancel'], + defaultButton='Reaplace', + cancelButton='Cancel', + dismissString='Cancel') else: option = "Replace" if option == "Replace": self.clearAllRows() - #set move policy + # set move policy indexList = ["merge", "index", "fullName"] - self.cwUIInst.movePolicy_comboBox.setCurrentIndex(indexList.index(configDict["movePolicy"])) + self.cwUIInst.movePolicy_comboBox.setCurrentIndex( + indexList.index(configDict["movePolicy"])) - #set proxy policy + # set proxy policy indexList = ["index", "fullName"] - self.cwUIInst.proxyPolicy_comboBox.setCurrentIndex(indexList.index(configDict["proxyPolicy"])) + self.cwUIInst.proxyPolicy_comboBox.setCurrentIndex( + indexList.index(configDict["proxyPolicy"])) for rule in configDict["map"]: - row_pos = self._addNewRow(channel=rule[0], source=rule[1], target=rule[2]) + row_pos = self._addNewRow(channel=rule[0], + source=rule[1], + target=rule[2]) + oCombo = self.table.cellWidget(row_pos, 4) oCombo.setCurrentIndex(rule[3]) - # apply the current configuration in the dialog def applyChannelConfig(self): with pm.UndoChunk(): configDict = self._buildConfigDict() - #TODO add checker to avoid error if the datas is not found in the scene + # TODO add checker to avoid error if the datas is not + # found in the scene for rule in configDict["map"]: # proxy if rule[3]: source = pm.PyNode("{}.{}".format(rule[1], rule[0])) target = pm.PyNode(rule[2]) - att.addProxyAttribute(source, target, configDict["proxyPolicy"]) - #move + attribute.addProxyAttribute(source, + target, + configDict["proxyPolicy"]) + # move else: source = pm.PyNode(rule[1]) target = pm.PyNode(rule[2]) - att.moveChannel( rule[0], source, target, configDict["movePolicy"]) - + attribute.moveChannel(rule[0], + source, + target, + configDict["movePolicy"]) def _setOperator(self, operator): """set the channel wrangle operator @@ -406,21 +443,22 @@ def _setOperator(self, operator): oCombo = self.table.cellWidget(i, 4) oCombo.setCurrentIndex(operator) - def setMoveOperator(self): """set the channel wrangler operator to Move """ self._setOperator(0) - def setProxyOperator(self): """set the channel wrangler operator to Proxy """ self._setOperator(1) + def openChannelWrangler(*args): - gqt.showDialog(channelWrangler) + pyqt.showDialog(channelWrangler) #################################### + + if __name__ == "__main__": - gqt.showDialog(channelWrangler) + pyqt.showDialog(channelWrangler) diff --git a/scripts/mgear/maya/rigbits/channelWranglerUI.py b/scripts/mgear/maya/rigbits/channelWranglerUI.py index 0a26b6f..1040e49 100644 --- a/scripts/mgear/maya/rigbits/channelWranglerUI.py +++ b/scripts/mgear/maya/rigbits/channelWranglerUI.py @@ -1,33 +1,9 @@ -# MGEAR is under the terms of the MIT License +from mgear.maya import pyqt +from mgear.vendor.Qt import QtCore, QtWidgets -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -import mgear.maya.pyqt as gqt -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() class Ui_Form(object): + def setupUi(self, Form): Form.setObjectName("Form") Form.resize(832, 537) @@ -193,35 +169,35 @@ def setupUi(self, Form): QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): - Form.setWindowTitle(gqt.fakeTranslate("Form", "Form", None, -1)) + Form.setWindowTitle(pyqt.fakeTranslate("Form", "Form", None, -1)) self.channelMapping_tableWidget.setSortingEnabled(False) - self.channelMapping_tableWidget.horizontalHeaderItem(0).setText(gqt.fakeTranslate("Form", "Idx", None, -1)) - self.channelMapping_tableWidget.horizontalHeaderItem(1).setText(gqt.fakeTranslate("Form", "Channel", None, -1)) - self.channelMapping_tableWidget.horizontalHeaderItem(2).setText(gqt.fakeTranslate("Form", "Source", None, -1)) - self.channelMapping_tableWidget.horizontalHeaderItem(3).setText(gqt.fakeTranslate("Form", "Target", None, -1)) - self.channelMapping_tableWidget.horizontalHeaderItem(4).setText(gqt.fakeTranslate("Form", "operation", None, -1)) - self.export_pushButton.setText(gqt.fakeTranslate("Form", "Export", None, -1)) - self.import_pushButton.setText(gqt.fakeTranslate("Form", "Import", None, -1)) - self.apply_pushButton.setText(gqt.fakeTranslate("Form", "Apply", None, -1)) - self.groupBox.setTitle(gqt.fakeTranslate("Form", "Channel", None, -1)) - self.channel_pushButton.setText(gqt.fakeTranslate("Form", "<<<", None, -1)) - self.groupBox_2.setTitle(gqt.fakeTranslate("Form", "Target", None, -1)) - self.target_pushButton.setText(gqt.fakeTranslate("Form", "<<<", None, -1)) - self.setRow_pushButton.setText(gqt.fakeTranslate("Form", "Set Row", None, -1)) - self.setMultiChannel_pushButton.setText(gqt.fakeTranslate("Form", "Set Multi Channel", None, -1)) - self.setMultiTarget_pushButton.setText(gqt.fakeTranslate("Form", "Set Multi Target", None, -1)) - self.clearSelectedRows_pushButton.setText(gqt.fakeTranslate("Form", "Clear Selected Rows", None, -1)) - self.clearAll_pushButton.setText(gqt.fakeTranslate("Form", "Clear All", None, -1)) - self.setMoveOp_pushButton.setText(gqt.fakeTranslate("Form", "Set Move Operation", None, -1)) - self.setProxyOp_pushButton.setText(gqt.fakeTranslate("Form", "Set Proxy Operation", None, -1)) - self.groupBox_3.setTitle(gqt.fakeTranslate("Form", "Move Duplicated Channel Policy", None, -1)) - self.movePolicy_comboBox.setToolTip(gqt.fakeTranslate("Form", "

Set the duplicate channel policy when we use proxy channel operation.

-Merge: If the channel is already in the target object the new channel creationg will be skipped and the output channels will be reconnected to the previous existing channel

-Index: If the channel is already in the target object, the new proxy channel will add an index number to avoid the name clashing.

example:

"ik_fk_blend" will be renamed "ik_fk_blend0", "ik_fk_blend1","ik_fk_blend2", etc...

-Full Name: If the channel is already in the target object, the new channel will be renamed using the source node name as a prefix

", None, -1)) - self.movePolicy_comboBox.setItemText(0, gqt.fakeTranslate("Form", "Merge", None, -1)) - self.movePolicy_comboBox.setItemText(1, gqt.fakeTranslate("Form", "Index", None, -1)) - self.movePolicy_comboBox.setItemText(2, gqt.fakeTranslate("Form", "Full Name", None, -1)) - self.groupBox_4.setTitle(gqt.fakeTranslate("Form", "Proxy Duplicated Channel Policy", None, -1)) - self.proxyPolicy_comboBox.setToolTip(gqt.fakeTranslate("Form", "

Set the duplicate channel policy when we use proxy channel operation.

-Index: If the channel is already in the target object, the new proxy channel will add an index number to avoid the name clashing.

example:

"ik_fk_blend" will be renamed "ik_fk_blend0", "ik_fk_blend1","ik_fk_blend2", etc...

-Full Name: If the channel is already in the target object, the new channel will be renamed using the source node name as a prefix

", None, -1)) - self.proxyPolicy_comboBox.setItemText(0, gqt.fakeTranslate("Form", "Index", None, -1)) - self.proxyPolicy_comboBox.setItemText(1, gqt.fakeTranslate("Form", "Full Name", None, -1)) + self.channelMapping_tableWidget.horizontalHeaderItem(0).setText(pyqt.fakeTranslate("Form", "Idx", None, -1)) + self.channelMapping_tableWidget.horizontalHeaderItem(1).setText(pyqt.fakeTranslate("Form", "Channel", None, -1)) + self.channelMapping_tableWidget.horizontalHeaderItem(2).setText(pyqt.fakeTranslate("Form", "Source", None, -1)) + self.channelMapping_tableWidget.horizontalHeaderItem(3).setText(pyqt.fakeTranslate("Form", "Target", None, -1)) + self.channelMapping_tableWidget.horizontalHeaderItem(4).setText(pyqt.fakeTranslate("Form", "operation", None, -1)) + self.export_pushButton.setText(pyqt.fakeTranslate("Form", "Export", None, -1)) + self.import_pushButton.setText(pyqt.fakeTranslate("Form", "Import", None, -1)) + self.apply_pushButton.setText(pyqt.fakeTranslate("Form", "Apply", None, -1)) + self.groupBox.setTitle(pyqt.fakeTranslate("Form", "Channel", None, -1)) + self.channel_pushButton.setText(pyqt.fakeTranslate("Form", "<<<", None, -1)) + self.groupBox_2.setTitle(pyqt.fakeTranslate("Form", "Target", None, -1)) + self.target_pushButton.setText(pyqt.fakeTranslate("Form", "<<<", None, -1)) + self.setRow_pushButton.setText(pyqt.fakeTranslate("Form", "Set Row", None, -1)) + self.setMultiChannel_pushButton.setText(pyqt.fakeTranslate("Form", "Set Multi Channel", None, -1)) + self.setMultiTarget_pushButton.setText(pyqt.fakeTranslate("Form", "Set Multi Target", None, -1)) + self.clearSelectedRows_pushButton.setText(pyqt.fakeTranslate("Form", "Clear Selected Rows", None, -1)) + self.clearAll_pushButton.setText(pyqt.fakeTranslate("Form", "Clear All", None, -1)) + self.setMoveOp_pushButton.setText(pyqt.fakeTranslate("Form", "Set Move Operation", None, -1)) + self.setProxyOp_pushButton.setText(pyqt.fakeTranslate("Form", "Set Proxy Operation", None, -1)) + self.groupBox_3.setTitle(pyqt.fakeTranslate("Form", "Move Duplicated Channel Policy", None, -1)) + self.movePolicy_comboBox.setToolTip(pyqt.fakeTranslate("Form", "

Set the duplicate channel policy when we use proxy channel operation.

-Merge: If the channel is already in the target object the new channel creationg will be skipped and the output channels will be reconnected to the previous existing channel

-Index: If the channel is already in the target object, the new proxy channel will add an index number to avoid the name clashing.

example:

"ik_fk_blend" will be renamed "ik_fk_blend0", "ik_fk_blend1","ik_fk_blend2", etc...

-Full Name: If the channel is already in the target object, the new channel will be renamed using the source node name as a prefix

", None, -1)) + self.movePolicy_comboBox.setItemText(0, pyqt.fakeTranslate("Form", "Merge", None, -1)) + self.movePolicy_comboBox.setItemText(1, pyqt.fakeTranslate("Form", "Index", None, -1)) + self.movePolicy_comboBox.setItemText(2, pyqt.fakeTranslate("Form", "Full Name", None, -1)) + self.groupBox_4.setTitle(pyqt.fakeTranslate("Form", "Proxy Duplicated Channel Policy", None, -1)) + self.proxyPolicy_comboBox.setToolTip(pyqt.fakeTranslate("Form", "

Set the duplicate channel policy when we use proxy channel operation.

-Index: If the channel is already in the target object, the new proxy channel will add an index number to avoid the name clashing.

example:

"ik_fk_blend" will be renamed "ik_fk_blend0", "ik_fk_blend1","ik_fk_blend2", etc...

-Full Name: If the channel is already in the target object, the new channel will be renamed using the source node name as a prefix

", None, -1)) + self.proxyPolicy_comboBox.setItemText(0, pyqt.fakeTranslate("Form", "Index", None, -1)) + self.proxyPolicy_comboBox.setItemText(1, pyqt.fakeTranslate("Form", "Full Name", None, -1)) from mgear.maya.rigbits.widgets import TableWidgetDragRowsChannelWrangler diff --git a/scripts/mgear/maya/rigbits/cycleTweaks.py b/scripts/mgear/maya/rigbits/cycleTweaks.py index 3b2f4d5..7625c5a 100644 --- a/scripts/mgear/maya/rigbits/cycleTweaks.py +++ b/scripts/mgear/maya/rigbits/cycleTweaks.py @@ -1,40 +1,15 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +"""Cycle Tweaks module +This module content the tools and procedures to rig tweaks with a benigne cycle +""" import pymel.core as pm -import pymel.core.datatypes as dt +import pymel.core.datatypes as datatypes -import mgear.maya.node as nod -import mgear.maya.skin as ski -import mgear.maya.icon as ico +from mgear.maya import icon, skin, node +from .. import rigbits +from . import rivet, blendShapes -import mgear.maya.rigbits as rigbits -import mgear.maya.rigbits.rivet as rvt -import mgear.maya.rigbits.blendShapes as bshp def inverseTranslateParent(obj): """Invert the parent transformation @@ -45,10 +20,11 @@ def inverseTranslateParent(obj): if not isinstance(obj, list): obj = [obj] for x in obj: - nod.createMulNode([x.attr("tx"), x.attr("ty"), x.attr("tz")], [-1, -1, -1], - [x.getParent().attr("tx"), x.getParent().attr("ty"), x.getParent().attr("tz")]) - - + node.createMulNode([x.attr("tx"), x.attr("ty"), x.attr("tz")], + [-1, -1, -1], + [x.getParent().attr("tx"), + x.getParent().attr("ty"), + x.getParent().attr("tz")]) def initCycleTweakBase(outMesh, baseMesh, rotMesh, transMesh, staticJnt=None): @@ -57,22 +33,48 @@ def initCycleTweakBase(outMesh, baseMesh, rotMesh, transMesh, staticJnt=None): Args: outMesh (Mesh): The output mesh after the tweak deformation baseMesh (Mesh): The base mesh for the cycle tweak. - rotMesh (Mesh): The mesh that will support the rotation transformations for the cycle tweak - transMesh (Mesh): The mesh that will support the translation and scale transformations for the cycle tweak - staticJnt (None or joint, optional): The static joint for the static vertex. + rotMesh (Mesh): The mesh that will support the rotation + transformations for the cycle tweak + transMesh (Mesh): The mesh that will support the translation and + scale transformations for the cycle tweak + staticJnt (None or joint, optional): The static joint for the + static vertex. """ - bshp.connectWithBlendshape(rotMesh, baseMesh ) - bshp.connectWithBlendshape(transMesh, rotMesh) - bshp.connectWithBlendshape(outMesh, transMesh) - - #Init skinClusters - pm.skinCluster(staticJnt, rotMesh, tsb=True, nw=2, n='%s_skinCluster'%rotMesh.name()) - pm.skinCluster(staticJnt, transMesh, tsb=True, nw=2, n='%s_skinCluster'%transMesh.name()) - -def cycleTweak(name, edgePair, mirrorAxis, baseMesh, rotMesh, transMesh, setupParent, ctlParent, jntOrg=None, grp=None, - iconType="square", size=.025, color=13, ro=dt.Vector(1.5708,0,1.5708/2)): + blendShapes.connectWithBlendshape(rotMesh, baseMesh) + blendShapes.connectWithBlendshape(transMesh, rotMesh) + blendShapes.connectWithBlendshape(outMesh, transMesh) + + # Init skinClusters + pm.skinCluster(staticJnt, + rotMesh, + tsb=True, + nw=2, + n='%s_skinCluster' % rotMesh.name()) + pm.skinCluster(staticJnt, + transMesh, + tsb=True, + nw=2, + n='%s_skinCluster' % transMesh.name()) + + +def cycleTweak(name, + edgePair, + mirrorAxis, + baseMesh, + rotMesh, + transMesh, + setupParent, + ctlParent, + jntOrg=None, + grp=None, + iconType="square", + size=.025, + color=13, + ro=datatypes.Vector(1.5708, 0, 1.5708 / 2)): """The command to create a cycle tweak. - A cycle tweak is a tweak that cycles to the parent position but doesn't create a cycle of dependency. This type of tweaks + + A cycle tweak is a tweak that cycles to the parent position but doesn't + create a cycle of dependency. This type of tweaks are very useful to create facial tweakers. Args: @@ -80,8 +82,10 @@ def cycleTweak(name, edgePair, mirrorAxis, baseMesh, rotMesh, transMesh, setupPa edgePair (list): List of edge pair to attach the cycle tweak mirrorAxis (bool): If true, will mirror the x axis behaviour. baseMesh (Mesh): The base mesh for the cycle tweak. - rotMesh (Mesh): The mesh that will support the rotation transformations for the cycle tweak - transMesh (Mesh): The mesh that will support the translation and scale transformations for the cycle tweak + rotMesh (Mesh): The mesh that will support the rotation transformations + for the cycle tweak + transMesh (Mesh): The mesh that will support the translation and scale + transformations for the cycle tweak setupParent (dagNode): The parent for the setup objects ctlParent (dagNode): The parent for the control objects jntOrg (None or dagNode, optional): The parent for the joints @@ -95,43 +99,68 @@ def cycleTweak(name, edgePair, mirrorAxis, baseMesh, rotMesh, transMesh, setupPa multi: the tweak control and the list of related joints. """ # rotation sctructure - rRivet = rvt.rivet() - rBase = rRivet.create(baseMesh, edgePair[0], edgePair[1], setupParent, name + "_rRivet_loc") + rRivet = rivet.rivet() + rBase = rRivet.create( + baseMesh, edgePair[0], edgePair[1], setupParent, name + "_rRivet_loc") pos = rBase.getTranslation(space="world") # translation structure - tRivetParent = pm.createNode("transform", n=name+"_tRivetBase", p=ctlParent) - tRivetParent.setMatrix(dt.Matrix(), worldSpace=True) - tRivet = rvt.rivet() - tBase = tRivet.create(transMesh, edgePair[0], edgePair[1], tRivetParent, name + "_tRivet_loc") - - #create the control - tweakBase = pm.createNode("transform", n=name+"_tweakBase", p=ctlParent) - tweakBase.setMatrix(dt.Matrix(), worldSpace=True) - tweakNpo = pm.createNode("transform", n=name+"_tweakNpo", p=tweakBase) + tRivetParent = pm.createNode("transform", + n=name + "_tRivetBase", + p=ctlParent) + tRivetParent.setMatrix(datatypes.Matrix(), worldSpace=True) + tRivet = rivet.rivet() + tBase = tRivet.create(transMesh, + edgePair[0], + edgePair[1], + tRivetParent, + name + "_tRivet_loc") + + # create the control + tweakBase = pm.createNode("transform", n=name + "_tweakBase", p=ctlParent) + tweakBase.setMatrix(datatypes.Matrix(), worldSpace=True) + tweakNpo = pm.createNode("transform", n=name + "_tweakNpo", p=tweakBase) tweakBase.setTranslation(pos, space="world") - tweakCtl = ico.create(tweakNpo, name+"_ctl", tweakNpo.getMatrix(worldSpace=True), color, iconType, w=size, d=size, ro=ro) + tweakCtl = icon.create(tweakNpo, + name + "_ctl", + tweakNpo.getMatrix(worldSpace=True), + color, + iconType, + w=size, + d=size, + ro=ro) inverseTranslateParent(tweakCtl) - pm.pointConstraint(tBase, tweakBase ) - - #rot - rotBase = pm.createNode("transform", n=name+"_rotBase", p=setupParent) - rotBase.setMatrix(dt.Matrix(), worldSpace=True) - rotNPO = pm.createNode("transform", n=name+"_rot_npo", p=rotBase) - rotJointDriver = pm.createNode("transform", n=name+"_rotJointDriver", p=rotNPO) + pm.pointConstraint(tBase, tweakBase) + + # rot + rotBase = pm.createNode("transform", n=name + "_rotBase", p=setupParent) + rotBase.setMatrix(datatypes.Matrix(), worldSpace=True) + rotNPO = pm.createNode("transform", n=name + "_rot_npo", p=rotBase) + rotJointDriver = pm.createNode("transform", + n=name + "_rotJointDriver", + p=rotNPO) rotBase.setTranslation(pos, space="world") - nod.createMulNode([rotNPO.attr("tx"), rotNPO.attr("ty"), rotNPO.attr("tz")], [-1, -1, -1], - [rotJointDriver.attr("tx"), rotJointDriver.attr("ty"), rotJointDriver.attr("tz")]) - pm.pointConstraint(rBase, rotNPO ) - pm.connectAttr(tweakCtl.r, rotNPO.r ) - pm.connectAttr(tweakCtl.s, rotNPO.s ) - - # tra - posNPO = pm.createNode("transform", n=name+"_pos_npo", p=setupParent) - posJointDriver = pm.createNode("transform", n=name+"_posJointDriver", p=posNPO) + + node.createMulNode([rotNPO.attr("tx"), + rotNPO.attr("ty"), + rotNPO.attr("tz")], + [-1, -1, -1], + [rotJointDriver.attr("tx"), + rotJointDriver.attr("ty"), + rotJointDriver.attr("tz")]) + + pm.pointConstraint(rBase, rotNPO) + pm.connectAttr(tweakCtl.r, rotNPO.r) + pm.connectAttr(tweakCtl.s, rotNPO.s) + + # transform + posNPO = pm.createNode("transform", n=name + "_pos_npo", p=setupParent) + posJointDriver = pm.createNode("transform", + n=name + "_posJointDriver", + p=posNPO) posNPO.setTranslation(pos, space="world") - pm.connectAttr(tweakCtl.t, posJointDriver.t ) + pm.connectAttr(tweakCtl.t, posJointDriver.t) # mirror behaviour if mirrorAxis: @@ -142,18 +171,18 @@ def cycleTweak(name, edgePair, mirrorAxis, baseMesh, rotMesh, transMesh, setupPa rotBase.attr("sz").set(-1) posNPO.attr("sz").set(-1) - #create joints - rJoint = rigbits.addJnt(rotJointDriver, jntOrg, True, grp) - tJoint = rigbits.addJnt(posJointDriver, jntOrg, True, grp) + # create joints + rJoint = rigbits.addJnt(rotJointDriver, jntOrg, True, grp) + tJoint = rigbits.addJnt(posJointDriver, jntOrg, True, grp) # add to rotation skin # TODO: add checker to see if joint is in the skincluster. - rSK = ski.getSkinCluster(rotMesh) - pm.skinCluster(rSK, e=True, ai=rJoint, lw=True, wt=0) + rSK = skin.getSkinCluster(rotMesh) + pm.skinCluster(rSK, e=True, ai=rJoint, lw=True, wt=0) # add to transform skin # TODO: add checker to see if joint is in the skincluster. - tSK = ski.getSkinCluster(transMesh) - pm.skinCluster(tSK, e=True, ai=tJoint, lw=True, wt=0) + tSK = skin.getSkinCluster(transMesh) + pm.skinCluster(tSK, e=True, ai=tJoint, lw=True, wt=0) - return tweakCtl, [rJoint, tJoint ] + return tweakCtl, [rJoint, tJoint] diff --git a/scripts/mgear/maya/rigbits/ghost.py b/scripts/mgear/maya/rigbits/ghost.py index de0da1b..69d07fd 100644 --- a/scripts/mgear/maya/rigbits/ghost.py +++ b/scripts/mgear/maya/rigbits/ghost.py @@ -1,44 +1,20 @@ -# MGEAR is under the terms of the MIT License +"""Rigbits Ghost module -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -#maya +Helper tools to create layered controls rigs +""" import pymel.core as pm -#mgear -import mgear.maya.primitive as pri -import mgear.maya.node as nod -#rigbits -import mgear.maya.rigbits as rigbits +from mgear.maya import node, primitive + +from .. import rigbits def createGhostCtl(ctl, parent=None, connect=True): - """ - Create a duplicate of the control and rename the original with _ghost. Later connect the local transforms and the - Channels. + """Create a duplicated Ghost control + + Create a duplicate of the control and rename the original with _ghost. + Later connect the local transforms and the Channels. This is useful to connect local rig controls with the final rig control. Args: @@ -49,28 +25,31 @@ def createGhostCtl(ctl, parent=None, connect=True): pyNode: The new created control """ - if isinstance(ctl, basestring): + if isinstance(ctl, basestring): ctl = pm.PyNode(ctl) if parent: - if isinstance(parent, basestring): + if isinstance(parent, basestring): parent = pm.PyNode(parent) grps = ctl.listConnections(t="objectSet") for grp in grps: grp.remove(ctl) oName = ctl.name() pm.rename(ctl, oName + "_ghost") - newCtl = pm.duplicate(ctl, po=True)[0] + newCtl = pm.duplicate(ctl, po=True)[0] pm.rename(newCtl, oName) source2 = pm.duplicate(ctl)[0] - for shape in source2.getShapes(): + for shape in source2.getShapes(): pm.parent(shape, newCtl, r=True, s=True) - pm.rename( shape, newCtl.name() + "Shape" ) + pm.rename(shape, newCtl.name() + "Shape") pm.parent(shape, newCtl, r=True, s=True) pm.delete(source2) if parent: pm.parent(newCtl, parent) - oTra = pm.createNode("transform", n= newCtl.name() + "_npo", p=parent, ss=True) - oTra.setMatrix(ctl.getParent().getMatrix(worldSpace=True), worldSpace=True) + oTra = pm.createNode("transform", + n=newCtl.name() + "_npo", + p=parent, ss=True) + oTra.setMatrix(ctl.getParent().getMatrix(worldSpace=True), + worldSpace=True) pm.parent(newCtl, oTra) if connect: rigbits.connectLocalTransform([newCtl, ctl]) @@ -81,9 +60,9 @@ def createGhostCtl(ctl, parent=None, connect=True): def createDoritoGhostCtl(ctl, parent=None): - """ - Create a duplicate of the dorito/tweak and rename the original with _ghost. Later connect the local transforms and the - Channels. + """ Create a duplicated Ghost control for doritos + Create a duplicate of the dorito/tweak and rename the original with _ghost. + Later connect the local transforms and the Channels. This is useful to connect local rig controls with the final rig control. Args: @@ -91,18 +70,25 @@ def createDoritoGhostCtl(ctl, parent=None): parent (dagNode): Parent for the new created control """ - if isinstance(ctl, basestring): + if isinstance(ctl, basestring): ctl = pm.PyNode(ctl) if parent: - if isinstance(parent, basestring): + if isinstance(parent, basestring): parent = pm.PyNode(parent) doritoCtl = createGhostCtl(ctl, parent) doritoParent = doritoCtl.getParent() ghostBaseParent = ctl.getParent(2) - oTra = pm.createNode("transform", n= ghostBaseParent.name() + "_npo", p=ghostBaseParent.getParent(), ss=True) + oTra = pm.createNode("transform", + n=ghostBaseParent.name() + "_npo", + p=ghostBaseParent.getParent(), + ss=True) + oTra.setTransformation(ghostBaseParent.getMatrix()) pm.parent(ghostBaseParent, oTra) - oTra = pm.createNode("transform", n= doritoParent.name() + "_npo", p=doritoParent.getParent(), ss=True) + oTra = pm.createNode("transform", + n=doritoParent.name() + "_npo", + p=doritoParent.getParent(), + ss=True) oTra.setTransformation(doritoParent.getMatrix()) pm.parent(doritoParent, oTra) @@ -118,10 +104,10 @@ def ghostSlider(ghostControls, surface, sliderParent): surface (Surface): The NURBS surface sliderParent (dagNode): The parent for the slider. """ - if not isinstance(ghostControls, list): + if not isinstance(ghostControls, list): ghostControls = [ghostControls] - #Seleccionamos los controles Ghost que queremos mover sobre el surface + # Seleccionamos los controles Ghost que queremos mover sobre el surface surfaceShape = surface.getShape() @@ -129,43 +115,56 @@ def ghostSlider(ghostControls, surface, sliderParent): ctl = pm.listConnections(ctlGhost, t="transform")[-1] t = ctl.getMatrix(worldSpace=True) - gDriver = pri.addTransform(ctlGhost.getParent(), ctl.name()+"_slideDriver", t) + gDriver = primitive.addTransform(ctlGhost.getParent(), + ctl.name() + "_slideDriver", + t) try: pm.connectAttr(ctl + ".translate", gDriver + ".translate") pm.disconnectAttr(ctl + ".translate", ctlGhost + ".translate") - except: + except RuntimeError: pass try: pm.connectAttr(ctl + ".scale", gDriver + ".scale") pm.disconnectAttr(ctl + ".scale", ctlGhost + ".scale") - except: + except RuntimeError: pass try: pm.connectAttr(ctl + ".rotate", gDriver + ".rotate") pm.disconnectAttr(ctl + ".rotate", ctlGhost + ".rotate") - except: + except RuntimeError: pass - oParent = ctlGhost.getParent() - npoName = "_".join(ctlGhost.name().split("_")[:-1]) + "_npo" - oTra = pm.PyNode(pm.createNode("transform", n=npoName, p=oParent, ss=True)) + npoName = "_".join(ctlGhost.name().split("_")[:-1]) + "_npo" + oTra = pm.PyNode(pm.createNode("transform", + n=npoName, + p=oParent, + ss=True)) oTra.setTransformation(ctlGhost.getMatrix()) pm.parent(ctlGhost, oTra) - slider = pri.addTransform(sliderParent, ctl.name()+"_slideDriven", t) + slider = primitive.addTransform(sliderParent, + ctl.name() + "_slideDriven", + t) - #connexion + # connexion - dm_node = nod.createDecomposeMatrixNode(gDriver.attr("worldMatrix[0]")) + dm_node = node.createDecomposeMatrixNode( + gDriver.attr("worldMatrix[0]")) cps_node = pm.createNode("closestPointOnSurface") dm_node.attr("outputTranslate") >> cps_node.attr("inPosition") surfaceShape.attr("worldSpace[0]") >> cps_node.attr("inputSurface") cps_node.attr("position") >> slider.attr("translate") - pm.normalConstraint(surfaceShape, slider, aimVector=[0,0,1] , upVector=[0,1,0], worldUpType="objectrotation", worldUpVector=[0,1,0], worldUpObject=gDriver) + pm.normalConstraint(surfaceShape, + slider, + aimVector=[0, 0, 1], + upVector=[0, 1, 0], + worldUpType="objectrotation", + worldUpVector=[0, 1, 0], + worldUpObject=gDriver) pm.parent(ctlGhost.getParent(), slider) diff --git a/scripts/mgear/maya/rigbits/postSpring.py b/scripts/mgear/maya/rigbits/postSpring.py index 53262b3..c7b02dd 100644 --- a/scripts/mgear/maya/rigbits/postSpring.py +++ b/scripts/mgear/maya/rigbits/postSpring.py @@ -1,42 +1,18 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +"""Post Spring tool -""" -Post Spring tool, creates a spring dynamic rig on top of a pre-existing FK chain rig. +creates a spring dynamic rig on top of a pre-existing FK chain rig. """ import pymel.core as pm -import mgear.maya.attribute as att -import mgear.maya.applyop as aop +from mgear.maya import applyop, attribute -def postSpring(dist = 5, hostUI = False, hostUI2 = False, invertX=False ): - """ - Create the dynamic spring rig. This spring system use the mgear_spring node. And transfer the position spring +def postSpring(dist=5, hostUI=False, hostUI2=False, invertX=False): + """Create the dynamic spring rig. + + This spring system use the mgear_spring node + And transfer the position spring to rotation spring using an aim constraint. Note: @@ -45,150 +21,204 @@ def postSpring(dist = 5, hostUI = False, hostUI2 = False, invertX=False ): Args: dist (float): The distance of the position spring. hostUI (dagNode): The spring active and intensity channel host. - hostUI2 (dagNode): The daping and stiffness channel host for each object in the chain. + hostUI2 (dagNode): The daping and stiffness channel host for each + object in the chain. invertX (bool): reverse the direction of the x axis. """ oSel = pm.selected() if not hostUI2: - hostUI2 = oSel[0] - - aSpring_active = att.addAttribute(hostUI2, "spring_active_%s"%oSel[0].name(), "double", 1.0, "___spring_active_______%s"%oSel[0].name(), "spring_active_%s"%oSel[0].name(), 0, 1) - aSpring_intensity = att.addAttribute(hostUI2, "spring_intensity_%s"%oSel[0].name(), "double", 1.0, "___spring_intensity_______%s"%oSel[0].name(), "spring_intensity_%s"%oSel[0].name(), 0, 1) + hostUI2 = oSel[0] + + aSpring_active = attribute.addAttribute( + hostUI2, + "spring_active_%s" % oSel[0].name(), + "double", + 1.0, + "___spring_active_______%s" % oSel[0].name(), + "spring_active_%s" % oSel[0].name(), + 0, + 1) + + aSpring_intensity = attribute.addAttribute( + hostUI2, + "spring_intensity_%s" % oSel[0].name(), + "double", + 1.0, + "___spring_intensity_______%s" % oSel[0].name(), + "spring_intensity_%s" % oSel[0].name(), + 0, + 1) if invertX: - dist = dist *-1 - #aim constraint + dist = dist * -1 + # aim constraint aimAxis = "-xy" else: - #aim constraint + # aim constraint aimAxis = "xy" for obj in oSel: oParent = obj.getParent() - - - oNpo = pm.PyNode(pm.createNode("transform", n= obj.name() + "_npo", p=oParent, ss=True)) + oNpo = pm.PyNode(pm.createNode("transform", + n=obj.name() + "_npo", + p=oParent, + ss=True)) oNpo.setTransformation(obj.getMatrix()) pm.parent(obj, oNpo) - oSpring_cns = pm.PyNode(pm.createNode("transform", n= obj.name() + "_spr_cns", p=oNpo, ss=True)) + oSpring_cns = pm.PyNode(pm.createNode("transform", + n=obj.name() + "_spr_cns", + p=oNpo, + ss=True)) oSpring_cns.setTransformation(obj.getMatrix()) pm.parent(obj, oSpring_cns) - - oSpringLvl = pm.PyNode(pm.createNode("transform", n= obj.name() + "_spr_lvl", p=oNpo, ss=True)) + oSpringLvl = pm.PyNode(pm.createNode("transform", + n=obj.name() + "_spr_lvl", + p=oNpo, + ss=True)) oM = obj.getTransformation() - oM.addTranslation([dist, 0,0], "object") + oM.addTranslation([dist, 0, 0], "object") oSpringLvl.setTransformation(oM.asMatrix()) - oSpringDriver = pm.PyNode(pm.createNode("transform", n= obj.name() + "_spr", p=oSpringLvl, ss=True)) - + oSpringDriver = pm.PyNode(pm.createNode("transform", + n=obj.name() + "_spr", + p=oSpringLvl, + ss=True)) try: - defSet = pm.PyNode("rig_PLOT_grp") - pm.sets(defSet, add=oSpring_cns) - except: - defSet = pm.sets(name="rig_PLOT_grp") + defSet = pm.PyNode("rig_PLOT_grp") + pm.sets(defSet, add=oSpring_cns) + except TypeError: + defSet = pm.sets(name="rig_PLOT_grp") pm.sets(defSet, remove=obj) pm.sets(defSet, add=oSpring_cns) - #adding attributes: + # adding attributes: if not hostUI: hostUI = obj - - aSpring_damping = att.addAttribute(hostUI, "spring_damping_%s"%obj.name(), "double", .5, "damping_%s"%obj.name(), "damping_%s"%obj.name(), 0, 1) - aSpring_stiffness_ = att.addAttribute(hostUI, "spring_stiffness_%s"%obj.name(), "double", .5, "stiffness_%s"%obj.name(), "stiffness_%s"%obj.name(), 0, 1) - - - - - cns = aop.aimCns(oSpring_cns, oSpringDriver, aimAxis, 2, [0,1,0], oNpo, False) - - #change from fcurves to spring + aSpring_damping = attribute.addAttribute( + hostUI, + "spring_damping_%s" % obj.name(), + "double", + .5, + "damping_%s" % obj.name(), + "damping_%s" % obj.name(), + 0, + 1) + + aSpring_stiffness_ = attribute.addAttribute( + hostUI, + "spring_stiffness_%s" % obj.name(), + "double", + .5, + "stiffness_%s" % obj.name(), + "stiffness_%s" % obj.name(), + 0, + 1) + + cns = applyop.aimCns(oSpring_cns, + oSpringDriver, + aimAxis, + 2, + [0, 1, 0], + oNpo, + False) + + # change from fcurves to spring pb_node = pm.createNode("pairBlend") - pm.connectAttr(cns+".constraintRotateX", pb_node+".inRotateX2") - pm.connectAttr(cns+".constraintRotateY", pb_node+".inRotateY2") - pm.connectAttr(cns+".constraintRotateZ", pb_node+".inRotateZ2") - pm.setAttr(pb_node+".translateXMode", 2) - pm.setAttr(pb_node+".translateYMode", 2) - pm.setAttr(pb_node+".translateZMode", 2) - - - pm.connectAttr( pb_node+".outRotateX", oSpring_cns+".rotateX", f=True) - pm.connectAttr( pb_node+".outRotateY", oSpring_cns+".rotateY", f=True) - pm.connectAttr( pb_node+".outRotateZ", oSpring_cns+".rotateZ", f=True) - pm.setKeyframe( oSpring_cns, at="rotateX") - pm.setKeyframe( oSpring_cns, at="rotateY") - pm.setKeyframe( oSpring_cns, at="rotateZ") - - #add sprint op - springOP = aop.gear_spring_op(oSpringDriver) - - #connecting attributes - pm.connectAttr(aSpring_active, pb_node+".weight") - pm.connectAttr(aSpring_intensity, springOP+".intensity") - pm.connectAttr(aSpring_damping, springOP+".damping") - pm.connectAttr(aSpring_stiffness_, springOP+".stiffness") + pm.connectAttr(cns + ".constraintRotateX", pb_node + ".inRotateX2") + pm.connectAttr(cns + ".constraintRotateY", pb_node + ".inRotateY2") + pm.connectAttr(cns + ".constraintRotateZ", pb_node + ".inRotateZ2") + pm.setAttr(pb_node + ".translateXMode", 2) + pm.setAttr(pb_node + ".translateYMode", 2) + pm.setAttr(pb_node + ".translateZMode", 2) + + pm.connectAttr(pb_node + ".outRotateX", + oSpring_cns + ".rotateX", + f=True) + pm.connectAttr(pb_node + ".outRotateY", + oSpring_cns + ".rotateY", + f=True) + pm.connectAttr(pb_node + ".outRotateZ", + oSpring_cns + ".rotateZ", + f=True) + + pm.setKeyframe(oSpring_cns, at="rotateX") + pm.setKeyframe(oSpring_cns, at="rotateY") + pm.setKeyframe(oSpring_cns, at="rotateZ") + + # add sprint op + springOP = applyop.gear_spring_op(oSpringDriver) + + # connecting attributes + pm.connectAttr(aSpring_active, pb_node + ".weight") + pm.connectAttr(aSpring_intensity, springOP + ".intensity") + pm.connectAttr(aSpring_damping, springOP + ".damping") + pm.connectAttr(aSpring_stiffness_, springOP + ".stiffness") def spring_UI(*args): - """ - Creates the post tool UI. - """ + """Creates the post tool UI""" - if pm.window("mGear_spring_window", exists = True): + if pm.window("mGear_spring_window", exists=True): pm.deleteUI("mGear_spring_window") - window = pm.window("mGear_spring_window", title="mGear post Spring", w=350, h=200, mxb=False, sizeable=False) - - pm.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] ) + window = pm.window("mGear_spring_window", + title="mGear post Spring", + w=350, + h=200, + mxb=False, + sizeable=False) + pm.rowColumnLayout(numberOfColumns=2, + columnAttach=(1, 'right', 0), + columnWidth=[(1, 100), (2, 250)]) pm.text("spring Distance: ") - pm.floatField( "distance", annotation="distane in X local for the spring position", w=50, value= 5) - pm.text(label="Invert X to -X: " ) + pm.floatField("distance", + annotation="distane in X local for the spring position", + w=50, + value=5) + pm.text(label="Invert X to -X: ") pm.checkBox("invertX", label=" Invert X direction to -X ") - pm.text(label="UI Host: " ) + pm.text(label="UI Host: ") pm.textField("hostUI") - - - pm.separator(h=10) - pm.button(label="Spring Me bro!!", w=150, h=50, command=build_spring) + pm.button(label="Spring Me bro!!", w=150, h=50, command=build_spring) pm.separator(h=10) pm.separator(h=10) pm.separator(h=10) - pm.text(label="Instructions: Select controls in order from root to tip", align="left" ) + pm.text(label="Instructions: Select controls in order from root to tip", + align="left") pm.separator(h=10) pm.separator(h=10) pm.separator(h=10) - pm.button(label="Baker", w=50, h=50, command=bake_spring) - + pm.button(label="Baker", w=50, h=50, command=bake_spring) pm.showWindow(window) + def build_spring(*args): - dist = pm.floatField("distance", q=True, v=True) - hostName = pm.textField("hostUI", q=True, text=True) - try: - hostUI = pm.PyNode(hostName) - except: - hostUI = False - invertX = pm.checkBox("invertX", q=True, v=True) + dist = pm.floatField("distance", q=True, v=True) + hostName = pm.textField("hostUI", q=True, text=True) + try: + hostUI = pm.PyNode(hostName) + except TypeError: + hostUI = False + invertX = pm.checkBox("invertX", q=True, v=True) + postSpring(dist, hostUI, hostUI, invertX) - postSpring(dist, hostUI, hostUI, invertX ) def bake_spring(*args): - """ - Shortcut fro the Maya's Bake Simulation Options. - """ + """Shortcut fro the Maya's Bake Simulation Options""" pm.BakeSimulationOptions() diff --git a/scripts/mgear/maya/rigbits/proxySlicer.py b/scripts/mgear/maya/rigbits/proxySlicer.py index 78ca8e1..27065ff 100644 --- a/scripts/mgear/maya/rigbits/proxySlicer.py +++ b/scripts/mgear/maya/rigbits/proxySlicer.py @@ -1,47 +1,17 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - +"""Rigbits proxy mesh slicer""" import datetime import pymel.core as pm import mgear -import mgear.maya.applyop as aop -import mgear.maya.node as nod -import mgear.maya.transform as tra - +from mgear.maya import applyop, node, transform def slice(parent=False, oSel=False, *args): - """ - Create a proxy geometry from a skinned object. - """ + """Create a proxy geometry from a skinned object""" + startTime = datetime.datetime.now() print oSel if not oSel: @@ -53,7 +23,6 @@ def slice(parent=False, oSel=False, *args): oFaces = oSel.faces nFaces = oSel.numFaces() - faceGroups = [] for x in oColl: faceGroups.append([]) @@ -61,70 +30,102 @@ def slice(parent=False, oSel=False, *args): print sCluster sCName = sCluster[0].name() for iFace in range(nFaces): - faceVtx = oFaces[iFace].getVertices() + faceVtx = oFaces[iFace].getVertices() oSum = False for iVtx in faceVtx: - values = pm.skinPercent(sCName, oSel.vtx[iVtx], q=True, v=True ) + values = pm.skinPercent(sCName, oSel.vtx[iVtx], q=True, v=True) if oSum: - oSum = [L+l for L, l in zip(oSum, values)] + oSum = [L + l for L, l in zip(oSum, values)] else: oSum = values - print "adding face: " + str(iFace) + " to group in: " + str( oColl[ oSum.index(max(oSum))]) + print "adding face: " \ + + str(iFace) \ + + " to group in: " \ + + str(oColl[oSum.index(max(oSum))]) faceGroups[oSum.index(max(oSum))].append(iFace) - original = oSel if not parent: try: parentGroup = pm.PyNode("ProxyGeo") - except: - parentGroup = pm.createNode("transform", n="ProxyGeo" ) + except TypeError: + parentGroup = pm.createNode("transform", n="ProxyGeo") try: proxySet = pm.PyNode("rig_proxyGeo_grp") - except: - proxySet = pm.sets(name="rig_proxyGeo_grp", em=True) + except TypeError: + proxySet = pm.sets(name="rig_proxyGeo_grp", em=True) for boneList in faceGroups: if len(boneList): - newObj = pm.duplicate(original, rr=True, name= oColl[faceGroups.index(boneList)] + "_Proxy") - for trans in ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"]: + newObj = pm.duplicate( + original, + rr=True, + name=oColl[faceGroups.index(boneList)] + "_Proxy") + + for trans in ["tx", + "ty", + "tz", + "rx", + "ry", + "rz", + "sx", + "sy", + "sz"]: pm.setAttr(newObj[0].name() + "." + trans, lock=0) c = list(newObj[0].faces) - for index in reversed(boneList): c.pop(index) pm.delete(c) if parent: - pm.parent(newObj, pm.PyNode(oColl[faceGroups.index(boneList)]), a=True) + pm.parent(newObj, + pm.PyNode(oColl[faceGroups.index(boneList)]), + a=True) else: pm.parent(newObj, parentGroup, a=True) dummyCopy = pm.duplicate(newObj[0])[0] pm.delete(newObj[0].listRelatives(c=True)) - tra.matchWorldTransform(pm.PyNode(oColl[faceGroups.index(boneList)]), newObj[0]) - pm.parent(dummyCopy.listRelatives(c=True)[0], newObj[0], shape=True) + + transform.matchWorldTransform( + pm.PyNode(oColl[faceGroups.index(boneList)]), newObj[0]) + + pm.parent(dummyCopy.listRelatives(c=True)[0], + newObj[0], + shape=True) + pm.delete(dummyCopy) - pm.rename(newObj[0].listRelatives(c=True)[0],newObj[0].name() + "_offset" ) - mulmat_node = aop.gear_mulmatrix_op( - pm.PyNode(oColl[faceGroups.index(boneList)]).name() + ".worldMatrix", + + pm.rename(newObj[0].listRelatives(c=True)[0], + newObj[0].name() + "_offset") + + o_multiplayer = pm.PyNode(oColl[faceGroups.index(boneList)]) + mulmat_node = applyop.gear_mulmatrix_op( + o_multiplayer.name() + ".worldMatrix", newObj[0].name() + ".parentInverseMatrix") - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", newObj[0].name()+".t") - pm.connectAttr(dm_node+".outputRotate", newObj[0].name()+".r") - pm.connectAttr(dm_node+".outputScale", newObj[0].name()+".s") - print "Creating proxy for: " + str(oColl[faceGroups.index(boneList)]) + outPlug = mulmat_node + ".output" + dm_node = node.createDecomposeMatrixNode(outPlug) - pm.sets(proxySet, add=newObj) + pm.connectAttr(dm_node + ".outputTranslate", + newObj[0].name() + ".t") + pm.connectAttr(dm_node + ".outputRotate", + newObj[0].name() + ".r") + pm.connectAttr(dm_node + ".outputScale", + newObj[0].name() + ".s") + print "Creating proxy for: {}".format( + str(oColl[faceGroups.index(boneList)])) + + pm.sets(proxySet, add=newObj) endTime = datetime.datetime.now() finalTime = endTime - startTime - mgear.log("=============== Slicing for: %s finish ======= [ %s ] ======" %(oSel.name(), str(finalTime) )) + mgear.log("=============== Slicing for: %s finish ======= [ %s ] ===" + "===" % (oSel.name(), str(finalTime))) diff --git a/scripts/mgear/maya/rigbits/rivet.py b/scripts/mgear/maya/rigbits/rivet.py index 296e2ae..38199be 100644 --- a/scripts/mgear/maya/rigbits/rivet.py +++ b/scripts/mgear/maya/rigbits/rivet.py @@ -1,103 +1,100 @@ - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +"""Rigbits rivet creator""" import pymel.core as pm - - class rivet(): - """ - Create a rivet + """Create a rivet + Thanks to http://jinglezzz.tumblr.com for the tutorial :) """ def create(self, mesh, edge1, edge2, parent, name=None): self.sources = { - 'oMesh' : mesh, - 'edgeIndex1' : edge1, - 'edgeIndex2' : edge2 + 'oMesh': mesh, + 'edgeIndex1': edge1, + 'edgeIndex2': edge2 } self.createNodes() self.createConnections() self.setAttributes() if parent: - pm.parent( self.node['locator'].getParent(), parent) + pm.parent(self.o_node['locator'].getParent(), parent) if name: - pm.rename(self.node['locator'].getParent(), name) - - return self.node['locator'].getParent() + pm.rename(self.o_node['locator'].getParent(), name) + return self.o_node['locator'].getParent() def createNodes(self, *args): - self.node = { - 'meshEdgeNode1' : pm.createNode('curveFromMeshEdge'), - 'meshEdgeNode2' : pm.createNode('curveFromMeshEdge'), - 'ptOnSurfaceIn' : pm.createNode('pointOnSurfaceInfo'), - 'matrixNode' : pm.createNode('fourByFourMatrix'), - 'decomposeMatrix' : pm.createNode('decomposeMatrix'), - 'loftNode' : pm.createNode('loft'), - 'locator' : pm.createNode('locator') + self.o_node = { + 'meshEdgeNode1': pm.createNode('curveFromMeshEdge'), + 'meshEdgeNode2': pm.createNode('curveFromMeshEdge'), + 'ptOnSurfaceIn': pm.createNode('pointOnSurfaceInfo'), + 'matrixNode': pm.createNode('fourByFourMatrix'), + 'decomposeMatrix': pm.createNode('decomposeMatrix'), + 'loftNode': pm.createNode('loft'), + 'locator': pm.createNode('locator') } - def createConnections(self, *args): - self.sources['oMesh'].worldMesh.connect(self.node['meshEdgeNode1'].inputMesh) - self.sources['oMesh'].worldMesh.connect(self.node['meshEdgeNode2'].inputMesh) - self.node['meshEdgeNode1'].outputCurve.connect(self.node['loftNode'].inputCurve[0]) - self.node['meshEdgeNode2'].outputCurve.connect(self.node['loftNode'].inputCurve[1]) - self.node['loftNode'].outputSurface.connect(self.node['ptOnSurfaceIn'].inputSurface) - self.node['ptOnSurfaceIn'].normalizedNormalX.connect(self.node['matrixNode'].in00) - self.node['ptOnSurfaceIn'].normalizedNormalY.connect(self.node['matrixNode'].in01) - self.node['ptOnSurfaceIn'].normalizedNormalZ.connect(self.node['matrixNode'].in02) - self.node['ptOnSurfaceIn'].normalizedTangentUX.connect(self.node['matrixNode'].in10) - self.node['ptOnSurfaceIn'].normalizedTangentUY.connect(self.node['matrixNode'].in11) - self.node['ptOnSurfaceIn'].normalizedTangentUZ.connect(self.node['matrixNode'].in12) - self.node['ptOnSurfaceIn'].normalizedTangentVX.connect(self.node['matrixNode'].in20) - self.node['ptOnSurfaceIn'].normalizedTangentVY.connect(self.node['matrixNode'].in21) - self.node['ptOnSurfaceIn'].normalizedTangentVZ.connect(self.node['matrixNode'].in22) - self.node['ptOnSurfaceIn'].positionX.connect(self.node['matrixNode'].in30) - self.node['ptOnSurfaceIn'].positionY.connect(self.node['matrixNode'].in31) - self.node['ptOnSurfaceIn'].positionZ.connect(self.node['matrixNode'].in32) - self.node['matrixNode'].output.connect(self.node['decomposeMatrix'].inputMatrix) - self.node['decomposeMatrix'].outputTranslate.connect(self.node['locator'].getParent().translate) - self.node['decomposeMatrix'].outputRotate.connect(self.node['locator'].getParent().rotate) - self.node['locator'].attr("visibility").set(False) + self.sources['oMesh'].worldMesh.connect( + self.o_node['meshEdgeNode1'].inputMesh) + self.sources['oMesh'].worldMesh.connect( + self.o_node['meshEdgeNode2'].inputMesh) + self.o_node['meshEdgeNode1'].outputCurve.connect( + self.o_node['loftNode'].inputCurve[0]) + self.o_node['meshEdgeNode2'].outputCurve.connect( + self.o_node['loftNode'].inputCurve[1]) + self.o_node['loftNode'].outputSurface.connect( + self.o_node['ptOnSurfaceIn'].inputSurface) + self.o_node['ptOnSurfaceIn'].normalizedNormalX.connect( + self.o_node['matrixNode'].in00) + self.o_node['ptOnSurfaceIn'].normalizedNormalY.connect( + self.o_node['matrixNode'].in01) + self.o_node['ptOnSurfaceIn'].normalizedNormalZ.connect( + self.o_node['matrixNode'].in02) + self.o_node['ptOnSurfaceIn'].normalizedTangentUX.connect( + self.o_node['matrixNode'].in10) + self.o_node['ptOnSurfaceIn'].normalizedTangentUY.connect( + self.o_node['matrixNode'].in11) + self.o_node['ptOnSurfaceIn'].normalizedTangentUZ.connect( + self.o_node['matrixNode'].in12) + self.o_node['ptOnSurfaceIn'].normalizedTangentVX.connect( + self.o_node['matrixNode'].in20) + self.o_node['ptOnSurfaceIn'].normalizedTangentVY.connect( + self.o_node['matrixNode'].in21) + self.o_node['ptOnSurfaceIn'].normalizedTangentVZ.connect( + self.o_node['matrixNode'].in22) + self.o_node['ptOnSurfaceIn'].positionX.connect( + self.o_node['matrixNode'].in30) + self.o_node['ptOnSurfaceIn'].positionY.connect( + self.o_node['matrixNode'].in31) + self.o_node['ptOnSurfaceIn'].positionZ.connect( + self.o_node['matrixNode'].in32) + self.o_node['matrixNode'].output.connect( + self.o_node['decomposeMatrix'].inputMatrix) + self.o_node['decomposeMatrix'].outputTranslate.connect( + self.o_node['locator'].getParent().translate) + self.o_node['decomposeMatrix'].outputRotate.connect( + self.o_node['locator'].getParent().rotate) + self.o_node['locator'].attr("visibility").set(False) def setAttributes(self): - self.node['meshEdgeNode1'].isHistoricallyInteresting.set(1) - self.node['meshEdgeNode2'].isHistoricallyInteresting.set(1) - self.node['meshEdgeNode1'].edgeIndex[0].set(self.sources['edgeIndex1']) - self.node['meshEdgeNode2'].edgeIndex[0].set(self.sources['edgeIndex2']) - - self.node['loftNode'].reverseSurfaceNormals.set(1) - self.node['loftNode'].inputCurve.set(size=2) - self.node['loftNode'].uniform.set(True) - self.node['loftNode'].sectionSpans.set(3) - self.node['loftNode'].caching.set(True) - - self.node['ptOnSurfaceIn'].turnOnPercentage.set(True) - self.node['ptOnSurfaceIn'].parameterU.set(0.5) - self.node['ptOnSurfaceIn'].parameterV.set(0.5) - self.node['ptOnSurfaceIn'].caching.set(True) + self.o_node['meshEdgeNode1'].isHistoricallyInteresting.set(1) + self.o_node['meshEdgeNode2'].isHistoricallyInteresting.set(1) + self.o_node['meshEdgeNode1'].edgeIndex[0].set( + self.sources['edgeIndex1']) + self.o_node['meshEdgeNode2'].edgeIndex[0].set( + self.sources['edgeIndex2']) + + self.o_node['loftNode'].reverseSurfaceNormals.set(1) + self.o_node['loftNode'].inputCurve.set(size=2) + self.o_node['loftNode'].uniform.set(True) + self.o_node['loftNode'].sectionSpans.set(3) + self.o_node['loftNode'].caching.set(True) + + self.o_node['ptOnSurfaceIn'].turnOnPercentage.set(True) + self.o_node['ptOnSurfaceIn'].parameterU.set(0.5) + self.o_node['ptOnSurfaceIn'].parameterV.set(0.5) + self.o_node['ptOnSurfaceIn'].caching.set(True) diff --git a/scripts/mgear/maya/rigbits/rope.py b/scripts/mgear/maya/rigbits/rope.py index cd09338..e7f7568 100644 --- a/scripts/mgear/maya/rigbits/rope.py +++ b/scripts/mgear/maya/rigbits/rope.py @@ -1,44 +1,22 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 +"""Rigbits Rope rig creator""" import pymel.core as pm - -import mgear.maya.applyop as aop -import mgear.maya.rigbits as rt +from mgear.maya import applyop, rigbits -def rope(DEF_nb=10, ropeName="rope", keepRatio=False, lvlType="transform", oSel=None): - """ - Create rope rig based in 2 parallel curves. +def rope(DEF_nb=10, + ropeName="rope", + keepRatio=False, + lvlType="transform", + oSel=None): + """Create rope rig based in 2 parallel curves. Args: DEF_nb (int): Number of deformer joints. ropeName (str): Name for the rope rig. - keepRatio (bool): If True, the deformers will keep the length position when the curve is stretched. + keepRatio (bool): If True, the deformers will keep the length + position when the curve is stretched. """ if oSel and len(oSel) == 2 and isinstance(oSel, list): oCrv = oSel[0] @@ -48,60 +26,70 @@ def rope(DEF_nb=10, ropeName="rope", keepRatio=False, lvlType="transform", oSel if isinstance(oCrvUpV, str): oCrvUpV = pm.PyNode(oCrvUpV) else: - if len( pm.selected()) !=2: + if len(pm.selected()) != 2: print "You need to select 2 nurbsCurve" return oCrv = pm.selected()[0] oCrvUpV = pm.selected()[1] - if oCrv.getShape().type() != "nurbsCurve" or oCrvUpV.getShape().type() != "nurbsCurve": + if (oCrv.getShape().type() != "nurbsCurve" + or oCrvUpV.getShape().type() != "nurbsCurve"): print "One of the selected objects is not of type: 'nurbsCurve'" print oCrv.getShape().type() - print oCrvUpV.getShape().type() + print oCrvUpV.getShape().type() return if keepRatio: arclen_node = pm.arclen(oCrv, ch=True) alAttr = pm.getAttr(arclen_node + ".arcLength") - muldiv_node = pm.createNode("multiplyDivide") - pm.connectAttr(arclen_node+".arcLength", muldiv_node+".input1X") - pm.setAttr(muldiv_node+".input2X", alAttr) - pm.setAttr(muldiv_node+".operation", 2) + muldiv_node = pm.createNode("multiplyDivide") + pm.connectAttr(arclen_node + ".arcLength", muldiv_node + ".input1X") + pm.setAttr(muldiv_node + ".input2X", alAttr) + pm.setAttr(muldiv_node + ".operation", 2) pm.addAttr(oCrv, ln="length_ratio", k=True, w=True) - pm.connectAttr(muldiv_node+".outputX", oCrv+".length_ratio") + pm.connectAttr(muldiv_node + ".outputX", oCrv + ".length_ratio") - root = pm.PyNode(pm.createNode(lvlType, n= ropeName + "_root", ss=True)) - step = 1.000/(DEF_nb -1) + root = pm.PyNode(pm.createNode(lvlType, n=ropeName + "_root", ss=True)) + step = 1.000 / (DEF_nb - 1) i = 0.000 shds = [] for x in range(DEF_nb): - oTransUpV = pm.PyNode(pm.createNode(lvlType, n= ropeName + str(x).zfill(3) + "_upv", p=root, ss=True)) - oTrans = pm.PyNode(pm.createNode(lvlType, n= ropeName + str(x).zfill(3) + "_lvl", p=root, ss=True)) + oTransUpV = pm.PyNode(pm.createNode( + lvlType, n=ropeName + str(x).zfill(3) + "_upv", p=root, ss=True)) - cnsUpv = aop.pathCns(oTransUpV, oCrvUpV, cnsType=False, u=i, tangent=False) - cns = aop.pathCns(oTrans, oCrv, cnsType=False, u=i, tangent=False) + oTrans = pm.PyNode(pm.createNode( + lvlType, n=ropeName + str(x).zfill(3) + "_lvl", p=root, ss=True)) - if keepRatio: - muldiv_node2 = pm.createNode("multiplyDivide") - condition_node = pm.createNode("condition") - pm.setAttr(muldiv_node2+".operation", 2) - pm.setAttr(muldiv_node2+".input1X", i) - pm.connectAttr(oCrv+".length_ratio", muldiv_node2+".input2X") - pm.connectAttr(muldiv_node2+".outputX", condition_node+".colorIfFalseR") - pm.connectAttr(muldiv_node2+".outputX", condition_node+".secondTerm") - pm.connectAttr(muldiv_node2+".input1X", condition_node+".colorIfTrueR") - pm.connectAttr(muldiv_node2+".input1X", condition_node+".firstTerm") - pm.setAttr(condition_node+".operation", 4) + cnsUpv = applyop.pathCns( + oTransUpV, oCrvUpV, cnsType=False, u=i, tangent=False) + cns = applyop.pathCns(oTrans, oCrv, cnsType=False, u=i, tangent=False) - pm.connectAttr(condition_node+".outColorR", cnsUpv+".uValue") - pm.connectAttr(condition_node+".outColorR", cns+".uValue") + if keepRatio: + muldiv_node2 = pm.createNode("multiplyDivide") + condition_node = pm.createNode("condition") + pm.setAttr(muldiv_node2 + ".operation", 2) + pm.setAttr(muldiv_node2 + ".input1X", i) + pm.connectAttr(oCrv + ".length_ratio", muldiv_node2 + ".input2X") + pm.connectAttr(muldiv_node2 + ".outputX", + condition_node + ".colorIfFalseR") + pm.connectAttr(muldiv_node2 + ".outputX", + condition_node + ".secondTerm") + pm.connectAttr(muldiv_node2 + ".input1X", + condition_node + ".colorIfTrueR") + pm.connectAttr(muldiv_node2 + ".input1X", + condition_node + ".firstTerm") + pm.setAttr(condition_node + ".operation", 4) + + pm.connectAttr(condition_node + ".outColorR", cnsUpv + ".uValue") + pm.connectAttr(condition_node + ".outColorR", cns + ".uValue") cns.setAttr("worldUpType", 1) cns.setAttr("frontAxis", 0) cns.setAttr("upAxis", 1) - pm.connectAttr(oTransUpV.attr("worldMatrix[0]"),cns.attr("worldUpMatrix")) - shd = rt.addJnt(oTrans) + pm.connectAttr(oTransUpV.attr("worldMatrix[0]"), + cns.attr("worldUpMatrix")) + shd = rigbits.addJnt(oTrans) shds.append(shd[0]) i += step @@ -109,37 +97,46 @@ def rope(DEF_nb=10, ropeName="rope", keepRatio=False, lvlType="transform", oSel def rope_UI(*args): - """ - Rope tool UI - """ + """Rope tool UI""" - if pm.window("mGear_rope_window", exists = True): + if pm.window("mGear_rope_window", exists=True): pm.deleteUI("mGear_rope_window") - window = pm.window("mGear_rope_window", title="mGear rope rig generator", w=350, h=150, mxb=False, sizeable=False) - - pm.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] ) + window = pm.window("mGear_rope_window", + title="mGear rope rig generator", + w=350, + h=150, + mxb=False, + sizeable=False) + pm.rowColumnLayout(numberOfColumns=2, + columnAttach=(1, 'right', 0), + columnWidth=[(1, 100), (2, 250)]) pm.text("Nb of deformers: ") - pm.intField( "nbDeformers", annotation="number of deformers", w=50, value= 10) - pm.text(label="Keep position " ) + + pm.intField("nbDeformers", + annotation="number of deformers", + w=50, + value=10) + + pm.text(label="Keep position ") pm.checkBox("keepRatio", label=" (base on ratio) ") - pm.text(label="Name: " ) + pm.text(label="Name: ") pm.textField("RopeName", text="Rope") pm.separator(h=10) - pm.button(label="Build the rope!", w=150, h=50, command=build_rope) + pm.button(label="Build the rope!", w=150, h=50, command=build_rope) pm.separator(h=10) pm.separator(h=10) pm.separator(h=10) - pm.text(label="Instructions: Select ctl crv + upv crv", align="left" ) + pm.text(label="Instructions: Select ctl crv + upv crv", align="left") pm.showWindow(window) def build_rope(*args): - DEF_nb = pm.intField("nbDeformers", q=True, v=True) - ropeName = pm.textField("RopeName", q=True, text=True) - keepRatio = pm.checkBox("keepRatio", q=True, v=True) - rope(DEF_nb, ropeName, keepRatio) + DEF_nb = pm.intField("nbDeformers", q=True, v=True) + ropeName = pm.textField("RopeName", q=True, text=True) + keepRatio = pm.checkBox("keepRatio", q=True, v=True) + rope(DEF_nb, ropeName, keepRatio) diff --git a/scripts/mgear/maya/rigbits/tweaks.py b/scripts/mgear/maya/rigbits/tweaks.py index 7c02cfb..2a5c9e2 100644 --- a/scripts/mgear/maya/rigbits/tweaks.py +++ b/scripts/mgear/maya/rigbits/tweaks.py @@ -1,41 +1,10 @@ - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - +"""Rigbits tweaks rig module""" import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes - - -import mgear.maya.skin as ski -import mgear.maya.primitive as pri -import mgear.maya.icon as ico -import mgear.maya.transform as tra -import mgear.maya.attribute as att - -import mgear.maya.rigbits.blendShapes as bsp -import mgear.maya.rigbits.rivet as rvt +from mgear.maya import skin, primitive, icon, transform, attribute +from . import rivet, blendShapes def resetJntLocalSRT(jnt): @@ -45,33 +14,41 @@ def resetJntLocalSRT(jnt): jnt (joint): The joint to reset the local SRT """ for axis in "XYZ": - pm.setAttr(jnt+".jointOrient"+axis, 0) - pm.setAttr(jnt+".rotate"+axis, 0) - pm.setAttr(jnt+".translate"+axis, 0) + pm.setAttr(jnt + ".jointOrient" + axis, 0) + pm.setAttr(jnt + ".rotate" + axis, 0) + pm.setAttr(jnt + ".translate" + axis, 0) def doritosMagic(mesh, joint, jointBase, parent=None): - #magic of doritos connection - skinCluster = ski.getSkinCluster(mesh) + # magic of doritos connection + skinCluster = skin.getSkinCluster(mesh) if not skinCluster: if pm.objExists('static_jnt') is not True: - static_jnt = pri.addJoint(parent, "static_jnt", m=dt.Matrix(), vis=True) + static_jnt = primitive.addJoint( + parent, "static_jnt", m=datatypes.Matrix(), vis=True) static_jnt = pm.PyNode("static_jnt") - #apply initial skincluster - skinCluster = pm.skinCluster(static_jnt, mesh, tsb=True, nw=2, n='%s_skinCluster'%mesh.name()) + # apply initial skincluster + skinCluster = pm.skinCluster( + static_jnt, mesh, tsb=True, nw=2, n='%s_skinCluster' % mesh.name()) try: - # we try to add the joint to the skin cluster. Will fail if is already in the skin cluster - pm.skinCluster(skinCluster, e=True, ai=joint, lw=True, wt=0) - except: - pm.displayInfo("The Joint: %s is already in the %s."%(joint.name(),skinCluster.name()) ) + # we try to add the joint to the skin cluster. Will fail if is already + # in the skin cluster + pm.skinCluster(skinCluster, e=True, ai=joint, lw=True, wt=0) + except Exception: + pm.displayInfo("The Joint: %s is already in the %s." % ( + joint.name(), skinCluster.name())) pass cn = joint.listConnections(p=True, type="skinCluster") for x in cn: - if x.type()=="matrix": + if x.type() == "matrix": if x.name().split(".")[0] == skinCluster.name(): - # We force to avoid errors in case the joint is already connected - pm.connectAttr(jointBase + ".worldInverseMatrix[0]", skinCluster + ".bindPreMatrix["+str(x.index())+"]", f=True) + # We force to avoid errors in case the joint is already + # connected + pm.connectAttr( + jointBase + ".worldInverseMatrix[0]", + skinCluster + ".bindPreMatrix[" + str(x.index()) + "]", + f=True) def createJntTweak(mesh, parentJnt, ctlParent): @@ -88,34 +65,57 @@ def createJntTweak(mesh, parentJnt, ctlParent): name = "_".join(parentJnt.name().split("_")[:3]) # create joints - jointBase = pri.addJoint(parentJnt, name +"_tweak_jnt_lvl", parentJnt.getMatrix(worldSpace=True)) + jointBase = primitive.addJoint(parentJnt, + name + "_tweak_jnt_lvl", + parentJnt.getMatrix(worldSpace=True)) resetJntLocalSRT(jointBase) - joint = pri.addJoint(jointBase, name +"_tweak_jnt", parentJnt.getMatrix(worldSpace=True)) + joint = primitive.addJoint(jointBase, + name + "_tweak_jnt", + parentJnt.getMatrix(worldSpace=True)) resetJntLocalSRT(joint) - #hidding joint base by changing the draw mode + # hidding joint base by changing the draw mode # pm.setAttr(jointBase+".drawStyle", 2) try: defSet = pm.PyNode("rig_deformers_grp") - except: + except TypeError: pm.sets(n="rig_deformers_grp") defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=joint) controlType = "circle" - iconBase = ico.create(ctlParent, name + "_base_tweak_ctl", ctlParent.getMatrix(worldSpace=True), 13, controlType, w=.8, ro=dt.Vector(0,0,1.5708)) - icon = ico.create(iconBase, name + "_tweak_ctl", ctlParent.getMatrix(worldSpace=True), 17, controlType, w=.5, ro=dt.Vector(0,0,1.5708)) + iconBase = icon.create(ctlParent, + name + "_base_tweak_ctl", + ctlParent.getMatrix(worldSpace=True), + 13, + controlType, + w=.8, + ro=datatypes.Vector(0, 0, 1.5708)) + o_icon = icon.create(iconBase, name + "_tweak_ctl", + ctlParent.getMatrix(worldSpace=True), + 17, + controlType, + w=.5, + ro=datatypes.Vector(0, 0, 1.5708)) + for t in [".translate", ".scale", ".rotate"]: pm.connectAttr(iconBase + t, jointBase + t) - pm.connectAttr(icon + t, joint + t) + pm.connectAttr(o_icon + t, joint + t) - #magic of doritos connection + # magic of doritos connection for m in mesh: doritosMagic(m, joint, jointBase) -def createRivetTweak(mesh, edgePair, name, parent=None, ctlParent=None, color=[0,0,0], size=.04, defSet=None): +def createRivetTweak(mesh, + edgePair, + name, + parent=None, + ctlParent=None, + color=[0, 0, 0], + size=.04, + defSet=None): """Create a tweak joint attached to the mesh using a rivet Args: @@ -126,11 +126,11 @@ def createRivetTweak(mesh, edgePair, name, parent=None, ctlParent=None, color=[ ctlParent (None or dagNode, optional): The parent for the tweak control color (list, optional): The color for the control """ - blendShape = bsp.getBlendShape(mesh) + blendShape = blendShapes.getBlendShape(mesh) inputMesh = blendShape.listConnections(sh=True, t="shape", d=False)[0] - oRivet = rvt.rivet() + oRivet = rivet.rivet() base = oRivet.create(inputMesh, edgePair[0], edgePair[1], parent) # get side if base.getTranslation(space='world')[0] < -0.01: @@ -141,11 +141,13 @@ def createRivetTweak(mesh, edgePair, name, parent=None, ctlParent=None, color=[ side = "C" nameSide = name + "_tweak_" + side - nameNeutral = name + "_tweak" pm.rename(base, nameSide) - #Joints NPO - npo = pm.PyNode(pm.createNode("transform", n=nameSide+"_npo", p=ctlParent, ss=True)) + # Joints NPO + npo = pm.PyNode(pm.createNode("transform", + n=nameSide + "_npo", + p=ctlParent, + ss=True)) pm.pointConstraint(base, npo) # set proper orientation @@ -157,64 +159,86 @@ def createRivetTweak(mesh, edgePair, name, parent=None, ctlParent=None, color=[ temp.attr("tx").set(1) lookat = temp.getTranslation(space="world") - up = dt.Vector(0,1,0) + up = datatypes.Vector(0, 1, 0) - t = tra.getTransformLookingAt(pos, lookat, up, axis="xy", negate=False) + t = transform.getTransformLookingAt(pos, + lookat, + up, + axis="xy", + negate=False) npo.setMatrix(t, worldSpace=True) pm.delete(temp) # create joints - jointBase = pri.addJoint(npo, nameSide +"_jnt_lvl") - joint = pri.addJoint(jointBase, nameSide +"_jnt") + jointBase = primitive.addJoint(npo, nameSide + "_jnt_lvl") + joint = primitive.addJoint(jointBase, nameSide + "_jnt") - #hidding joint base by changing the draw mode - pm.setAttr(jointBase+".drawStyle", 2) + # hidding joint base by changing the draw mode + pm.setAttr(jointBase + ".drawStyle", 2) if not defSet: try: defSet = pm.PyNode("rig_deformers_grp") - except: + except TypeError: pm.sets(n="rig_deformers_grp") defSet = pm.PyNode("rig_deformers_grp") pm.sets(defSet, add=joint) controlType = "sphere" - icon = ico.create(jointBase, nameSide + "_ctl", pm.datatypes.Matrix(), color, controlType, w=size) + o_icon = icon.create(jointBase, nameSide + "_ctl", + datatypes.Matrix(), + color, + controlType, + w=size) for t in [".translate", ".scale", ".rotate"]: - pm.connectAttr(icon + t, joint + t) + pm.connectAttr(o_icon + t, joint + t) # create the attributes to handlde mirror and symetrical pose - att.addAttribute(icon, "invTx", "bool", 0, keyable=False, niceName="Invert Mirror TX") - att.addAttribute(icon, "invTy", "bool", 0, keyable=False, niceName="Invert Mirror TY") - att.addAttribute(icon, "invTz", "bool", 0, keyable=False, niceName="Invert Mirror TZ") - att.addAttribute(icon, "invRx", "bool", 0, keyable=False, niceName="Invert Mirror RX") - att.addAttribute(icon, "invRy", "bool", 0, keyable=False, niceName="Invert Mirror RY") - att.addAttribute(icon, "invRz", "bool", 0, keyable=False, niceName="Invert Mirror RZ") - att.addAttribute(icon, "invSx", "bool", 0, keyable=False, niceName="Invert Mirror SX") - att.addAttribute(icon, "invSy", "bool", 0, keyable=False, niceName="Invert Mirror SY") - att.addAttribute(icon, "invSz", "bool", 0, keyable=False, niceName="Invert Mirror SZ") - - #magic of doritos connection + attribute.addAttribute( + o_icon, "invTx", "bool", 0, keyable=False, niceName="Invert Mirror TX") + attribute.addAttribute( + o_icon, "invTy", "bool", 0, keyable=False, niceName="Invert Mirror TY") + attribute.addAttribute( + o_icon, "invTz", "bool", 0, keyable=False, niceName="Invert Mirror TZ") + attribute.addAttribute( + o_icon, "invRx", "bool", 0, keyable=False, niceName="Invert Mirror RX") + attribute.addAttribute( + o_icon, "invRy", "bool", 0, keyable=False, niceName="Invert Mirror RY") + attribute.addAttribute( + o_icon, "invRz", "bool", 0, keyable=False, niceName="Invert Mirror RZ") + attribute.addAttribute( + o_icon, "invSx", "bool", 0, keyable=False, niceName="Invert Mirror SX") + attribute.addAttribute( + o_icon, "invSy", "bool", 0, keyable=False, niceName="Invert Mirror SY") + attribute.addAttribute( + o_icon, "invSz", "bool", 0, keyable=False, niceName="Invert Mirror SZ") + + # magic of doritos connection doritosMagic(mesh, joint, jointBase) # reset axis and inver behaviour for axis in "XYZ": - pm.setAttr(jointBase+".jointOrient"+axis, 0) - pm.setAttr(npo+".translate"+axis, 0) - pm.setAttr(jointBase+".translate"+axis, 0) + pm.setAttr(jointBase + ".jointOrient" + axis, 0) + pm.setAttr(npo + ".translate" + axis, 0) + pm.setAttr(jointBase + ".translate" + axis, 0) - p = icon.getParent().getParent() + p = o_icon.getParent().getParent() pp = p.getParent() pm.parent(p, w=True) for axis in "xyz": - p.attr("r"+axis).set(0) + p.attr("r" + axis).set(0) if side == "R": p.attr("ry").set(180) p.attr("sz").set(-1) pm.parent(p, pp) - return icon + return o_icon + -def createRivetTweakFromList(mesh, edgeIndexPairList, name, parent=None, ctlParent=None, color=[0,0,0]): +def createRivetTweakFromList(mesh, + edgeIndexPairList, + name, parent=None, + ctlParent=None, + color=[0, 0, 0]): """Create multiple rivet tweaks from a list of edge pairs Args: @@ -227,11 +251,22 @@ def createRivetTweakFromList(mesh, edgeIndexPairList, name, parent=None, ctlPare """ ctlList = [] for i, pair in enumerate(edgeIndexPairList): - ctl = createRivetTweak(mesh, [pair[0], pair[1]], name + str(i).zfill(3), parent, ctlParent, color) + ctl = createRivetTweak(mesh, + [pair[0], pair[1]], + name + str(i).zfill(3), + parent, + ctlParent, + color) ctlList.append(ctl) return ctlList -def createRivetTweakLayer(layerMesh, bst, edgeList, tweakName, parent=None, ctlParent=None): + +def createRivetTweakLayer(layerMesh, + bst, + edgeList, + tweakName, + parent=None, + ctlParent=None): """Create a rivet tweak layer Args: @@ -242,16 +277,23 @@ def createRivetTweakLayer(layerMesh, bst, edgeList, tweakName, parent=None, ctlP parent (None or dagNode, optional): The parent for the tweak ctlParent (None or dagNode, optional): the parent for the tweak control """ - #Apply blendshape from blendshapes layer mesh - bsp.connectWithBlendshape(layerMesh, bst) + # Apply blendshape from blendshapes layer mesh + blendShapes.connectWithBlendshape(layerMesh, bst) - #create static joint + # create static joint if pm.objExists('static_jnt') is not True: - static_jnt = pri.addJoint(parent, "static_jnt", m=dt.Matrix(), vis=True) + static_jnt = primitive.addJoint(parent, + "static_jnt", + m=datatypes.Matrix(), + vis=True) static_jnt = pm.PyNode("static_jnt") - #apply initial skincluster - pm.skinCluster(static_jnt, layerMesh, tsb=True, nw=2, n='%s_skinCluster'%layerMesh.name()) + # apply initial skincluster + pm.skinCluster(static_jnt, + layerMesh, + tsb=True, + nw=2, + n='%s_skinCluster' % layerMesh.name()) - #create doritos + # create doritos createRivetTweak(layerMesh, edgeList, tweakName, parent, ctlParent) diff --git a/scripts/mgear/maya/rigbits/utils.py b/scripts/mgear/maya/rigbits/utils.py index 896edf8..8ce36cd 100644 --- a/scripts/mgear/maya/rigbits/utils.py +++ b/scripts/mgear/maya/rigbits/utils.py @@ -1,32 +1,4 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -mGear utilitie tools. -""" +"""Rigbits utilitie tools""" from mGear_pyqt import compileUi @@ -34,15 +6,17 @@ UI_EXT = "ui" + def ui2py(filePath=None, *args): - """ - Convert qtDesigner .ui files to .py. - """ + """Convert qtDesigner .ui files to .py""" if not filePath: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, - fileFilter='PyQt Designer (*%s)' % UI_EXT, okc="Compile to .py") + filePath = pm.fileDialog2(dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + fileFilter='PyQt Designer (*%s)' % UI_EXT, + okc="Compile to .py") if not filePath: return False filePath = filePath[0] @@ -55,24 +29,27 @@ def ui2py(filePath=None, *args): pyfile = open(compiledFilePath, 'w') compileUi(filePath, pyfile, False, 4, False) pyfile.close() - pm.displayInfo("PyQt Designer file compiled to .py in: " + compiledFilePath) + + info = "PyQt Designer file compiled to .py in: " + pm.displayInfo(info + compiledFilePath) def createRunTimeCommand(name, rCmd, ann=""): - """ - Create run time commands from raw string. + """Create run time commands from raw string. + This function is used to create the mGear hotkeys. """ if pm.runTimeCommand(name, ex=True): pm.runTimeCommand(name, e=True, delete=True) - pm.displayWarning("Old hotkey: " +name+ " Deleted" ) - + pm.displayWarning("Old hotkey: " + name + " Deleted") pm.runTimeCommand(name, ann=ann, c=rCmd, cat="mGear") - pm.displayInfo("Hotkey: " +name+ " created" ) + pm.displayInfo("Hotkey: " + name + " created") + def createHotkeys(*args): """Create mGear custom hotkey functions ready to be use. + This command doesn't set the hotkey binding. Only create the functions. Args: @@ -131,23 +108,10 @@ def frameSelectedCenter(): ''' createRunTimeCommand("mGear_frameCenter", rCmd, ann="") - # reset SRT rCmd = ''' -import pymel.core as pm -def resetSRT(oColl): - trList = ['.tx','.ty','.tz','.rx','.ry','.rz'] - sList = ['.sx','.sy','.sz'] - - for attr in [(o, x) for o in oColl for x in trList]: - try: pm.Attribute(attr[0] + attr[1]).set(0) - except: pass - for attr in [(o, x) for o in oColl for x in sList]: - try: pm.Attribute(attr[0] + attr[1]).set(1) - except: pass -#this ensure it is one undo step -doReset = pm.Callback(resetSRT, pm.selected() ) -doReset() +from mgear.maya import attribute +attribute.smart_reset() ''' createRunTimeCommand("mGear_resetSRT", rCmd, ann="") @@ -157,11 +121,11 @@ def resetSRT(oColl): import maya.cmds as cmds import maya.mel as mel gMainWindow = mel.eval('$temp1=$gMainWindow') -acti = cmds.window( gMainWindow, q=True, titleBar=True ) +acti = cmds.window( gMainWindow, q=True, titleBar=True) if acti: - cmds.window( gMainWindow, e=True, titleBar=False ) + cmds.window( gMainWindow, e=True, titleBar=False) else: - cmds.window( gMainWindow, e=True, titleBar=True ) + cmds.window( gMainWindow, e=True, titleBar=True) ''' createRunTimeCommand("mGear_maximizeMaya", rCmd, ann="") @@ -227,8 +191,6 @@ def resetSRT(oColl): ''' createRunTimeCommand("mGear_align2Transforms", rCmd, ann="") - - # inspect property rCmd = ''' import mgear.maya.shifter.gui as gui @@ -298,7 +260,6 @@ def resetSRT(oColl): ''' createRunTimeCommand("mGear_walkMirror", rCmd, ann="") - # reset camera persp rCmd = ''' import pymel.core as pm @@ -310,7 +271,6 @@ def resetSRT(oColl): pm.displayInfo("mGear Hotkeys creation finish.") - # walk transform child add rCmd = ''' import pymel.core as pm @@ -363,4 +323,3 @@ def resetSRT(oColl): ''' createRunTimeCommand("mGear_walkMirrorAdd", rCmd, ann="") - diff --git a/scripts/mgear/maya/rigbits/widgets.py b/scripts/mgear/maya/rigbits/widgets.py index 14773e2..ad06dfb 100644 --- a/scripts/mgear/maya/rigbits/widgets.py +++ b/scripts/mgear/maya/rigbits/widgets.py @@ -1,57 +1,33 @@ -# MGEAR is under the terms of the MIT License +"""Rigbits widgets""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -## Rigbits widgets - -import mgear.maya.pyqt as gqt -import mgear.widgets as gWidgets - - -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from mgear import widgets +from mgear.vendor.Qt import QtWidgets ################################################ # CUSTOM WIDGETS ################################################ -class TableWidgetDragRowsChannelWrangler(gWidgets.TableWidgetDragRows): - """TableWidgetDragRows subclass for channelWrangler - """ +class TableWidgetDragRowsChannelWrangler(widgets.TableWidgetDragRows): + """TableWidgetDragRows subclass for channelWrangler""" + def __init__(self, *args, **kwargs): - super(TableWidgetDragRowsChannelWrangler, self).__init__(*args, **kwargs) + super(TableWidgetDragRowsChannelWrangler, self).__init__(*args, + **kwargs) def dropEvent(self, event): if not event.isAccepted() and event.source() == self: drop_row = self.drop_on(event) rows = sorted(set(item.row() for item in self.selectedItems())) - rows_to_move = [[QtWidgets.QTableWidgetItem(self.item(row_index, column_index)) for column_index in range(self.columnCount())] - for row_index in rows] - rows_widgets_to_move = [ self.cellWidget(row_index, 4) for row_index in rows] + + rows_to_move = [[QtWidgets.QTableWidgetItem( + self.item(row_index, column_index)) + for column_index in range(self.columnCount())] + for row_index in rows] + + rows_widgets_to_move = [self.cellWidget(row_index, 4) + for row_index in rows] for row_index in reversed(rows): self.removeRow(row_index) @@ -63,16 +39,18 @@ def dropEvent(self, event): inRow = row_index + drop_row self.insertRow(inRow) for column_index, column_data in enumerate(data): - if column_index !=4: + if column_index != 4: self.setItem(inRow, column_index, column_data) # self.setCellWidget(inRow, 4, rows_widgets_to_move[row_index]) - # moving the combo box crash maya. Current workaround is create a new one and destroy the old + # moving the combo box crash maya. Current workaround is + # create a new one and destroy the old # someone knows better way? Thanks :) operation_comboBox = QtWidgets.QComboBox() operation_comboBox.setObjectName("operation") operation_comboBox.addItem("Move Channel") operation_comboBox.addItem("Proxy Channel") - operation_comboBox.SizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContentsOnFirstShow) + size_polizy = QtWidgets.QComboBox.AdjustToContentsOnFirstShow + operation_comboBox.SizeAdjustPolicy(size_polizy) oComboOld = rows_widgets_to_move[row_index] self.setCellWidget(inRow, 4, operation_comboBox) operation_comboBox.setCurrentIndex(oComboOld.currentIndex()) @@ -84,4 +62,3 @@ def dropEvent(self, event): self.item(drop_row + row_index, 1).setSelected(True) self.item(drop_row + row_index, 2).setSelected(True) self.item(drop_row + row_index, 3).setSelected(True) - diff --git a/scripts/mgear/maya/shifter/__init__.py b/scripts/mgear/maya/shifter/__init__.py index 0aaa27e..962306c 100644 --- a/scripts/mgear/maya/shifter/__init__.py +++ b/scripts/mgear/maya/shifter/__init__.py @@ -1,119 +1,100 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Shifter base rig class. -""" - - -############################################# -# GLOBAL -############################################# -# Built in +"""Shifters Rig Main class.""" import os.path import datetime import getpass # Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes from pymel import versions # mgear import mgear import mgear.maya.utils -from mgear.maya.shifter.guide import RigGuide -from mgear.maya.shifter.guide import helperSlots -from mgear.maya.shifter.component import MainComponent +from . import guide, component + +from mgear.maya import primitive, attribute, skin, dag, icon -import mgear.maya.primitive as pri -import mgear.maya.icon as ico -import mgear.maya.attribute as att -import mgear.maya.skin as skin -import mgear.maya.dag as dag # check if we have loaded the necessary plugins -if not pm.pluginInfo("mgear_solvers", q=True, l=True): +if not pm.pluginInfo("mgear_solvers", q=True, loaded=True): try: pm.loadPlugin("mgear_solvers") - except: + except RuntimeError: pm.displayError("You need the mgear_solvers plugin!") -if not pm.pluginInfo("matrixNodes", q=True, l=True): +if not pm.pluginInfo("matrixNodes", q=True, loaded=True): pm.loadPlugin("matrixNodes") - COMPONENT_PATH = os.path.join(os.path.dirname(__file__), "component") TEMPLATE_PATH = os.path.join(COMPONENT_PATH, "templates") -SYNOPTIC_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, "synoptic","tabs")) +SYNOPTIC_PATH = os.path.abspath(os.path.join( + os.path.dirname(__file__), os.pardir, "synoptic", "tabs")) SHIFTER_COMPONENT_ENV_KEY = "MGEAR_SHIFTER_COMPONENT_PATH" + def getComponentDirectories(): + """Get the components directory""" return mgear.maya.utils.gatherCustomModuleDirectories( SHIFTER_COMPONENT_ENV_KEY, os.path.join(os.path.dirname(__file__), "component")) def importComponentGuide(comp_type): + """Import the Component guide""" dirs = getComponentDirectories() defFmt = "mgear.maya.shifter.component.{}.guide" customFmt = "{}.guide" - module = mgear.maya.utils.importFromStandardOrCustomDirectories(dirs, defFmt, customFmt, comp_type) + module = mgear.maya.utils.importFromStandardOrCustomDirectories( + dirs, defFmt, customFmt, comp_type) return module def importComponent(comp_type): + """Import the Component """ dirs = getComponentDirectories() defFmt = "mgear.maya.shifter.component.{}" customFmt = "{}" - module = mgear.maya.utils.importFromStandardOrCustomDirectories(dirs, defFmt, customFmt, comp_type) + module = mgear.maya.utils.importFromStandardOrCustomDirectories( + dirs, defFmt, customFmt, comp_type) return module -########################################################## -# RIG -########################################################## +def reloadComponents(*args): + """Reload all componets -class Rig(object): + Args: + *args: Dummy """ - The main rig class. + compDir = getComponentDirectories() + + for x in compDir: + for com in compDir[x]: + try: + reload(importComponent(com)) + reload(importComponentGuide(com)) + print "reload : {}.{}".format(os.path.basename(x), com) + except ImportError: + pass + + +class Rig(object): + """The main rig class. Attributes: - guide: RigGuide() initialization. + guide: guide.Rig() initialization. groups (dic): Rig groups (Maya sets) components (dic): Dictionary for the rig components. Keys are the component fullname (ie. 'arm_L0') componentsIndex (list): Components index list. """ + def __init__(self): - self.guide = RigGuide() + self.guide = guide.Rig() self.groups = {} self.subGroups = {} @@ -124,73 +105,90 @@ def __init__(self): self.customStepDic = {} def buildFromSelection(self): - """ - Build the rig from selected guides. + """Build the rig from selected guides.""" - """ startTime = datetime.datetime.now() - mgear.log("= GEAR RIG SYSTEM ==============================================") - - # Get the option first otherwise the change wight might do won't be taken - sel = pm.ls(selection=True) + mgear.log("\n" + "= SHIFTER RIG SYSTEM " + "=" * 46) - # Check guide is valid - self.guide.setFromSelection() - if not self.guide.valid: + self.stopBuild = False + selection = pm.ls(selection=True) + if not selection: + mgear.log( + "Select one or more guide root or a guide model", + mgear.sev_error) return - # Build - self.build() + self.preCustomStep(selection) - endTime = datetime.datetime.now() - finalTime = endTime - startTime - mgear.log("= GEAR BUILD RIG DONE ================ [ " + str(finalTime) + " ] ======") + if not self.stopBuild: + mgear.log("\n" + "= GUIDE VALIDATION " + "=" * 46) + # Check guide is valid + self.guide.setFromSelection() + if not self.guide.valid: + return + + # Build + mgear.log("\n" + "= BUILDING RIG " + "=" * 46) + self.build() + self.postCustomStep() + endTime = datetime.datetime.now() + finalTime = endTime - startTime + mgear.log("\n" + "= SHIFTER BUILD RIG DONE {} [ {} ] {}".format( + "=" * 16, + finalTime, + "=" * 7 + )) def build(self): - """ - Build the rig. - """ + """Build the rig.""" self.options = self.guide.values self.guides = self.guide.components self.customStepDic["mgearRun"] = self - # stop build triggered if a custom step fail - self.stopBuild = False + self.initialHierarchy() + self.processComponents() + self.finalize() - self.preCustomStep() - if not self.stopBuild: - self.initialHierarchy() - self.processComponents() - self.finalize() - self.postCustomStep() + return self.model - return self.model + def stepsList(self, checker, attr): + if self.options[checker] and self.options[attr]: + return self.options[attr].split(",") + else: + return None - def customStep(self, checker, attr): - if self.options[checker]: - customSteps = self.options[attr].split(",") + def customStep(self, customSteps=None): + if customSteps: for step in customSteps: if not self.stopBuild: - self.stopBuild = helperSlots.runStep(step.split("|")[-1][1:], self.customStepDic) + self.stopBuild = guide.helperSlots.runStep( + step.split("|")[-1][1:], self.customStepDic) else: pm.displayWarning("Build Stopped") break - def preCustomStep(self): - self.customStep("doPreCustomStep", "preCustomStep") - + def preCustomStep(self, selection): + if (selection[0].hasAttr("ismodel") and + selection[0].attr("doPreCustomStep").get()): + customSteps = selection[0].attr("preCustomStep").get() + if customSteps: + mgear.log("\n" + "= PRE CUSTOM STEPS " + "=" * 46) + self.customStep(customSteps.split(",")) def postCustomStep(self): - self.customStep("doPostCustomStep", "postCustomStep") - + customSteps = self.stepsList("doPostCustomStep", "postCustomStep") + if customSteps: + mgear.log("\n" + "= POST CUSTOM STEPS " + "=" * 46) + self.customStep(customSteps) def initialHierarchy(self): - """ - Build the initial hierarchy of the rig. - Create the rig model, the main properties, and a couple of base organisation nulls. + """Build the initial hierarchy of the rig. + + Create the rig model, the main properties, + and a couple of base organisation nulls. Get the global size of the rig. """ @@ -198,51 +196,84 @@ def initialHierarchy(self): # -------------------------------------------------- # Model - self.model = pri.addTransformFromPos(None, self.options["rig_name"]) - att.lockAttribute(self.model) + self.model = primitive.addTransformFromPos( + None, self.options["rig_name"]) + attribute.lockAttribute(self.model) - # -------------------------------------------------- + # ------------------------- ------------------------- # Global Ctl - self.global_ctl = self.addCtl(self.model, "global_C0_ctl", dt.Matrix(), self.options["C_color_fk"], "crossarrow", w=10) - att.setRotOrder(self.global_ctl, "ZXY") + if self.options["worldCtl"]: + self.global_ctl = self.addCtl(self.model, + "world_ctl", + datatypes.Matrix(), + self.options["C_color_fk"], + "circle", w=10) + else: + self.global_ctl = self.addCtl(self.model, + "global_C0_ctl", + datatypes.Matrix(), + self.options["C_color_fk"], + "crossarrow", + w=10) + attribute.setRotOrder(self.global_ctl, "ZXY") # -------------------------------------------------- # Setup in world Space - self.setupWS = pri.addTransformFromPos(self.model, "setup") - att.lockAttribute(self.setupWS) + self.setupWS = primitive.addTransformFromPos(self.model, "setup") + attribute.lockAttribute(self.setupWS) # -------------------------------------------------- # INFOS - self.isRig_att = att.addAttribute(self.model, "is_rig", "bool", True) - self.rigName_att = att.addAttribute(self.model, "rig_name", "string", self.options["rig_name"]) - self.user_att = att.addAttribute(self.model, "user", "string", getpass.getuser()) - self.isWip_att = att.addAttribute(self.model, "wip", "bool", self.options["mode"] != 0) - self.date_att = att.addAttribute(self.model, "date", "string", str(datetime.datetime.now())) - self.mayaVersion_att = att.addAttribute(self.model, "maya_version", "string", str(pm.mel.eval("getApplicationVersionAsFloat"))) - self.gearVersion_att = att.addAttribute(self.model, "gear_version", "string", mgear.getVersion()) - self.synoptic_att = att.addAttribute(self.model, "synoptic", "string", str(self.options["synoptic"])) - self.comments_att = att.addAttribute(self.model, "comments", "string", str(self.options["comments"])) - self.ctlVis_att = att.addAttribute(self.model, "ctl_vis", "bool", True) - self.jntVis_att = att.addAttribute(self.model, "jnt_vis", "bool", True) - - self.qsA_att = att.addAttribute(self.model, "quickselA", "string", "") - self.qsB_att = att.addAttribute(self.model, "quickselB", "string", "") - self.qsC_att = att.addAttribute(self.model, "quickselC", "string", "") - self.qsD_att = att.addAttribute(self.model, "quickselD", "string", "") - self.qsE_att = att.addAttribute(self.model, "quickselE", "string", "") - self.qsF_att = att.addAttribute(self.model, "quickselF", "string", "") - - - self.rigGroups = self.model.addAttr( "rigGroups", at='message', m=1 ) - self.rigPoses = self.model.addAttr( "rigPoses", at='message', m=1 ) + self.isRig_att = attribute.addAttribute( + self.model, "is_rig", "bool", True) + self.rigName_att = attribute.addAttribute( + self.model, "rig_name", "string", self.options["rig_name"]) + self.user_att = attribute.addAttribute( + self.model, "user", "string", getpass.getuser()) + self.isWip_att = attribute.addAttribute( + self.model, "wip", "bool", self.options["mode"] != 0) + self.date_att = attribute.addAttribute( + self.model, "date", "string", str(datetime.datetime.now())) + self.mayaVersion_att = attribute.addAttribute( + self.model, "maya_version", "string", + str(pm.mel.eval("getApplicationVersionAsFloat"))) + self.gearVersion_att = attribute.addAttribute( + self.model, "gear_version", "string", mgear.getVersion()) + self.synoptic_att = attribute.addAttribute( + self.model, "synoptic", "string", str(self.options["synoptic"])) + self.comments_att = attribute.addAttribute( + self.model, "comments", "string", str(self.options["comments"])) + self.ctlVis_att = attribute.addAttribute( + self.model, "ctl_vis", "bool", True) + self.jntVis_att = attribute.addAttribute( + self.model, "jnt_vis", "bool", True) + + self.qsA_att = attribute.addAttribute( + self.model, "quickselA", "string", "") + self.qsB_att = attribute.addAttribute( + self.model, "quickselB", "string", "") + self.qsC_att = attribute.addAttribute( + self.model, "quickselC", "string", "") + self.qsD_att = attribute.addAttribute( + self.model, "quickselD", "string", "") + self.qsE_att = attribute.addAttribute( + self.model, "quickselE", "string", "") + self.qsF_att = attribute.addAttribute( + self.model, "quickselF", "string", "") + + self.rigGroups = self.model.addAttr("rigGroups", at='message', m=1) + self.rigPoses = self.model.addAttr("rigPoses", at='message', m=1) + + # Connect global visibility + pm.connectAttr(self.ctlVis_att, self.global_ctl.attr("visibility")) + attribute.lockAttribute(self.global_ctl, ['v']) # -------------------------------------------------- # Basic set of null if self.options["joint_rig"]: - self.jnt_org = pri.addTransformFromPos(self.model, "jnt_org") + self.jnt_org = primitive.addTransformFromPos(self.model, "jnt_org") pm.connectAttr(self.jntVis_att, self.jnt_org.attr("visibility")) - def processComponents(self): """ Process the components of the rig, following the creation steps. @@ -252,36 +283,35 @@ def processComponents(self): self.components_infos = {} for comp in self.guide.componentsIndex: - guide = self.guides[comp] - mgear.log("Init : "+ guide.fullName + " ("+guide.type+")") + guide_ = self.guides[comp] + mgear.log("Init : " + guide_.fullName + " (" + guide_.type + ")") - module = importComponent(guide.type) - Component = getattr(module , "Component") + module = importComponent(guide_.type) + Component = getattr(module, "Component") - component = Component(self, guide) - if component.fullName not in self.componentsIndex: - self.components[component.fullName] = component - self.componentsIndex.append(component.fullName) + comp = Component(self, guide_) + if comp.fullName not in self.componentsIndex: + self.components[comp.fullName] = comp + self.componentsIndex.append(comp.fullName) - self.components_infos[component.fullName] = [guide.compType, guide.getVersion(), guide.author] + self.components_infos[comp.fullName] = [ + guide_.compType, guide_.getVersion(), guide_.author] # Creation steps - self.steps = MainComponent.steps + self.steps = component.Main.steps for i, name in enumerate(self.steps): # for count, compName in enumerate(self.componentsIndex): for compName in self.componentsIndex: - component = self.components[compName] - mgear.log(name+" : "+ component.fullName + " ("+component.type+")") - component.stepMethods[i]() + comp = self.components[compName] + mgear.log(name + " : " + comp.fullName + + " (" + comp.type + ")") + comp.stepMethods[i]() - if self.options["step"] >= 1 and i >= self.options["step"]-1: + if self.options["step"] >= 1 and i >= self.options["step"] - 1: break - def finalize(self): - """ - Finalize the rig. - """ + """Finalize the rig.""" groupIdx = 0 # Properties -------------------------------------- @@ -297,38 +327,36 @@ def finalize(self): mgear.log("Creating groups") # Retrieve group content from components for name in self.componentsIndex: - component = self.components[name] - for name, objects in component.groups.items(): + component_ = self.components[name] + for name, objects in component_.groups.items(): self.addToGroup(objects, name) - for name, objects in component.subGroups.items(): + for name, objects in component_.subGroups.items(): self.addToSubGroup(objects, name) - - #Create master set to group all the groups - masterSet = pm.sets(n=self.model.name()+"_sets_grp", em=True) + # Create master set to group all the groups + masterSet = pm.sets(n=self.model.name() + "_sets_grp", em=True) pm.connectAttr(masterSet.message, self.model.rigGroups[groupIdx]) groupIdx += 1 # Creating all groups pm.select(cl=True) for name, objects in self.groups.items(): - s = pm.sets(n=self.model.name()+"_"+name+"_grp") - s.union( objects) + s = pm.sets(n=self.model.name() + "_" + name + "_grp") + s.union(objects) pm.connectAttr(s.message, self.model.rigGroups[groupIdx]) groupIdx += 1 masterSet.add(s) for parentGroup, subgroups in self.subGroups.items(): - pg = pm.PyNode(self.model.name()+"_"+parentGroup+"_grp") + pg = pm.PyNode(self.model.name() + "_" + parentGroup + "_grp") for sg in subgroups: - sub = pm.PyNode(self.model.name()+"_"+sg+"_grp") + sub = pm.PyNode(self.model.name() + "_" + sg + "_grp") if sub in masterSet.members(): masterSet.remove(sub) pg.add(sub) - - # Bind pose --------------------------------------- - print self.groups["controllers"] + # controls_grp = self.groups["controllers"] + # pprint(controls_grp, stream=None, indent=1, width=100) pm.select(self.groups["controllers"]) node = pm.dagPose(save=True, selection=True) pm.connectAttr(node.message, self.model.rigPoses[0]) @@ -340,35 +368,36 @@ def finalize(self): pm.displayInfo("Importing Skin") skin.importSkin(self.options["skin"]) - except: - pm.displayWarning("Skin doesn't exist or is not correct. "+self.options["skin"]+" Skipped!") - + except RuntimeError: + pm.displayWarning( + "Skin doesn't exist or is not correct. " + + self.options["skin"] + " Skipped!") - def addCtl(self, parent, name, m, color, icon, **kwargs): - """ - Create the control and apply the shape, if this is alrealdy stored + def addCtl(self, parent, name, m, color, iconShape, **kwargs): + """Create the control and apply the shape, if this is alrealdy stored in the guide controllers grp. Args: parent (dagNode): The control parent name (str): The control name. m (matrix): The transfromation matrix for the control. - color (int or list of float): The color for the control in idex or RGB. - icon (str): The controls default shape. - kwargs (variant): Other arguments for the icon type variations. + color (int or list of float): The color for the control in index + or RGB. + iconShape (str): The controls default shape. + kwargs (variant): Other arguments for the iconShape type variations Returns: dagNode: The Control. """ - bufferName = name+"_controlBuffer" + bufferName = name + "_controlBuffer" if bufferName in self.guide.controllers.keys(): ctl_ref = self.guide.controllers[bufferName] - ctl = pri.addTransform(parent, name, m) + ctl = primitive.addTransform(parent, name, m) for shape in ctl_ref.getShapes(): ctl.addChild(shape, shape=True, add=True) else: - ctl = ico.create(parent, name, m, color, icon, **kwargs) + ctl = icon.create(parent, name, m, color, iconShape, **kwargs) self.addToGroup(ctl, "controllers") @@ -376,17 +405,14 @@ def addCtl(self, parent, name, m, color, icon, **kwargs): for oShape in ctl.getShapes(): oShape.isHistoricallyInteresting.set(False) - #set controller tag + # set controller tag if versions.current() >= 201650: pm.controller(ctl) - return ctl - def addToGroup(self, objects, names=["hidden"]): - """ - Add the object in a collection for later group creation. + """Add the object in a collection for later group creation. Args: objects (dagNode or list of dagNode): Object to put in the group. @@ -406,12 +432,13 @@ def addToGroup(self, objects, names=["hidden"]): self.groups[name].extend(objects) def addToSubGroup(self, subGroups, parentGroups=["hidden"]): - """ - Add the object in a collection for later SubGroup creation. + """Add the object in a collection for later SubGroup creation. Args: - subGroups (dagNode or list of dagNode): Groups (maya set) to add as a Subgroup. - namparentGroupses (str or list of str): Names of the parent groups to create. + subGroups (dagNode or list of dagNode): Groups (maya set) to add + as a Subgroup. + namparentGroupses (str or list of str): Names of the parent groups + to create. """ @@ -426,10 +453,8 @@ def addToSubGroup(self, subGroups, parentGroups=["hidden"]): self.subGroups[pg] = [] self.subGroups[pg].extend(subGroups) - def getLocalName(self, guideName): - """ - This function return the local name, cutting the Maya fullname + """This function return the local name, cutting the Maya fullname and taking the latest part. ie. "parentA|parentB|arm_C0_root" will return "arm_C0_root" @@ -446,7 +471,6 @@ def getLocalName(self, guideName): localName = guideName.split("|")[-1] return localName - def getComponentName(self, guideName, local=True): """ This function return the component name @@ -469,8 +493,7 @@ def getComponentName(self, guideName, local=True): return comp_name def getRelativeName(self, guideName): - """ - This function return the name of the relative in the guide + """This function return the name of the relative in the guide ie. "arm_C0_root" return "root" @@ -488,10 +511,8 @@ def getRelativeName(self, guideName): relative_name = "_".join(localName.split("_")[2:]) return relative_name - def findRelative(self, guideName): - """ - Return the objects in the rig matching the guide object. + """Return the objects in the rig matching the guide object. Args: guideName (str): Name of the guide object. @@ -512,10 +533,8 @@ def findRelative(self, guideName): return self.global_ctl return self.components[comp_name].getRelation(relative_name) - def findControlRelative(self, guideName): - """ - Return the control objects in the rig matching the guide object. + """Return the control objects in the rig matching the guide object. Args: guideName (str): Name of the guide object. @@ -539,8 +558,7 @@ def findControlRelative(self, guideName): # TODO: update findComponent and other find methods with new funtions like # comp_name and others. Better composability def findComponent(self, guideName): - """ - Return the component from a guide Name. + """Return the component from a guide Name. Args: guideName (str): Name of the guide object. @@ -561,8 +579,7 @@ def findComponent(self, guideName): return self.components[comp_name] def findUIHost(self, guideName): - """ - Return the UI host of the compoent + """Return the UI host of the compoent Args: guideName (str): Name of the guide object. @@ -582,6 +599,7 @@ def findUIHost(self, guideName): return self.ui if self.components[comp_name].ui is None: - self.components[comp_name].ui = pm.UIHost(self.components[comp_name].root) + self.components[comp_name].ui = pm.UIHost( + self.components[comp_name].root) return self.components[comp_name].ui diff --git a/scripts/mgear/maya/shifter/component/__init__.py b/scripts/mgear/maya/shifter/component/__init__.py index d58aacb..b47d735 100644 --- a/scripts/mgear/maya/shifter/component/__init__.py +++ b/scripts/mgear/maya/shifter/component/__init__.py @@ -1,28 +1,3 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 """ Shifter component rig class. @@ -33,32 +8,29 @@ ############################################# # pymel import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes from pymel import versions # mgear import mgear -import mgear.maya.primitive as pri -import mgear.maya.vector as vec -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.applyop as aop -import mgear.maya.node as nod -import mgear.maya.icon as ico +from mgear.maya import primitive, vector, transform +from mgear.maya import attribute, applyop, node, icon ############################################# # COMPONENT ############################################# -class MainComponent(object): - """ - Main component class + + +class Main(object): + """Main component class Attributes: rig (Rig): The parent Rig of this component. guide (ComponentGuide): The guide for this component. """ - steps = ["Objects", "Properties", "Operators", "Connect", "Joints", "Finalize"] + steps = ["Objects", "Properties", "Operators", + "Connect", "Joints", "Finalize"] local_params = ("tx", "ty", "tz", "rx", "ry", "rz", "ro", "sx", "sy", "sz") t_params = ("tx", "ty", "tz") @@ -66,9 +38,9 @@ class MainComponent(object): s_params = ("sx", "sy", "sz") tr_params = ("tx", "ty", "tz", "rx", "ry", "rz", "ro") rs_params = ("rx", "ry", "rz", "ro", "sx", "sy", "sz") - x_axis = dt.Vector(1,0,0) - y_axis = dt.Vector(0,1,0) - z_axis = dt.Vector(0,0,1) + x_axis = datatypes.Vector(1, 0, 0) + y_axis = datatypes.Vector(0, 1, 0) + z_axis = datatypes.Vector(0, 0, 1) def __init__(self, rig, guide): @@ -103,22 +75,23 @@ def __init__(self, rig, guide): # -------------------------------------------------- # Builder init - self.groups = {} ## Dictionary of groups - self.subGroups = {} ## Dictionary of subGroups - self.controlers = [] ## List of all the controllers of the component + self.groups = {} # Dictionary of groups + self.subGroups = {} # Dictionary of subGroups + self.controlers = [] # List of all the controllers of the component # -------------------------------------------------- # Connector init self.connections = {} - self.connections["standard"] = self.connect_standard + self.connections["standard"] = self.connect_standard self.relatives = {} - self.jointRelatives = {} #joint relatives mapping for automatic connection + self.jointRelatives = {} # joint relatives mapping for auto connection self.controlRelatives = {} # -------------------------------------------------- # Joint positions init - # jnt_pos is a list of lists [Joint position object + name + optional flag "parent_jnt_org" or object fullName ] + # jnt_pos is a list of lists [Joint position object + name + optional + # flag "parent_jnt_org" or object fullName ] self.jnt_pos = [] self.jointList = [] @@ -126,15 +99,18 @@ def __init__(self, rig, guide): # -------------------------------------------------- # Step - self.stepMethods = [eval("self.step_0%s"%i) for i in range(len(self.steps))] + self.stepMethods = [eval("self.step_0%s" % i) + for i in range(len(self.steps))] # ===================================================== # BUILDING STEP # ===================================================== def step_00(self): - """ - Step 00. PreScript, initial Hierarchy, create objects and set the connection relation. + """Step 00. + + PreScript, initial Hierarchy, create objects and set the connection + relation. """ self.preScript() self.initialHierarchy() @@ -143,10 +119,10 @@ def step_00(self): self.setRelation() return - def step_01(self): - """ - Step 01. Get the properties host, create parameters and set layout and logic. + """Step 01. + + Get the properties host, create parameters and set layout and logic. """ self.getHost() self.validateProxyChannels() @@ -154,7 +130,6 @@ def step_01(self): self.addAttributes() return - def step_02(self): """ Step 02. Apply all the operators. @@ -162,7 +137,6 @@ def step_02(self): self.addOperators() return - def step_03(self): """ Step 03. Connect the component to the rest of the rig. @@ -173,7 +147,6 @@ def step_03(self): self.postConnect() return - def step_04(self): """ Step 04. Joint structure creation. @@ -181,7 +154,6 @@ def step_04(self): self.jointStructure() return - def step_05(self): """ Step 05. Finalize the component and post Script. @@ -198,37 +170,43 @@ def preScript(self): """ return - def initialHierarchy(self): """ Create the inital structure for the rig. """ # Root - self.root = pri.addTransformFromPos(self.model, self.getName("root"), self.guide.pos["root"]) - self.addToGroup( self.root, names=["componentsRoots"]) - - #infos - att.addAttribute(self.root, "componentType", "string", self.guide.compType) - att.addAttribute(self.root, "componentName", "string", self.guide.compName) - att.addAttribute(self.root, "componentVersion", "string", str(self.guide.version)[1:-1]) - att.addAttribute(self.root, "componentAuthor", "string", self.guide.author) - att.addAttribute(self.root, "componentURL", "string", self.guide.url) - att.addAttribute(self.root, "componentEmail", "string", self.guide.email) + self.root = primitive.addTransformFromPos( + self.model, self.getName("root"), self.guide.pos["root"]) + self.addToGroup(self.root, names=["componentsRoots"]) + + # infos + attribute.addAttribute(self.root, "componentType", + "string", self.guide.compType) + attribute.addAttribute(self.root, "componentName", + "string", self.guide.compName) + attribute.addAttribute(self.root, "componentVersion", + "string", str(self.guide.version)[1:-1]) + attribute.addAttribute(self.root, "componentAuthor", + "string", self.guide.author) + attribute.addAttribute(self.root, "componentURL", + "string", self.guide.url) + attribute.addAttribute(self.root, "componentEmail", + "string", self.guide.email) # joint -------------------------------- if self.options["joint_rig"]: - self.component_jnt_org = pri.addTransform(self.rig.jnt_org, self.getName("jnt_org")) - # The initial assigment of the active jnt and the parent relative jnt is the same, later will be updated base in the user options + self.component_jnt_org = primitive.addTransform( + self.rig.jnt_org, self.getName("jnt_org")) + # The initial assigment of the active jnt and the parent relative + # jnt is the same, later will be updated base in the user options self.active_jnt = self.component_jnt_org self.parent_relative_jnt = self.component_jnt_org return - def addObjects(self): - """ - This method creates the objects of the component. + """This method creates the objects of the component. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -236,20 +214,22 @@ def addObjects(self): """ return - def addJoint(self, obj, name, newActiveJnt=None, UniScale=True, segComp=0, gearMulMatrix=True): - """ - Add joint as child of the active joint or under driver object. + def addJoint(self, obj, name, newActiveJnt=None, UniScale=True, segComp=0, + gearMulMatrix=True): + """Add joint as child of the active joint or under driver object. Args: obj (dagNode): The input driver object for the joint. name (str): The joint name. - newActiveJnt (bool or dagNode): If a joint is pass, this joint will be the active joint - and parent of the newly created joint. - UniScale (bool): Connects the joint scale with the Z axis for a unifor scalin, if set False - will connect with each axis separated. - segComp (bool): Set True or False the segment compensation in the joint.. - gearMulMatrix (bool): Use the custom gear_multiply matrix node, if False will use - Maya's default mulMatrix node. + newActiveJnt (bool or dagNode): If a joint is pass, this joint will + be the active joint and parent of the newly created joint. + UniScale (bool): Connects the joint scale with the Z axis for a + unifor scalin, if set Falsewill connect with each axis + separated. + segComp (bool): Set True or False the segment compensation in the + joint.. + gearMulMatrix (bool): Use the custom gear_multiply matrix node, if + False will use Maya's default mulMatrix node. Returns: dagNode: The newly created joint. @@ -260,36 +240,44 @@ def addJoint(self, obj, name, newActiveJnt=None, UniScale=True, segComp=0, gearM if newActiveJnt: self.active_jnt = newActiveJnt - jnt = pri.addJoint(self.active_jnt, self.getName(str(name) + "_jnt"), tra.getTransform(obj)) - #All new jnts are the active by default + jnt = primitive.addJoint(self.active_jnt, self.getName( + str(name) + "_jnt"), transform.getTransform(obj)) + # All new jnts are the active by default self.active_jnt = jnt if gearMulMatrix: - mulmat_node = aop.gear_mulmatrix_op(obj + ".worldMatrix", jnt + ".parentInverseMatrix") - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") + mulmat_node = applyop.gear_mulmatrix_op( + obj + ".worldMatrix", jnt + ".parentInverseMatrix") + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".output") m = mulmat_node.attr('output').get() else: - mulmat_node = nod.createMultMatrixNode(obj + ".worldMatrix", jnt + ".parentInverseMatrix") - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".matrixSum") + mulmat_node = node.createMultMatrixNode( + obj + ".worldMatrix", jnt + ".parentInverseMatrix") + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".matrixSum") m = mulmat_node.attr('matrixSum').get() - pm.connectAttr(dm_node+".outputTranslate", jnt+".t") - pm.connectAttr(dm_node+".outputRotate", jnt+".r") + pm.connectAttr(dm_node + ".outputTranslate", jnt + ".t") + pm.connectAttr(dm_node + ".outputRotate", jnt + ".r") # TODO: fix squash stretch solver to scale the joint uniform - # the next line cheat the uniform scaling only fo X or Y axis oriented joints + # the next line cheat the uniform scaling only fo X or Y axis + # oriented joints if UniScale: - pm.connectAttr(dm_node+".outputScaleZ", jnt+".sx") - pm.connectAttr(dm_node+".outputScaleZ", jnt+".sy") - pm.connectAttr(dm_node+".outputScaleZ", jnt+".sz") + pm.connectAttr(dm_node + ".outputScaleZ", jnt + ".sx") + pm.connectAttr(dm_node + ".outputScaleZ", jnt + ".sy") + pm.connectAttr(dm_node + ".outputScaleZ", jnt + ".sz") else: - pm.connectAttr(dm_node+".outputScale", jnt+".s") - pm.connectAttr(dm_node+".outputShear", jnt+".shear") + pm.connectAttr(dm_node + ".outputScale", jnt + ".s") + pm.connectAttr(dm_node + ".outputShear", jnt + ".shear") - # Segment scale compensate Off to avoid issues with the global scale + # Segment scale compensate Off to avoid issues with the global + # scale jnt.setAttr("segmentScaleCompensate", segComp) jnt.setAttr("jointOrient", 0, 0, 0) - # setting the joint orient compensation in order to have clean rotation channels + # setting the joint orient compensation in order to have clean + # rotation channels jnt.attr("jointOrientX").set(jnt.attr("rx").get()) jnt.attr("jointOrientY").set(jnt.attr("ry").get()) jnt.attr("jointOrientZ").set(jnt.attr("rz").get()) @@ -297,19 +285,21 @@ def addJoint(self, obj, name, newActiveJnt=None, UniScale=True, segComp=0, gearM im = m.inverse() if gearMulMatrix: - aop.gear_mulmatrix_op(mulmat_node.attr('output'), im, jnt,'r') + applyop.gear_mulmatrix_op(mulmat_node.attr('output'), + im, jnt, 'r') else: - nod.createMultMatrixNode(mulmat_node.attr('matrixSum'), im, jnt,'r') + node.createMultMatrixNode( + mulmat_node.attr('matrixSum'), im, jnt, 'r') else: - jnt = pri.addJoint(obj, self.getName(str(name)+"_jnt"), tra.getTransform(obj)) + jnt = primitive.addJoint(obj, self.getName( + str(name) + "_jnt"), transform.getTransform(obj)) pm.connectAttr(self.rig.jntVis_att, jnt.attr("visibility")) self.addToGroup(jnt, "deformers") return jnt - def getNormalFromPos(self, pos): """ Get the normal vector from 3 positions. @@ -322,10 +312,10 @@ def getNormalFromPos(self, pos): """ if len(pos) < 3: - mgear.log("%s : Not enough references to define normal"%self.fullName, mgear.sev_error) - - return vec.getPlaneNormal(pos[0], pos[1], pos[2]) + mgear.log("%s : Not enough references to define normal" % + self.fullName, mgear.sev_error) + return vector.getPlaneNormal(pos[0], pos[1], pos[2]) def getBiNormalFromPos(self, pos): """ @@ -339,12 +329,20 @@ def getBiNormalFromPos(self, pos): """ if len(pos) < 3: - mgear.log("%s : Not enough references to define binormal"%self.fullName, mgear.sev_error) + mgear.log("%s : Not enough references to define binormal" % + self.fullName, mgear.sev_error) - return vec.getPlaneBiNormal(pos[0], pos[1], pos[2]) + return vector.getPlaneBiNormal(pos[0], pos[1], pos[2]) - - def addCtl(self, parent, name, m, color, icon, tp=None, **kwargs): + def addCtl(self, + parent, + name, + m, + color, + iconShape, + tp=None, + lp=True, + **kwargs): """ Create the control and apply the shape, if this is alrealdy stored in the guide controllers grp. @@ -353,101 +351,117 @@ def addCtl(self, parent, name, m, color, icon, tp=None, **kwargs): parent (dagNode): The control parent name (str): The control name. m (matrix): The transfromation matrix for the control. - color (int or list of float): The color for the control in idex or RGB. - icon (str): The controls default shape. - tp (dagNode): Tag Parent Control object to connect as a parent controller - kwargs (variant): Other arguments for the icon type variations. + color (int or list of float): The color for the control in index or + RGB. + iconShape (str): The controls default shape. + tp (dagNode): Tag Parent Control object to connect as a parent + controller + lp (bool): Lock the parent controller channels + kwargs (variant): Other arguments for the iconShape type variations Returns: dagNode: The Control. """ fullName = self.getName(name) - bufferName = fullName+"_controlBuffer" + bufferName = fullName + "_controlBuffer" if bufferName in self.rig.guide.controllers.keys(): ctl_ref = self.rig.guide.controllers[bufferName] - ctl = pri.addTransform(parent, fullName, m) + ctl = primitive.addTransform(parent, fullName, m) for shape in ctl_ref.getShapes(): ctl.addChild(shape, shape=True, add=True) - pm.rename(shape, fullName+"Shape") - ico.setcolor(ctl, color) + pm.rename(shape, fullName + "Shape") + icon.setcolor(ctl, color) else: - ctl = ico.create(parent, fullName, m, color, icon, **kwargs) + ctl = icon.create(parent, fullName, m, color, iconShape, **kwargs) # create the attributes to handlde mirror and symetrical pose - att.addAttribute(ctl, "invTx", "bool", 0, keyable=False, niceName="Invert Mirror TX") - att.addAttribute(ctl, "invTy", "bool", 0, keyable=False, niceName="Invert Mirror TY") - att.addAttribute(ctl, "invTz", "bool", 0, keyable=False, niceName="Invert Mirror TZ") - att.addAttribute(ctl, "invRx", "bool", 0, keyable=False, niceName="Invert Mirror RX") - att.addAttribute(ctl, "invRy", "bool", 0, keyable=False, niceName="Invert Mirror RY") - att.addAttribute(ctl, "invRz", "bool", 0, keyable=False, niceName="Invert Mirror RZ") - att.addAttribute(ctl, "invSx", "bool", 0, keyable=False, niceName="Invert Mirror SX") - att.addAttribute(ctl, "invSy", "bool", 0, keyable=False, niceName="Invert Mirror SY") - att.addAttribute(ctl, "invSz", "bool", 0, keyable=False, niceName="Invert Mirror SZ") + attribute.addAttribute(ctl, "invTx", "bool", 0, keyable=False, + niceName="Invert Mirror TX") + attribute.addAttribute(ctl, "invTy", "bool", 0, keyable=False, + niceName="Invert Mirror TY") + attribute.addAttribute(ctl, "invTz", "bool", 0, keyable=False, + niceName="Invert Mirror TZ") + attribute.addAttribute(ctl, "invRx", "bool", 0, keyable=False, + niceName="Invert Mirror RX") + attribute.addAttribute(ctl, "invRy", "bool", 0, keyable=False, + niceName="Invert Mirror RY") + attribute.addAttribute(ctl, "invRz", "bool", 0, keyable=False, + niceName="Invert Mirror RZ") + attribute.addAttribute(ctl, "invSx", "bool", 0, keyable=False, + niceName="Invert Mirror SX") + attribute.addAttribute(ctl, "invSy", "bool", 0, keyable=False, + niceName="Invert Mirror SY") + attribute.addAttribute(ctl, "invSz", "bool", 0, keyable=False, + niceName="Invert Mirror SZ") if self.settings["ctlGrp"]: ctlGrp = self.settings["ctlGrp"] - self.addToGroup(ctl, ctlGrp, "controllers") + self.addToGroup(ctl, ctlGrp, "controllers") else: ctlGrp = "controllers" self.addToGroup(ctl, ctlGrp) - #lock the control parent attributes if is not a control - if parent not in self.groups[ctlGrp]: + # lock the control parent attributes if is not a control + if parent not in self.groups[ctlGrp] and lp: self.transform2Lock.append(parent) # Set the control shapes isHistoricallyInteresting for oShape in ctl.getShapes(): oShape.isHistoricallyInteresting.set(False) - #set controller tag + # set controller tag if versions.current() >= 201650: try: - oldTag = pm.PyNode( ctl.name()+"_tag" ) + oldTag = pm.PyNode(ctl.name() + "_tag") if not oldTag.controllerObject.connections(): - # NOTE: The next line is comment out. Because this will happend alot since maya does't clean - # controller tags after deleting the control Object of the tag. This have been log to Autodesk. + # NOTE: The next line is comment out. Because this will + # happend alot since maya does't clean + # controller tags after deleting the control Object of the + # tag. This have been log to Autodesk. # If orphane tags are found, it will be clean in silence. - # pm.displayWarning("Orphane Tag: %s will be delete and created new for: %s"%(oldTag.name(), ctl.name())) + # pm.displayWarning("Orphane Tag: %s will be delete and + # created new for: %s"%(oldTag.name(), ctl.name())) pm.delete(oldTag) - except: + except TypeError: pass pm.controller(ctl) - if tp: ctt = pm.PyNode(pm.controller(ctl, q=True)[0]) tpTagNode = pm.PyNode(pm.controller(tp, q=True)[0]) tpTagNode.cycleWalkSibling.set(True) pm.connectAttr(tpTagNode.prepopulate, ctt.prepopulate, f=True) # The connectAttr to the children attribute is giving error - # i.e: pm.connectAttr(ctt.attr("parent"), tpTagNode.attr("children"), na=True) + # i.e: pm.connectAttr(ctt.attr("parent"), + # tpTagNode.attr("children"), na=True) # if using the next available option tag - # I was expecting to use ctt.setParent(tp) but doest't work as expected. - # After reading the documentation this method looks prety useless. + # I was expecting to use ctt.setParent(tp) but doest't work as + # expected. + # After reading the documentation this method looks prety + # useless. # Looks like is boolean and works based on selection :( # this is a dirty loop workaround. Naaah! i = 0 while True: try: - pm.connectAttr(ctt.parent, tpTagNode.attr("children[%s]"%str(i))) + pm.connectAttr(ctt.parent, tpTagNode.attr( + "children[%s]" % str(i))) break - except: - i+=1 - if i >100: - pm.displayWarning("The controller tag for %s has reached the limit index of 100 children"%ctl.name()) + except RuntimeError: + i += 1 + if i > 100: + pm.displayWarning( + "The controller tag for %s has reached the " + "limit index of 100 children" % ctl.name()) break - - return ctl - def addToGroup(self, objects, names=["hidden"], parentGrp=None): - """ - Add the object in a collection for later group creation. + """Add the object in a collection for later group creation. Args: objects (dagNode or list of dagNode): Object to put in the group. @@ -472,33 +486,29 @@ def addToGroup(self, objects, names=["hidden"], parentGrp=None): if name not in self.subGroups[parentGrp]: self.subGroups[parentGrp].append(name) - - # ===================================================== # PROPERTY # ===================================================== def getHost(self): - """ - Get the host for the properties. - """ + """Get the host for the properties""" self.uihost = self.rig.findRelative(self.settings["ui_host"]) def validateProxyChannels(self): - """ - Check the Maya version to determinate if we can use proxy channels - and check user setting on the guide. + """Check the Maya version to determinate if we can use proxy channels + + Also check user setting on the guide. This feature is available from 2016.5 + """ - if versions.current() >= 201650 and self.options["proxyChannels"]: + if versions.current() >= 201650 and self.options["proxyChannels"]: self.validProxyChannels = True else: self.validProxyChannels = False def addAttributes(self): - """ - This method add the attributes of the component. + """This method add the attributes of the component. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -506,110 +516,139 @@ def addAttributes(self): """ return - def addFullNameParam(self): - """ - Add a parameter to the animation property. + """Add a parameter to the animation property. + Note that animatable and keyable are True per default. """ # attr = self.addAnimEnumParam("", "", 0, ["---------------"] ) if self.options["classicChannelNames"]: - attr = self.addAnimEnumParam(self.getName(), "__________", 0, [self.getName()] ) + attr = self.addAnimEnumParam( + self.getName(), "__________", 0, [self.getName()]) else: - attr = self.addAnimEnumParam(self.guide.compName, "__________", 0, [self.guide.compName] ) + attr = self.addAnimEnumParam( + self.guide.compName, "__________", 0, [self.guide.compName]) return attr + def addAnimParam(self, longName, niceName, attType, value, minValue=None, + maxValue=None, keyable=True, readable=True, storable=True, + writable=True): + """Add a parameter to the animation property. - def addAnimParam(self, longName, niceName, attType, value, minValue=None, maxValue=None, keyable=True, readable=True, storable=True, writable=True): - """ - Add a parameter to the animation property. Note that animatable and keyable are True per default. Args: longName (str): The attribute name. niceName (str): The attribute nice name. (optional) - attType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + attType (str): The Attribute Type.Exp:'string', 'bool', 'long', etc value (float or int): The default value. minValue (float or int): minimum value. (optional) maxValue (float or int): maximum value. (optional) keyable (bool): Set if the attribute is keyable or not. (optional) - readable (bool): Set if the attribute is readable or not. (optional) - storable (bool): Set if the attribute is storable or not. (optional) - writable (bool): Set if the attribute is writable or not. (optional) + readable (bool): Set if the attribute is readable or not.(optional) + storable (bool): Set if the attribute is storable or not.(optional) + writable (bool): Set if the attribute is writable or not.(optional) Returns: str: The long name of the new attribute """ if self.options["classicChannelNames"]: - attr = att.addAttribute(self.uihost, self.getName(longName), attType, value, niceName, None, minValue=minValue, maxValue=maxValue, keyable=keyable, readable=readable, storable=storable, writable=writable) + attr = attribute.addAttribute(self.uihost, self.getName(longName), + attType, value, niceName, None, + minValue=minValue, maxValue=maxValue, + keyable=keyable, readable=readable, + storable=storable, writable=writable) else: if self.uihost.hasAttr(self.getCompName(longName)): attr = self.uihost.attr(self.getCompName(longName)) else: - attr = att.addAttribute(self.uihost, self.getCompName(longName), attType, value, niceName, None, minValue=minValue, maxValue=maxValue, keyable=keyable, readable=readable, storable=storable, writable=writable) + attr = attribute.addAttribute(self.uihost, + self.getCompName(longName), + attType, value, niceName, None, + minValue=minValue, + maxValue=maxValue, + keyable=keyable, + readable=readable, + storable=storable, + writable=writable) return attr - ## Add a parameter to the animation property.\n + # Add a parameter to the animation property.\n # Note that animatable and keyable are True per default. # @param self - def addAnimEnumParam(self, longName, niceName, value, enum=[], keyable=True, readable=True, storable=True, writable=True): - """ - Add a parameter to the animation property. + def addAnimEnumParam(self, longName, niceName, value, enum=[], + keyable=True, readable=True, storable=True, + writable=True): + """Add a parameter to the animation property. + Note that animatable and keyable are True per default. Args: longName (str): The attribute name. niceName (str): The attribute nice name. (optional) - attType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + attType (str): The Attribute Type. Exp: 'string', 'bool', etc.. value (float or int): The default value. enum (list of str): The list of elements in the enumerate control keyable (bool): Set if the attribute is keyable or not. (optional) - readable (bool): Set if the attribute is readable or not. (optional) - storable (bool): Set if the attribute is storable or not. (optional) - writable (bool): Set if the attribute is writable or not. (optional) + readable (bool): Set if the attribute is readable or not.(optional) + storable (bool): Set if the attribute is storable or not.(optional) + writable (bool): Set if the attribute is writable or not.(optional) Returns: str: The long name of the new attribute """ if self.options["classicChannelNames"]: - attr = att.addEnumAttribute(self.uihost, self.getName(longName), value, enum, niceName, None, keyable=keyable, readable=readable, storable=storable, writable=writable) + attr = attribute.addEnumAttribute( + self.uihost, self.getName(longName), value, enum, niceName, + None, keyable=keyable, readable=readable, storable=storable, + writable=writable) else: if self.uihost.hasAttr(self.getCompName(longName)): attr = self.uihost.attr(self.getCompName(longName)) else: - attr = att.addEnumAttribute(self.uihost, self.getCompName(longName), value, enum, niceName, None, keyable=keyable, readable=readable, storable=storable, writable=writable) + attr = attribute.addEnumAttribute(self.uihost, + self.getCompName(longName), + value, enum, niceName, None, + keyable=keyable, + readable=readable, + storable=storable, + writable=writable) return attr - - def addSetupParam(self, longName, niceName, attType, value, minValue=None, maxValue=None, keyable=True, readable=True, storable=True, writable=True): - """ - Add a parameter to the setup property. + def addSetupParam(self, longName, niceName, attType, value, minValue=None, + maxValue=None, keyable=True, readable=True, + storable=True, writable=True): + """Add a parameter to the setup property. Note that animatable and keyable are False per default. Args: longName (str): The attribute name. niceName (str): The attribute nice name. (optional) - attType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + attType (str): The Attribute Type. Exp: 'string', 'bool', etc.. value (float or int): The default value. minValue (float or int): minimum value. (optional) maxValue (float or int): maximum value. (optional) - keyable (bool): Set if the attribute is keyable or not. (optional) - readable (bool): Set if the attribute is readable or not. (optional) - storable (bool): Set if the attribute is storable or not. (optional) - writable (bool): Set if the attribute is writable or not. (optional) + keyable (bool): Set if the attribute is keyable or not.(optional) + readable (bool): Set if the attribute is readable or not.(optional) + storable (bool): Set if the attribute is storable or not.(optional) + writable (bool): Set if the attribute is writable or not.(optional) Returns: str: The long name of the new attribute """ - attr = att.addAttribute(self.root, longName, attType, value, niceName, None, minValue=minValue, maxValue=maxValue, keyable=keyable, readable=readable, storable=storable, writable=writable) + attr = attribute.addAttribute(self.root, longName, attType, value, + niceName, None, minValue=minValue, + maxValue=maxValue, keyable=keyable, + readable=readable, storable=storable, + writable=writable) return attr @@ -617,8 +656,7 @@ def addSetupParam(self, longName, niceName, attType, value, minValue=None, maxVa # OPERATORS # ===================================================== def addOperators(self): - """ - This method add the operators of the component. + """This method add the operators of the component. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -631,8 +669,7 @@ def addOperators(self): # ===================================================== def addConnection(self): - """ - Add more connection definition to the set. + """Add more connection definition to the set. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -641,10 +678,8 @@ def addConnection(self): """ return - def setRelation(self): - """ - Set the relation beetween object from guide to rig. + """Set the relation beetween object from guide to rig. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -654,10 +689,8 @@ def setRelation(self): self.relatives[name] = self.root self.controlRelatives[name] = self.global_ctl - def getRelation(self, name): - """ - Return the relational object from guide to rig. + """Return the relational object from guide to rig. Args: name (str): Local name of the guide object. @@ -667,14 +700,14 @@ def getRelation(self, name): """ if name not in self.relatives.keys(): - mgear.log("Can't find reference for object : " + self.fullName + "." + name, mgear.sev_error) + mgear.log("Can't find reference for object : " + + self.fullName + "." + name, mgear.sev_error) return False return self.relatives[name] def getControlRelation(self, name): - """ - Return the relational object from guide to rig. + """Return the relational object from guide to rig. Args: name (str): Local name of the guide object. @@ -684,42 +717,52 @@ def getControlRelation(self, name): """ if name not in self.controlRelatives.keys(): - mgear.log("Control tag relative: Can't find reference for object : " + self.fullName + "." + name, mgear.sev_error) + mgear.log("Control tag relative: Can't find reference for " + " object : " + self.fullName + "." + name, + mgear.sev_error) return False return self.controlRelatives[name] def initControlTag(self): """Initialice the control tag parent. + The controllers tag are a new feature from Maya 2016.5 and up. Helps to stablish realtions with a custom walkpick. - Also tells maya how to evaluate the control properly on parallel evaluation + Also tells maya how to evaluate the control properly on parallel + evaluation + """ self.parentCtlTag = None if versions.current() >= 201650: parent_name = "none" if self.guide.parentComponent is not None: - parent_name = self.guide.parentComponent.getName(self.guide.parentLocalName) + parent_name = self.guide.parentComponent.getName( + self.guide.parentLocalName) self.parentCtlTag = self.rig.findControlRelative(parent_name) - def initConnector(self): - """ - Initialize the connections beetween the component and his parent component. + """Initialize the connections + + Initialize the connections beetween the component and his parent + component. + """ parent_name = "none" if self.guide.parentComponent is not None: - parent_name = self.guide.parentComponent.getName(self.guide.parentLocalName) + parent_name = self.guide.parentComponent.getName( + self.guide.parentLocalName) self.parent = self.rig.findRelative(parent_name) self.parent_comp = self.rig.findComponent(parent_name) - def connect(self): - """ - Connect the component to the rest of the rig using the defined connection. - """ + """Connect the component + Connect the component to the rest of the rig using the defined + connection. + + """ if self.settings["connector"] not in self.connections.keys(): mgear.log("Unable to connect object", mgear.sev_error) @@ -729,17 +772,19 @@ def connect(self): return True - def connect_standard(self): - """ + """Standard Connection + Standard connection definition. This is a simple parenting of the root. + """ self.parent.addChild(self.root) - def connect_standardWithIkRef(self): - """ + """Standard IK Connection + Standard connection definition with ik and upv references. + """ self.parent.addChild(self.root) @@ -747,11 +792,11 @@ def connect_standardWithIkRef(self): self.connectRef(self.settings["ikrefarray"], self.ik_cns) self.connectRef(self.settings["upvrefarray"], self.upv_cns, True) - - def connect_orientCns(self): - """ + """Connection with ori cns + Connection definition using orientation constraint. + """ self.parent.addChild(self.root) @@ -770,22 +815,21 @@ def connect_orientCns(self): ref.append(self.ik_cns) cns_node = pm.orientConstraint(*ref, maintainOffset=True) - cns_attr = pm.orientConstraint(cns_node, query=True, weightAliasList=True) + cns_attr = pm.orientConstraint( + cns_node, query=True, weightAliasList=True) for i, attr in enumerate(cns_attr): pm.setAttr(attr, 1.0) node_name = pm.createNode("condition") - pm.connectAttr(self.ikref_att, node_name+".firstTerm") - pm.setAttr(node_name+".secondTerm", i) - pm.setAttr(node_name+".operation", 0) - pm.setAttr(node_name+".colorIfTrueR", 1) - pm.setAttr(node_name+".colorIfFalseR", 0) - pm.connectAttr(node_name+".outColorR", attr) + pm.connectAttr(self.ikref_att, node_name + ".firstTerm") + pm.setAttr(node_name + ".secondTerm", i) + pm.setAttr(node_name + ".operation", 0) + pm.setAttr(node_name + ".colorIfTrueR", 1) + pm.setAttr(node_name + ".colorIfFalseR", 0) + pm.connectAttr(node_name + ".outColorR", attr) def connect_standardWithSimpleIkRef(self): - """ - Standard connection definition with simple IK reference. - """ + """Standard connection definition with simple IK reference.""" self.parent.addChild(self.root) @@ -812,7 +856,8 @@ def connect_averageParentCns(self): ref.append(self.ik_cns) cns_node = pm.parentConstraint(*ref, maintainOffset=True) - cns_attr = pm.parentConstraint(cns_node, query=True, weightAliasList=True) + cns_attr = pm.parentConstraint( + cns_node, query=True, weightAliasList=True) for i, attr in enumerate(cns_attr): pm.setAttr(attr, 1.0) @@ -839,7 +884,8 @@ def connectRef(self, refArray, cns_obj, upVAttr=None): ref.append(cns_obj) cns_node = pm.parentConstraint(*ref, maintainOffset=True) - cns_attr = pm.parentConstraint(cns_node, query=True, weightAliasList=True) + cns_attr = pm.parentConstraint( + cns_node, query=True, weightAliasList=True) # check if the ref Array is for IK or Up vector if upVAttr: oAttr = self.upvref_att @@ -848,16 +894,16 @@ def connectRef(self, refArray, cns_obj, upVAttr=None): for i, attr in enumerate(cns_attr): node_name = pm.createNode("condition") - pm.connectAttr(oAttr, node_name+".firstTerm") - pm.setAttr(node_name+".secondTerm", i) - pm.setAttr(node_name+".operation", 0) - pm.setAttr(node_name+".colorIfTrueR", 1) - pm.setAttr(node_name+".colorIfFalseR", 0) - pm.connectAttr(node_name+".outColorR", attr) - - def connectRef2(self, refArray, cns_obj, in_attr, init_ref=False, skipTranslate = False ): - """ - Connect the cns_obj to a multiple object using parentConstraint. + pm.connectAttr(oAttr, node_name + ".firstTerm") + pm.setAttr(node_name + ".secondTerm", i) + pm.setAttr(node_name + ".operation", 0) + pm.setAttr(node_name + ".colorIfTrueR", 1) + pm.setAttr(node_name + ".colorIfFalseR", 0) + pm.connectAttr(node_name + ".outColorR", attr) + + def connectRef2(self, refArray, cns_obj, in_attr, init_ref=False, + skipTranslate=False): + """Connect the cns_obj to a multiple object using parentConstraint. Args: refArray (string): List of driver objects divided by ",". @@ -865,8 +911,8 @@ def connectRef2(self, refArray, cns_obj, in_attr, init_ref=False, skipTranslate upVAttr (bool): Set if the ref Array is for IK or Up vector init_ref (list of dagNode): Set the initial default ref connections skipTranslate (bool): if True will skip the translation connections - """ + """ if refArray: ref_names = refArray.split(",") if len(ref_names) == 1: @@ -875,31 +921,37 @@ def connectRef2(self, refArray, cns_obj, in_attr, init_ref=False, skipTranslate else: ref = [] for ref_name in ref_names: - if self.rig.findRelative(ref_name) == self.rig.findRelative("return the global ctl"): - pass - else: + rrn = self.rig.findRelative(ref_name) + rgn = self.rig.findRelative("return the global ctl") + if rrn != rgn: ref.append(self.rig.findRelative(ref_name)) if init_ref: ref = init_ref + ref ref.append(cns_obj) if skipTranslate: - cns_node = pm.parentConstraint(*ref, maintainOffset=True, skipTranslate=["x","y","z"]) + cns_node = pm.parentConstraint( + *ref, + maintainOffset=True, + skipTranslate=["x", "y", "z"]) else: cns_node = pm.parentConstraint(*ref, maintainOffset=True) - cns_attr = pm.parentConstraint(cns_node, query=True, weightAliasList=True) + cns_attr = pm.parentConstraint( + cns_node, query=True, weightAliasList=True) for i, attr in enumerate(cns_attr): node_name = pm.createNode("condition") - pm.connectAttr(in_attr, node_name+".firstTerm") - pm.setAttr(node_name+".secondTerm", i) - pm.setAttr(node_name+".operation", 0) - pm.setAttr(node_name+".colorIfTrueR", 1) - pm.setAttr(node_name+".colorIfFalseR", 0) - pm.connectAttr(node_name+".outColorR", attr) + pm.connectAttr(in_attr, node_name + ".firstTerm") + pm.setAttr(node_name + ".secondTerm", i) + pm.setAttr(node_name + ".operation", 0) + pm.setAttr(node_name + ".colorIfTrueR", 1) + pm.setAttr(node_name + ".colorIfFalseR", 0) + pm.connectAttr(node_name + ".outColorR", attr) def connect_standardWithRotRef(self, refArray, cns_obj): - """ - Connect the cns_obj to a multiple object using parentConstraint, but skipping translation connection. + """Connect the cns_obj to a multiple object + + Connect the cns_obj to a multiple object using parentConstraint, but + skipping translation connection. Args: refArray (list of dagNode): List of driver objects @@ -914,21 +966,21 @@ def connect_standardWithRotRef(self, refArray, cns_obj): ref.append(self.rig.findRelative(ref_name)) ref.append(cns_obj) - cns_node = pm.parentConstraint(*ref, maintainOffset=True, skipTranslate=["x","y","z"]) - cns_attr = pm.parentConstraint(cns_node, query=True, weightAliasList=True) + cns_node = pm.parentConstraint( + *ref, maintainOffset=True, skipTranslate=["x", "y", "z"]) + cns_attr = pm.parentConstraint( + cns_node, query=True, weightAliasList=True) for i, attr in enumerate(cns_attr): node_name = pm.createNode("condition") - pm.connectAttr(self.ref_att, node_name+".firstTerm") - pm.setAttr(node_name+".secondTerm", i) - pm.setAttr(node_name+".operation", 0) - pm.setAttr(node_name+".colorIfTrueR", 1) - pm.setAttr(node_name+".colorIfFalseR", 0) - pm.connectAttr(node_name+".outColorR", attr) - + pm.connectAttr(self.ref_att, node_name + ".firstTerm") + pm.setAttr(node_name + ".secondTerm", i) + pm.setAttr(node_name + ".operation", 0) + pm.setAttr(node_name + ".colorIfTrueR", 1) + pm.setAttr(node_name + ".colorIfFalseR", 0) + pm.connectAttr(node_name + ".outColorR", attr) def postConnect(self): - """ - Post connection actions. + """Post connection actions. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -936,82 +988,110 @@ def postConnect(self): """ return - # ===================================================== # JOINTS STRUCTURE # ===================================================== def jointStructure(self): - """ - Handle the building of the joint structure, when we select jnt_org option. + """Build the Joint structure + + Handle the building of the joint structure, when we select jnt_org + option. """ - #get parent component joint + # get parent component joint if self.settings["useIndex"]: try: - self.active_jnt = self.parent_comp.jointList[self.settings["parentJointIndex"]] - except: - pm.displayWarning("The parent component for: %s don't have any joint with the index: %s."%(self.fullName, str(self.settings["parentJointIndex"]))) + self.active_jnt = self.parent_comp.jointList[ + self.settings["parentJointIndex"]] + except Exception: + pm.displayWarning( + "The parent component for: %s don't have " + "any joint with the index: %s." % + (self.fullName, str(self.settings["parentJointIndex"]))) else: parent_name = "none" if self.guide.parentComponent is not None: - parent_name = self.guide.parentComponent.getName(self.guide.parentLocalName) + parent_name = self.guide.parentComponent.getName( + self.guide.parentLocalName) relative_name = self.rig.getRelativeName(parent_name) oParent_comp = self.parent_comp while oParent_comp: try: - self.active_jnt = oParent_comp.jointList[oParent_comp.jointRelatives[relative_name]] - # when we search in the parent component for a active jnt we also store it for later retrive + self.active_jnt = oParent_comp.jointList[ + oParent_comp.jointRelatives[relative_name]] + # when we search in the parent component for a active jnt + # we also store it for later retrive self.parent_relative_jnt = self.active_jnt break - except: + except Exception: if oParent_comp.parent_comp: - parent_name = oParent_comp.guide.parentComponent.getName(oParent_comp.guide.parentLocalName) - relative_name = oParent_comp.rig.getRelativeName(parent_name) + pgpc = oParent_comp.guide.parentComponent + parent_name = pgpc.getName( + oParent_comp.guide.parentLocalName) + relative_name = oParent_comp.rig.getRelativeName( + parent_name) else: - pm.displayInfo("The parent components for: %s don't have joint List in any of them use the root off guide."%self.fullName) + pm.displayInfo( + "The parent components for: %s don't have joint " + "List in any of them use the root off guide." % + self.fullName) oParent_comp = oParent_comp.parent_comp # Joint creation for jpo in self.jnt_pos: - if len(jpo)>=3 and self.options["joint_rig"]: + if len(jpo) >= 3 and self.options["joint_rig"]: if jpo[2] == "component_jnt_org": newActiveJnt = self.component_jnt_org elif jpo[2] == "parent_relative_jnt": - # this option force the active jnt always to the parent relative jnt. - # if None the active jnt will be updated to the latest in each jnt creation + # this option force the active jnt always to the parent + # relative jnt. + # If None the active jnt will be updated to the latest in + # each jnt creation newActiveJnt = self.parent_relative_jnt else: try: - # here jpo[2] is also the string name of the jnt inside the component. IE: "root" - newActiveJnt = self.jointList[self.jointRelatives[jpo[2]]] + # here jpo[2] is also the string name of the jnt inside + # the component. IE: "root" + newActiveJnt = self.jointList[ + self.jointRelatives[jpo[2]]] - except: + except Exception: if jpo[2]: - pm.displayWarning( "Joint Structure creation: The object %s can't be found. Joint parent is NONE for %s, from %s"%(jpo[2], jpo[0], self.fullName)) + pm.displayWarning( + "Joint Structure creation: " + "The object %s can't be found. Joint parent is" + " NONE for %s, from %s" % + (jpo[2], jpo[0], self.fullName)) newActiveJnt = None else: newActiveJnt = None # Handle the uniform scale - if len(jpo)==4 and self.options["joint_rig"]: + if len(jpo) == 4 and self.options["joint_rig"]: uniScale = jpo[3] else: uniScale = True - self.jointList.append(self.addJoint(jpo[0], jpo[1], newActiveJnt, uniScale)) + # handle the matrix node connection + if len(jpo) == 5 and self.options["joint_rig"]: + gearMulMatrix = jpo[4] + else: + gearMulMatrix = True + self.jointList.append( + self.addJoint(jpo[0], jpo[1], newActiveJnt, uniScale, + gearMulMatrix=gearMulMatrix)) # ===================================================== # FINALIZE # ===================================================== def finalize(self): - """ - Finalize and clean the rig builing. - """ - #locking the attributes for all the ctl parents that are not ctl itself. + """Finalize and clean the rig builing.""" + # locking the attributes for all the ctl parents that are not ctl + # itself. for t in self.transform2Lock: - att.lockAttribute(t) + attribute.lockAttribute(t) return @@ -1027,11 +1107,10 @@ def postScript(self): # ===================================================== def getName(self, name="", side=None): - """ - Return the name for component element + """Return the name for component element Args: - name (str): The name to concatenate to the component name. (Optional) + name (str): The name to concatenate to component name. (Optional) side (str): The side (Optional). Returns: @@ -1044,14 +1123,12 @@ def getName(self, name="", side=None): name = str(name) if name: - return "_".join([self.name, side+str(self.index), name]) + return "_".join([self.name, side + str(self.index), name]) else: return self.fullName - def getCompName(self, name=""): - """ - Return the component type name + """Return the component type name Args: name (str): The name to concatenate to the component name. @@ -1062,23 +1139,22 @@ def getCompName(self, name=""): return "_".join([self.guide.compName, name]) - # ===================================================== # PROPERTIES # ===================================================== def getFullName(self): - """ - return the fullname of the component - """ + """return the fullname of the component""" return self.guide.fullName - def getType(self): - """ - return the type of the component + """return the type of the component """ return self.guide.type fullName = property(getFullName) type = property(getType) + + +# Backwards compatibility alias +MainComponent = Main diff --git a/scripts/mgear/maya/shifter/component/_templates/biped_guide.ma b/scripts/mgear/maya/shifter/component/_templates/biped_guide.ma index cffd70e..a2ae833 100644 --- a/scripts/mgear/maya/shifter/component/_templates/biped_guide.ma +++ b/scripts/mgear/maya/shifter/component/_templates/biped_guide.ma @@ -1,6 +1,6 @@ //Maya ASCII 2016R2 scene //Name: biped_guide.ma -//Last modified: Thu, Aug 31, 2017 04:57:05 PM +//Last modified: Wed, Dec 06, 2017 11:02:00 AM //Codeset: 932 requires maya "2016R2"; requires -nodeType "mgear_curveCns" "mgear_solvers" "2.1.0"; @@ -13,26 +13,26 @@ fileInfo "version" "2016 Extension 2 SP2"; fileInfo "cutIdentifier" "201608220310-1001477-2"; fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; createNode transform -s -n "persp"; - rename -uid "AA5DAA37-487B-2E80-C8B3-1BB167F82E5C"; + rename -uid "CDB4F2CD-4A87-919A-618B-ABB1AAE486A9"; setAttr ".v" no; - setAttr ".t" -type "double3" 28 21 28 ; - setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-014 ; + setAttr ".t" -type "double3" 5.7112380831474399 16.612526471270751 32.284082462110909 ; + setAttr ".r" -type "double3" -15.338352729602919 9.8000000000004253 -4.0345661506751271e-016 ; createNode camera -s -n "perspShape" -p "persp"; - rename -uid "F0E2CBF8-480C-25D4-B535-C5BACC5644FB"; + rename -uid "3EB3D15B-420E-E67B-D514-CBAA09281E5C"; setAttr -k off ".v" no; setAttr ".fl" 34.999999999999993; - setAttr ".coi" 44.82186966202994; + setAttr ".coi" 37.265978198906765; setAttr ".imn" -type "string" "persp"; setAttr ".den" -type "string" "persp_depth"; setAttr ".man" -type "string" "persp_mask"; setAttr ".hc" -type "string" "viewSet -p %camera"; createNode transform -s -n "top"; - rename -uid "78E70ECB-452F-D84E-C645-8989B8D9C501"; + rename -uid "398FD8F7-44A7-0FE7-4D51-8D9604E1A062"; setAttr ".v" no; setAttr ".t" -type "double3" 0 1000.1 0 ; setAttr ".r" -type "double3" -89.999999999999986 0 0 ; createNode camera -s -n "topShape" -p "top"; - rename -uid "F2A66002-4D7C-0A2E-4198-B6AE524185E7"; + rename -uid "F9784B1D-4E51-60E6-EB23-7987F165A200"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -43,11 +43,11 @@ createNode camera -s -n "topShape" -p "top"; setAttr ".hc" -type "string" "viewSet -t %camera"; setAttr ".o" yes; createNode transform -s -n "front"; - rename -uid "E2D6B82F-46E5-13CD-AA57-9C86C820290E"; + rename -uid "A355D6C2-4104-0BDF-F161-D19C893E8612"; setAttr ".v" no; setAttr ".t" -type "double3" 0 0 1000.1 ; createNode camera -s -n "frontShape" -p "front"; - rename -uid "ABA3AAC9-40A1-BE95-661E-DF9796217341"; + rename -uid "A0BC09A5-45D5-0301-867B-C8B45C4E95DA"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -58,12 +58,12 @@ createNode camera -s -n "frontShape" -p "front"; setAttr ".hc" -type "string" "viewSet -f %camera"; setAttr ".o" yes; createNode transform -s -n "side"; - rename -uid "B13E901C-4AB7-C1FC-A57E-C9AB842D39BA"; + rename -uid "2E6BFB0C-499E-A3F2-81E2-DE90269F73B0"; setAttr ".v" no; setAttr ".t" -type "double3" 1000.1 0 0 ; setAttr ".r" -type "double3" 0 89.999999999999986 0 ; createNode camera -s -n "sideShape" -p "side"; - rename -uid "1F5AD2EC-46A0-28D4-9FAA-B7904826D5A1"; + rename -uid "4CD47DBF-4312-E04D-FD24-85A8C98136CD"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -74,24 +74,25 @@ createNode camera -s -n "sideShape" -p "side"; setAttr ".hc" -type "string" "viewSet -s %camera"; setAttr ".o" yes; createNode transform -n "guide"; - rename -uid "BEF42FDD-4BC2-25CA-479B-B38CD7163134"; + rename -uid "B0A48A84-4789-4956-BA49-FF9D491F44C1"; addAttr -ci true -sn "rig_name" -ln "rig_name" -dt "string"; addAttr -ci true -k true -sn "mode" -ln "mode" -min 0 -max 1 -en "Final:WIP" -at "enum"; addAttr -ci true -k true -sn "step" -ln "step" -min 0 -max 6 -en "All Steps:Objects:Properties:Operators:Connect:Joints:Finalize" -at "enum"; - addAttr -ci true -sn "ismodel" -ln "ismodel" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ismodel" -ln "ismodel" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "classicChannelNames" -ln "classicChannelNames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "proxyChannels" -ln "proxyChannels" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "proxyChannels" -ln "proxyChannels" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "worldCtl" -ln "worldCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "importSkin" -ln "importSkin" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "skin" -ln "skin" -dt "string"; - addAttr -ci true -sn "L_color_fk" -ln "L_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "L_color_ik" -ln "L_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "R_color_fk" -ln "R_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "R_color_ik" -ln "R_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "C_color_fk" -ln "C_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "C_color_ik" -ln "C_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "joint_rig" -ln "joint_rig" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "L_color_fk" -ln "L_color_fk" -dv 6 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "L_color_ik" -ln "L_color_ik" -dv 18 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "R_color_fk" -ln "R_color_fk" -dv 23 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "R_color_ik" -ln "R_color_ik" -dv 14 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "C_color_fk" -ln "C_color_fk" -dv 13 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "C_color_ik" -ln "C_color_ik" -dv 17 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "joint_rig" -ln "joint_rig" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "synoptic" -ln "synoptic" -dt "string"; addAttr -ci true -sn "doPreCustomStep" -ln "doPreCustomStep" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "doPostCustomStep" -ln "doPostCustomStep" -min 0 -max 1 -at "bool"; @@ -104,16 +105,7 @@ createNode transform -n "guide"; addAttr -ci true -sn "gear_version" -ln "gear_version" -dt "string"; setAttr ".rig_name" -type "string" "rig"; setAttr -k on ".step" 6; - setAttr ".ismodel" yes; - setAttr ".proxyChannels" yes; setAttr ".skin" -type "string" ""; - setAttr ".L_color_fk" 6; - setAttr ".L_color_ik" 18; - setAttr ".R_color_fk" 23; - setAttr ".R_color_ik" 14; - setAttr ".C_color_fk" 13; - setAttr ".C_color_ik" 17; - setAttr ".joint_rig" yes; setAttr ".synoptic" -type "string" "biped"; setAttr ".preCustomStep" -type "string" ""; setAttr ".postCustomStep" -type "string" ""; @@ -123,11 +115,11 @@ createNode transform -n "guide"; setAttr ".maya_version" -type "string" "2016.0"; setAttr ".gear_version" -type "string" "2.2.4"; createNode transform -n "controllers_org" -p "guide"; - rename -uid "2D24D3A4-4D93-1A87-CE3B-15B6B5C60FBD"; + rename -uid "CBA0507F-4A78-63DE-6611-2B8361988EE4"; setAttr ".v" no; setAttr ".s" -type "double3" 1.5545667115145092 1.5545667115145092 1.5545667115145092 ; -createNode transform -n "local_C0_root" -p "guide"; - rename -uid "635EDC51-40F4-7325-C53A-66BD38CD308A"; +createNode transform -n "global_C0_root" -p "guide"; + rename -uid "8B72C636-4A8C-8895-9265-82AC319280D3"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -139,22 +131,155 @@ createNode transform -n "local_C0_root" -p "guide"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 8 -at "double"; + addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; + setAttr -k off -cb on ".v"; + setAttr -k off -cb on ".tx"; + setAttr -k off -cb on ".ty"; + setAttr -k off -cb on ".tz"; + setAttr -k off -cb on ".rx"; + setAttr -k off -cb on ".ry"; + setAttr -k off -cb on ".rz"; + setAttr -cb on ".ro"; + setAttr -k off -cb on ".sx"; + setAttr -k off -cb on ".sy"; + setAttr -k off -cb on ".sz"; + setAttr ".comp_type" -type "string" "control_01"; + setAttr ".comp_name" -type "string" "global"; + setAttr ".comp_side" -type "string" "C"; + setAttr ".connector" -type "string" "standard"; + setAttr ".ui_host" -type "string" ""; + setAttr ".ctlGrp" -type "string" ""; + setAttr ".icon" -type "string" "square"; + setAttr ".ikrefarray" -type "string" ""; +createNode nurbsCurve -n "global_C0_rootShape" -p "global_C0_root"; + rename -uid "40C323DA-48D1-D859-E433-539B827A3B9A"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0.25 0 0 + -0.25 0 0 + ; +createNode nurbsCurve -n "global_C0_root4Shape" -p "global_C0_root"; + rename -uid "1CD052FB-48BA-245E-A706-34ACE7A39FAB"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0 0.25 0 + 0 -0.25 0 + ; +createNode nurbsCurve -n "global_C0_root5Shape" -p "global_C0_root"; + rename -uid "EE836821-453A-DE8A-B519-6CA5A099A6A0"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0 0 0.25 + 0 0 -0.25 + ; +createNode nurbsCurve -n "global_C0_root6Shape" -p "global_C0_root"; + rename -uid "E6A582B9-48F4-C50F-5931-07BBEC227066"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 15 0 no 3 + 16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 + 0.125 0.125 0.125 + 0.125 0.125 -0.125 + -0.125 0.125 -0.125 + -0.125 -0.125 -0.125 + -0.125 -0.125 0.125 + -0.125 0.125 0.125 + -0.125 0.125 -0.125 + -0.125 0.125 0.125 + 0.125 0.125 0.125 + 0.125 -0.125 0.125 + -0.125 -0.125 0.125 + 0.125 -0.125 0.125 + 0.125 -0.125 -0.125 + 0.125 0.125 -0.125 + 0.125 -0.125 -0.125 + -0.125 -0.125 -0.125 + ; +createNode transform -n "global_C0_sizeRef" -p "global_C0_root"; + rename -uid "637739D6-4157-5FCF-366C-0F91E6BBD669"; + addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; + setAttr -k off -cb on ".v"; + setAttr ".t" -type "double3" 0 0 1 ; + setAttr -k off -cb on ".tx"; + setAttr -k off -cb on ".ty"; + setAttr -k off -cb on ".tz"; + setAttr -k off -cb on ".rx"; + setAttr -k off -cb on ".ry"; + setAttr -k off -cb on ".rz"; + setAttr -cb on ".ro"; + setAttr -k off -cb on ".sx"; + setAttr -k off -cb on ".sy"; + setAttr -k off -cb on ".sz"; +createNode transform -n "local_C0_root" -p "global_C0_root"; + rename -uid "A1F273BE-493C-767E-4AE5-CA8CE06F26DF"; + addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; + addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; + addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "connector" -ln "connector" -dt "string"; + addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; + addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; + addAttr -ci true -sn "icon" -ln "icon" -dt "string"; + addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; + addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 6 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -163,7 +288,6 @@ createNode transform -n "local_C0_root" -p "guide"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.9528272142357278 0.9528272142357278 0.9528272142357278 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -174,22 +298,9 @@ createNode transform -n "local_C0_root" -p "guide"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".default_rotorder" 2; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; + setAttr ".ikrefarray" -type "string" ""; createNode nurbsCurve -n "local_C0_rootShape" -p "local_C0_root"; - rename -uid "9AE02A4C-4655-4DA9-2097-A48313183A0F"; + rename -uid "7A69D641-408B-03AC-DF14-1D9827091AD8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -201,8 +312,8 @@ createNode nurbsCurve -n "local_C0_rootShape" -p "local_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "local_C0_root25Shape" -p "local_C0_root"; - rename -uid "E09F3282-4205-2AB4-55D6-D29269398EE0"; +createNode nurbsCurve -n "local_C0_root4Shape" -p "local_C0_root"; + rename -uid "A7386352-46FA-73CA-B29C-919E7C23C7BD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -214,8 +325,8 @@ createNode nurbsCurve -n "local_C0_root25Shape" -p "local_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "local_C0_root26Shape" -p "local_C0_root"; - rename -uid "C9F594B9-4A79-B07D-ECC5-D5B17A7E5756"; +createNode nurbsCurve -n "local_C0_root5Shape" -p "local_C0_root"; + rename -uid "B4274E28-4800-DC25-FF86-699B57A947E1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -227,8 +338,8 @@ createNode nurbsCurve -n "local_C0_root26Shape" -p "local_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "local_C0_root27Shape" -p "local_C0_root"; - rename -uid "CF564DE7-40F8-E9D4-FD6A-C6827D25F3D5"; +createNode nurbsCurve -n "local_C0_root6Shape" -p "local_C0_root"; + rename -uid "88AFD719-4550-4B69-3B59-478C4E5958A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -255,10 +366,10 @@ createNode nurbsCurve -n "local_C0_root27Shape" -p "local_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "local_C0_sizeRef" -p "local_C0_root"; - rename -uid "E7FDE99F-42BA-B6FE-CD9B-D6BE4504B09B"; + rename -uid "F8890FE3-4192-3C70-DC00-B0B3A4BC5D78"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0 0 1.0495082267377407 ; + setAttr ".t" -type "double3" 0 0 1 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -266,12 +377,11 @@ createNode transform -n "local_C0_sizeRef" -p "local_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0495082267377407 1.0495082267377407 1.0495082267377407 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "body_C0_root" -p "local_C0_root"; - rename -uid "CD56F777-424D-9DA5-1EA5-3DA0CE593970"; + rename -uid "B97FFB2F-46AA-4920-0297-FDBA8DC75D3E"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -284,23 +394,26 @@ createNode transform -n "body_C0_root" -p "local_C0_root"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -dv 2 -min 0 -max + 5 -at "long"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 3 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0 11.390533694690754 0.19144303592045675 ; + setAttr ".t" -type "double3" 0 10.853210488970383 0.18241213460091918 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -309,7 +422,7 @@ createNode transform -n "body_C0_root" -p "local_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.9535389960287599 1.9535389960287501 1.9535389960287599 ; + setAttr ".s" -type "double3" 1.8613851194869446 1.8613851194869344 1.8613851194869446 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -321,19 +434,8 @@ createNode transform -n "body_C0_root" -p "local_C0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".default_rotorder" 2; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 3; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "body_C0_rootShape" -p "body_C0_root"; - rename -uid "49E19708-4E3D-4FF8-F5BF-A1A4E6FFA9A0"; + rename -uid "EED1AEDE-450F-5D41-32D8-A3A358470F53"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -345,8 +447,8 @@ createNode nurbsCurve -n "body_C0_rootShape" -p "body_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "body_C0_root25Shape" -p "body_C0_root"; - rename -uid "3079F148-4F2B-787B-4E92-A2B9033D72B2"; +createNode nurbsCurve -n "body_C0_root28Shape" -p "body_C0_root"; + rename -uid "7068D1B5-44E1-4E2A-A4CC-3AB444A1E627"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -358,8 +460,8 @@ createNode nurbsCurve -n "body_C0_root25Shape" -p "body_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "body_C0_root26Shape" -p "body_C0_root"; - rename -uid "31EE3CB5-4BE2-3257-513F-6DB519A05306"; +createNode nurbsCurve -n "body_C0_root29Shape" -p "body_C0_root"; + rename -uid "D29F71BF-41FF-0D90-CDA8-2F88C025226F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -371,8 +473,8 @@ createNode nurbsCurve -n "body_C0_root26Shape" -p "body_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "body_C0_root27Shape" -p "body_C0_root"; - rename -uid "4DE6789C-4918-0CE4-1A00-19BC0EE0C2E2"; +createNode nurbsCurve -n "body_C0_root30Shape" -p "body_C0_root"; + rename -uid "8553D652-4F3C-0230-F2CB-C0ADA8395B34"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -399,10 +501,10 @@ createNode nurbsCurve -n "body_C0_root27Shape" -p "body_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "body_C0_sizeRef" -p "body_C0_root"; - rename -uid "F40C4E15-4324-B703-A2EE-AE9B29F73020"; + rename -uid "3D144055-4D7E-9DBF-9B9E-09937D73E7F7"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.53723433669418785 0 1.1928998604342214e-016 ; + setAttr ".t" -type "double3" 0.53723433669418763 0 1.1928998604342207e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -411,12 +513,12 @@ createNode transform -n "body_C0_sizeRef" -p "body_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.53723433669418785 0.53723433669419063 0.53723433669418785 ; + setAttr ".s" -type "double3" 0.53723433669418774 0.53723433669419063 0.53723433669418774 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "spine_C0_root" -p "body_C0_root"; - rename -uid "DCC70641-4AEA-9B32-6E3C-3CB8A5EA62B3"; + rename -uid "D83C516E-4DDD-92FC-0DA0-BE943E363D0E"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -426,19 +528,19 @@ createNode transform -n "spine_C0_root" -p "body_C0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "position" -ln "position" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "maxsquash" -ln "maxsquash" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "maxsquash" -ln "maxsquash" -dv 0.5 -min 0 -max 1 -at "double"; addAttr -ci true -sn "softness" -ln "softness" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "lock_ori" -ln "lock_ori" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "division" -ln "division" -dv 3 -min 3 -at "long"; - addAttr -ci true -sn "autoBend" -ln "autoBend" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "centralTangent" -ln "centralTangent" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "lock_ori" -ln "lock_ori" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "division" -ln "division" -dv 5 -min 3 -at "long"; + addAttr -ci true -sn "autoBend" -ln "autoBend" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "centralTangent" -ln "centralTangent" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -5.5511151231257827e-017 1.7763568394002505e-015 -1.8488927466117464e-032 ; + setAttr ".t" -type "double3" -6.9388939039072284e-017 1.7763568394002505e-015 -2.1570415377137042e-032 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -447,7 +549,7 @@ createNode transform -n "spine_C0_root" -p "body_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.51189149642410492 0.51189149642410281 0.51189149642410203 ; + setAttr ".s" -type "double3" 0.51189149642410492 0.51189149642410259 0.51189149642410181 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -457,17 +559,10 @@ createNode transform -n "spine_C0_root" -p "body_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "spineUI_C0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".maxstretch" 1.5; - setAttr ".maxsquash" 0.5; - setAttr ".lock_ori" 1; - setAttr ".division" 5; - setAttr ".autoBend" yes; - setAttr ".centralTangent" yes; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "spine_C0_rootShape" -p "spine_C0_root"; - rename -uid "7707CB23-49E1-37BD-EF40-FA81E08E6E53"; + rename -uid "FC6BD12F-4E09-3426-3345-DF84D72D01B0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -479,8 +574,8 @@ createNode nurbsCurve -n "spine_C0_rootShape" -p "spine_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spine_C0_root25Shape" -p "spine_C0_root"; - rename -uid "BD87BEA1-41AB-AA3D-08CE-03BED9C10ECD"; +createNode nurbsCurve -n "spine_C0_root28Shape" -p "spine_C0_root"; + rename -uid "486E846B-4FAD-AA6D-8FA9-0B9E40AFDB6A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -492,8 +587,8 @@ createNode nurbsCurve -n "spine_C0_root25Shape" -p "spine_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spine_C0_root26Shape" -p "spine_C0_root"; - rename -uid "AA0ACEE5-4775-1378-1933-959700DFA7C6"; +createNode nurbsCurve -n "spine_C0_root29Shape" -p "spine_C0_root"; + rename -uid "EAF9B8FD-4685-3D62-EF18-FDBCA73A99F8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -505,8 +600,8 @@ createNode nurbsCurve -n "spine_C0_root26Shape" -p "spine_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spine_C0_root27Shape" -p "spine_C0_root"; - rename -uid "76F724FB-47EB-A1F2-613E-47A9084D13CB"; +createNode nurbsCurve -n "spine_C0_root30Shape" -p "spine_C0_root"; + rename -uid "F4DF86D9-4D3E-604A-6981-A6822749082B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -533,7 +628,7 @@ createNode nurbsCurve -n "spine_C0_root27Shape" -p "spine_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "spine_C0_eff" -p "spine_C0_root"; - rename -uid "442979B4-4F06-C753-1FDC-B5AC1EB36BCA"; + rename -uid "7EA4BFFC-49B6-A3BC-A38B-E1ACA4483EE4"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 2.3760066881565312 -1.6930901125533637e-015 1.2325951644078309e-031 ; @@ -544,12 +639,12 @@ createNode transform -n "spine_C0_eff" -p "spine_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000013 0.99999999999999933 0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999944 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "spine_C0_effShape" -p "spine_C0_eff"; - rename -uid "91FCE89B-48E2-40A9-F650-2D81131328EC"; + rename -uid "529DD8F4-4B8F-E796-E69B-8B90FDA72289"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -561,8 +656,8 @@ createNode nurbsCurve -n "spine_C0_effShape" -p "spine_C0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spine_C0_eff25Shape" -p "spine_C0_eff"; - rename -uid "B9A7B4E8-47A3-4793-BF5F-5784E81053E1"; +createNode nurbsCurve -n "spine_C0_eff28Shape" -p "spine_C0_eff"; + rename -uid "766A6756-4CF9-F63B-195B-06B345E22922"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -574,8 +669,8 @@ createNode nurbsCurve -n "spine_C0_eff25Shape" -p "spine_C0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spine_C0_eff26Shape" -p "spine_C0_eff"; - rename -uid "883FFD68-4CDC-69D2-A1E8-3383626A0823"; +createNode nurbsCurve -n "spine_C0_eff29Shape" -p "spine_C0_eff"; + rename -uid "A822A40F-4478-19BF-EF5B-46861766F411"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -587,8 +682,8 @@ createNode nurbsCurve -n "spine_C0_eff26Shape" -p "spine_C0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spine_C0_eff27Shape" -p "spine_C0_eff"; - rename -uid "3ECFC8CF-4FA4-30A6-9267-FE8948F550F7"; +createNode nurbsCurve -n "spine_C0_eff30Shape" -p "spine_C0_eff"; + rename -uid "190744A1-486D-3A70-05B4-FEA64230267C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -605,8 +700,8 @@ createNode nurbsCurve -n "spine_C0_eff27Shape" -p "spine_C0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "spine_C0_eff27_0crvShape" -p "spine_C0_eff"; - rename -uid "73D27119-435C-0C7B-060B-5D9B1767941C"; +createNode nurbsCurve -n "spine_C0_eff30_0crvShape" -p "spine_C0_eff"; + rename -uid "C8CDB49D-4C00-757E-5698-24B142667E09"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -623,8 +718,8 @@ createNode nurbsCurve -n "spine_C0_eff27_0crvShape" -p "spine_C0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "spine_C0_eff27_1crvShape" -p "spine_C0_eff"; - rename -uid "6D514F95-49CA-CB52-74FE-2FA707492EF6"; +createNode nurbsCurve -n "spine_C0_eff30_1crvShape" -p "spine_C0_eff"; + rename -uid "ADCE79EA-4345-F684-9A40-5E8D3ECDCB4C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -642,7 +737,7 @@ createNode nurbsCurve -n "spine_C0_eff27_1crvShape" -p "spine_C0_eff"; 0 0 -0.1875 ; createNode transform -n "spineUI_C0_root" -p "spine_C0_eff"; - rename -uid "BF9A63CE-45BF-1981-5E3C-7795B9E5D8ED"; + rename -uid "35F3E27C-48C4-8C2B-ED37-98A2F21603FE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -666,12 +761,14 @@ createNode transform -n "spineUI_C0_root" -p "spine_C0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.2578484988603371 0.60394549966678479 -1.9764781265571727 ; + setAttr ".t" -type "double3" 3.2578484988603389 0.60394549966678479 -1.9764781265571729 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -680,7 +777,7 @@ createNode transform -n "spineUI_C0_root" -p "spine_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.88775990675476246 0.88775990675476002 0.88775990675475902 ; + setAttr ".s" -type "double3" 0.88775990675476268 0.88775990675476024 0.88775990675475924 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -692,11 +789,8 @@ createNode transform -n "spineUI_C0_root" -p "spine_C0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "spineUI_C0_rootShape" -p "spineUI_C0_root"; - rename -uid "D87F8CA2-4457-304C-33E5-06B9164132CC"; + rename -uid "E1C966BD-4758-22A0-E09D-DF81103EF0C8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -708,8 +802,8 @@ createNode nurbsCurve -n "spineUI_C0_rootShape" -p "spineUI_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spineUI_C0_root25Shape" -p "spineUI_C0_root"; - rename -uid "CE2976DB-4F17-32EC-5402-B5BC7B0F18E3"; +createNode nurbsCurve -n "spineUI_C0_root28Shape" -p "spineUI_C0_root"; + rename -uid "70A77FDE-475D-99AA-7FFA-DFB997DACE67"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -721,8 +815,8 @@ createNode nurbsCurve -n "spineUI_C0_root25Shape" -p "spineUI_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spineUI_C0_root26Shape" -p "spineUI_C0_root"; - rename -uid "C47B7588-44F8-31ED-A09A-998569509F47"; +createNode nurbsCurve -n "spineUI_C0_root29Shape" -p "spineUI_C0_root"; + rename -uid "5BB68AF0-438A-6FC6-1889-57A2E8074445"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -734,8 +828,8 @@ createNode nurbsCurve -n "spineUI_C0_root26Shape" -p "spineUI_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spineUI_C0_root27Shape" -p "spineUI_C0_root"; - rename -uid "7949131E-4FBE-3556-30A5-AE9D8CD29399"; +createNode nurbsCurve -n "spineUI_C0_root30Shape" -p "spineUI_C0_root"; + rename -uid "A73CC0EA-4520-1810-EB87-D3B21FB469C1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -762,10 +856,10 @@ createNode nurbsCurve -n "spineUI_C0_root27Shape" -p "spineUI_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "spineUI_C0_sizeRef" -p "spineUI_C0_root"; - rename -uid "D12204A6-4996-A5B8-CB96-13A989170AC9"; + rename -uid "D93B789F-46AC-EC15-5B1C-D095937E79B6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0 3.5527136788005009e-015 1.1821982708976555 ; + setAttr ".t" -type "double3" 0 0 1.1821982708976553 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -773,12 +867,12 @@ createNode transform -n "spineUI_C0_sizeRef" -p "spineUI_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.1821982708976524 1.1821982708976531 1.1821982708976555 ; + setAttr ".s" -type "double3" 1.1821982708976522 1.1821982708976528 1.1821982708976551 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; - rename -uid "CCB915D1-4398-8F45-7174-84BC380BAB03"; + rename -uid "54552A76-4CF1-F277-72D0-E7B9261EC0AE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -789,9 +883,9 @@ createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "refArray" -ln "refArray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.7395848890977366 -0.016853043661003347 -0.11673327753265016 ; + setAttr ".t" -type "double3" 1.7395848890977383 -0.016853043661003403 -0.11673327753265017 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -800,7 +894,7 @@ createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.000000000000002 1.0000000000000027 0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000022 1.0000000000000029 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -810,10 +904,9 @@ createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "armUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".refArray" -type "string" "shoulder_L0_root,local_C0_root,body_C0_root,spine_C0_eff"; - setAttr ".parentJointIndex" -1; + setAttr ".refArray" -type "string" "shoulder_L0_root,local_C0_root,body_C0_root,spine_C0_eff,global_C0_root"; createNode nurbsCurve -n "shoulder_L0_rootShape" -p "shoulder_L0_root"; - rename -uid "4C8364A8-4932-C3DD-C458-04BE61FD65DD"; + rename -uid "B7C33AAA-484F-5A4F-E8E2-B6B8733DA506"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -825,8 +918,8 @@ createNode nurbsCurve -n "shoulder_L0_rootShape" -p "shoulder_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_L0_root25Shape" -p "shoulder_L0_root"; - rename -uid "3671C13A-405E-3282-747C-C4A3C70872DD"; +createNode nurbsCurve -n "shoulder_L0_root28Shape" -p "shoulder_L0_root"; + rename -uid "73DE8BA7-439E-BD8C-13D9-98A6014E5A77"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -838,8 +931,8 @@ createNode nurbsCurve -n "shoulder_L0_root25Shape" -p "shoulder_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_L0_root26Shape" -p "shoulder_L0_root"; - rename -uid "6AEC96EF-4AB1-FEE6-7B3B-7DB3DF7627D2"; +createNode nurbsCurve -n "shoulder_L0_root29Shape" -p "shoulder_L0_root"; + rename -uid "067F9D45-474A-9858-E512-50BDCBFA1950"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -851,8 +944,8 @@ createNode nurbsCurve -n "shoulder_L0_root26Shape" -p "shoulder_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_L0_root27Shape" -p "shoulder_L0_root"; - rename -uid "684DCFE4-497D-D1BB-98FA-79952A7EF6D8"; +createNode nurbsCurve -n "shoulder_L0_root30Shape" -p "shoulder_L0_root"; + rename -uid "BB35AE0F-4885-446B-0F13-29848AA9F7CB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -879,10 +972,10 @@ createNode nurbsCurve -n "shoulder_L0_root27Shape" -p "shoulder_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "shoulder_L0_tip" -p "shoulder_L0_root"; - rename -uid "247C7C9C-4349-4F15-5326-638BEB2E3740"; + rename -uid "062808CA-4909-816E-1D20-5CA051561DCE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.33303929285645495 -0.91350954729966849 -1.5239746815175861 ; + setAttr ".t" -type "double3" 0.3330392928564585 -0.91350954729966838 -1.5239746815175856 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -890,12 +983,12 @@ createNode transform -n "shoulder_L0_tip" -p "shoulder_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999845 0.99999999999999623 0.99999999999999867 ; + setAttr ".s" -type "double3" 0.99999999999999822 0.999999999999996 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "shoulder_L0_tipShape" -p "shoulder_L0_tip"; - rename -uid "300819FC-4BB1-5B83-7521-92A08AA53A21"; + rename -uid "37C22F0A-4224-9626-6122-0B874EDBD7E4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -907,8 +1000,8 @@ createNode nurbsCurve -n "shoulder_L0_tipShape" -p "shoulder_L0_tip"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_L0_tip25Shape" -p "shoulder_L0_tip"; - rename -uid "DFEE8B31-4BAA-7F4C-6496-CF8275F384DD"; +createNode nurbsCurve -n "shoulder_L0_tip28Shape" -p "shoulder_L0_tip"; + rename -uid "F15D98C8-4369-DFF3-1756-4BB4495B01F2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -920,8 +1013,8 @@ createNode nurbsCurve -n "shoulder_L0_tip25Shape" -p "shoulder_L0_tip"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_L0_tip26Shape" -p "shoulder_L0_tip"; - rename -uid "A647513E-4731-11AB-DDA3-FCA4709579E5"; +createNode nurbsCurve -n "shoulder_L0_tip29Shape" -p "shoulder_L0_tip"; + rename -uid "99B9C297-4338-DA43-EDEE-80B57C305D1C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -933,8 +1026,8 @@ createNode nurbsCurve -n "shoulder_L0_tip26Shape" -p "shoulder_L0_tip"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_L0_tip27Shape" -p "shoulder_L0_tip"; - rename -uid "04FA70FA-44B0-9BD7-29D9-C79D7BE5391B"; +createNode nurbsCurve -n "shoulder_L0_tip30Shape" -p "shoulder_L0_tip"; + rename -uid "38C78B7B-49D0-9B64-EE4A-8D9541F02BC4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -951,8 +1044,8 @@ createNode nurbsCurve -n "shoulder_L0_tip27Shape" -p "shoulder_L0_tip"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_L0_tip27_0crvShape" -p "shoulder_L0_tip"; - rename -uid "3DA02803-4D31-D439-A331-678A0634699B"; +createNode nurbsCurve -n "shoulder_L0_tip30_0crvShape" -p "shoulder_L0_tip"; + rename -uid "EED61E9B-4651-A2DE-678D-A3824B4D49F4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -969,8 +1062,8 @@ createNode nurbsCurve -n "shoulder_L0_tip27_0crvShape" -p "shoulder_L0_tip"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_L0_tip27_1crvShape" -p "shoulder_L0_tip"; - rename -uid "CC639575-4E63-D4A5-9EE0-069B773677CB"; +createNode nurbsCurve -n "shoulder_L0_tip30_1crvShape" -p "shoulder_L0_tip"; + rename -uid "506E7F21-4801-A702-580B-F9BBDF9A0165"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -988,7 +1081,7 @@ createNode nurbsCurve -n "shoulder_L0_tip27_1crvShape" -p "shoulder_L0_tip"; 0 0 -0.1875 ; createNode transform -n "arm_L0_root" -p "shoulder_L0_tip"; - rename -uid "D1181835-4544-F4CE-0040-68AED45BF565"; + rename -uid "5419560D-4DA0-3FD7-6667-518B37C3F6DB"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1001,49 +1094,43 @@ createNode transform -n "arm_L0_root" -p "shoulder_L0_tip"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; addAttr -ci true -sn "pinrefarray" -ln "pinrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "ikTR" -ln "ikTR" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "ikTR" -ln "ikTR" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "mirrorIK" -ln "mirrorIK" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 1.0658141036401503e-014 3.3306690738754696e-016 -4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" -95.878962023386904 44.411212983179865 -5.4710434405384278 ; + setAttr ".r" -type "double3" -95.878962023386919 44.411212983179865 -5.4710434405384332 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999811 0.99999999999999967 ; + setAttr ".s" -type "double3" 1 0.99999999999999822 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "arm_2jnt_01"; setAttr ".comp_name" -type "string" "arm"; setAttr ".comp_side" -type "string" "L"; - setAttr ".connector" -type "string" "standard"; + setAttr ".connector" -type "string" "shoulder_01"; setAttr ".ui_host" -type "string" "armUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".ikrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".pinrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".maxstretch" 1.5; - setAttr ".ikTR" yes; - setAttr ".mirrorMid" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; + setAttr ".ikrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; + setAttr ".pinrefarray" -type "string" "shoulder_L0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "arm_L0_rootShape" -p "arm_L0_root"; - rename -uid "20BD6281-4570-BDA0-8D4A-679FD3361310"; + rename -uid "F770D184-4093-DE3C-F19D-5BA6D11702DE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1055,8 +1142,8 @@ createNode nurbsCurve -n "arm_L0_rootShape" -p "arm_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_L0_root25Shape" -p "arm_L0_root"; - rename -uid "D9BB82F7-487F-16F4-ABC3-2B94239BEA5E"; +createNode nurbsCurve -n "arm_L0_root28Shape" -p "arm_L0_root"; + rename -uid "C686C07A-42A6-E9DB-AB13-0E9717DC60A6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1068,8 +1155,8 @@ createNode nurbsCurve -n "arm_L0_root25Shape" -p "arm_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_L0_root26Shape" -p "arm_L0_root"; - rename -uid "FAB9E5CD-45EF-7C34-22CF-CE9E65D7208F"; +createNode nurbsCurve -n "arm_L0_root29Shape" -p "arm_L0_root"; + rename -uid "2F457D7D-4158-B14B-3A1C-E69F4AFE72F3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1081,8 +1168,8 @@ createNode nurbsCurve -n "arm_L0_root26Shape" -p "arm_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_L0_root27Shape" -p "arm_L0_root"; - rename -uid "C4C385BC-4AF4-F0F2-43F9-899D2608C363"; +createNode nurbsCurve -n "arm_L0_root30Shape" -p "arm_L0_root"; + rename -uid "C251384A-4BA2-7A2A-45E5-B48530C55D58"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1109,24 +1196,24 @@ createNode nurbsCurve -n "arm_L0_root27Shape" -p "arm_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "arm_L0_elbow" -p "arm_L0_root"; - rename -uid "7EA147B9-4A07-A02F-A046-DA94BDA70F16"; + rename -uid "F27CE0EA-4CDA-01DF-446F-FC915A569F2C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.8283335982323328 3.5527136788005009e-015 0.078976790252909934 ; + setAttr ".t" -type "double3" 2.828333598232331 5.3290705182007514e-015 0.078976790252909934 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 -10.688700162784265 0 ; + setAttr ".r" -type "double3" 0 -10.688700162784272 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999967 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999956 0.99999999999999933 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_L0_elbowShape" -p "arm_L0_elbow"; - rename -uid "7A658DC8-47C0-28C9-D87B-299B988EBEC1"; + rename -uid "9F7B7E1B-4FB1-A4F4-DBE8-A383A6CC4C27"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1138,8 +1225,8 @@ createNode nurbsCurve -n "arm_L0_elbowShape" -p "arm_L0_elbow"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_L0_elbow25Shape" -p "arm_L0_elbow"; - rename -uid "CF2DD2AD-426C-B668-7BB8-FD9FBC1FDC6D"; +createNode nurbsCurve -n "arm_L0_elbow28Shape" -p "arm_L0_elbow"; + rename -uid "5EA2289F-4A6C-836A-8D42-5692AB61706C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1151,8 +1238,8 @@ createNode nurbsCurve -n "arm_L0_elbow25Shape" -p "arm_L0_elbow"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_L0_elbow26Shape" -p "arm_L0_elbow"; - rename -uid "2C6348B7-415F-0178-187B-3C84AD705453"; +createNode nurbsCurve -n "arm_L0_elbow29Shape" -p "arm_L0_elbow"; + rename -uid "BE34DA73-43E4-FBCC-E389-6984C59E7BE5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1164,8 +1251,8 @@ createNode nurbsCurve -n "arm_L0_elbow26Shape" -p "arm_L0_elbow"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_L0_elbow27Shape" -p "arm_L0_elbow"; - rename -uid "835A4A66-4DBB-9CCE-37C3-049577E82E46"; +createNode nurbsCurve -n "arm_L0_elbow30Shape" -p "arm_L0_elbow"; + rename -uid "69541892-4FD7-FF14-F671-D4B81AA7B44A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1182,8 +1269,8 @@ createNode nurbsCurve -n "arm_L0_elbow27Shape" -p "arm_L0_elbow"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_elbow27_0crvShape" -p "arm_L0_elbow"; - rename -uid "8A10E1E2-4BC2-CC2D-58CD-8AA2CAAA7EA5"; +createNode nurbsCurve -n "arm_L0_elbow30_0crvShape" -p "arm_L0_elbow"; + rename -uid "60EBF929-489F-70F6-644D-9B89A990AB14"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1200,8 +1287,8 @@ createNode nurbsCurve -n "arm_L0_elbow27_0crvShape" -p "arm_L0_elbow"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_elbow27_1crvShape" -p "arm_L0_elbow"; - rename -uid "62C27FC1-45C5-005F-733E-D99B35AF3198"; +createNode nurbsCurve -n "arm_L0_elbow30_1crvShape" -p "arm_L0_elbow"; + rename -uid "300A7A89-4C4F-DE4A-D45D-A39E085DF929"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1219,10 +1306,10 @@ createNode nurbsCurve -n "arm_L0_elbow27_1crvShape" -p "arm_L0_elbow"; 0 0 -0.1875 ; createNode transform -n "arm_L0_wrist" -p "arm_L0_elbow"; - rename -uid "5EEA610B-455F-5B62-EE78-F68252567D47"; + rename -uid "16533C27-46E2-87FA-CF5D-E39F6AE05D22"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.9351547891496952 0 -0.11960611218230566 ; + setAttr ".t" -type "double3" 2.9351547891496979 -1.7763568394002505e-015 -0.11960611218230555 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1230,12 +1317,12 @@ createNode transform -n "arm_L0_wrist" -p "arm_L0_elbow"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000013 1.0000000000000009 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000016 1.0000000000000011 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_L0_wristShape" -p "arm_L0_wrist"; - rename -uid "7928998A-42F7-C472-6354-89955AE70189"; + rename -uid "CA0155AD-420B-A3BC-E6DD-8DB560466590"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1247,8 +1334,8 @@ createNode nurbsCurve -n "arm_L0_wristShape" -p "arm_L0_wrist"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_L0_wrist25Shape" -p "arm_L0_wrist"; - rename -uid "0D9F0590-4DB4-C95C-8BEA-68856406A045"; +createNode nurbsCurve -n "arm_L0_wrist28Shape" -p "arm_L0_wrist"; + rename -uid "1B3209C6-4969-2D95-CFAB-9899E1882054"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1260,8 +1347,8 @@ createNode nurbsCurve -n "arm_L0_wrist25Shape" -p "arm_L0_wrist"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_L0_wrist26Shape" -p "arm_L0_wrist"; - rename -uid "8BFC04BF-49D8-54E4-B7CE-58AD785F5EC1"; +createNode nurbsCurve -n "arm_L0_wrist29Shape" -p "arm_L0_wrist"; + rename -uid "C5B6578A-4492-D2C5-5411-EA8B18576745"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1273,8 +1360,8 @@ createNode nurbsCurve -n "arm_L0_wrist26Shape" -p "arm_L0_wrist"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_L0_wrist27Shape" -p "arm_L0_wrist"; - rename -uid "B293E595-41A5-F9D2-57A6-9888BF442ED4"; +createNode nurbsCurve -n "arm_L0_wrist30Shape" -p "arm_L0_wrist"; + rename -uid "07CCF2E4-4E71-3245-CEF7-C9A61441D150"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1291,8 +1378,8 @@ createNode nurbsCurve -n "arm_L0_wrist27Shape" -p "arm_L0_wrist"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_wrist27_0crvShape" -p "arm_L0_wrist"; - rename -uid "B702AD49-4D6E-EAB9-7E33-759CE041E036"; +createNode nurbsCurve -n "arm_L0_wrist30_0crvShape" -p "arm_L0_wrist"; + rename -uid "8616D1C3-4950-2822-0603-BF850A1B1672"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1309,8 +1396,8 @@ createNode nurbsCurve -n "arm_L0_wrist27_0crvShape" -p "arm_L0_wrist"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_wrist27_1crvShape" -p "arm_L0_wrist"; - rename -uid "C8994D5D-41F8-0927-3779-5FBDB2B664DA"; +createNode nurbsCurve -n "arm_L0_wrist30_1crvShape" -p "arm_L0_wrist"; + rename -uid "EA3DE583-478A-AF33-53E5-209A7FE3A98D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1328,10 +1415,10 @@ createNode nurbsCurve -n "arm_L0_wrist27_1crvShape" -p "arm_L0_wrist"; 0 0 -0.1875 ; createNode transform -n "arm_L0_eff" -p "arm_L0_wrist"; - rename -uid "A41A4CFB-44DA-47E9-894B-54AE851FF463"; + rename -uid "140565C9-4BDA-39F1-7F99-6D9968BD8D2C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3207237066308166 7.1054273576010019e-015 6.9388939039072284e-016 ; + setAttr ".t" -type "double3" 1.320723706630814 8.8817841970012523e-015 9.4368957093138306e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1339,12 +1426,12 @@ createNode transform -n "arm_L0_eff" -p "arm_L0_wrist"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 1 0.99999999999999978 ; + setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999989 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_L0_effShape" -p "arm_L0_eff"; - rename -uid "58360095-4D6F-1C2A-A2CB-CC89D5B3468C"; + rename -uid "6D04601D-473F-A6C2-34C2-5EB33AA79B6F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1356,8 +1443,8 @@ createNode nurbsCurve -n "arm_L0_effShape" -p "arm_L0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_L0_eff25Shape" -p "arm_L0_eff"; - rename -uid "AA11FE37-4AA0-B40B-A138-BAA80C161E7B"; +createNode nurbsCurve -n "arm_L0_eff28Shape" -p "arm_L0_eff"; + rename -uid "50082AAE-4FFC-362F-23FF-52915B065BC0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1369,8 +1456,8 @@ createNode nurbsCurve -n "arm_L0_eff25Shape" -p "arm_L0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_L0_eff26Shape" -p "arm_L0_eff"; - rename -uid "7268E469-439E-9FA1-D56A-D5BA2FE7F4E1"; +createNode nurbsCurve -n "arm_L0_eff29Shape" -p "arm_L0_eff"; + rename -uid "98A5C722-4970-31A9-D368-EF9D5B7A1A62"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1382,8 +1469,8 @@ createNode nurbsCurve -n "arm_L0_eff26Shape" -p "arm_L0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_L0_eff27Shape" -p "arm_L0_eff"; - rename -uid "D0A90697-45CB-37ED-A0D2-AC8EEEE1ECFF"; +createNode nurbsCurve -n "arm_L0_eff30Shape" -p "arm_L0_eff"; + rename -uid "E9CB28A7-4C83-4A15-729F-EF8D002E893B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1400,8 +1487,8 @@ createNode nurbsCurve -n "arm_L0_eff27Shape" -p "arm_L0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_eff27_0crvShape" -p "arm_L0_eff"; - rename -uid "293CEAB7-49EA-FDC9-89CC-40BF0994538A"; +createNode nurbsCurve -n "arm_L0_eff30_0crvShape" -p "arm_L0_eff"; + rename -uid "C7F8C519-4AC0-F5CA-7B04-D4B94B34D4A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1418,8 +1505,8 @@ createNode nurbsCurve -n "arm_L0_eff27_0crvShape" -p "arm_L0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_L0_eff27_1crvShape" -p "arm_L0_eff"; - rename -uid "5C07E168-4B85-1567-DC58-658251AAA216"; +createNode nurbsCurve -n "arm_L0_eff30_1crvShape" -p "arm_L0_eff"; + rename -uid "C8E618F7-4ABE-025C-215B-5B82D50116D0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1437,7 +1524,7 @@ createNode nurbsCurve -n "arm_L0_eff27_1crvShape" -p "arm_L0_eff"; 0 0 -0.1875 ; createNode transform -n "armUI_L0_root" -p "arm_L0_eff"; - rename -uid "DEAA464D-487C-E9EE-3A72-EAB3498E6343"; + rename -uid "B89F5A82-48F3-07C3-353B-999AA33E252C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1461,12 +1548,14 @@ createNode transform -n "armUI_L0_root" -p "arm_L0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.2124561875008086 0.56073114764518017 -0.29276117198398871 ; + setAttr ".t" -type "double3" -1.2124561875008069 0.56073114764518195 -0.29276117198398888 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1474,7 +1563,7 @@ createNode transform -n "armUI_L0_root" -p "arm_L0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000002 1.0000000000000013 ; + setAttr ".s" -type "double3" 1.0000000000000009 1.0000000000000002 1.0000000000000013 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -1486,11 +1575,8 @@ createNode transform -n "armUI_L0_root" -p "arm_L0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "armUI_L0_rootShape" -p "armUI_L0_root"; - rename -uid "4906C5D2-4836-DF6E-354D-0D8DBCD98D80"; + rename -uid "DA270C2B-4998-4586-0B59-7B9D7672E358"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1502,8 +1588,8 @@ createNode nurbsCurve -n "armUI_L0_rootShape" -p "armUI_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "armUI_L0_root25Shape" -p "armUI_L0_root"; - rename -uid "33001119-45F9-C9B9-2F43-0AA6709DD244"; +createNode nurbsCurve -n "armUI_L0_root28Shape" -p "armUI_L0_root"; + rename -uid "8B66649A-49C3-0A26-1192-18B8BDCC2D26"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1515,8 +1601,8 @@ createNode nurbsCurve -n "armUI_L0_root25Shape" -p "armUI_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "armUI_L0_root26Shape" -p "armUI_L0_root"; - rename -uid "7196FC89-4359-7D02-103A-7A811A7C093F"; +createNode nurbsCurve -n "armUI_L0_root29Shape" -p "armUI_L0_root"; + rename -uid "FF90C15B-4DAA-F469-D808-7E9F6A729EDC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1528,8 +1614,8 @@ createNode nurbsCurve -n "armUI_L0_root26Shape" -p "armUI_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "armUI_L0_root27Shape" -p "armUI_L0_root"; - rename -uid "982EBED3-4436-DB23-820A-93A83CA1FBC4"; +createNode nurbsCurve -n "armUI_L0_root30Shape" -p "armUI_L0_root"; + rename -uid "E7DDE3D4-4994-C274-26E9-F9AB6EC50D9A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1556,24 +1642,24 @@ createNode nurbsCurve -n "armUI_L0_root27Shape" -p "armUI_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "armUI_L0_sizeRef" -p "armUI_L0_root"; - rename -uid "984E88A3-49D5-0793-3B52-BA9FBAE2E660"; + rename -uid "D2FF785D-4865-0E04-D29A-6099F3BA4557"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.11347623085809344 -0.027001577630493045 1.0430060296210657 ; + setAttr ".t" -type "double3" 0.11347623085808944 -0.027001577630494822 1.0430060296210657 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 5.4530840145882156 3.3190804973695687 45.379324150247726 ; + setAttr ".r" -type "double3" 5.4530840145882289 3.3190804973695629 45.379324150247726 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0495082267377429 1.049508226737738 1.0495082267377398 ; + setAttr ".s" -type "double3" 1.0495082267377429 1.049508226737738 1.04950822673774 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "meta_L0_root" -p "arm_L0_eff"; - rename -uid "314B0618-44D6-B1D3-B3D4-BA8FC23D9D9E"; + rename -uid "6CB1757C-49AF-FE8C-8310-32A00FA74AAF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1582,22 +1668,22 @@ createNode transform -n "meta_L0_root" -p "arm_L0_eff"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "intScale" -ln "intScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "intRotation" -ln "intRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "intTranslation" -ln "intTranslation" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intScale" -ln "intScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intRotation" -ln "intRotation" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intTranslation" -ln "intTranslation" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.0556240028445685 -0.075350553640975093 0.35296225288850236 ; + setAttr ".t" -type "double3" -1.0556240028445685 -0.075350553640976869 0.35296225288850214 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 86.350349008866772 93.71738146693724 86.467960127478719 ; + setAttr ".r" -type "double3" 86.350349008867127 93.717381466937212 86.467960127478676 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.30838721081716924 0.30838721081716924 0.30838721081716947 ; + setAttr ".s" -type "double3" 0.30838721081716935 0.30838721081716935 0.30838721081716952 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -1607,12 +1693,8 @@ createNode transform -n "meta_L0_root" -p "arm_L0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".intScale" yes; - setAttr ".intRotation" yes; - setAttr ".intTranslation" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "meta_L0_rootShape" -p "meta_L0_root"; - rename -uid "EAC06A64-4AFB-B0B5-CE24-789298B05D97"; + rename -uid "89AA9E17-4874-4DDB-9AB4-C3B12CC8F07A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1624,8 +1706,8 @@ createNode nurbsCurve -n "meta_L0_rootShape" -p "meta_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_L0_root25Shape" -p "meta_L0_root"; - rename -uid "624A1EE5-4066-1F27-12E9-40ABE5782EEA"; +createNode nurbsCurve -n "meta_L0_root28Shape" -p "meta_L0_root"; + rename -uid "843797CC-44CE-B045-B64D-C7B6EB43C3E4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1637,8 +1719,8 @@ createNode nurbsCurve -n "meta_L0_root25Shape" -p "meta_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_L0_root26Shape" -p "meta_L0_root"; - rename -uid "55B6828B-4D79-77E0-7D60-49982EA99AE8"; +createNode nurbsCurve -n "meta_L0_root29Shape" -p "meta_L0_root"; + rename -uid "0C10D772-4B0C-5822-FD9B-9D9B511743FE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1650,8 +1732,8 @@ createNode nurbsCurve -n "meta_L0_root26Shape" -p "meta_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_L0_root27Shape" -p "meta_L0_root"; - rename -uid "32E79E9D-4D90-3760-2A17-E9B769EACCBA"; +createNode nurbsCurve -n "meta_L0_root30Shape" -p "meta_L0_root"; + rename -uid "C982801D-4E88-0763-D3C0-05BEEB67DB82"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1678,10 +1760,10 @@ createNode nurbsCurve -n "meta_L0_root27Shape" -p "meta_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "meta_L0_0_loc" -p "meta_L0_root"; - rename -uid "979A2A2C-4348-28FB-3303-C1A15771A565"; + rename -uid "83081610-4780-2D93-ADE3-E690659DBBC9"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353617207 1.4210854715202004e-014 -2.6645352591003757e-014 ; + setAttr ".t" -type "double3" 0.66320847353617118 2.1316282072803006e-014 -2.8421709430404007e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1689,12 +1771,12 @@ createNode transform -n "meta_L0_0_loc" -p "meta_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999956 0.99999999999999878 ; + setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999956 0.99999999999999878 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_L0_0_locShape" -p "meta_L0_0_loc"; - rename -uid "CC586B5B-449B-0F36-CC82-3B959D382E01"; + rename -uid "FAB4DCFD-4F67-4B26-692C-D4B6298B7AF0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1706,8 +1788,8 @@ createNode nurbsCurve -n "meta_L0_0_locShape" -p "meta_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_L0_0_loc25Shape" -p "meta_L0_0_loc"; - rename -uid "AE4A24F8-4C28-4DCB-4488-8198D3D14D79"; +createNode nurbsCurve -n "meta_L0_0_loc28Shape" -p "meta_L0_0_loc"; + rename -uid "4F4577E4-4DC7-1E23-257F-C4AB3C0A171A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1719,8 +1801,8 @@ createNode nurbsCurve -n "meta_L0_0_loc25Shape" -p "meta_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_L0_0_loc26Shape" -p "meta_L0_0_loc"; - rename -uid "45E262AB-43B2-DB80-C531-4C8B9AF79EAF"; +createNode nurbsCurve -n "meta_L0_0_loc29Shape" -p "meta_L0_0_loc"; + rename -uid "564A5810-4573-169B-7716-859A71EE45E6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1732,8 +1814,8 @@ createNode nurbsCurve -n "meta_L0_0_loc26Shape" -p "meta_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_L0_0_loc27Shape" -p "meta_L0_0_loc"; - rename -uid "9B3191DD-4981-2F4D-DD9C-DA9870B7DB37"; +createNode nurbsCurve -n "meta_L0_0_loc30Shape" -p "meta_L0_0_loc"; + rename -uid "883AAFBF-4576-DFBA-233D-11AC76E5EC8A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1750,8 +1832,8 @@ createNode nurbsCurve -n "meta_L0_0_loc27Shape" -p "meta_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_0_loc27_0crvShape" -p "meta_L0_0_loc"; - rename -uid "5D50D747-456B-FC42-E888-E4AB5F9D23BA"; +createNode nurbsCurve -n "meta_L0_0_loc30_0crvShape" -p "meta_L0_0_loc"; + rename -uid "ECFC5142-44C0-CFA8-1213-9D8A4F7FA22C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1768,8 +1850,8 @@ createNode nurbsCurve -n "meta_L0_0_loc27_0crvShape" -p "meta_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_0_loc27_1crvShape" -p "meta_L0_0_loc"; - rename -uid "B54CCC02-4EB0-8560-01EA-B2B2E8EBDD35"; +createNode nurbsCurve -n "meta_L0_0_loc30_1crvShape" -p "meta_L0_0_loc"; + rename -uid "A03CE51F-4A19-73F0-08FC-CA99EDA8C8DC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1787,10 +1869,10 @@ createNode nurbsCurve -n "meta_L0_0_loc27_1crvShape" -p "meta_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "meta_L0_1_loc" -p "meta_L0_0_loc"; - rename -uid "E0B7AB20-4CD3-E4D3-2E74-D98D4AD2E6DF"; + rename -uid "D444D24F-40F3-D8A4-5B9D-CD948AD8859F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353618406 7.1054273576010019e-015 1.2434497875801753e-014 ; + setAttr ".t" -type "double3" 0.66320847353618362 1.4210854715202004e-014 1.2434497875801753e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1798,12 +1880,12 @@ createNode transform -n "meta_L0_1_loc" -p "meta_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000007 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000011 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_L0_1_locShape" -p "meta_L0_1_loc"; - rename -uid "D516EF82-45F2-65D2-91BB-229DE3C9AD15"; + rename -uid "20A1BFBE-424C-8E4B-A893-EAB488A43122"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1815,8 +1897,8 @@ createNode nurbsCurve -n "meta_L0_1_locShape" -p "meta_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_L0_1_loc25Shape" -p "meta_L0_1_loc"; - rename -uid "2600502B-4BCA-B9AC-81BB-9F955CD77570"; +createNode nurbsCurve -n "meta_L0_1_loc28Shape" -p "meta_L0_1_loc"; + rename -uid "35B6B9B7-4466-BE64-6370-1B95C804F2DA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1828,8 +1910,8 @@ createNode nurbsCurve -n "meta_L0_1_loc25Shape" -p "meta_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_L0_1_loc26Shape" -p "meta_L0_1_loc"; - rename -uid "6552C40F-4E55-9A12-7D18-DA8B2AC559A9"; +createNode nurbsCurve -n "meta_L0_1_loc29Shape" -p "meta_L0_1_loc"; + rename -uid "B1754CEA-4A07-AF04-BFFA-6AB59EDB0BBD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1841,8 +1923,8 @@ createNode nurbsCurve -n "meta_L0_1_loc26Shape" -p "meta_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_L0_1_loc27Shape" -p "meta_L0_1_loc"; - rename -uid "148BA794-42C4-D5E0-7B83-71BD3E367538"; +createNode nurbsCurve -n "meta_L0_1_loc30Shape" -p "meta_L0_1_loc"; + rename -uid "9ADE7F14-4043-0A91-E252-36B2EA2FAE40"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1859,8 +1941,8 @@ createNode nurbsCurve -n "meta_L0_1_loc27Shape" -p "meta_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_1_loc27_0crvShape" -p "meta_L0_1_loc"; - rename -uid "06EF20D1-4A77-CA85-519D-5F81B1FF2DB0"; +createNode nurbsCurve -n "meta_L0_1_loc30_0crvShape" -p "meta_L0_1_loc"; + rename -uid "6E26DF04-44A9-BDFB-C0CA-FBABD7BBC0FF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1877,8 +1959,8 @@ createNode nurbsCurve -n "meta_L0_1_loc27_0crvShape" -p "meta_L0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_1_loc27_1crvShape" -p "meta_L0_1_loc"; - rename -uid "A041669C-4BA8-8176-454E-2FA417E00E41"; +createNode nurbsCurve -n "meta_L0_1_loc30_1crvShape" -p "meta_L0_1_loc"; + rename -uid "F7807CEE-41B9-7634-FFFF-8EBD546925EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1896,10 +1978,10 @@ createNode nurbsCurve -n "meta_L0_1_loc27_1crvShape" -p "meta_L0_1_loc"; 0 0 -0.1875 ; createNode transform -n "meta_L0_2_loc" -p "meta_L0_1_loc"; - rename -uid "8C89428C-4A0C-7C99-64B0-D6A8776280C8"; + rename -uid "6A42F738-4EFB-9D3A-A073-C69AD353415A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353618451 7.1054273576010019e-015 -2.6645352591003757e-014 ; + setAttr ".t" -type "double3" 0.66320847353618628 0 -2.3092638912203256e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1907,12 +1989,12 @@ createNode transform -n "meta_L0_2_loc" -p "meta_L0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999922 0.99999999999999878 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999878 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_L0_2_locShape" -p "meta_L0_2_loc"; - rename -uid "F1A6D723-4FCA-BC8E-CD6C-DCB1D423E8D1"; + rename -uid "67CFF977-46E0-F134-94A0-F5ABA21FC0ED"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1924,8 +2006,8 @@ createNode nurbsCurve -n "meta_L0_2_locShape" -p "meta_L0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_L0_2_loc25Shape" -p "meta_L0_2_loc"; - rename -uid "901EFEC6-4846-AB8C-5721-F89236D2AB9A"; +createNode nurbsCurve -n "meta_L0_2_loc28Shape" -p "meta_L0_2_loc"; + rename -uid "BA0A67D2-4518-8541-D941-54B1A7182988"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1937,8 +2019,8 @@ createNode nurbsCurve -n "meta_L0_2_loc25Shape" -p "meta_L0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_L0_2_loc26Shape" -p "meta_L0_2_loc"; - rename -uid "762C2F37-4C5F-01B0-1592-02B645783A45"; +createNode nurbsCurve -n "meta_L0_2_loc29Shape" -p "meta_L0_2_loc"; + rename -uid "91D61A82-4366-472F-68BE-9196CC65605B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1950,8 +2032,8 @@ createNode nurbsCurve -n "meta_L0_2_loc26Shape" -p "meta_L0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_L0_2_loc27Shape" -p "meta_L0_2_loc"; - rename -uid "C2693270-4B5D-D34F-9636-1AB4E718B2CF"; +createNode nurbsCurve -n "meta_L0_2_loc30Shape" -p "meta_L0_2_loc"; + rename -uid "11F6EE7F-4C0E-9AC6-EAAB-E482F4493C3C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1968,8 +2050,8 @@ createNode nurbsCurve -n "meta_L0_2_loc27Shape" -p "meta_L0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_2_loc27_0crvShape" -p "meta_L0_2_loc"; - rename -uid "E254F2FB-4C9A-D470-B15F-2B88EE0E7505"; +createNode nurbsCurve -n "meta_L0_2_loc30_0crvShape" -p "meta_L0_2_loc"; + rename -uid "4A1FAB32-417C-BE51-75E9-6581CF40C596"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1986,8 +2068,8 @@ createNode nurbsCurve -n "meta_L0_2_loc27_0crvShape" -p "meta_L0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_L0_2_loc27_1crvShape" -p "meta_L0_2_loc"; - rename -uid "B96BB398-4644-2101-149F-EDAC37D28BA8"; +createNode nurbsCurve -n "meta_L0_2_loc30_1crvShape" -p "meta_L0_2_loc"; + rename -uid "52E9057F-4DE3-29DC-3F6C-4EB8CDA03E92"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2005,48 +2087,44 @@ createNode nurbsCurve -n "meta_L0_2_loc27_1crvShape" -p "meta_L0_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L3_root" -p "meta_L0_2_loc"; - rename -uid "53A0EE4D-4170-051E-7888-0785AA34738E"; + rename -uid "8DFE8D4A-4364-733F-11C9-0699BEDD991D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 3 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.27518484001103438 -0.17360051577779956 2.4946799341790502 ; + setAttr ".t" -type "double3" 0.27518484001103483 -0.17360051577779245 2.4946799341790502 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 5.4173319878595638 -68.587073855452374 -5.8163374181209919 ; + setAttr ".r" -type "double3" 5.4173319878591863 -68.587073855452445 -5.8163374181200425 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661807 1.2929668245661794 1.2929668245661805 ; + setAttr ".s" -type "double3" 1.292966824566181 1.292966824566179 1.2929668245661805 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "L"; - setAttr ".comp_index" 3; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_L3_rootShape" -p "finger_L3_root"; - rename -uid "5C39EA12-4282-4626-E6B3-7383146CD352"; + rename -uid "28B04211-4AA0-CBCC-52A2-4397947868F9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2058,8 +2136,8 @@ createNode nurbsCurve -n "finger_L3_rootShape" -p "finger_L3_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L3_root25Shape" -p "finger_L3_root"; - rename -uid "9620DDCB-49D6-216A-F048-15B80DFDDCF9"; +createNode nurbsCurve -n "finger_L3_root28Shape" -p "finger_L3_root"; + rename -uid "F780A2A9-40BD-D96C-4434-E7B33B65CAF8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2071,8 +2149,8 @@ createNode nurbsCurve -n "finger_L3_root25Shape" -p "finger_L3_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L3_root26Shape" -p "finger_L3_root"; - rename -uid "757B43A8-4301-C335-E089-3BA8D168FBF1"; +createNode nurbsCurve -n "finger_L3_root29Shape" -p "finger_L3_root"; + rename -uid "91EC1FDF-4970-7ED0-270E-5B90F238C9C0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2084,8 +2162,8 @@ createNode nurbsCurve -n "finger_L3_root26Shape" -p "finger_L3_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L3_root27Shape" -p "finger_L3_root"; - rename -uid "DD04A1AE-44F3-D93F-0408-07BA103017E1"; +createNode nurbsCurve -n "finger_L3_root30Shape" -p "finger_L3_root"; + rename -uid "285DA109-4BDF-DD05-9A10-EAA08070CA2C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2112,10 +2190,10 @@ createNode nurbsCurve -n "finger_L3_root27Shape" -p "finger_L3_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_L3_0_loc" -p "finger_L3_root"; - rename -uid "124C78B8-4448-AAE3-6DD8-2DAD72A79F99"; + rename -uid "54B817B2-4A04-1F3E-4AF8-358F9AE72F85"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.84766209830561934 1.4210854715202004e-014 -4.6629367034256575e-015 ; + setAttr ".t" -type "double3" 0.84766209830561579 1.7763568394002505e-014 -5.5511151231257827e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2123,12 +2201,11 @@ createNode transform -n "finger_L3_0_loc" -p "finger_L3_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 0.99999999999999989 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L3_0_locShape" -p "finger_L3_0_loc"; - rename -uid "5CB6639E-4E8B-4801-3D05-1890C80E5740"; + rename -uid "61CFEFB8-483F-4A27-8D8A-5EA79A8C291D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2140,8 +2217,8 @@ createNode nurbsCurve -n "finger_L3_0_locShape" -p "finger_L3_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L3_0_loc25Shape" -p "finger_L3_0_loc"; - rename -uid "4B018023-46F5-30D5-144C-1D9669B3971B"; +createNode nurbsCurve -n "finger_L3_0_loc28Shape" -p "finger_L3_0_loc"; + rename -uid "48055F8C-40DE-120D-4494-EA9C43463242"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2153,8 +2230,8 @@ createNode nurbsCurve -n "finger_L3_0_loc25Shape" -p "finger_L3_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L3_0_loc26Shape" -p "finger_L3_0_loc"; - rename -uid "F79372A0-4D34-A813-EE75-03B1C977A66C"; +createNode nurbsCurve -n "finger_L3_0_loc29Shape" -p "finger_L3_0_loc"; + rename -uid "F092861D-47A1-C8DA-60E0-2F987B7C3718"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2166,8 +2243,8 @@ createNode nurbsCurve -n "finger_L3_0_loc26Shape" -p "finger_L3_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L3_0_loc27Shape" -p "finger_L3_0_loc"; - rename -uid "A81F3D68-4071-B538-4748-42BAE3AB7AEB"; +createNode nurbsCurve -n "finger_L3_0_loc30Shape" -p "finger_L3_0_loc"; + rename -uid "14E5CB69-42D9-5530-3679-1DB2C44A4889"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2184,8 +2261,8 @@ createNode nurbsCurve -n "finger_L3_0_loc27Shape" -p "finger_L3_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_0_loc27_0crvShape" -p "finger_L3_0_loc"; - rename -uid "29750850-41A1-272A-8253-56A04A900BBC"; +createNode nurbsCurve -n "finger_L3_0_loc30_0crvShape" -p "finger_L3_0_loc"; + rename -uid "4756BDD5-4818-A11B-0D7B-209D9C4F325D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2202,8 +2279,8 @@ createNode nurbsCurve -n "finger_L3_0_loc27_0crvShape" -p "finger_L3_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_0_loc27_1crvShape" -p "finger_L3_0_loc"; - rename -uid "446CEA4D-4418-34EE-89FE-17884EA627EA"; +createNode nurbsCurve -n "finger_L3_0_loc30_1crvShape" -p "finger_L3_0_loc"; + rename -uid "D9CAFD07-4410-D491-5E41-00B644AC3D07"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2221,10 +2298,10 @@ createNode nurbsCurve -n "finger_L3_0_loc27_1crvShape" -p "finger_L3_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L3_1_loc" -p "finger_L3_0_loc"; - rename -uid "B5B2E4D1-4A58-EC96-DE69-46B62F0F1E01"; + rename -uid "6100888D-44E8-ED07-5ABD-F89C4EECC458"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.57524361070876839 -1.7763568394002505e-014 1.1102230246251565e-015 ; + setAttr ".t" -type "double3" 0.57524361070877017 -2.8421709430404007e-014 8.8817841970012523e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2232,12 +2309,12 @@ createNode transform -n "finger_L3_1_loc" -p "finger_L3_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999933 1.0000000000000002 ; + setAttr ".s" -type "double3" 1 0.99999999999999956 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L3_1_locShape" -p "finger_L3_1_loc"; - rename -uid "9A146FBB-440D-6ECE-6250-DF87A1F1BF3D"; + rename -uid "51600966-4DB1-6408-E2E4-FFBD712329A9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2249,8 +2326,8 @@ createNode nurbsCurve -n "finger_L3_1_locShape" -p "finger_L3_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L3_1_loc25Shape" -p "finger_L3_1_loc"; - rename -uid "5DC18368-4FF7-E1D9-8603-0C9F7811728D"; +createNode nurbsCurve -n "finger_L3_1_loc28Shape" -p "finger_L3_1_loc"; + rename -uid "350F07C6-4403-1ECC-FF25-0C84F4C2F302"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2262,8 +2339,8 @@ createNode nurbsCurve -n "finger_L3_1_loc25Shape" -p "finger_L3_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L3_1_loc26Shape" -p "finger_L3_1_loc"; - rename -uid "5B231DE0-411D-0FF7-AEFE-AC92DF592DBD"; +createNode nurbsCurve -n "finger_L3_1_loc29Shape" -p "finger_L3_1_loc"; + rename -uid "12C3D14D-468A-B0BA-9596-4A977702C920"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2275,8 +2352,8 @@ createNode nurbsCurve -n "finger_L3_1_loc26Shape" -p "finger_L3_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L3_1_loc27Shape" -p "finger_L3_1_loc"; - rename -uid "93854A5D-4092-AD2A-9249-37ACC4FF5595"; +createNode nurbsCurve -n "finger_L3_1_loc30Shape" -p "finger_L3_1_loc"; + rename -uid "9188CD5C-4CB6-51C2-2FB9-FFA7756CF559"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2293,8 +2370,8 @@ createNode nurbsCurve -n "finger_L3_1_loc27Shape" -p "finger_L3_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_1_loc27_0crvShape" -p "finger_L3_1_loc"; - rename -uid "5B0B4F41-4E4B-C713-50EB-C591538B37F8"; +createNode nurbsCurve -n "finger_L3_1_loc30_0crvShape" -p "finger_L3_1_loc"; + rename -uid "294C2D10-4E70-A189-F6FB-45B4DAFE2FB0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2311,8 +2388,8 @@ createNode nurbsCurve -n "finger_L3_1_loc27_0crvShape" -p "finger_L3_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_1_loc27_1crvShape" -p "finger_L3_1_loc"; - rename -uid "217DCBDB-44FC-CCE1-6CFA-EB8CF202E074"; +createNode nurbsCurve -n "finger_L3_1_loc30_1crvShape" -p "finger_L3_1_loc"; + rename -uid "EACF23F9-4F82-903A-C925-92AE77045087"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2330,10 +2407,10 @@ createNode nurbsCurve -n "finger_L3_1_loc27_1crvShape" -p "finger_L3_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L3_2_loc" -p "finger_L3_1_loc"; - rename -uid "BAD062A3-4E69-E0DE-BF48-4D9424718A43"; + rename -uid "1F8A8906-41B4-210E-F188-46AB7B886E48"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.31616177259193456 0 4.4408920985006262e-016 ; + setAttr ".t" -type "double3" 0.31616177259193368 7.1054273576010019e-015 -2.2204460492503131e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2341,12 +2418,12 @@ createNode transform -n "finger_L3_2_loc" -p "finger_L3_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999956 1.0000000000000013 1.0000000000000004 ; + setAttr ".s" -type "double3" 0.99999999999999944 1.0000000000000011 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L3_2_locShape" -p "finger_L3_2_loc"; - rename -uid "6B01524B-45CD-A01A-0524-1D8A4A688D80"; + rename -uid "2098E164-4A67-1601-E66A-ECB49459EDA1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2358,8 +2435,8 @@ createNode nurbsCurve -n "finger_L3_2_locShape" -p "finger_L3_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L3_2_loc25Shape" -p "finger_L3_2_loc"; - rename -uid "F7DC746B-4442-04C8-A7F3-97996F33D702"; +createNode nurbsCurve -n "finger_L3_2_loc28Shape" -p "finger_L3_2_loc"; + rename -uid "AE3E4294-4EAC-D2B8-8A1D-6A8A23428B8D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2371,8 +2448,8 @@ createNode nurbsCurve -n "finger_L3_2_loc25Shape" -p "finger_L3_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L3_2_loc26Shape" -p "finger_L3_2_loc"; - rename -uid "C8113D42-4E65-CC6B-4764-8B8B4FB138A7"; +createNode nurbsCurve -n "finger_L3_2_loc29Shape" -p "finger_L3_2_loc"; + rename -uid "24A0C1BA-4BD0-E9D1-FAA6-6A86648D9F4A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2384,8 +2461,8 @@ createNode nurbsCurve -n "finger_L3_2_loc26Shape" -p "finger_L3_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L3_2_loc27Shape" -p "finger_L3_2_loc"; - rename -uid "5CBFD58D-4874-D3F8-F06F-FD91BDED189A"; +createNode nurbsCurve -n "finger_L3_2_loc30Shape" -p "finger_L3_2_loc"; + rename -uid "E00AB485-4224-D424-D5D0-19AE77B6006D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2402,8 +2479,8 @@ createNode nurbsCurve -n "finger_L3_2_loc27Shape" -p "finger_L3_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_2_loc27_0crvShape" -p "finger_L3_2_loc"; - rename -uid "184B53ED-4B9A-C2DB-451F-1C91B184DE68"; +createNode nurbsCurve -n "finger_L3_2_loc30_0crvShape" -p "finger_L3_2_loc"; + rename -uid "8BDBDA93-4B4D-5C71-E2E4-AA81C1104C5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2420,8 +2497,8 @@ createNode nurbsCurve -n "finger_L3_2_loc27_0crvShape" -p "finger_L3_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L3_2_loc27_1crvShape" -p "finger_L3_2_loc"; - rename -uid "F349F5A0-44B1-9E77-D466-BC88596F05E1"; +createNode nurbsCurve -n "finger_L3_2_loc30_1crvShape" -p "finger_L3_2_loc"; + rename -uid "D159E74E-4F99-8F26-1355-439F86A0E47D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2439,7 +2516,7 @@ createNode nurbsCurve -n "finger_L3_2_loc27_1crvShape" -p "finger_L3_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L3_blade" -p "finger_L3_root"; - rename -uid "38BB3E01-4EDF-9B24-8AFF-049316B6B572"; + rename -uid "F1974BED-43CF-8FC4-8B57-84B6CF524F75"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -2449,13 +2526,12 @@ createNode transform -n "finger_L3_blade" -p "finger_L3_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 0.99999999999999989 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_L3_bladeShape" -p "finger_L3_blade"; - rename -uid "E7FFEC55-4222-3CAD-4F0B-389BCD51E366"; + rename -uid "FBC924DC-45FC-B63D-9141-F18FB8598403"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2465,12 +2541,12 @@ createNode nurbsCurve -n "finger_L3_bladeShape" -p "finger_L3_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970844 0 0 - 0 0.25859336491323615 0 + 0.77578009473970855 0 0 + 0 0.2585933649132362 0 0 0 0 ; -createNode aimConstraint -n "finger_L3_blade_aimConstraint9" -p "finger_L3_blade"; - rename -uid "5F320DAF-44BF-C52D-DCBA-0F964F65E7E2"; +createNode aimConstraint -n "finger_L3_blade_aimConstraint10" -p "finger_L3_blade"; + rename -uid "ED61B55F-4A01-9765-966B-EA94C3CCCCD3"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_L3_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -2486,8 +2562,8 @@ createNode aimConstraint -n "finger_L3_blade_aimConstraint9" -p "finger_L3_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_L3_blade_pointConstraint9" -p "finger_L3_blade"; - rename -uid "48558682-4FCE-E7E5-A9AF-A8917F41BD53"; +createNode pointConstraint -n "finger_L3_blade_pointConstraint10" -p "finger_L3_blade"; + rename -uid "A2500EF5-4718-04A7-8D4B-4CB1C366B44F"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_L3_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -2501,22 +2577,22 @@ createNode pointConstraint -n "finger_L3_blade_pointConstraint9" -p "finger_L3_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 1.7763568394002505e-015 0 6.6613381477509392e-016 ; + setAttr ".rst" -type "double3" -1.7763568394002505e-015 0 -2.2204460492503131e-016 ; setAttr -k on ".w0"; createNode transform -n "finger_L3_crv" -p "finger_L3_root"; - rename -uid "B6F70AC7-4874-806E-B36A-9990A36FB421"; + rename -uid "5E11EB2A-4381-9CD9-141E-0A9AB7E98FE8"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 8.1560938646754515 -29.032786855763469 1.4804327725045308 ; - setAttr ".r" -type "double3" -7.5791665394140972 -14.304244378901332 49.348303523761764 ; - setAttr ".s" -type "double3" 2.6320983106786136 2.632098310678602 2.6320983106786078 ; + setAttr ".t" -type "double3" 8.1560938646754533 -29.032786855763458 1.4804327725048581 ; + setAttr ".r" -type "double3" -7.5791665394145102 -14.304244378900817 49.348303523761885 ; + setAttr ".s" -type "double3" 2.6320983106786136 2.6320983106786024 2.6320983106786073 ; createNode nurbsCurve -n "finger_L3_crvShape" -p "finger_L3_crv"; - rename -uid "E569F681-4567-021E-3368-B996D22AC45D"; + rename -uid "82E1BA38-4990-8A03-A9CF-7F9604503500"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_L3_crvShapeOrig" -p "finger_L3_crv"; - rename -uid "C31A3363-453D-3A0D-C865-60BB0EB9578C"; + rename -uid "AAECFF70-473D-B344-9D25-70BB3BF551C1"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -2529,48 +2605,44 @@ createNode nurbsCurve -n "finger_L3_crvShapeOrig" -p "finger_L3_crv"; 0 0 0 ; createNode transform -n "finger_L2_root" -p "meta_L0_1_loc"; - rename -uid "B5722177-49D8-2CEC-27A0-C5BB60B380DB"; + rename -uid "418BFA34-4474-8D65-2952-B3B4E1A88249"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 2 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.21404201232122544 -0.17620518664708129 2.8414845756647313 ; + setAttr ".t" -type "double3" 0.21404201232122766 -0.17620518664707419 2.8414845756647349 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 19.114415121377057 -82.086889237978554 -14.829711404959337 ; + setAttr ".r" -type "double3" 19.114415121376148 -82.086889237978653 -14.829711404956837 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661798 1.2929668245661781 1.2929668245661798 ; + setAttr ".s" -type "double3" 1.2929668245661792 1.2929668245661774 1.2929668245661796 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "L"; - setAttr ".comp_index" 2; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_L2_rootShape" -p "finger_L2_root"; - rename -uid "B51CB226-47A2-3924-6157-E1AC20EE6463"; + rename -uid "95C28030-4BB0-B6CA-CF5E-B9A71BBB3306"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2582,8 +2654,8 @@ createNode nurbsCurve -n "finger_L2_rootShape" -p "finger_L2_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L2_root25Shape" -p "finger_L2_root"; - rename -uid "92A93AD6-41AF-50B6-8B7B-02AD6E1A2E6E"; +createNode nurbsCurve -n "finger_L2_root28Shape" -p "finger_L2_root"; + rename -uid "785F8947-47CC-FCB7-9DD6-7B8723F7089F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2595,8 +2667,8 @@ createNode nurbsCurve -n "finger_L2_root25Shape" -p "finger_L2_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L2_root26Shape" -p "finger_L2_root"; - rename -uid "D31FAD55-4215-13A2-1B30-37A5411083CF"; +createNode nurbsCurve -n "finger_L2_root29Shape" -p "finger_L2_root"; + rename -uid "349BF42A-4356-5E05-5C89-6BB360FB0D48"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2608,8 +2680,8 @@ createNode nurbsCurve -n "finger_L2_root26Shape" -p "finger_L2_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L2_root27Shape" -p "finger_L2_root"; - rename -uid "7426907E-45A1-7B07-E38B-2193BA7021D5"; +createNode nurbsCurve -n "finger_L2_root30Shape" -p "finger_L2_root"; + rename -uid "0F1372C2-4823-E5FE-1CCE-0BAB57395C50"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2636,10 +2708,10 @@ createNode nurbsCurve -n "finger_L2_root27Shape" -p "finger_L2_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_L2_0_loc" -p "finger_L2_root"; - rename -uid "4498F4B1-46B2-20CB-8F54-C4BA41E96102"; + rename -uid "9BF4079A-4154-19CE-9CBE-FFAF54047DE2"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.94501387217406929 -1.7763568394002505e-014 2.886579864025407e-015 ; + setAttr ".t" -type "double3" 0.9450138721740684 -1.4210854715202004e-014 2.6645352591003757e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2647,12 +2719,12 @@ createNode transform -n "finger_L2_0_loc" -p "finger_L2_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000013 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000011 1.0000000000000016 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L2_0_locShape" -p "finger_L2_0_loc"; - rename -uid "18B67CFD-49E2-4F3D-DDC8-D5BA630E8550"; + rename -uid "4F9EF1F5-4AC7-9F2B-4E83-C6A2A9D1D94F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2664,8 +2736,8 @@ createNode nurbsCurve -n "finger_L2_0_locShape" -p "finger_L2_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L2_0_loc25Shape" -p "finger_L2_0_loc"; - rename -uid "55F0FA6C-4229-1934-6648-BEB19EF0DC66"; +createNode nurbsCurve -n "finger_L2_0_loc28Shape" -p "finger_L2_0_loc"; + rename -uid "DBF01B79-43BC-64D4-F64A-A293C4C2143D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2677,8 +2749,8 @@ createNode nurbsCurve -n "finger_L2_0_loc25Shape" -p "finger_L2_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L2_0_loc26Shape" -p "finger_L2_0_loc"; - rename -uid "9CAE441E-4F96-27AC-E2FC-B3BF6906C41F"; +createNode nurbsCurve -n "finger_L2_0_loc29Shape" -p "finger_L2_0_loc"; + rename -uid "C8C34CC6-424A-4B27-C4AE-418DC501E188"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2690,8 +2762,8 @@ createNode nurbsCurve -n "finger_L2_0_loc26Shape" -p "finger_L2_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L2_0_loc27Shape" -p "finger_L2_0_loc"; - rename -uid "9D01ACE1-457A-57BF-852D-78A2128241D5"; +createNode nurbsCurve -n "finger_L2_0_loc30Shape" -p "finger_L2_0_loc"; + rename -uid "7197DDE7-4AD5-2617-9EDD-769A510024DA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2708,8 +2780,8 @@ createNode nurbsCurve -n "finger_L2_0_loc27Shape" -p "finger_L2_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_0_loc27_0crvShape" -p "finger_L2_0_loc"; - rename -uid "3BA7BBDD-4DC8-7E9D-B657-EE95BB3D677E"; +createNode nurbsCurve -n "finger_L2_0_loc30_0crvShape" -p "finger_L2_0_loc"; + rename -uid "9811DA9C-4910-1A00-623D-3897CBAD77ED"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2726,8 +2798,8 @@ createNode nurbsCurve -n "finger_L2_0_loc27_0crvShape" -p "finger_L2_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_0_loc27_1crvShape" -p "finger_L2_0_loc"; - rename -uid "05582C86-40CA-F893-618E-68987E1BB617"; +createNode nurbsCurve -n "finger_L2_0_loc30_1crvShape" -p "finger_L2_0_loc"; + rename -uid "2064B136-424E-C896-9E4D-CE9A261D7344"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2745,10 +2817,10 @@ createNode nurbsCurve -n "finger_L2_0_loc27_1crvShape" -p "finger_L2_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L2_1_loc" -p "finger_L2_0_loc"; - rename -uid "FADAD962-4DA5-8140-8979-B08382F6D154"; + rename -uid "22EEE0FE-4605-0FF0-0996-2CB7ECDE849D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.76775488587175289 2.4868995751603507e-014 0 ; + setAttr ".t" -type "double3" 0.76775488587175467 2.1316282072803006e-014 -2.2204460492503131e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2756,12 +2828,12 @@ createNode transform -n "finger_L2_1_loc" -p "finger_L2_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999933 0.99999999999999944 ; + setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999944 0.99999999999999922 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L2_1_locShape" -p "finger_L2_1_loc"; - rename -uid "6F4C2477-4DD0-F330-CD98-14A13292E9DC"; + rename -uid "AA0FE053-440E-AD19-4D34-DEADB8C4541A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2773,8 +2845,8 @@ createNode nurbsCurve -n "finger_L2_1_locShape" -p "finger_L2_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L2_1_loc25Shape" -p "finger_L2_1_loc"; - rename -uid "3ED30EBA-42E2-DF5B-52DD-BE9D05362B29"; +createNode nurbsCurve -n "finger_L2_1_loc28Shape" -p "finger_L2_1_loc"; + rename -uid "EF6EF24A-4507-88CE-0D00-A5A00F208679"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2786,8 +2858,8 @@ createNode nurbsCurve -n "finger_L2_1_loc25Shape" -p "finger_L2_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L2_1_loc26Shape" -p "finger_L2_1_loc"; - rename -uid "FA8D048E-4D48-871D-175A-3B824044A305"; +createNode nurbsCurve -n "finger_L2_1_loc29Shape" -p "finger_L2_1_loc"; + rename -uid "1CCDFF1B-4735-B19D-3583-05B98B747F28"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2799,8 +2871,8 @@ createNode nurbsCurve -n "finger_L2_1_loc26Shape" -p "finger_L2_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L2_1_loc27Shape" -p "finger_L2_1_loc"; - rename -uid "69155E43-4909-5C12-54E1-A281E47C89DE"; +createNode nurbsCurve -n "finger_L2_1_loc30Shape" -p "finger_L2_1_loc"; + rename -uid "50EB4404-4948-518D-1332-0CAAC10BA3D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2817,8 +2889,8 @@ createNode nurbsCurve -n "finger_L2_1_loc27Shape" -p "finger_L2_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_1_loc27_0crvShape" -p "finger_L2_1_loc"; - rename -uid "BD13DE84-47BA-39F5-DF80-CCACCD58893F"; +createNode nurbsCurve -n "finger_L2_1_loc30_0crvShape" -p "finger_L2_1_loc"; + rename -uid "B31452CD-48C6-513A-4A29-A8B97F1A5B5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2835,8 +2907,8 @@ createNode nurbsCurve -n "finger_L2_1_loc27_0crvShape" -p "finger_L2_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_1_loc27_1crvShape" -p "finger_L2_1_loc"; - rename -uid "AA19BC1C-42B2-D073-9D26-BF9382E8F5C2"; +createNode nurbsCurve -n "finger_L2_1_loc30_1crvShape" -p "finger_L2_1_loc"; + rename -uid "44314BD5-4758-F2AE-4CB6-19AD4869F483"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2854,10 +2926,10 @@ createNode nurbsCurve -n "finger_L2_1_loc27_1crvShape" -p "finger_L2_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L2_2_loc" -p "finger_L2_1_loc"; - rename -uid "7605DAC8-4F2A-7FDF-1B1E-A39651BD58C2"; + rename -uid "D425715E-4685-EEF0-0D5A-D28CCD022306"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.67457026674915621 -2.1316282072803006e-014 -6.6613381477509392e-016 ; + setAttr ".t" -type "double3" 0.67457026674915532 -1.7763568394002505e-014 -6.6613381477509392e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2865,12 +2937,12 @@ createNode transform -n "finger_L2_2_loc" -p "finger_L2_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000007 1.0000000000000007 ; + setAttr ".s" -type "double3" 1.0000000000000009 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L2_2_locShape" -p "finger_L2_2_loc"; - rename -uid "3A32DE55-4E27-B7CD-9476-5F8818B319B9"; + rename -uid "969B6AE1-4303-18B6-C06C-2EB94C9D6C74"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2882,8 +2954,8 @@ createNode nurbsCurve -n "finger_L2_2_locShape" -p "finger_L2_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L2_2_loc25Shape" -p "finger_L2_2_loc"; - rename -uid "85C4FAAD-428A-3416-52D1-AFBA8B3BFF38"; +createNode nurbsCurve -n "finger_L2_2_loc28Shape" -p "finger_L2_2_loc"; + rename -uid "23B75318-4542-5E2F-C337-569B215A206E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2895,8 +2967,8 @@ createNode nurbsCurve -n "finger_L2_2_loc25Shape" -p "finger_L2_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L2_2_loc26Shape" -p "finger_L2_2_loc"; - rename -uid "A571F53E-4054-85A1-7284-E2946189CE4B"; +createNode nurbsCurve -n "finger_L2_2_loc29Shape" -p "finger_L2_2_loc"; + rename -uid "8FD92D2F-4BD5-6F00-993E-E1BFD9FE66C0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2908,8 +2980,8 @@ createNode nurbsCurve -n "finger_L2_2_loc26Shape" -p "finger_L2_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L2_2_loc27Shape" -p "finger_L2_2_loc"; - rename -uid "415C9857-4012-6A95-88AD-88928E148DDA"; +createNode nurbsCurve -n "finger_L2_2_loc30Shape" -p "finger_L2_2_loc"; + rename -uid "F1385FFC-41F8-22B9-E3D8-CEBEF22D9AE2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2926,8 +2998,8 @@ createNode nurbsCurve -n "finger_L2_2_loc27Shape" -p "finger_L2_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_2_loc27_0crvShape" -p "finger_L2_2_loc"; - rename -uid "888DD5B4-415C-26EB-04AE-46A76F7506D9"; +createNode nurbsCurve -n "finger_L2_2_loc30_0crvShape" -p "finger_L2_2_loc"; + rename -uid "58E2DBF7-47CF-D73B-467D-A4AD570D0BCE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2944,8 +3016,8 @@ createNode nurbsCurve -n "finger_L2_2_loc27_0crvShape" -p "finger_L2_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L2_2_loc27_1crvShape" -p "finger_L2_2_loc"; - rename -uid "711E5706-4CB5-12E8-2468-9993C5BE643A"; +createNode nurbsCurve -n "finger_L2_2_loc30_1crvShape" -p "finger_L2_2_loc"; + rename -uid "76F45813-4EAF-68BA-567F-23B44C5B88E0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2963,7 +3035,7 @@ createNode nurbsCurve -n "finger_L2_2_loc27_1crvShape" -p "finger_L2_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L2_blade" -p "finger_L2_root"; - rename -uid "D3D2D781-412E-DC37-4F68-1BA09F4CAD1C"; + rename -uid "89394188-4369-A302-77E4-A0A65A6E53B6"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -2973,13 +3045,13 @@ createNode transform -n "finger_L2_blade" -p "finger_L2_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000013 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000011 1.0000000000000016 1.0000000000000007 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_L2_bladeShape" -p "finger_L2_blade"; - rename -uid "393DBB1F-4585-1C8C-D8AE-48AB246C2C17"; + rename -uid "A6F0E146-4640-EE70-A700-72B69C43FDEE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2989,12 +3061,12 @@ createNode nurbsCurve -n "finger_L2_bladeShape" -p "finger_L2_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970788 0 0 - 0 0.25859336491323598 0 + 0.77578009473970744 0 0 + 0 0.25859336491323581 0 0 0 0 ; -createNode aimConstraint -n "finger_L2_blade_aimConstraint9" -p "finger_L2_blade"; - rename -uid "9BCA5B4B-4F48-0883-0994-B08AD2561380"; +createNode aimConstraint -n "finger_L2_blade_aimConstraint10" -p "finger_L2_blade"; + rename -uid "D5BCF1DD-48DD-BFA1-D2F5-15919A47A4DA"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_L2_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3010,8 +3082,8 @@ createNode aimConstraint -n "finger_L2_blade_aimConstraint9" -p "finger_L2_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_L2_blade_pointConstraint9" -p "finger_L2_blade"; - rename -uid "744ABBFC-4F07-503C-41C2-379A445E22B5"; +createNode pointConstraint -n "finger_L2_blade_pointConstraint10" -p "finger_L2_blade"; + rename -uid "1B1EC012-4C00-9D52-399F-23B5D6D92153"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_L2_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3025,23 +3097,22 @@ createNode pointConstraint -n "finger_L2_blade_pointConstraint9" -p "finger_L2_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 1.7763568394002505e-015 -3.5527136788005009e-015 - 2.2204460492503131e-016 ; + setAttr ".rst" -type "double3" 1.7763568394002505e-015 0 0 ; setAttr -k on ".w0"; createNode transform -n "finger_L2_crv" -p "finger_L2_root"; - rename -uid "8F8871FF-4166-7BF0-60CD-63B0FC453FEE"; + rename -uid "2A97DE37-46C2-1452-248A-32B7CC2B0932"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 8.0630938931309331 -29.023661369441623 1.4173349723071398 ; - setAttr ".r" -type "double3" -0.54140613098892132 -1.5904804996521624 47.737641631363935 ; - setAttr ".s" -type "double3" 2.6320983106786131 2.6320983106786016 2.6320983106786082 ; + setAttr ".t" -type "double3" 8.0630938931309526 -29.023661369441573 1.4173349723079571 ; + setAttr ".r" -type "double3" -0.54140613098998569 -1.5904804996509363 47.737641631363992 ; + setAttr ".s" -type "double3" 2.6320983106786136 2.632098310678602 2.6320983106786082 ; createNode nurbsCurve -n "finger_L2_crvShape" -p "finger_L2_crv"; - rename -uid "9467EEEC-46D6-0333-8CE5-6FBCDF060E58"; + rename -uid "C9D9C989-43AF-78E0-D574-DD8FE0F978A2"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_L2_crvShapeOrig" -p "finger_L2_crv"; - rename -uid "32FEF6ED-439D-0C04-E46E-358F480AA929"; + rename -uid "6484CD8B-4000-A0E3-5649-118CDD3D104E"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -3054,48 +3125,44 @@ createNode nurbsCurve -n "finger_L2_crvShapeOrig" -p "finger_L2_crv"; 0 0 0 ; createNode transform -n "finger_L1_root" -p "meta_L0_0_loc"; - rename -uid "A04BFEC1-4A08-706E-C6D8-408B5B777EF7"; + rename -uid "0C271F39-460C-265F-D87C-09B7D908AFF8"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 1 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.0077643969605949437 -0.12358406696715463 2.9483952421545823 ; + setAttr ".t" -type "double3" -0.0077643969605958318 -0.1235840669671262 2.9483952421545823 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 121.34021398870092 -79.977014017422619 -112.77222628638373 ; + setAttr ".r" -type "double3" 121.34021398870121 -79.977014017422945 -112.77222628638467 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661787 1.2929668245661801 1.2929668245661796 ; + setAttr ".s" -type "double3" 1.2929668245661792 1.2929668245661801 1.2929668245661796 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "L"; - setAttr ".comp_index" 1; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_L1_rootShape" -p "finger_L1_root"; - rename -uid "54528121-438C-D748-FF73-1C907C47321A"; + rename -uid "23943D21-493A-41CE-FD6C-C68F9870AD74"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3107,8 +3174,8 @@ createNode nurbsCurve -n "finger_L1_rootShape" -p "finger_L1_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L1_root25Shape" -p "finger_L1_root"; - rename -uid "DAA904AA-4A78-7FF0-32BC-7E816ABB14C3"; +createNode nurbsCurve -n "finger_L1_root28Shape" -p "finger_L1_root"; + rename -uid "3D7453AC-46C9-0752-C5C0-66BAAA2F97DA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3120,8 +3187,8 @@ createNode nurbsCurve -n "finger_L1_root25Shape" -p "finger_L1_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L1_root26Shape" -p "finger_L1_root"; - rename -uid "5CE9A806-4263-E546-EB0F-1797451E7BFD"; +createNode nurbsCurve -n "finger_L1_root29Shape" -p "finger_L1_root"; + rename -uid "B436E7B0-4582-B969-2FB0-AD84AC776642"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3133,8 +3200,8 @@ createNode nurbsCurve -n "finger_L1_root26Shape" -p "finger_L1_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L1_root27Shape" -p "finger_L1_root"; - rename -uid "9F4CD028-4E3D-DF92-8353-95A6CC29335C"; +createNode nurbsCurve -n "finger_L1_root30Shape" -p "finger_L1_root"; + rename -uid "080CE05D-4013-2F76-66FD-00BF89BD0507"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3161,10 +3228,10 @@ createNode nurbsCurve -n "finger_L1_root27Shape" -p "finger_L1_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_L1_0_loc" -p "finger_L1_root"; - rename -uid "914DFF79-4DCC-0535-A6D7-8BA8E1C19F42"; + rename -uid "13F05939-4CF8-EE62-91B8-57A880D1DF8C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.99999999999998401 1.4210854715202004e-014 -8.8817841970012523e-016 ; + setAttr ".t" -type "double3" 0.99999999999998224 7.1054273576010019e-015 -2.2204460492503131e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3172,12 +3239,12 @@ createNode transform -n "finger_L1_0_loc" -p "finger_L1_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999967 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L1_0_locShape" -p "finger_L1_0_loc"; - rename -uid "99DC0949-4A62-910E-25FC-22BC53BD9B72"; + rename -uid "F136D4DF-4641-1040-7273-C9998F1CCA19"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3189,8 +3256,8 @@ createNode nurbsCurve -n "finger_L1_0_locShape" -p "finger_L1_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L1_0_loc25Shape" -p "finger_L1_0_loc"; - rename -uid "BD5EC430-474D-BA8A-A3F4-C5B79FCA5B6B"; +createNode nurbsCurve -n "finger_L1_0_loc28Shape" -p "finger_L1_0_loc"; + rename -uid "4D0237A0-4F00-3C9B-F6BA-F19DF485A1A4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3202,8 +3269,8 @@ createNode nurbsCurve -n "finger_L1_0_loc25Shape" -p "finger_L1_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L1_0_loc26Shape" -p "finger_L1_0_loc"; - rename -uid "644C7DA4-4E3D-0E5F-283D-5594FDE07BEA"; +createNode nurbsCurve -n "finger_L1_0_loc29Shape" -p "finger_L1_0_loc"; + rename -uid "DFAC43FB-4218-B221-AFAB-DD9C779C1F93"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3215,8 +3282,8 @@ createNode nurbsCurve -n "finger_L1_0_loc26Shape" -p "finger_L1_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L1_0_loc27Shape" -p "finger_L1_0_loc"; - rename -uid "C24A8415-40A7-778F-EAFA-25A3D5179477"; +createNode nurbsCurve -n "finger_L1_0_loc30Shape" -p "finger_L1_0_loc"; + rename -uid "1FB8DFC0-4AEB-E26B-8C3D-37BA59F2B8CD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3233,8 +3300,8 @@ createNode nurbsCurve -n "finger_L1_0_loc27Shape" -p "finger_L1_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_0_loc27_0crvShape" -p "finger_L1_0_loc"; - rename -uid "76FA84C1-49F5-7162-CD38-EEA0BF66C0D8"; +createNode nurbsCurve -n "finger_L1_0_loc30_0crvShape" -p "finger_L1_0_loc"; + rename -uid "3735BCB6-4201-163A-55B9-2D9B530CA9F2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3251,8 +3318,8 @@ createNode nurbsCurve -n "finger_L1_0_loc27_0crvShape" -p "finger_L1_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_0_loc27_1crvShape" -p "finger_L1_0_loc"; - rename -uid "B00B141F-4E0C-B331-5B2D-4DB82DAF3862"; +createNode nurbsCurve -n "finger_L1_0_loc30_1crvShape" -p "finger_L1_0_loc"; + rename -uid "1D1576D8-461B-71A3-87F6-078E8CD459D2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3270,10 +3337,10 @@ createNode nurbsCurve -n "finger_L1_0_loc27_1crvShape" -p "finger_L1_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L1_1_loc" -p "finger_L1_0_loc"; - rename -uid "D58DE242-4530-0ADD-DF28-C99703B41832"; + rename -uid "4792E878-4C51-3D6A-9B26-EC8C334199AD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.96412528414018439 1.0658141036401503e-014 -4.4408920985006262e-016 ; + setAttr ".t" -type "double3" 0.96412528414018617 1.0658141036401503e-014 4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3281,12 +3348,12 @@ createNode transform -n "finger_L1_1_loc" -p "finger_L1_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999933 0.99999999999999978 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999956 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L1_1_locShape" -p "finger_L1_1_loc"; - rename -uid "41289926-43A2-3FD4-A9D5-338844686161"; + rename -uid "7E590291-4B62-A4F9-2877-A692459603C2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3298,8 +3365,8 @@ createNode nurbsCurve -n "finger_L1_1_locShape" -p "finger_L1_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L1_1_loc25Shape" -p "finger_L1_1_loc"; - rename -uid "E775FA73-4F9B-05A4-9FA2-43B5FDF83936"; +createNode nurbsCurve -n "finger_L1_1_loc28Shape" -p "finger_L1_1_loc"; + rename -uid "113BFA7C-4E92-F10E-A9B4-B385004A336E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3311,8 +3378,8 @@ createNode nurbsCurve -n "finger_L1_1_loc25Shape" -p "finger_L1_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L1_1_loc26Shape" -p "finger_L1_1_loc"; - rename -uid "8AAE2251-4F64-374D-1BF0-D083858E6841"; +createNode nurbsCurve -n "finger_L1_1_loc29Shape" -p "finger_L1_1_loc"; + rename -uid "33CAD94C-421F-0747-2B06-E794833052F5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3324,8 +3391,8 @@ createNode nurbsCurve -n "finger_L1_1_loc26Shape" -p "finger_L1_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L1_1_loc27Shape" -p "finger_L1_1_loc"; - rename -uid "93F596BE-42C1-0909-D4CF-7DAFCFC49AD1"; +createNode nurbsCurve -n "finger_L1_1_loc30Shape" -p "finger_L1_1_loc"; + rename -uid "59DC19EC-4185-A2D4-1E15-3480D319C0EA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3342,8 +3409,8 @@ createNode nurbsCurve -n "finger_L1_1_loc27Shape" -p "finger_L1_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_1_loc27_0crvShape" -p "finger_L1_1_loc"; - rename -uid "96A8A97A-4077-15E0-34F6-A98484365CC1"; +createNode nurbsCurve -n "finger_L1_1_loc30_0crvShape" -p "finger_L1_1_loc"; + rename -uid "E84F6F0B-40D2-32EF-86AB-6797BF96ADAD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3360,8 +3427,8 @@ createNode nurbsCurve -n "finger_L1_1_loc27_0crvShape" -p "finger_L1_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_1_loc27_1crvShape" -p "finger_L1_1_loc"; - rename -uid "162611A8-4B13-3853-77B8-0CA4A32E7A4E"; +createNode nurbsCurve -n "finger_L1_1_loc30_1crvShape" -p "finger_L1_1_loc"; + rename -uid "7B87ABF2-43D6-FF1F-5F1D-D6B00CC2704D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3379,10 +3446,10 @@ createNode nurbsCurve -n "finger_L1_1_loc27_1crvShape" -p "finger_L1_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L1_2_loc" -p "finger_L1_1_loc"; - rename -uid "47CC3376-4ECC-B8F3-88E9-DBB62B628062"; + rename -uid "1D495523-40DC-BBBE-337D-E7923BEB96AC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.58017281549591004 -1.7763568394002505e-014 -2.2204460492503131e-016 ; + setAttr ".t" -type "double3" 0.58017281549589939 -1.4210854715202004e-014 -4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3390,12 +3457,12 @@ createNode transform -n "finger_L1_2_loc" -p "finger_L1_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000002 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L1_2_locShape" -p "finger_L1_2_loc"; - rename -uid "282047B1-49AA-871B-07B7-919E38C9D04B"; + rename -uid "99AE3963-4377-47A0-8DE7-85A0A5232BEC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3407,8 +3474,8 @@ createNode nurbsCurve -n "finger_L1_2_locShape" -p "finger_L1_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L1_2_loc25Shape" -p "finger_L1_2_loc"; - rename -uid "2FD991A2-4CA0-27ED-3E81-2FAF32C96F71"; +createNode nurbsCurve -n "finger_L1_2_loc28Shape" -p "finger_L1_2_loc"; + rename -uid "8A194ADA-4587-ADC8-3893-A5B1D1FBD01E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3420,8 +3487,8 @@ createNode nurbsCurve -n "finger_L1_2_loc25Shape" -p "finger_L1_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L1_2_loc26Shape" -p "finger_L1_2_loc"; - rename -uid "7FAA8180-4F96-70D2-0AC7-D68143CC5823"; +createNode nurbsCurve -n "finger_L1_2_loc29Shape" -p "finger_L1_2_loc"; + rename -uid "D4C988F9-49B4-5BD6-54DD-B987A98C9316"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3433,8 +3500,8 @@ createNode nurbsCurve -n "finger_L1_2_loc26Shape" -p "finger_L1_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L1_2_loc27Shape" -p "finger_L1_2_loc"; - rename -uid "349CE503-4825-C7E0-EA43-72B9F4C491BF"; +createNode nurbsCurve -n "finger_L1_2_loc30Shape" -p "finger_L1_2_loc"; + rename -uid "A296DCAD-4468-2665-D014-8C9BEA22B76E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3451,8 +3518,8 @@ createNode nurbsCurve -n "finger_L1_2_loc27Shape" -p "finger_L1_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_2_loc27_0crvShape" -p "finger_L1_2_loc"; - rename -uid "E1896AC6-47BD-5411-2387-6E9F8222510C"; +createNode nurbsCurve -n "finger_L1_2_loc30_0crvShape" -p "finger_L1_2_loc"; + rename -uid "085A8154-407E-63C7-BF10-7F9310EABFFC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3469,8 +3536,8 @@ createNode nurbsCurve -n "finger_L1_2_loc27_0crvShape" -p "finger_L1_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L1_2_loc27_1crvShape" -p "finger_L1_2_loc"; - rename -uid "973DBA8B-4506-A4D7-F00C-2881BF4B5356"; +createNode nurbsCurve -n "finger_L1_2_loc30_1crvShape" -p "finger_L1_2_loc"; + rename -uid "0467786D-45BB-1434-DA57-AE817A1AEDEE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3488,7 +3555,7 @@ createNode nurbsCurve -n "finger_L1_2_loc27_1crvShape" -p "finger_L1_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L1_blade" -p "finger_L1_root"; - rename -uid "AA12360A-4FEA-F921-DE8E-DF82A3632553"; + rename -uid "A98F837B-4A92-7ECD-3F39-3A973A576A0A"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -3498,13 +3565,13 @@ createNode transform -n "finger_L1_blade" -p "finger_L1_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999967 1 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_L1_bladeShape" -p "finger_L1_blade"; - rename -uid "18F6A578-43A4-F839-F182-B2B3F3621213"; + rename -uid "BCC94EA1-432C-5292-D8B3-2393C001F71C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3514,12 +3581,12 @@ createNode nurbsCurve -n "finger_L1_bladeShape" -p "finger_L1_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970722 0 0 - 0 0.25859336491323576 0 + 0.77578009473970744 0 0 + 0 0.25859336491323581 0 0 0 0 ; -createNode aimConstraint -n "finger_L1_blade_aimConstraint9" -p "finger_L1_blade"; - rename -uid "0977C3F1-463D-7884-2BAE-829B396AECEF"; +createNode aimConstraint -n "finger_L1_blade_aimConstraint10" -p "finger_L1_blade"; + rename -uid "B6410DF7-43E0-970B-722C-B0BC7A04DED4"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_L1_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3535,8 +3602,8 @@ createNode aimConstraint -n "finger_L1_blade_aimConstraint9" -p "finger_L1_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_L1_blade_pointConstraint9" -p "finger_L1_blade"; - rename -uid "19A29D51-4444-F99A-A3B5-5E848EE4D7B0"; +createNode pointConstraint -n "finger_L1_blade_pointConstraint10" -p "finger_L1_blade"; + rename -uid "87618FA0-4F86-0369-01CA-9DA206C5573C"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_L1_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3550,22 +3617,22 @@ createNode pointConstraint -n "finger_L1_blade_pointConstraint9" -p "finger_L1_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 0 -4.4408920985006262e-016 ; + setAttr ".rst" -type "double3" 0 -3.5527136788005009e-015 0 ; setAttr -k on ".w0"; createNode transform -n "finger_L1_crv" -p "finger_L1_root"; - rename -uid "DE0F1137-43DD-03F9-0D8D-D185908B1641"; + rename -uid "45445143-4606-ECE9-260F-618CB52AC206"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 11.22243322515321 -28.040620010901346 1.1418187531094541 ; - setAttr ".r" -type "double3" 5.8484943948543453 9.9768879508748096 54.111347352878276 ; - setAttr ".s" -type "double3" 2.632098310678614 2.6320983106786024 2.6320983106786096 ; + setAttr ".t" -type "double3" 11.222433225153219 -28.040620010901346 1.1418187531091182 ; + setAttr ".r" -type "double3" 5.8484943948547619 9.9768879508742643 54.111347352878354 ; + setAttr ".s" -type "double3" 2.6320983106786122 2.6320983106786016 2.6320983106786091 ; createNode nurbsCurve -n "finger_L1_crvShape" -p "finger_L1_crv"; - rename -uid "7BADF064-49AF-5077-6366-EB806FFFF150"; + rename -uid "026E55F7-477A-80BD-52A9-BAA05ECE7689"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_L1_crvShapeOrig" -p "finger_L1_crv"; - rename -uid "E241D1E0-40A4-A4E6-032B-3C8CD2F280CD"; + rename -uid "F3171980-49A0-84C7-EB19-29A6CE1C78BD"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -3578,7 +3645,7 @@ createNode nurbsCurve -n "finger_L1_crvShapeOrig" -p "finger_L1_crv"; 0 0 0 ; createNode transform -n "meta_L0_blade" -p "meta_L0_root"; - rename -uid "9BB5FA11-41A5-3B37-903E-FCBE43840668"; + rename -uid "CDB7EC57-4A43-F40A-3C6D-37BC1C021665"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -3588,13 +3655,13 @@ createNode transform -n "meta_L0_blade" -p "meta_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999956 0.99999999999999878 ; + setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999956 0.99999999999999878 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "meta_L0_bladeShape" -p "meta_L0_blade"; - rename -uid "9F053794-4937-EE26-481B-0380F76D495A"; + rename -uid "699FB832-4934-4C70-1FF1-679BF365BDAE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3604,12 +3671,12 @@ createNode nurbsCurve -n "meta_L0_bladeShape" -p "meta_L0_blade"; 4 0 1 2 3 4 0 0 0 - 0.18503232649030155 0 0 - 0 0.061677442163433849 0 + 0.1850323264903016 0 0 + 0 0.06167744216343387 0 0 0 0 ; -createNode aimConstraint -n "meta_L0_blade_aimConstraint9" -p "meta_L0_blade"; - rename -uid "E5E0B159-4675-9503-6D5C-6DB8044F7ACB"; +createNode aimConstraint -n "meta_L0_blade_aimConstraint10" -p "meta_L0_blade"; + rename -uid "DC966F8E-4599-C5FD-B4FB-1DAFAFEA4BB5"; addAttr -dcb 0 -ci true -sn "w0" -ln "meta_L0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3625,8 +3692,8 @@ createNode aimConstraint -n "meta_L0_blade_aimConstraint9" -p "meta_L0_blade"; setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "meta_L0_blade_pointConstraint9" -p "meta_L0_blade"; - rename -uid "C75117B7-49DE-6ADE-F10B-B5B19FADB509"; +createNode pointConstraint -n "meta_L0_blade_pointConstraint10" -p "meta_L0_blade"; + rename -uid "42680D6C-4B21-16CB-E1A4-49AAEC8470FE"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "meta_L0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -3640,22 +3707,22 @@ createNode pointConstraint -n "meta_L0_blade_pointConstraint9" -p "meta_L0_blade setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 8.8817841970012523e-016 7.1054273576010019e-015 3.5527136788005009e-015 ; + setAttr ".rst" -type "double3" 4.4408920985006262e-016 7.1054273576010019e-015 3.5527136788005009e-015 ; setAttr -k on ".w0"; createNode transform -n "meta_L0_crv" -p "meta_L0_root"; - rename -uid "2774ED76-4F6A-905A-333D-2FB4D67BC8EF"; + rename -uid "0CB4B827-4A4C-1E95-2AC0-37B3FE6D0D64"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 3.8070066058400576 -38.076493243285029 11.714163621936251 ; - setAttr ".r" -type "double3" -81.595645682431496 -44.654258545702959 89.275820115296384 ; - setAttr ".s" -type "double3" 3.403215794704129 3.4032157947041144 3.4032157947041237 ; + setAttr ".t" -type "double3" 3.8070066058400549 -38.076493243284943 11.714163621936518 ; + setAttr ".r" -type "double3" -81.59564568243151 -44.654258545702575 89.275820115296355 ; + setAttr ".s" -type "double3" 3.4032157947041286 3.4032157947041144 3.4032157947041233 ; createNode nurbsCurve -n "meta_L0_crvShape" -p "meta_L0_crv"; - rename -uid "07A0FDC4-4673-FFDF-8AF5-1AA73C50A091"; + rename -uid "27800BDA-42CB-8210-A5F6-6795EDC64001"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "meta_L0_crvShapeOrig" -p "meta_L0_crv"; - rename -uid "362A1693-45A0-82DF-31DA-4695797DC3A0"; + rename -uid "EA47BFC2-409D-1966-B843-5BB4A3D3967D"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -3668,7 +3735,7 @@ createNode nurbsCurve -n "meta_L0_crvShapeOrig" -p "meta_L0_crv"; 0 0 0 ; createNode transform -n "finger_L0_root" -p "meta_L0_root"; - rename -uid "D7475171-467F-6198-F86B-D0B28D53BC22"; + rename -uid "62978EF3-446E-5E22-88BE-6C857ECD38F6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -3678,22 +3745,22 @@ createNode transform -n "finger_L0_root" -p "meta_L0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.18403723679762996 -0.30586006047049352 2.7614233959505619 ; + setAttr ".t" -type "double3" -0.18403723679763084 -0.3058600604704651 2.7614233959505619 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 150.01356893808432 -71.60667945009736 -133.79382708613258 ; + setAttr ".r" -type "double3" 150.01356893808463 -71.606679450097616 -133.7938270861334 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661794 1.2929668245661798 1.292966824566181 ; + setAttr ".s" -type "double3" 1.2929668245661792 1.2929668245661798 1.2929668245661807 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -3703,12 +3770,9 @@ createNode transform -n "finger_L0_root" -p "meta_L0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_L0_rootShape" -p "finger_L0_root"; - rename -uid "8BB9A925-4602-FA44-38D5-43B271A4ED57"; + rename -uid "5A6AA596-4603-1158-0E2D-C598C41C1CC5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3720,8 +3784,8 @@ createNode nurbsCurve -n "finger_L0_rootShape" -p "finger_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L0_root25Shape" -p "finger_L0_root"; - rename -uid "37CFAE10-4D3C-CB1A-510C-B3BC05ED422C"; +createNode nurbsCurve -n "finger_L0_root28Shape" -p "finger_L0_root"; + rename -uid "838DFE9A-4D64-79A8-3664-03BBDC4B6B09"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3733,8 +3797,8 @@ createNode nurbsCurve -n "finger_L0_root25Shape" -p "finger_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L0_root26Shape" -p "finger_L0_root"; - rename -uid "5BE7BB30-4386-6CBD-AE3C-FB83ED8DAF9A"; +createNode nurbsCurve -n "finger_L0_root29Shape" -p "finger_L0_root"; + rename -uid "A7F38F7F-40FC-0761-B4B1-C18F9143AA66"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3746,8 +3810,8 @@ createNode nurbsCurve -n "finger_L0_root26Shape" -p "finger_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L0_root27Shape" -p "finger_L0_root"; - rename -uid "0DD423FD-4F97-8A3C-4A93-559840C36AFE"; +createNode nurbsCurve -n "finger_L0_root30Shape" -p "finger_L0_root"; + rename -uid "478AA95E-4F22-21D4-CCF5-7AB0DEFEC649"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3774,10 +3838,10 @@ createNode nurbsCurve -n "finger_L0_root27Shape" -p "finger_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_L0_0_loc" -p "finger_L0_root"; - rename -uid "C56B8332-464E-EBAC-E176-4887C3F29EED"; + rename -uid "11B8034C-40D1-45EC-D9D4-749BEEE123E6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1 -3.5527136788005009e-015 6.6613381477509392e-015 ; + setAttr ".t" -type "double3" 1.0000000000000018 -7.1054273576010019e-015 6.6613381477509392e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3785,12 +3849,12 @@ createNode transform -n "finger_L0_0_loc" -p "finger_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999911 0.999999999999999 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999889 0.99999999999999933 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L0_0_locShape" -p "finger_L0_0_loc"; - rename -uid "DB3810B2-43D8-11C3-6B2A-27AF4D91BC68"; + rename -uid "852A603E-492C-7D20-AD5B-0F9B8DC98B75"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3802,8 +3866,8 @@ createNode nurbsCurve -n "finger_L0_0_locShape" -p "finger_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L0_0_loc25Shape" -p "finger_L0_0_loc"; - rename -uid "82B6854C-47D3-2F1D-C48D-B98175B0587A"; +createNode nurbsCurve -n "finger_L0_0_loc28Shape" -p "finger_L0_0_loc"; + rename -uid "8AD6D44B-4D13-A6EE-2154-ECB3CF9CA2BF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3815,8 +3879,8 @@ createNode nurbsCurve -n "finger_L0_0_loc25Shape" -p "finger_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L0_0_loc26Shape" -p "finger_L0_0_loc"; - rename -uid "01768107-4CE0-FAF3-918A-5FB5E229C7CB"; +createNode nurbsCurve -n "finger_L0_0_loc29Shape" -p "finger_L0_0_loc"; + rename -uid "C19919C8-48B0-4627-7D00-D288E31B142A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3828,8 +3892,8 @@ createNode nurbsCurve -n "finger_L0_0_loc26Shape" -p "finger_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L0_0_loc27Shape" -p "finger_L0_0_loc"; - rename -uid "2E4931D0-4B10-56C8-39C1-4CA3C72281A9"; +createNode nurbsCurve -n "finger_L0_0_loc30Shape" -p "finger_L0_0_loc"; + rename -uid "899FA033-4E8E-01C5-41E9-CEBCDFC00A50"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3846,8 +3910,8 @@ createNode nurbsCurve -n "finger_L0_0_loc27Shape" -p "finger_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_0_loc27_0crvShape" -p "finger_L0_0_loc"; - rename -uid "16FCC055-431F-76CE-6CF9-8B997B411763"; +createNode nurbsCurve -n "finger_L0_0_loc30_0crvShape" -p "finger_L0_0_loc"; + rename -uid "67A64DC9-4CD9-4C64-40F8-01A8BE24AEC7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3864,8 +3928,8 @@ createNode nurbsCurve -n "finger_L0_0_loc27_0crvShape" -p "finger_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_0_loc27_1crvShape" -p "finger_L0_0_loc"; - rename -uid "64F284BC-45A5-D92F-5FD3-22B89EB4C9A0"; +createNode nurbsCurve -n "finger_L0_0_loc30_1crvShape" -p "finger_L0_0_loc"; + rename -uid "8CAAD295-4F76-1D06-1CA0-6CB991046947"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3883,10 +3947,10 @@ createNode nurbsCurve -n "finger_L0_0_loc27_1crvShape" -p "finger_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L0_1_loc" -p "finger_L0_0_loc"; - rename -uid "8E8E5E7D-43CC-17AB-3BF0-9B9B2DA8DD06"; + rename -uid "2552A075-4DCD-06DF-276F-9F9B4DA3DC6B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.8044200808092814 -7.1054273576010019e-015 -1.3322676295501878e-015 ; + setAttr ".t" -type "double3" 0.80442008080927785 -1.7763568394002505e-014 1.7763568394002505e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3899,7 +3963,7 @@ createNode transform -n "finger_L0_1_loc" -p "finger_L0_0_loc"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L0_1_locShape" -p "finger_L0_1_loc"; - rename -uid "4B5FF05B-44FD-2C70-3B7D-C9899C97D89F"; + rename -uid "D34C0DF1-4239-C1A2-86F3-888E9B1BAF03"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3911,8 +3975,8 @@ createNode nurbsCurve -n "finger_L0_1_locShape" -p "finger_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L0_1_loc25Shape" -p "finger_L0_1_loc"; - rename -uid "68DAE13E-4579-E9DF-E9B9-57A16E00BDF2"; +createNode nurbsCurve -n "finger_L0_1_loc28Shape" -p "finger_L0_1_loc"; + rename -uid "2D77368E-4706-E62C-4B00-5CAB2B968870"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3924,8 +3988,8 @@ createNode nurbsCurve -n "finger_L0_1_loc25Shape" -p "finger_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L0_1_loc26Shape" -p "finger_L0_1_loc"; - rename -uid "58E20511-471A-0982-2B11-AFA258BF0092"; +createNode nurbsCurve -n "finger_L0_1_loc29Shape" -p "finger_L0_1_loc"; + rename -uid "9D5C41E7-4623-7251-C991-BB80D734CFD6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3937,8 +4001,8 @@ createNode nurbsCurve -n "finger_L0_1_loc26Shape" -p "finger_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L0_1_loc27Shape" -p "finger_L0_1_loc"; - rename -uid "A7D37F20-464B-263F-6C7B-0A8458E97226"; +createNode nurbsCurve -n "finger_L0_1_loc30Shape" -p "finger_L0_1_loc"; + rename -uid "9FA0C7B4-4DCD-367A-C1CB-B8BF724ABAFA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3955,8 +4019,8 @@ createNode nurbsCurve -n "finger_L0_1_loc27Shape" -p "finger_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_1_loc27_0crvShape" -p "finger_L0_1_loc"; - rename -uid "FB0A7166-4806-4671-51C0-1E929E2D4CA0"; +createNode nurbsCurve -n "finger_L0_1_loc30_0crvShape" -p "finger_L0_1_loc"; + rename -uid "FE764952-4EAC-2CB8-6101-32A3BAE47000"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3973,8 +4037,8 @@ createNode nurbsCurve -n "finger_L0_1_loc27_0crvShape" -p "finger_L0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_1_loc27_1crvShape" -p "finger_L0_1_loc"; - rename -uid "DB631527-4CFD-41F4-C981-4CB52C18B567"; +createNode nurbsCurve -n "finger_L0_1_loc30_1crvShape" -p "finger_L0_1_loc"; + rename -uid "0D5FA66B-4B58-48BC-FAD6-F0811512F230"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3992,10 +4056,10 @@ createNode nurbsCurve -n "finger_L0_1_loc27_1crvShape" -p "finger_L0_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L0_2_loc" -p "finger_L0_1_loc"; - rename -uid "C254DFA4-4683-36DB-9F88-299ECB9FB501"; + rename -uid "39101F5E-43E6-656C-F247-539BDBE1A072"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.58431370392367654 2.1316282072803006e-014 -2.6645352591003757e-015 ; + setAttr ".t" -type "double3" 0.58431370392367832 2.4868995751603507e-014 -4.4408920985006262e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4003,12 +4067,12 @@ createNode transform -n "finger_L0_2_loc" -p "finger_L0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999956 1 1 ; + setAttr ".s" -type "double3" 0.99999999999999933 1 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_L0_2_locShape" -p "finger_L0_2_loc"; - rename -uid "346BB767-4F43-A73B-E245-50A86D9CD434"; + rename -uid "86F80F96-467C-626B-2B7C-F384B8579057"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4020,8 +4084,8 @@ createNode nurbsCurve -n "finger_L0_2_locShape" -p "finger_L0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_L0_2_loc25Shape" -p "finger_L0_2_loc"; - rename -uid "6C528BD7-4EE5-26DB-5B9D-8A964CFB7F71"; +createNode nurbsCurve -n "finger_L0_2_loc28Shape" -p "finger_L0_2_loc"; + rename -uid "51713412-49FA-6A1A-EB57-39BF5D10DCBA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4033,8 +4097,8 @@ createNode nurbsCurve -n "finger_L0_2_loc25Shape" -p "finger_L0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_L0_2_loc26Shape" -p "finger_L0_2_loc"; - rename -uid "273B95B2-4DDD-BB6A-9A8D-95A49E04382F"; +createNode nurbsCurve -n "finger_L0_2_loc29Shape" -p "finger_L0_2_loc"; + rename -uid "AE08FCD4-4DED-F437-52B5-7F903D8142C7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4046,8 +4110,8 @@ createNode nurbsCurve -n "finger_L0_2_loc26Shape" -p "finger_L0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_L0_2_loc27Shape" -p "finger_L0_2_loc"; - rename -uid "A9D532FE-4E54-E7F7-3810-009A92697224"; +createNode nurbsCurve -n "finger_L0_2_loc30Shape" -p "finger_L0_2_loc"; + rename -uid "D9A642BA-46F8-C18E-C574-28B69F6E77D7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4064,8 +4128,8 @@ createNode nurbsCurve -n "finger_L0_2_loc27Shape" -p "finger_L0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_2_loc27_0crvShape" -p "finger_L0_2_loc"; - rename -uid "CA96E85E-46F9-F131-313D-BBB9CC1C771F"; +createNode nurbsCurve -n "finger_L0_2_loc30_0crvShape" -p "finger_L0_2_loc"; + rename -uid "AD1203B7-4443-5072-EC12-65AF6576749F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4082,8 +4146,8 @@ createNode nurbsCurve -n "finger_L0_2_loc27_0crvShape" -p "finger_L0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_L0_2_loc27_1crvShape" -p "finger_L0_2_loc"; - rename -uid "1EA89FBF-4B92-3587-7FA0-8CA1E6EE4453"; +createNode nurbsCurve -n "finger_L0_2_loc30_1crvShape" -p "finger_L0_2_loc"; + rename -uid "A593EEBB-47E4-60A4-28B0-938052D5BD7D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4101,7 +4165,7 @@ createNode nurbsCurve -n "finger_L0_2_loc27_1crvShape" -p "finger_L0_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_L0_blade" -p "finger_L0_root"; - rename -uid "7070BE5C-4B8D-DE18-146C-DCB82BF90F88"; + rename -uid "049B1532-4F86-7AD3-25A9-C59377345B73"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -4111,13 +4175,13 @@ createNode transform -n "finger_L0_blade" -p "finger_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999911 0.999999999999999 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999889 0.99999999999999933 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_L0_bladeShape" -p "finger_L0_blade"; - rename -uid "A40013D2-4C0C-AAB2-E08C-4B8D40FFD4D8"; + rename -uid "9F317629-4088-8380-B52F-6C947534746E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4127,12 +4191,12 @@ createNode nurbsCurve -n "finger_L0_bladeShape" -p "finger_L0_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970766 0 0 - 0 0.25859336491323587 0 + 0.77578009473970744 0 0 + 0 0.25859336491323581 0 0 0 0 ; -createNode aimConstraint -n "finger_L0_blade_aimConstraint9" -p "finger_L0_blade"; - rename -uid "8BA9B3AF-46FC-5BAE-B4C5-D88DAE9B290C"; +createNode aimConstraint -n "finger_L0_blade_aimConstraint10" -p "finger_L0_blade"; + rename -uid "402FFE37-4FE7-4BAF-ABE0-7AADEDA34B8F"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_L0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4148,8 +4212,8 @@ createNode aimConstraint -n "finger_L0_blade_aimConstraint9" -p "finger_L0_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_L0_blade_pointConstraint9" -p "finger_L0_blade"; - rename -uid "B17A06DA-409C-8208-452E-7DB9978B9A51"; +createNode pointConstraint -n "finger_L0_blade_pointConstraint10" -p "finger_L0_blade"; + rename -uid "18A83D25-47CE-7603-0536-E580E637915C"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_L0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4163,23 +4227,22 @@ createNode pointConstraint -n "finger_L0_blade_pointConstraint9" -p "finger_L0_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" -3.5527136788005009e-015 -3.5527136788005009e-015 - 0 ; + setAttr ".rst" -type "double3" 5.3290705182007514e-015 3.5527136788005009e-015 -1.7763568394002505e-015 ; setAttr -k on ".w0"; createNode transform -n "finger_L0_crv" -p "finger_L0_root"; - rename -uid "24346A18-4532-F6F1-DE11-5B86F807DD3C"; + rename -uid "EEAA1DC4-4C5C-0BD1-32A8-20A8B42D86BA"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 12.549990763713115 -27.336008057181125 2.4648652761305296 ; - setAttr ".r" -type "double3" 9.1654334880180617 22.111176212556721 57.120615095544899 ; - setAttr ".s" -type "double3" 2.6320983106786096 2.6320983106785993 2.6320983106786042 ; + setAttr ".t" -type "double3" 12.549990763713129 -27.33600805718115 2.4648652761302503 ; + setAttr ".r" -type "double3" 9.1654334880184116 22.111176212556234 57.120615095545027 ; + setAttr ".s" -type "double3" 2.63209831067861 2.6320983106786002 2.6320983106786047 ; createNode nurbsCurve -n "finger_L0_crvShape" -p "finger_L0_crv"; - rename -uid "9FDCE824-4C73-399C-0467-F18F2910EEDE"; + rename -uid "2AF8F7E6-40BB-4BBE-6462-7D8779CE676F"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_L0_crvShapeOrig" -p "finger_L0_crv"; - rename -uid "9463B66B-491A-7181-0CE8-11B9838024C4"; + rename -uid "CCCC1B8E-4174-9438-5701-A7B993781878"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4192,7 +4255,7 @@ createNode nurbsCurve -n "finger_L0_crvShapeOrig" -p "finger_L0_crv"; 0 0 0 ; createNode transform -n "thumbRoll_L0_root" -p "meta_L0_root"; - rename -uid "AAB31DE8-429B-5FC3-DA13-8C81B088184E"; + rename -uid "56F0734C-4AAE-211C-7C6D-18B8834F0BC6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4205,32 +4268,33 @@ createNode transform -n "thumbRoll_L0_root" -p "meta_L0_root"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.7 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.21303623709073616 -0.22489125789798692 0.1307033745215378 ; + setAttr ".t" -type "double3" 0.2130362370907366 -0.22489125789797981 0.13070337452153957 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" -5.7735227848273638 -84.00156352323107 11.009204406906205 ; + setAttr ".r" -type "double3" -5.773522784831 -84.001563523230999 11.009204406909584 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 3.4032157947041286 3.4032157947041166 3.4032157947041224 ; + setAttr ".s" -type "double3" 3.4032157947041286 3.4032157947041157 3.4032157947041219 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -4242,20 +4306,8 @@ createNode transform -n "thumbRoll_L0_root" -p "meta_L0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "sphere"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".ctlSize" 0.7; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "thumbRoll_L0_rootShape" -p "thumbRoll_L0_root"; - rename -uid "F5F93CBB-4F6A-3DEB-AD3C-92B1C21AA14E"; + rename -uid "AFB2EF7B-443D-F9A6-AA20-FA8FD6A61FDC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4267,8 +4319,8 @@ createNode nurbsCurve -n "thumbRoll_L0_rootShape" -p "thumbRoll_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumbRoll_L0_root16Shape" -p "thumbRoll_L0_root"; - rename -uid "3A3C32F2-4219-7BCA-0B3D-51918385A020"; +createNode nurbsCurve -n "thumbRoll_L0_root19Shape" -p "thumbRoll_L0_root"; + rename -uid "CBB388FB-4546-B6D8-38A3-C4B843350EC9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4280,8 +4332,8 @@ createNode nurbsCurve -n "thumbRoll_L0_root16Shape" -p "thumbRoll_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumbRoll_L0_root17Shape" -p "thumbRoll_L0_root"; - rename -uid "7DAA059F-46AC-9CCB-601C-F28122D12D3F"; +createNode nurbsCurve -n "thumbRoll_L0_root20Shape" -p "thumbRoll_L0_root"; + rename -uid "1B2DBC0E-4FE2-0875-1188-DEBC970E85DD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4293,8 +4345,8 @@ createNode nurbsCurve -n "thumbRoll_L0_root17Shape" -p "thumbRoll_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumbRoll_L0_root18Shape" -p "thumbRoll_L0_root"; - rename -uid "994EF189-4347-A478-C8EA-C4BEDD2BCB2C"; +createNode nurbsCurve -n "thumbRoll_L0_root21Shape" -p "thumbRoll_L0_root"; + rename -uid "941625C0-436B-D98F-75C1-A696FDEA10F2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4321,24 +4373,24 @@ createNode nurbsCurve -n "thumbRoll_L0_root18Shape" -p "thumbRoll_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "thumbRoll_L0_sizeRef" -p "thumbRoll_L0_root"; - rename -uid "49508B2E-4AC0-D56E-5F7A-B38F5D3141D6"; + rename -uid "40C1EDC7-456D-4F66-FBD1-F39748112732"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.8817841970012523e-016 3.907985046680551e-014 1.0000000000000007 ; + setAttr ".t" -type "double3" -1.3322676295501878e-015 3.5527136788005009e-014 1.0000000000000007 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0 44.430829212205673 ; + setAttr ".r" -type "double3" 0 0 44.43082921220573 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000018 0.99999999999999767 1.0000000000000007 ; + setAttr ".s" -type "double3" 1.0000000000000018 0.99999999999999756 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "thumb_L0_root" -p "thumbRoll_L0_root"; - rename -uid "9FB23058-4AAB-8137-5B1E-CAB9C32B953D"; + rename -uid "C5AB0929-4738-3785-69BD-28A62669F366"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4348,22 +4400,22 @@ createNode transform -n "thumb_L0_root" -p "thumbRoll_L0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3322676295501878e-015 -1.7763568394002505e-015 7.2164496600635175e-016 ; + setAttr ".t" -type "double3" -8.8817841970012523e-016 -1.7763568394002505e-015 9.9920072216264089e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 110.8010863191306 -43.900240512232479 -37.623269198287744 ; + setAttr ".r" -type "double3" 110.80108631913085 -43.900240512232322 -37.6232691982879 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.48936434703511106 0.48936434703511011 0.48936434703511167 ; + setAttr ".s" -type "double3" 0.48936434703511095 0.48936434703511011 0.48936434703511161 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -4373,12 +4425,9 @@ createNode transform -n "thumb_L0_root" -p "thumbRoll_L0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "thumb_L0_rootShape" -p "thumb_L0_root"; - rename -uid "719E89EB-4AED-B05F-09CD-6BB24EBBC03A"; + rename -uid "DED516A7-4EEE-040F-377F-71893EE01F21"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4390,8 +4439,8 @@ createNode nurbsCurve -n "thumb_L0_rootShape" -p "thumb_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_L0_root25Shape" -p "thumb_L0_root"; - rename -uid "E2708F55-4038-A343-55E0-DBA05BC303AA"; +createNode nurbsCurve -n "thumb_L0_root28Shape" -p "thumb_L0_root"; + rename -uid "B9A799BC-4A8A-4E03-16FF-C28192582122"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4403,8 +4452,8 @@ createNode nurbsCurve -n "thumb_L0_root25Shape" -p "thumb_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_L0_root26Shape" -p "thumb_L0_root"; - rename -uid "87AFFB0F-44A1-24B1-494C-8ABDCC501195"; +createNode nurbsCurve -n "thumb_L0_root29Shape" -p "thumb_L0_root"; + rename -uid "45E9DC20-46E3-F51C-B7B1-88B790B9D12F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4416,8 +4465,8 @@ createNode nurbsCurve -n "thumb_L0_root26Shape" -p "thumb_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_L0_root27Shape" -p "thumb_L0_root"; - rename -uid "4A6BFFBC-487C-3B74-93D6-9AB6942FD55F"; +createNode nurbsCurve -n "thumb_L0_root30Shape" -p "thumb_L0_root"; + rename -uid "75A9BA71-4260-65F8-936C-2BB28E6744C7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4444,24 +4493,24 @@ createNode nurbsCurve -n "thumb_L0_root27Shape" -p "thumb_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "thumb_L0_0_loc" -p "thumb_L0_root"; - rename -uid "BA7169C3-45D2-CF87-6749-3B9EB065B2D4"; + rename -uid "E39CC9AF-47C0-1B99-EDFA-AAAF1CEF7659"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.86054350703470206 0.0024095775966985755 -1.0658141036401503e-014 ; + setAttr ".t" -type "double3" 0.86054350703470561 0.0024095775966950228 -7.1054273576010019e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0 -4.2384257498060656 ; + setAttr ".r" -type "double3" 0 0 -4.2384257498060629 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999989 1.0000000000000007 ; + setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999978 1.0000000000000011 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_L0_0_locShape" -p "thumb_L0_0_loc"; - rename -uid "AF49615B-410D-2FE5-7DF5-5F9DFD2C2A8A"; + rename -uid "C1DD1DF5-4074-F957-1E5C-EEADC2935C82"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4473,8 +4522,8 @@ createNode nurbsCurve -n "thumb_L0_0_locShape" -p "thumb_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_L0_0_loc25Shape" -p "thumb_L0_0_loc"; - rename -uid "B66FF03D-4B3F-4F55-8648-DC8EAC5941FF"; +createNode nurbsCurve -n "thumb_L0_0_loc28Shape" -p "thumb_L0_0_loc"; + rename -uid "A90EB3B7-4B18-CA82-5B88-C5A63F6302AA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4486,8 +4535,8 @@ createNode nurbsCurve -n "thumb_L0_0_loc25Shape" -p "thumb_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_L0_0_loc26Shape" -p "thumb_L0_0_loc"; - rename -uid "B912675B-4052-4400-FC98-4481B2760AB8"; +createNode nurbsCurve -n "thumb_L0_0_loc29Shape" -p "thumb_L0_0_loc"; + rename -uid "00CDDF69-4184-6F25-E047-2E9511EFD739"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4499,8 +4548,8 @@ createNode nurbsCurve -n "thumb_L0_0_loc26Shape" -p "thumb_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_L0_0_loc27Shape" -p "thumb_L0_0_loc"; - rename -uid "A73238E1-4537-1E6A-62DE-258A74ED4EF1"; +createNode nurbsCurve -n "thumb_L0_0_loc30Shape" -p "thumb_L0_0_loc"; + rename -uid "379B0EA3-4E65-A635-237B-669EAD20A88C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4517,8 +4566,8 @@ createNode nurbsCurve -n "thumb_L0_0_loc27Shape" -p "thumb_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_0_loc27_0crvShape" -p "thumb_L0_0_loc"; - rename -uid "680DEB8B-472A-31EF-F268-338B2F3EF1D2"; +createNode nurbsCurve -n "thumb_L0_0_loc30_0crvShape" -p "thumb_L0_0_loc"; + rename -uid "6711751A-408C-05DE-9883-2DACAA74CA06"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4535,8 +4584,8 @@ createNode nurbsCurve -n "thumb_L0_0_loc27_0crvShape" -p "thumb_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_0_loc27_1crvShape" -p "thumb_L0_0_loc"; - rename -uid "6ED52871-41C9-B2EF-85C2-61826A457C1C"; +createNode nurbsCurve -n "thumb_L0_0_loc30_1crvShape" -p "thumb_L0_0_loc"; + rename -uid "04951D39-4110-82F7-DF77-DD9AB1F643D5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4554,10 +4603,10 @@ createNode nurbsCurve -n "thumb_L0_0_loc27_1crvShape" -p "thumb_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_L0_1_loc" -p "thumb_L0_0_loc"; - rename -uid "AAE61BF0-446F-0DCC-E4D7-6A98E5C09990"; + rename -uid "CB6E009A-4684-408C-4017-2B960D2669F1"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.76442580145521433 -2.6645352591003757e-015 2.8421709430404007e-014 ; + setAttr ".t" -type "double3" 0.7644258014552161 -3.5527136788005009e-015 2.8421709430404007e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4565,12 +4614,12 @@ createNode transform -n "thumb_L0_1_loc" -p "thumb_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999922 0.99999999999999989 ; + setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999889 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_L0_1_locShape" -p "thumb_L0_1_loc"; - rename -uid "62F4B955-47B9-4424-3631-9AB8D6424E90"; + rename -uid "074BB02C-40BB-4CFB-33EA-7E9E40434338"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4582,8 +4631,8 @@ createNode nurbsCurve -n "thumb_L0_1_locShape" -p "thumb_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_L0_1_loc25Shape" -p "thumb_L0_1_loc"; - rename -uid "8678FE0F-457A-4735-0550-7BA11682B334"; +createNode nurbsCurve -n "thumb_L0_1_loc28Shape" -p "thumb_L0_1_loc"; + rename -uid "63DC77E2-4EA0-CE23-8603-F3A5EE602574"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4595,8 +4644,8 @@ createNode nurbsCurve -n "thumb_L0_1_loc25Shape" -p "thumb_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_L0_1_loc26Shape" -p "thumb_L0_1_loc"; - rename -uid "39057EC2-4E93-C2A8-242F-EA959F285A89"; +createNode nurbsCurve -n "thumb_L0_1_loc29Shape" -p "thumb_L0_1_loc"; + rename -uid "A7313799-476B-CC9F-8F70-E9B1E024281C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4608,8 +4657,8 @@ createNode nurbsCurve -n "thumb_L0_1_loc26Shape" -p "thumb_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_L0_1_loc27Shape" -p "thumb_L0_1_loc"; - rename -uid "5C77100B-4395-FFDB-3F5E-779F21ED9BD0"; +createNode nurbsCurve -n "thumb_L0_1_loc30Shape" -p "thumb_L0_1_loc"; + rename -uid "67531729-48DE-8B40-8D0A-9F8DEA92AF08"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4626,8 +4675,8 @@ createNode nurbsCurve -n "thumb_L0_1_loc27Shape" -p "thumb_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_1_loc27_0crvShape" -p "thumb_L0_1_loc"; - rename -uid "085B2373-4299-F571-2314-808413654E4C"; +createNode nurbsCurve -n "thumb_L0_1_loc30_0crvShape" -p "thumb_L0_1_loc"; + rename -uid "3EB5C795-4CFC-7350-DE57-3D85CDEF72EB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4644,8 +4693,8 @@ createNode nurbsCurve -n "thumb_L0_1_loc27_0crvShape" -p "thumb_L0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_1_loc27_1crvShape" -p "thumb_L0_1_loc"; - rename -uid "142ECD72-4B49-EEDC-5C1E-2A9881F7446B"; +createNode nurbsCurve -n "thumb_L0_1_loc30_1crvShape" -p "thumb_L0_1_loc"; + rename -uid "1E8F3478-4EF9-17EC-4259-37BEC3D2AB9A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4663,10 +4712,10 @@ createNode nurbsCurve -n "thumb_L0_1_loc27_1crvShape" -p "thumb_L0_1_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_L0_2_loc" -p "thumb_L0_1_loc"; - rename -uid "B1E631F8-4293-6FDC-7B43-8CBB7563DD03"; + rename -uid "DEAF4FB6-4F48-8CF4-5CF8-0B8DE8709639"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.5948211491551092 5.3290705182007514e-015 3.5527136788005009e-015 ; + setAttr ".t" -type "double3" 0.5948211491551092 7.1054273576010019e-015 3.5527136788005009e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4674,12 +4723,12 @@ createNode transform -n "thumb_L0_2_loc" -p "thumb_L0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000004 0.99999999999999989 ; + setAttr ".s" -type "double3" 1 1.0000000000000004 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_L0_2_locShape" -p "thumb_L0_2_loc"; - rename -uid "C219A258-4780-1C86-6C55-9DB2B02B04C2"; + rename -uid "632FF905-4AE4-397D-FB66-87A04FDF20F6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4691,8 +4740,8 @@ createNode nurbsCurve -n "thumb_L0_2_locShape" -p "thumb_L0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_L0_2_loc25Shape" -p "thumb_L0_2_loc"; - rename -uid "0C89F030-4ED9-7E49-161E-53A6BCF32581"; +createNode nurbsCurve -n "thumb_L0_2_loc28Shape" -p "thumb_L0_2_loc"; + rename -uid "3970E56B-4858-FF19-EA73-BB967991523E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4704,8 +4753,8 @@ createNode nurbsCurve -n "thumb_L0_2_loc25Shape" -p "thumb_L0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_L0_2_loc26Shape" -p "thumb_L0_2_loc"; - rename -uid "7C02E248-4676-B005-0CB5-6E84BDF79CB2"; +createNode nurbsCurve -n "thumb_L0_2_loc29Shape" -p "thumb_L0_2_loc"; + rename -uid "9AFF6097-4072-64E1-8EB8-4CA296059716"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4717,8 +4766,8 @@ createNode nurbsCurve -n "thumb_L0_2_loc26Shape" -p "thumb_L0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_L0_2_loc27Shape" -p "thumb_L0_2_loc"; - rename -uid "DA807C21-4C01-9261-3654-E99F12A1FF6F"; +createNode nurbsCurve -n "thumb_L0_2_loc30Shape" -p "thumb_L0_2_loc"; + rename -uid "E304926F-4590-4E24-B7E5-93AC1104F076"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4735,8 +4784,8 @@ createNode nurbsCurve -n "thumb_L0_2_loc27Shape" -p "thumb_L0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_2_loc27_0crvShape" -p "thumb_L0_2_loc"; - rename -uid "E826B159-4067-8A49-9D56-3CA5BACBC909"; +createNode nurbsCurve -n "thumb_L0_2_loc30_0crvShape" -p "thumb_L0_2_loc"; + rename -uid "B56B0E38-4910-B71D-3C9C-DE9993BB104D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4753,8 +4802,8 @@ createNode nurbsCurve -n "thumb_L0_2_loc27_0crvShape" -p "thumb_L0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_L0_2_loc27_1crvShape" -p "thumb_L0_2_loc"; - rename -uid "DFB66315-4A28-AAFF-034E-51BE00C316E3"; +createNode nurbsCurve -n "thumb_L0_2_loc30_1crvShape" -p "thumb_L0_2_loc"; + rename -uid "41E52D28-4CDB-8F79-23B0-F9B8BCC03EE5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4772,7 +4821,7 @@ createNode nurbsCurve -n "thumb_L0_2_loc27_1crvShape" -p "thumb_L0_2_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_L0_blade" -p "thumb_L0_root"; - rename -uid "430F581D-4790-1B16-80A4-16BC17AC2318"; + rename -uid "0E6B6DF7-4134-6953-D8D3-029902A6D5D1"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -4782,13 +4831,13 @@ createNode transform -n "thumb_L0_blade" -p "thumb_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999833 0.99999999999999856 0.99999999999999956 ; + setAttr ".s" -type "double3" 0.99999999999999833 0.99999999999999845 1 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "thumb_L0_bladeShape" -p "thumb_L0_blade"; - rename -uid "BADAB491-4FDF-5B85-38E4-B49FF7F2CC28"; + rename -uid "1E6A47A3-45DF-62D2-08E9-B1BA0E975799"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4798,12 +4847,12 @@ createNode nurbsCurve -n "thumb_L0_bladeShape" -p "thumb_L0_blade"; 4 0 1 2 3 4 0 0 0 - 0.29361860822106661 0 0 - 0 0.097872869407022209 0 + 0.29361860822106656 0 0 + 0 0.097872869407022181 0 0 0 0 ; -createNode aimConstraint -n "thumb_L0_blade_aimConstraint9" -p "thumb_L0_blade"; - rename -uid "85D950F1-45D3-10E3-3044-60B6EFEA9FFB"; +createNode aimConstraint -n "thumb_L0_blade_aimConstraint10" -p "thumb_L0_blade"; + rename -uid "F35B721A-48F9-35EA-5007-5DB9368D634D"; addAttr -dcb 0 -ci true -sn "w0" -ln "thumb_L0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4818,11 +4867,10 @@ createNode aimConstraint -n "thumb_L0_blade_aimConstraint9" -p "thumb_L0_blade"; setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" 3.3116584830402002e-016 2.3654202254588611e-013 - 0.16043147704029556 ; + setAttr ".rsrr" -type "double3" 9.934975449124265e-016 7.0962606763791992e-013 0.16043147704029556 ; setAttr -k on ".w0"; -createNode pointConstraint -n "thumb_L0_blade_pointConstraint9" -p "thumb_L0_blade"; - rename -uid "679B9807-4181-97D4-7F50-3CA0C8DD2485"; +createNode pointConstraint -n "thumb_L0_blade_pointConstraint10" -p "thumb_L0_blade"; + rename -uid "37EDD312-490B-EE63-EB8E-F082B82883D7"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "thumb_L0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4836,22 +4884,23 @@ createNode pointConstraint -n "thumb_L0_blade_pointConstraint9" -p "thumb_L0_bla setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 8.8817841970012523e-016 -3.5527136788005009e-015 ; + setAttr ".rst" -type "double3" -1.7763568394002505e-015 -8.8817841970012523e-016 + 0 ; setAttr -k on ".w0"; createNode transform -n "thumb_L0_crv" -p "thumb_L0_root"; - rename -uid "4206805A-476D-BC0D-AF60-94AD47F47A1B"; + rename -uid "64484089-4FD1-C20D-90A3-52960A6F8B67"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 14.330153889042865 -7.0737929587543249 17.725867635512838 ; - setAttr ".r" -type "double3" -124.44302205362676 63.100734454449608 -77.28135416270166 ; - setAttr ".s" -type "double3" 2.0434672163157259 2.0434672163157197 2.0434672163157264 ; + setAttr ".t" -type "double3" 14.330153889042876 -7.0737929587543391 17.725867635512838 ; + setAttr ".r" -type "double3" -124.44302205362676 63.100734454449658 -77.281354162701689 ; + setAttr ".s" -type "double3" 2.0434672163157259 2.0434672163157197 2.0434672163157259 ; createNode nurbsCurve -n "thumb_L0_crvShape" -p "thumb_L0_crv"; - rename -uid "4D358943-4D3C-93D5-D577-38BC0E9B3E17"; + rename -uid "8F2532CD-4CF7-9B1E-EDE4-3C9CE8C5CDAE"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "thumb_L0_crvShapeOrig" -p "thumb_L0_crv"; - rename -uid "370B39BF-47CA-A99A-5839-1589873CCD93"; + rename -uid "818E3ECC-420B-E1E1-1FE9-C9BB422C945E"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4864,19 +4913,19 @@ createNode nurbsCurve -n "thumb_L0_crvShapeOrig" -p "thumb_L0_crv"; 0 0 0 ; createNode transform -n "arm_L0_crv" -p "arm_L0_root"; - rename -uid "2F1FA4C8-49F1-C9F0-83B4-079A7C94E244"; + rename -uid "99BCA492-41E2-9E8B-169A-2D871CDD1B2D"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 9.5792744434200454 -11.86206180747303 1.1564412205648533 ; - setAttr ".r" -type "double3" -2.1534408611045537 -4.1959370793367032 45.437740049298291 ; - setAttr ".s" -type "double3" 1.0495082267377438 1.0495082267377391 1.0495082267377407 ; + setAttr ".t" -type "double3" 9.5792744434200454 -11.862061807473028 1.1564412205648515 ; + setAttr ".r" -type "double3" -2.1534408611045492 -4.1959370793367148 45.437740049298291 ; + setAttr ".s" -type "double3" 1.0495082267377434 1.0495082267377394 1.0495082267377407 ; createNode nurbsCurve -n "arm_L0_crvShape" -p "arm_L0_crv"; - rename -uid "7479117C-4533-B832-ABD5-CFB1DF5F3A6B"; + rename -uid "9C0D86B0-4808-570E-E6B8-F699F9092036"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "arm_L0_crvShapeOrig" -p "arm_L0_crv"; - rename -uid "DE25026E-412C-3265-E566-2F8062777107"; + rename -uid "685B06A5-499C-E560-180D-9191905AEDF0"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4889,8 +4938,9 @@ createNode nurbsCurve -n "arm_L0_crvShapeOrig" -p "arm_L0_crv"; 0 0 0 ; createNode transform -n "shoulder_L0_blade" -p "shoulder_L0_root"; - rename -uid "29E5D67E-4680-FB10-4031-D798000308F6"; - addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; + rename -uid "B7056E43-423D-E3BA-3956-3DBF335E010D"; + addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -dv 89.999999999999957 + -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -4899,13 +4949,13 @@ createNode transform -n "shoulder_L0_blade" -p "shoulder_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999656 0.99999999999999789 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999656 0.99999999999999778 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; - setAttr -k on ".bladeRollOffset" 90; + setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "shoulder_L0_bladeShape" -p "shoulder_L0_blade"; - rename -uid "1151CB8C-4317-DEC7-CBA5-93A4FAACBEF2"; + rename -uid "DF60BC27-427B-43DB-6B60-9F985C7D5F64"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4915,12 +4965,12 @@ createNode nurbsCurve -n "shoulder_L0_bladeShape" -p "shoulder_L0_blade"; 4 0 1 2 3 4 0 0 0 - 0.6000000000000012 0 0 - 0 0.2000000000000004 0 + 0.60000000000000131 0 0 + 0 0.20000000000000043 0 0 0 0 ; -createNode aimConstraint -n "shoulder_L0_blade_aimConstraint9" -p "shoulder_L0_blade"; - rename -uid "22B29C15-4AE9-1C60-5BB8-DA86C8B8660E"; +createNode aimConstraint -n "shoulder_L0_blade_aimConstraint10" -p "shoulder_L0_blade"; + rename -uid "1497BF7A-4FCA-DBFF-A106-B5865256E814"; addAttr -dcb 0 -ci true -sn "w0" -ln "shoulder_L0_tipW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4935,11 +4985,11 @@ createNode aimConstraint -n "shoulder_L0_blade_aimConstraint9" -p "shoulder_L0_b setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".o" -type "double3" 90 179.99999999999957 180.00000000000017 ; - setAttr ".rsrr" -type "double3" 23.386262286473041 122.53864021838231 110.03040021520766 ; + setAttr ".o" -type "double3" 90 179.99999999999946 180.00000000000017 ; + setAttr ".rsrr" -type "double3" 23.386262286472864 122.53864021838226 110.03040021520748 ; setAttr -k on ".w0"; -createNode pointConstraint -n "shoulder_L0_blade_pointConstraint9" -p "shoulder_L0_blade"; - rename -uid "538E6DEA-47D6-3638-BD33-1AB24895BA87"; +createNode pointConstraint -n "shoulder_L0_blade_pointConstraint10" -p "shoulder_L0_blade"; + rename -uid "A9C7A008-4125-1CFD-121C-CB8F1AFAC82F"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "shoulder_L0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; @@ -4954,22 +5004,22 @@ createNode pointConstraint -n "shoulder_L0_blade_pointConstraint9" -p "shoulder_ setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 5.2041704279304213e-018 1.3877787807814457e-017 ; + setAttr ".rst" -type "double3" 0 -3.4694469519536142e-018 0 ; setAttr -k on ".w0"; createNode transform -n "shoulder_L0_crv" -p "shoulder_L0_root"; - rename -uid "E1BB91C1-46C2-FF48-B5DA-6B85E71EB663"; + rename -uid "B7121F34-467F-86D6-8EBB-588E3B3101E6"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 15.507521470509833 0.009276189738275686 0.11673327753265018 ; + setAttr ".t" -type "double3" 15.507521470509833 0.0092761897382756774 0.11673327753265013 ; setAttr ".r" -type "double3" -90.803889228153793 89.999999999999986 0 ; - setAttr ".s" -type "double3" 1.0495082267377416 1.0495082267377367 1.0495082267377369 ; + setAttr ".s" -type "double3" 1.0495082267377411 1.0495082267377365 1.0495082267377365 ; createNode nurbsCurve -n "shoulder_L0_crvShape" -p "shoulder_L0_crv"; - rename -uid "A729F4B8-4EAF-71B1-BDA2-40B2667DA058"; + rename -uid "B45BD63D-4285-7172-6C22-35AA79C3A602"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "shoulder_L0_crvShapeOrig" -p "shoulder_L0_crv"; - rename -uid "0C4B62B3-45A5-905E-3AA3-DE9551565913"; + rename -uid "556F7BF6-48CD-1D0D-AE10-7E9651E695D8"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4980,7 +5030,7 @@ createNode nurbsCurve -n "shoulder_L0_crvShapeOrig" -p "shoulder_L0_crv"; 0 0 0 ; createNode transform -n "neck_C0_root" -p "spine_C0_eff"; - rename -uid "B05286AF-486A-BB89-A37B-41B3690BFCE7"; + rename -uid "575C2E2B-43A1-DE1D-B608-B6A6DC98E647"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4991,17 +5041,17 @@ createNode transform -n "neck_C0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "headrefarray" -ln "headrefarray" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "maxsquash" -ln "maxsquash" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "maxsquash" -ln "maxsquash" -dv 0.5 -min 0 -max 1 -at "double"; addAttr -ci true -sn "softness" -ln "softness" -min 0 -max 1 -at "double"; addAttr -ci true -sn "division" -ln "division" -dv 3 -min 3 -at "long"; addAttr -ci true -sn "tangentControls" -ln "tangentControls" -min 0 -max 1 -at "bool"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.2667429610648462 0.5374818108556626 -4.2147015411630263e-016 ; + setAttr ".t" -type "double3" 2.266742961064848 0.5374818108556626 -4.2147015411630268e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5010,7 +5060,7 @@ createNode transform -n "neck_C0_root" -p "spine_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.59839228104243614 0.59839228104243236 0.59839228104243236 ; + setAttr ".s" -type "double3" 0.59839228104243647 0.59839228104243258 0.59839228104243258 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -5020,15 +5070,12 @@ createNode transform -n "neck_C0_root" -p "spine_C0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "spineUI_C0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".headrefarray" -type "string" "spine_C0_eff,body_C0_root,local_C0_root"; - setAttr ".ikrefarray" -type "string" "spine_C0_eff,body_C0_root,local_C0_root"; - setAttr ".maxstretch" 1.5; - setAttr ".maxsquash" 0.5; + setAttr ".headrefarray" -type "string" "spine_C0_eff,body_C0_root,local_C0_root,global_C0_root"; + setAttr ".ikrefarray" -type "string" "spine_C0_eff,body_C0_root,local_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "neck_C0_rootShape" -p "neck_C0_root"; - rename -uid "20894899-46ED-2A57-A2C7-A982CCCAB321"; + rename -uid "0BDC3CFC-43E7-2A1D-5A43-68828F215582"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5040,8 +5087,8 @@ createNode nurbsCurve -n "neck_C0_rootShape" -p "neck_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_root25Shape" -p "neck_C0_root"; - rename -uid "370980C6-4BD6-C2D0-BA64-5C8D184E5B16"; +createNode nurbsCurve -n "neck_C0_root28Shape" -p "neck_C0_root"; + rename -uid "467B5ECE-4687-A006-C686-6EB96345EED7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5053,8 +5100,8 @@ createNode nurbsCurve -n "neck_C0_root25Shape" -p "neck_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_root26Shape" -p "neck_C0_root"; - rename -uid "2830CDCB-4611-8515-4979-AE896C979521"; +createNode nurbsCurve -n "neck_C0_root29Shape" -p "neck_C0_root"; + rename -uid "71E7C3C2-4C6A-9D49-1166-B8BAF5A9C69B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5066,8 +5113,8 @@ createNode nurbsCurve -n "neck_C0_root26Shape" -p "neck_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_root27Shape" -p "neck_C0_root"; - rename -uid "1B1D4C02-40CE-0ECF-266F-D8B83A11187C"; +createNode nurbsCurve -n "neck_C0_root30Shape" -p "neck_C0_root"; + rename -uid "31CCEE41-402D-1044-4C24-F689B6411D27"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5094,10 +5141,10 @@ createNode nurbsCurve -n "neck_C0_root27Shape" -p "neck_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "neck_C0_neck" -p "neck_C0_root"; - rename -uid "D9B33D7B-4EB5-E21F-7F6F-8AB852B8F554"; + rename -uid "06825BF4-4ACB-736D-BDCE-2F8641F636CD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.66811733981641108 2.4674946259577837 1.5382908879615304e-016 ; + setAttr ".t" -type "double3" -0.66811733981641075 2.4674946259577801 1.5382908879615225e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5105,12 +5152,12 @@ createNode transform -n "neck_C0_neck" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999645 0.99999999999999678 0.99999999999999956 ; + setAttr ".s" -type "double3" 0.999999999999996 0.99999999999999623 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_neckShape" -p "neck_C0_neck"; - rename -uid "270D0CBF-4939-5A4E-E268-78AEF1099944"; + rename -uid "3FE8F192-49CE-B8DA-77EE-1AB2ABFF3313"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5122,8 +5169,8 @@ createNode nurbsCurve -n "neck_C0_neckShape" -p "neck_C0_neck"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_neck25Shape" -p "neck_C0_neck"; - rename -uid "ED021FD5-4E5D-7BA8-6FFE-A3998A979651"; +createNode nurbsCurve -n "neck_C0_neck28Shape" -p "neck_C0_neck"; + rename -uid "919A9360-47CB-05DE-8E29-2C816B152444"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5135,8 +5182,8 @@ createNode nurbsCurve -n "neck_C0_neck25Shape" -p "neck_C0_neck"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_neck26Shape" -p "neck_C0_neck"; - rename -uid "F7361CC6-42CA-EDE6-D669-F09E385141B0"; +createNode nurbsCurve -n "neck_C0_neck29Shape" -p "neck_C0_neck"; + rename -uid "85DD472F-411D-1D13-44A6-449717B29995"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5148,8 +5195,8 @@ createNode nurbsCurve -n "neck_C0_neck26Shape" -p "neck_C0_neck"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_neck27Shape" -p "neck_C0_neck"; - rename -uid "0CD12C7B-44BD-B267-A44D-AD8304339CCE"; +createNode nurbsCurve -n "neck_C0_neck30Shape" -p "neck_C0_neck"; + rename -uid "D85AB108-4F5F-A87D-0DDC-DAA52C33772F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5166,8 +5213,8 @@ createNode nurbsCurve -n "neck_C0_neck27Shape" -p "neck_C0_neck"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_neck27_0crvShape" -p "neck_C0_neck"; - rename -uid "4AF00464-40CC-BDA2-E8E6-31BC83EFF72F"; +createNode nurbsCurve -n "neck_C0_neck30_0crvShape" -p "neck_C0_neck"; + rename -uid "99EC088F-4F5E-CBEF-E687-16AB873C83C3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5184,8 +5231,8 @@ createNode nurbsCurve -n "neck_C0_neck27_0crvShape" -p "neck_C0_neck"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_neck27_1crvShape" -p "neck_C0_neck"; - rename -uid "B88E733C-43A1-4EF7-9E4B-BE8C9DB23B05"; +createNode nurbsCurve -n "neck_C0_neck30_1crvShape" -p "neck_C0_neck"; + rename -uid "91C34788-4B05-E93B-9EE0-E18FF750D7D4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5203,10 +5250,10 @@ createNode nurbsCurve -n "neck_C0_neck27_1crvShape" -p "neck_C0_neck"; 0 0 -0.1875 ; createNode transform -n "neck_C0_head" -p "neck_C0_neck"; - rename -uid "C0CC7A89-4CB3-5251-B9D1-20AEDF48188C"; + rename -uid "2B959624-4CB2-C39A-B10A-8BB5483A8C4F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3877787807814457e-016 0.10000000000004405 1.2246467991476512e-017 ; + setAttr ".t" -type "double3" 5.5511151231257827e-017 0.10000000000005116 1.2246467991476512e-017 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5214,12 +5261,12 @@ createNode transform -n "neck_C0_head" -p "neck_C0_neck"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000002 1.0000000000000018 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 1.0000000000000018 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_headShape" -p "neck_C0_head"; - rename -uid "11AA9789-4D9B-397E-F596-4CB931CD83E1"; + rename -uid "D09D91A8-4BD7-BF4D-AF64-8EABCF1B69D6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5231,8 +5278,8 @@ createNode nurbsCurve -n "neck_C0_headShape" -p "neck_C0_head"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_head25Shape" -p "neck_C0_head"; - rename -uid "CF231DB3-48EA-5176-22FD-69888B74514F"; +createNode nurbsCurve -n "neck_C0_head28Shape" -p "neck_C0_head"; + rename -uid "C824DE8B-4F27-86AD-2D70-F7AC45CD6C0F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5244,8 +5291,8 @@ createNode nurbsCurve -n "neck_C0_head25Shape" -p "neck_C0_head"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_head26Shape" -p "neck_C0_head"; - rename -uid "2C6A679D-435E-45A3-8D9B-40856BD8A5AC"; +createNode nurbsCurve -n "neck_C0_head29Shape" -p "neck_C0_head"; + rename -uid "2B5EB522-408C-9D5D-6FF7-B4939577AC51"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5257,8 +5304,8 @@ createNode nurbsCurve -n "neck_C0_head26Shape" -p "neck_C0_head"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_head27Shape" -p "neck_C0_head"; - rename -uid "72269914-4762-1747-FDB6-76A3425F847F"; +createNode nurbsCurve -n "neck_C0_head30Shape" -p "neck_C0_head"; + rename -uid "71726667-4781-FC9D-BC25-A4A44EE7C0C7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5275,8 +5322,8 @@ createNode nurbsCurve -n "neck_C0_head27Shape" -p "neck_C0_head"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_head27_0crvShape" -p "neck_C0_head"; - rename -uid "A19AF2F4-4B8C-97AD-8C0E-498470C45B77"; +createNode nurbsCurve -n "neck_C0_head30_0crvShape" -p "neck_C0_head"; + rename -uid "F7E2B8E3-4A55-F058-740C-12AE9C3D6FB8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5293,8 +5340,8 @@ createNode nurbsCurve -n "neck_C0_head27_0crvShape" -p "neck_C0_head"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_head27_1crvShape" -p "neck_C0_head"; - rename -uid "6AC6CC74-4CE4-0722-8B53-2D8E481A92CD"; +createNode nurbsCurve -n "neck_C0_head30_1crvShape" -p "neck_C0_head"; + rename -uid "8334F3E0-47E7-F094-BA05-D0A54CA3B365"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5312,10 +5359,10 @@ createNode nurbsCurve -n "neck_C0_head27_1crvShape" -p "neck_C0_head"; 0 0 -0.1875 ; createNode transform -n "neck_C0_eff" -p "neck_C0_head"; - rename -uid "D4514F1B-47C6-7BF7-AE56-779CC96EBF43"; + rename -uid "4658178F-4EDF-9F4C-1940-C79998D2E3DF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1657341758564144e-015 3.0746209978281733 2.3592239273284103e-016 ; + setAttr ".t" -type "double3" 1.1796119636642288e-015 3.0746209978281662 2.3592239273284182e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5323,12 +5370,12 @@ createNode transform -n "neck_C0_eff" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999944 0.99999999999999856 ; + setAttr ".s" -type "double3" 1 0.99999999999999944 0.99999999999999867 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_effShape" -p "neck_C0_eff"; - rename -uid "D5F7EB72-4DE4-ED8B-AD7F-3FBF66BE769C"; + rename -uid "428FAE81-48C6-5BBA-6824-24943579E314"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5340,8 +5387,8 @@ createNode nurbsCurve -n "neck_C0_effShape" -p "neck_C0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_eff25Shape" -p "neck_C0_eff"; - rename -uid "9AF215A0-4663-4FE1-BC31-BD9FB936AC37"; +createNode nurbsCurve -n "neck_C0_eff28Shape" -p "neck_C0_eff"; + rename -uid "D3D933DA-45AA-426C-6DC6-D7A232DB2261"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5353,8 +5400,8 @@ createNode nurbsCurve -n "neck_C0_eff25Shape" -p "neck_C0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_eff26Shape" -p "neck_C0_eff"; - rename -uid "0AC16C5B-44A3-9C77-1172-B38A3E3997BE"; +createNode nurbsCurve -n "neck_C0_eff29Shape" -p "neck_C0_eff"; + rename -uid "F57C9161-484B-F982-02F9-A4BAB282AA77"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5366,8 +5413,8 @@ createNode nurbsCurve -n "neck_C0_eff26Shape" -p "neck_C0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_eff27Shape" -p "neck_C0_eff"; - rename -uid "4C4964CD-45D3-CD16-AC61-5DB5FD856FA4"; +createNode nurbsCurve -n "neck_C0_eff30Shape" -p "neck_C0_eff"; + rename -uid "37D7DFAD-4253-1A05-260A-358A32A6C192"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5384,8 +5431,8 @@ createNode nurbsCurve -n "neck_C0_eff27Shape" -p "neck_C0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_eff27_0crvShape" -p "neck_C0_eff"; - rename -uid "AFEE6AFD-4BCF-98C2-9E10-118DCC73D3EE"; +createNode nurbsCurve -n "neck_C0_eff30_0crvShape" -p "neck_C0_eff"; + rename -uid "73867733-45E6-7FF3-14A4-A1B31CF50531"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5402,8 +5449,8 @@ createNode nurbsCurve -n "neck_C0_eff27_0crvShape" -p "neck_C0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_eff27_1crvShape" -p "neck_C0_eff"; - rename -uid "45D26B47-421B-9022-D039-6D84CCBC4A89"; +createNode nurbsCurve -n "neck_C0_eff30_1crvShape" -p "neck_C0_eff"; + rename -uid "148EE783-41CF-2C23-E9C7-168B7B763D57"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5421,7 +5468,7 @@ createNode nurbsCurve -n "neck_C0_eff27_1crvShape" -p "neck_C0_eff"; 0 0 -0.1875 ; createNode transform -n "faceUI_C0_root" -p "neck_C0_eff"; - rename -uid "50C942E1-4984-8C0B-9146-C4A906718F10"; + rename -uid "1619DD78-440E-3C81-7D23-BAACABA84C66"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -5445,12 +5492,14 @@ createNode transform -n "faceUI_C0_root" -p "neck_C0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.0261570199409107e-015 1.360468176387009 7.2046004192796409e-016 ; + setAttr ".t" -type "double3" 1.9984014443252818e-015 1.3604681763870019 7.204600419279633e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5458,7 +5507,7 @@ createNode transform -n "faceUI_C0_root" -p "neck_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000002 1.0000000000000007 ; + setAttr ".s" -type "double3" 0.99999999999999989 0.99999999999999989 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -5470,11 +5519,8 @@ createNode transform -n "faceUI_C0_root" -p "neck_C0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "faceUI_C0_rootShape" -p "faceUI_C0_root"; - rename -uid "F68552F2-420E-D1D1-818B-99B1C62FC27E"; + rename -uid "6066153E-4FA0-8338-618A-09927C885446"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5486,8 +5532,8 @@ createNode nurbsCurve -n "faceUI_C0_rootShape" -p "faceUI_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "faceUI_C0_root25Shape" -p "faceUI_C0_root"; - rename -uid "E95EE71D-44BE-2470-3A3D-56BC019263A0"; +createNode nurbsCurve -n "faceUI_C0_root28Shape" -p "faceUI_C0_root"; + rename -uid "BC51B35B-4048-93CC-5840-BDB51F3F9B49"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5499,8 +5545,8 @@ createNode nurbsCurve -n "faceUI_C0_root25Shape" -p "faceUI_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "faceUI_C0_root26Shape" -p "faceUI_C0_root"; - rename -uid "38E3EEFE-43A3-CC33-7FE6-A1AA808DE70B"; +createNode nurbsCurve -n "faceUI_C0_root29Shape" -p "faceUI_C0_root"; + rename -uid "19BED195-462D-EF5D-647B-F7B3FB96D9A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5512,8 +5558,8 @@ createNode nurbsCurve -n "faceUI_C0_root26Shape" -p "faceUI_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "faceUI_C0_root27Shape" -p "faceUI_C0_root"; - rename -uid "2DC97D68-4DDB-177B-9ACE-4497BE305B41"; +createNode nurbsCurve -n "faceUI_C0_root30Shape" -p "faceUI_C0_root"; + rename -uid "7CA9E17A-4D0C-7F95-1D82-3B939F43271B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5540,10 +5586,10 @@ createNode nurbsCurve -n "faceUI_C0_root27Shape" -p "faceUI_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "faceUI_C0_sizeRef" -p "faceUI_C0_root"; - rename -uid "1A1B3EFD-412C-E7E2-3805-D18AC508D77D"; + rename -uid "332A134D-4DA7-EC2A-D681-98AFD8D18840"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.7538799546502091 -7.1054273576010019e-015 -3.8943958161623829e-016 ; + setAttr ".t" -type "double3" -1.7538799546502091 0 -3.8943958161623671e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5552,12 +5598,12 @@ createNode transform -n "faceUI_C0_sizeRef" -p "faceUI_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.753879954650216 1.7538799546502188 1.7538799546502091 ; + setAttr ".s" -type "double3" 1.7538799546502164 1.7538799546502193 1.7538799546502095 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "mouth_C0_root" -p "neck_C0_head"; - rename -uid "12D5379E-4AB9-7DF3-94D4-AFB9AD649740"; + rename -uid "4C7AA725-48BF-E1DF-48F4-CD95D985FF41"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -5567,9 +5613,9 @@ createNode transform -n "mouth_C0_root" -p "neck_C0_head"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.7430063189231078e-016 -1.4210854715202004e-014 1.7723706024528312e-017 ; + setAttr ".t" -type "double3" 8.8817841970012523e-016 -2.1316282072803006e-014 1.7723706024530678e-017 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5578,7 +5624,7 @@ createNode transform -n "mouth_C0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.95913545105009446 0.95913545105009301 0.95913545105009024 ; + setAttr ".s" -type "double3" 0.95913545105009468 0.95913545105009312 0.95913545105009024 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -5588,9 +5634,8 @@ createNode transform -n "mouth_C0_root" -p "neck_C0_head"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "faceUI_C0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "mouth_C0_rootShape" -p "mouth_C0_root"; - rename -uid "E2B303AE-4ECD-3907-67BA-4884734DA9E2"; + rename -uid "EB976A33-4E5F-2C82-9A8C-6DB7343B393C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5602,8 +5647,8 @@ createNode nurbsCurve -n "mouth_C0_rootShape" -p "mouth_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_root25Shape" -p "mouth_C0_root"; - rename -uid "1C790741-4056-C542-7339-75BB6CBA8327"; +createNode nurbsCurve -n "mouth_C0_root28Shape" -p "mouth_C0_root"; + rename -uid "B779541D-4178-08F9-2D29-EAAB811093F7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5615,8 +5660,8 @@ createNode nurbsCurve -n "mouth_C0_root25Shape" -p "mouth_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_root26Shape" -p "mouth_C0_root"; - rename -uid "5CC42036-4A56-4912-B075-E1A5D0BB04BD"; +createNode nurbsCurve -n "mouth_C0_root29Shape" -p "mouth_C0_root"; + rename -uid "ACAC3D40-47DA-61D0-4945-22A921D70B55"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5628,8 +5673,8 @@ createNode nurbsCurve -n "mouth_C0_root26Shape" -p "mouth_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_root27Shape" -p "mouth_C0_root"; - rename -uid "A417D0AB-4C63-9624-9F32-5A96F1AE0D32"; +createNode nurbsCurve -n "mouth_C0_root30Shape" -p "mouth_C0_root"; + rename -uid "7BDB1D95-44A3-E75C-D9FA-808C573A2827"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5656,10 +5701,10 @@ createNode nurbsCurve -n "mouth_C0_root27Shape" -p "mouth_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "mouth_C0_rotcenter" -p "mouth_C0_root"; - rename -uid "06FBCB1E-4FC5-B787-2E8D-7DB601982006"; + rename -uid "30D93966-49B5-761F-283C-7A917E04AADE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -8.7644326417193379e-016 -0.62123610319594391 1.8022590188867564 ; + setAttr ".t" -type "double3" -8.7644326417193498e-016 -0.62123610319594391 1.8022590188867562 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5667,12 +5712,12 @@ createNode transform -n "mouth_C0_rotcenter" -p "mouth_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999722 0.99999999999999989 0.99999999999999745 ; + setAttr ".s" -type "double3" 0.99999999999999667 0.99999999999999978 0.99999999999999722 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_rotcenterShape" -p "mouth_C0_rotcenter"; - rename -uid "C8471712-4D4D-E5EE-0DF6-7D9662CE20D2"; + rename -uid "F64B509A-4EFC-720F-4AF1-2180AAA48D32"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5684,8 +5729,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenterShape" -p "mouth_C0_rotcenter"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter25Shape" -p "mouth_C0_rotcenter"; - rename -uid "0D5C923C-47C0-46B7-6C79-3089DD74C310"; +createNode nurbsCurve -n "mouth_C0_rotcenter28Shape" -p "mouth_C0_rotcenter"; + rename -uid "B75354F3-4B1D-0932-8058-849399062CFC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5697,8 +5742,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter25Shape" -p "mouth_C0_rotcenter"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter26Shape" -p "mouth_C0_rotcenter"; - rename -uid "182428C5-442A-0955-2747-94A52C6D79DC"; +createNode nurbsCurve -n "mouth_C0_rotcenter29Shape" -p "mouth_C0_rotcenter"; + rename -uid "E11DC3AB-4AF1-06BF-3C36-98914C898C21"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5710,8 +5755,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter26Shape" -p "mouth_C0_rotcenter"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_rotcenter27Shape" -p "mouth_C0_rotcenter"; - rename -uid "60A1C1FF-45C6-135B-44A1-2D9F722E7166"; +createNode nurbsCurve -n "mouth_C0_rotcenter30Shape" -p "mouth_C0_rotcenter"; + rename -uid "949986FC-4FCB-B2B1-BF0C-E1990028C0D7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5728,8 +5773,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter27Shape" -p "mouth_C0_rotcenter"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter27_0crvShape" -p "mouth_C0_rotcenter"; - rename -uid "89E24A94-41BE-20AC-FA76-999143748973"; +createNode nurbsCurve -n "mouth_C0_rotcenter30_0crvShape" -p "mouth_C0_rotcenter"; + rename -uid "652B5EBB-43D0-94F4-E6A0-D2B34F62A4FD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5746,8 +5791,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter27_0crvShape" -p "mouth_C0_rotcenter 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter27_1crvShape" -p "mouth_C0_rotcenter"; - rename -uid "D00C11A3-4CA4-9C37-9E55-11A73FFBD081"; +createNode nurbsCurve -n "mouth_C0_rotcenter30_1crvShape" -p "mouth_C0_rotcenter"; + rename -uid "59355029-4357-6B9A-4915-82A0463C8E5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5765,10 +5810,10 @@ createNode nurbsCurve -n "mouth_C0_rotcenter27_1crvShape" -p "mouth_C0_rotcenter 0 0 -0.1875 ; createNode transform -n "mouth_C0_lipup" -p "mouth_C0_rotcenter"; - rename -uid "E69001F3-407F-5CAF-6BC0-8EB2648A5E13"; + rename -uid "15662483-4A37-51A4-CD50-9889247F5E9F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -8.9761536313416156e-017 0.12388352783449363 0.23628786867351526 ; + setAttr ".t" -type "double3" -8.9761536313416156e-017 0.12388352783449008 0.23628786867351503 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5776,12 +5821,12 @@ createNode transform -n "mouth_C0_lipup" -p "mouth_C0_rotcenter"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999956 0.999999999999999 ; + setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999944 0.999999999999999 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_lipupShape" -p "mouth_C0_lipup"; - rename -uid "374CEBC8-494E-1F46-7B7B-8388B9388D93"; + rename -uid "7DD94BB6-4E5D-BD03-5230-9E8458BDEB3E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5793,8 +5838,8 @@ createNode nurbsCurve -n "mouth_C0_lipupShape" -p "mouth_C0_lipup"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup25Shape" -p "mouth_C0_lipup"; - rename -uid "274A0C8D-4CA7-5A0E-148A-26B973C7C638"; +createNode nurbsCurve -n "mouth_C0_lipup28Shape" -p "mouth_C0_lipup"; + rename -uid "CEFC6A6D-4592-338C-4E08-809FE54539FA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5806,8 +5851,8 @@ createNode nurbsCurve -n "mouth_C0_lipup25Shape" -p "mouth_C0_lipup"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_lipup26Shape" -p "mouth_C0_lipup"; - rename -uid "7F1818FF-4DB5-B73A-5E48-43A237887C6B"; +createNode nurbsCurve -n "mouth_C0_lipup29Shape" -p "mouth_C0_lipup"; + rename -uid "7B3E26FD-4CD6-B9E3-5946-42A2D2C533E0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5819,8 +5864,8 @@ createNode nurbsCurve -n "mouth_C0_lipup26Shape" -p "mouth_C0_lipup"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_lipup27Shape" -p "mouth_C0_lipup"; - rename -uid "473A8EA2-42DC-B2DC-E6D7-4FA5A7573D4E"; +createNode nurbsCurve -n "mouth_C0_lipup30Shape" -p "mouth_C0_lipup"; + rename -uid "4805435F-46BE-7ACB-A34A-799D23AD1DC5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5837,8 +5882,8 @@ createNode nurbsCurve -n "mouth_C0_lipup27Shape" -p "mouth_C0_lipup"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup27_0crvShape" -p "mouth_C0_lipup"; - rename -uid "5FBFF75A-4E0C-6C6C-45F9-32AA862DA05A"; +createNode nurbsCurve -n "mouth_C0_lipup30_0crvShape" -p "mouth_C0_lipup"; + rename -uid "A8900DDF-4E0D-2833-FB1D-5189A13B4A6C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5855,8 +5900,8 @@ createNode nurbsCurve -n "mouth_C0_lipup27_0crvShape" -p "mouth_C0_lipup"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup27_1crvShape" -p "mouth_C0_lipup"; - rename -uid "D3D36F09-48C4-CB31-7F42-75BB0FCA7604"; +createNode nurbsCurve -n "mouth_C0_lipup30_1crvShape" -p "mouth_C0_lipup"; + rename -uid "AD782877-453E-24F6-CF0B-509F58635EBF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5874,18 +5919,18 @@ createNode nurbsCurve -n "mouth_C0_lipup27_1crvShape" -p "mouth_C0_lipup"; 0 0 -0.1875 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_lipup"; - rename -uid "A1967D26-48D7-2A38-2785-06959A3C3DC4"; + rename -uid "B90FCDFF-4712-68F8-D0A9-999F4052C2B8"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -3.2860216724904479e-015 -30.115037669761499 -2.1322109539326486 ; - setAttr ".s" -type "double3" 1.8286050763007582 1.82860507630076 1.8286050763007613 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; - rename -uid "8753D95F-401F-5292-8F8B-B9A1ADF2487F"; + setAttr ".t" -type "double3" -3.2860216724904475e-015 -30.115037669761495 -2.1322109539326481 ; + setAttr ".s" -type "double3" 1.8286050763007577 1.8286050763007604 1.8286050763007606 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; + rename -uid "4A61F6FF-44BF-5178-0A5F-4AA1094ADB7A"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; - rename -uid "209F17B5-474A-580E-A066-F8BA40B3BAE1"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; + rename -uid "8356F4A7-4387-88E5-3C51-A5B16EC62279"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -5896,10 +5941,10 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 ; createNode transform -n "mouth_C0_liplow" -p "mouth_C0_rotcenter"; - rename -uid "32DE63AD-4B89-8B8C-9242-DCAF6851D166"; + rename -uid "FFFC39A4-4311-2A78-0909-CD8999D4DD2B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -9.8775621283846274e-017 -0.1467824739346888 0.18194531820222393 ; + setAttr ".t" -type "double3" -9.8775621283846668e-017 -0.14678247393469235 0.1819453182022237 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5907,12 +5952,12 @@ createNode transform -n "mouth_C0_liplow" -p "mouth_C0_rotcenter"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999956 0.999999999999999 ; + setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999944 0.999999999999999 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_liplowShape" -p "mouth_C0_liplow"; - rename -uid "055CF040-424E-D7A6-D74F-C99947A7F9BB"; + rename -uid "89E62080-43F4-5EC0-7B84-2B88D0291E9B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5924,8 +5969,8 @@ createNode nurbsCurve -n "mouth_C0_liplowShape" -p "mouth_C0_liplow"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow25Shape" -p "mouth_C0_liplow"; - rename -uid "7A31BFD7-4AFD-920B-29F9-AEBA53AAE603"; +createNode nurbsCurve -n "mouth_C0_liplow28Shape" -p "mouth_C0_liplow"; + rename -uid "DB7C5573-42AF-4FEA-8ED7-10B16B41634F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5937,8 +5982,8 @@ createNode nurbsCurve -n "mouth_C0_liplow25Shape" -p "mouth_C0_liplow"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_liplow26Shape" -p "mouth_C0_liplow"; - rename -uid "49B17946-4153-C649-AE0E-3D9589F11667"; +createNode nurbsCurve -n "mouth_C0_liplow29Shape" -p "mouth_C0_liplow"; + rename -uid "C31C3A0C-4F55-649C-990F-90B7E8F1B3B5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5950,8 +5995,8 @@ createNode nurbsCurve -n "mouth_C0_liplow26Shape" -p "mouth_C0_liplow"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_liplow27Shape" -p "mouth_C0_liplow"; - rename -uid "B48C08E3-4A92-F56D-5217-2983DBC220AD"; +createNode nurbsCurve -n "mouth_C0_liplow30Shape" -p "mouth_C0_liplow"; + rename -uid "8E39D662-4680-5C81-8AAF-1BAE79D9A928"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5968,8 +6013,8 @@ createNode nurbsCurve -n "mouth_C0_liplow27Shape" -p "mouth_C0_liplow"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow27_0crvShape" -p "mouth_C0_liplow"; - rename -uid "54230183-4635-91B6-6C90-9A9B06844DC5"; +createNode nurbsCurve -n "mouth_C0_liplow30_0crvShape" -p "mouth_C0_liplow"; + rename -uid "39F4949F-4F36-3245-1B5A-A4975120BAC1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5986,8 +6031,8 @@ createNode nurbsCurve -n "mouth_C0_liplow27_0crvShape" -p "mouth_C0_liplow"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow27_1crvShape" -p "mouth_C0_liplow"; - rename -uid "5C19D532-442C-F229-2F99-4A8F8B3B9C77"; +createNode nurbsCurve -n "mouth_C0_liplow30_1crvShape" -p "mouth_C0_liplow"; + rename -uid "9197E6FB-45B2-A40D-F7B9-3C92E4D22421"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6005,18 +6050,18 @@ createNode nurbsCurve -n "mouth_C0_liplow27_1crvShape" -p "mouth_C0_liplow"; 0 0 -0.1875 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_liplow"; - rename -uid "F2DE634F-4195-21A4-4AD2-98BECD352842"; + rename -uid "0386D929-44B1-B8CB-8758-F1996B42C571"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -3.2770075875200178e-015 -29.844371667992313 -2.0778684034613573 ; - setAttr ".s" -type "double3" 1.8286050763007582 1.82860507630076 1.8286050763007613 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; - rename -uid "96FCBE04-4983-1355-5E1B-BD939852EC5D"; + setAttr ".t" -type "double3" -3.2770075875200162e-015 -29.844371667992309 -2.0778684034613568 ; + setAttr ".s" -type "double3" 1.8286050763007577 1.8286050763007604 1.8286050763007606 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; + rename -uid "59708543-4F43-EC8E-FDA7-779C1CCA8ADC"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; - rename -uid "861F4894-4D3F-AB5B-4214-FDAC4FDF2BC2"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; + rename -uid "A5EA3B9D-45C1-6AAE-6FB9-BD888156A9B9"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6027,10 +6072,10 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 ; createNode transform -n "mouth_C0_jaw" -p "mouth_C0_root"; - rename -uid "76042B45-43F6-9BDB-8C84-FDB7BCD65A5E"; + rename -uid "0462D737-4EFF-8CEF-451A-F486301E5112"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.0917243463457493e-015 -1.4111110000775078 2.0692083234973273 ; + setAttr ".t" -type "double3" -1.0917243463457505e-015 -1.4111110000775113 2.0692083234973264 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6038,12 +6083,12 @@ createNode transform -n "mouth_C0_jaw" -p "mouth_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999722 0.99999999999999989 0.99999999999999745 ; + setAttr ".s" -type "double3" 0.99999999999999667 0.99999999999999978 0.99999999999999722 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_jawShape" -p "mouth_C0_jaw"; - rename -uid "1B74AEE9-4B5E-EDFB-698A-5C8C7B63862D"; + rename -uid "74B91E1C-4211-9B72-E2AD-D1B12DF8829F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6055,8 +6100,8 @@ createNode nurbsCurve -n "mouth_C0_jawShape" -p "mouth_C0_jaw"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw25Shape" -p "mouth_C0_jaw"; - rename -uid "3EAF65CE-484B-9EFA-BC75-8081E0056350"; +createNode nurbsCurve -n "mouth_C0_jaw28Shape" -p "mouth_C0_jaw"; + rename -uid "D61CB066-4B97-2D74-3D57-6EA7E4C946FB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6068,8 +6113,8 @@ createNode nurbsCurve -n "mouth_C0_jaw25Shape" -p "mouth_C0_jaw"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_jaw26Shape" -p "mouth_C0_jaw"; - rename -uid "794EB6A5-49BF-076E-D894-D585B6781E4A"; +createNode nurbsCurve -n "mouth_C0_jaw29Shape" -p "mouth_C0_jaw"; + rename -uid "80F50ED9-4CDE-8CC3-A2FA-C1902D42D397"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6081,8 +6126,8 @@ createNode nurbsCurve -n "mouth_C0_jaw26Shape" -p "mouth_C0_jaw"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_jaw27Shape" -p "mouth_C0_jaw"; - rename -uid "22EEBE9E-449E-A39A-39BC-2BB6094C0E7D"; +createNode nurbsCurve -n "mouth_C0_jaw30Shape" -p "mouth_C0_jaw"; + rename -uid "18C70BAD-416B-77AA-CE39-1C9429819686"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6099,8 +6144,8 @@ createNode nurbsCurve -n "mouth_C0_jaw27Shape" -p "mouth_C0_jaw"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw27_0crvShape" -p "mouth_C0_jaw"; - rename -uid "5170051C-4E93-34D3-7537-BE9131F9319B"; +createNode nurbsCurve -n "mouth_C0_jaw30_0crvShape" -p "mouth_C0_jaw"; + rename -uid "D17424BB-4BC3-3768-FBEC-80AF9538D4C4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6117,8 +6162,8 @@ createNode nurbsCurve -n "mouth_C0_jaw27_0crvShape" -p "mouth_C0_jaw"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw27_1crvShape" -p "mouth_C0_jaw"; - rename -uid "4BE4D711-4130-6B25-AC58-B4931743162C"; +createNode nurbsCurve -n "mouth_C0_jaw30_1crvShape" -p "mouth_C0_jaw"; + rename -uid "A388E7B6-4A75-FF4B-5F59-6D898FE0BD07"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6136,7 +6181,7 @@ createNode nurbsCurve -n "mouth_C0_jaw27_1crvShape" -p "mouth_C0_jaw"; 0 0 -0.1875 ; createNode transform -n "tongue_C0_root" -p "mouth_C0_jaw"; - rename -uid "78496380-47A2-D0C1-399B-F4A092DF6BF6"; + rename -uid "D4F1382D-423E-9708-240B-34A303DC6439"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -6146,13 +6191,13 @@ createNode transform -n "tongue_C0_root" -p "mouth_C0_jaw"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.2909663197643836e-016 0.86108709817294127 -1.6295011454214565 ; + setAttr ".t" -type "double3" 8.2909663197643875e-016 0.86108709817294482 -1.6295011454214561 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6160,7 +6205,7 @@ createNode transform -n "tongue_C0_root" -p "mouth_C0_jaw"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.17172273903700594 0.17172273903700591 0.17172273903700599 ; + setAttr ".s" -type "double3" 0.17172273903700594 0.17172273903700588 0.17172273903700599 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -6170,12 +6215,9 @@ createNode transform -n "tongue_C0_root" -p "mouth_C0_jaw"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "tongue_C0_rootShape" -p "tongue_C0_root"; - rename -uid "EC05248E-4960-403D-55E3-E5821925B8F9"; + rename -uid "944BB210-40B0-453A-7346-BDB39A32F980"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6187,8 +6229,8 @@ createNode nurbsCurve -n "tongue_C0_rootShape" -p "tongue_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "tongue_C0_root25Shape" -p "tongue_C0_root"; - rename -uid "609B9035-46A3-53DA-5981-0BA99F1C029C"; +createNode nurbsCurve -n "tongue_C0_root28Shape" -p "tongue_C0_root"; + rename -uid "2D03AC14-49D8-1422-A361-7584565F3761"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6200,8 +6242,8 @@ createNode nurbsCurve -n "tongue_C0_root25Shape" -p "tongue_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "tongue_C0_root26Shape" -p "tongue_C0_root"; - rename -uid "943E944B-4B9D-4833-9B80-738515544F2D"; +createNode nurbsCurve -n "tongue_C0_root29Shape" -p "tongue_C0_root"; + rename -uid "659D9A24-40B4-E9F0-D434-38964E4B26FE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6213,8 +6255,8 @@ createNode nurbsCurve -n "tongue_C0_root26Shape" -p "tongue_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "tongue_C0_root27Shape" -p "tongue_C0_root"; - rename -uid "B04BC754-435B-C54C-646D-2BB37BD52DD6"; +createNode nurbsCurve -n "tongue_C0_root30Shape" -p "tongue_C0_root"; + rename -uid "D8F59BAE-4A4F-CED4-4220-B09DD293CC5A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6241,7 +6283,7 @@ createNode nurbsCurve -n "tongue_C0_root27Shape" -p "tongue_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "tongue_C0_0_loc" -p "tongue_C0_root"; - rename -uid "53660CA2-4297-684A-77DA-06A8F5AA6633"; + rename -uid "3B98908F-4948-D04A-3230-11BF1FB6D2BB"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" -7.0143079180640854e-016 -2.8421709430404007e-014 1.5794817263027459 ; @@ -6252,12 +6294,12 @@ createNode transform -n "tongue_C0_0_loc" -p "tongue_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000013 1.0000000000000016 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000016 1.0000000000000016 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "tongue_C0_0_locShape" -p "tongue_C0_0_loc"; - rename -uid "00830CBC-41CE-EDF5-A272-77BE033754F9"; + rename -uid "EC273AD5-49AB-9282-A6F9-66BED6041229"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6269,8 +6311,8 @@ createNode nurbsCurve -n "tongue_C0_0_locShape" -p "tongue_C0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "tongue_C0_0_loc25Shape" -p "tongue_C0_0_loc"; - rename -uid "D3505A8A-4F73-817A-095A-D79E317CA17D"; +createNode nurbsCurve -n "tongue_C0_0_loc28Shape" -p "tongue_C0_0_loc"; + rename -uid "5243FF57-4450-3C37-B5E3-5B9DC54CE08D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6282,8 +6324,8 @@ createNode nurbsCurve -n "tongue_C0_0_loc25Shape" -p "tongue_C0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "tongue_C0_0_loc26Shape" -p "tongue_C0_0_loc"; - rename -uid "5B07489F-40E0-6579-F151-6298A45E74C9"; +createNode nurbsCurve -n "tongue_C0_0_loc29Shape" -p "tongue_C0_0_loc"; + rename -uid "C5B692AF-4AE1-35F6-65E3-34A9064B3494"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6295,8 +6337,8 @@ createNode nurbsCurve -n "tongue_C0_0_loc26Shape" -p "tongue_C0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "tongue_C0_0_loc27Shape" -p "tongue_C0_0_loc"; - rename -uid "855CC5DC-4031-6DCE-4B08-C486DAFC5071"; +createNode nurbsCurve -n "tongue_C0_0_loc30Shape" -p "tongue_C0_0_loc"; + rename -uid "F70B94D1-49EB-FFE8-3AC8-D199A60200B4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6313,8 +6355,8 @@ createNode nurbsCurve -n "tongue_C0_0_loc27Shape" -p "tongue_C0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_0_loc27_0crvShape" -p "tongue_C0_0_loc"; - rename -uid "CFA09F9D-461A-772C-3357-AEB655D52B64"; +createNode nurbsCurve -n "tongue_C0_0_loc30_0crvShape" -p "tongue_C0_0_loc"; + rename -uid "1ABFA281-4814-D284-A842-418106CF9340"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6331,8 +6373,8 @@ createNode nurbsCurve -n "tongue_C0_0_loc27_0crvShape" -p "tongue_C0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_0_loc27_1crvShape" -p "tongue_C0_0_loc"; - rename -uid "E607EE18-491D-4907-9548-9EA7EAB67C06"; +createNode nurbsCurve -n "tongue_C0_0_loc30_1crvShape" -p "tongue_C0_0_loc"; + rename -uid "84C7C041-4854-625B-629F-C8999438B71F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6350,10 +6392,10 @@ createNode nurbsCurve -n "tongue_C0_0_loc27_1crvShape" -p "tongue_C0_0_loc"; 0 0 -0.1875 ; createNode transform -n "tongue_C0_1_loc" -p "tongue_C0_0_loc"; - rename -uid "923E5BE5-413B-7BA8-5958-47B4A7C7EF72"; + rename -uid "37EA9547-45C8-80F3-D0B8-3E886469AF7C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -7.2170680441439722e-016 -0.16556620751518381 1.5794817263027454 ; + setAttr ".t" -type "double3" -7.2170680441440353e-016 -0.16556620751518381 1.5794817263027454 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6361,12 +6403,12 @@ createNode transform -n "tongue_C0_1_loc" -p "tongue_C0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999944 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999922 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "tongue_C0_1_locShape" -p "tongue_C0_1_loc"; - rename -uid "0F3C8486-4998-BA01-C829-B897D0B92FC6"; + rename -uid "5448DFE7-4A56-9B75-E73F-25A9F70DCF4A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6378,8 +6420,8 @@ createNode nurbsCurve -n "tongue_C0_1_locShape" -p "tongue_C0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "tongue_C0_1_loc25Shape" -p "tongue_C0_1_loc"; - rename -uid "242E5E1F-4968-9158-7B4D-2FB2DE9286E9"; +createNode nurbsCurve -n "tongue_C0_1_loc28Shape" -p "tongue_C0_1_loc"; + rename -uid "6456C675-4EAB-044C-2707-B6AF67367998"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6391,8 +6433,8 @@ createNode nurbsCurve -n "tongue_C0_1_loc25Shape" -p "tongue_C0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "tongue_C0_1_loc26Shape" -p "tongue_C0_1_loc"; - rename -uid "5CB3EADB-4559-A096-6D62-1A818D9E0979"; +createNode nurbsCurve -n "tongue_C0_1_loc29Shape" -p "tongue_C0_1_loc"; + rename -uid "3491DE44-4480-BAB0-EF3E-30A078B12530"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6404,8 +6446,8 @@ createNode nurbsCurve -n "tongue_C0_1_loc26Shape" -p "tongue_C0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "tongue_C0_1_loc27Shape" -p "tongue_C0_1_loc"; - rename -uid "09C53A12-4604-195A-6126-CA9AE383FE6C"; +createNode nurbsCurve -n "tongue_C0_1_loc30Shape" -p "tongue_C0_1_loc"; + rename -uid "A42B14B6-4B51-6916-C794-4F868E94039E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6422,8 +6464,8 @@ createNode nurbsCurve -n "tongue_C0_1_loc27Shape" -p "tongue_C0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_1_loc27_0crvShape" -p "tongue_C0_1_loc"; - rename -uid "46AA5D62-4110-DCEF-CFDB-CD9B1203194E"; +createNode nurbsCurve -n "tongue_C0_1_loc30_0crvShape" -p "tongue_C0_1_loc"; + rename -uid "CAB734F7-409D-AFC3-537D-BA9AF1243D0E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6440,8 +6482,8 @@ createNode nurbsCurve -n "tongue_C0_1_loc27_0crvShape" -p "tongue_C0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_1_loc27_1crvShape" -p "tongue_C0_1_loc"; - rename -uid "A951022B-4882-3B5D-9777-67B9F22D0B00"; +createNode nurbsCurve -n "tongue_C0_1_loc30_1crvShape" -p "tongue_C0_1_loc"; + rename -uid "957D7797-4028-B7D2-C2C3-58B67D5D1859"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6459,10 +6501,10 @@ createNode nurbsCurve -n "tongue_C0_1_loc27_1crvShape" -p "tongue_C0_1_loc"; 0 0 -0.1875 ; createNode transform -n "tongue_C0_2_loc" -p "tongue_C0_1_loc"; - rename -uid "F4800C28-45B8-75BF-00CA-F8A43536D05D"; + rename -uid "FE9559AC-446F-51D3-AE68-6FBD399DB402"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -7.3944831544645201e-016 -0.31043663909051133 1.5794817263027401 ; + setAttr ".t" -type "double3" -7.3944831544645516e-016 -0.31043663909051133 1.5794817263027401 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6475,7 +6517,7 @@ createNode transform -n "tongue_C0_2_loc" -p "tongue_C0_1_loc"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "tongue_C0_2_locShape" -p "tongue_C0_2_loc"; - rename -uid "8514F0ED-43B9-55DD-3740-88BE50482E0A"; + rename -uid "C7EFB747-45CE-4FBE-6C33-9194825DFF08"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6487,8 +6529,8 @@ createNode nurbsCurve -n "tongue_C0_2_locShape" -p "tongue_C0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "tongue_C0_2_loc25Shape" -p "tongue_C0_2_loc"; - rename -uid "D2804665-4609-39DC-1975-03962D729CD9"; +createNode nurbsCurve -n "tongue_C0_2_loc28Shape" -p "tongue_C0_2_loc"; + rename -uid "9380BA52-4FA1-4ED8-48AA-3EB905250AA8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6500,8 +6542,8 @@ createNode nurbsCurve -n "tongue_C0_2_loc25Shape" -p "tongue_C0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "tongue_C0_2_loc26Shape" -p "tongue_C0_2_loc"; - rename -uid "0184400A-449E-9331-4B9E-20AEE3D3AD18"; +createNode nurbsCurve -n "tongue_C0_2_loc29Shape" -p "tongue_C0_2_loc"; + rename -uid "7219454A-4A46-5B48-C440-98BC24E587DB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6513,8 +6555,8 @@ createNode nurbsCurve -n "tongue_C0_2_loc26Shape" -p "tongue_C0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "tongue_C0_2_loc27Shape" -p "tongue_C0_2_loc"; - rename -uid "D267C40A-4496-0902-30A0-5D936FF9175D"; +createNode nurbsCurve -n "tongue_C0_2_loc30Shape" -p "tongue_C0_2_loc"; + rename -uid "9A7B646C-49B1-7969-7B9F-D582F16C85C6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6531,8 +6573,8 @@ createNode nurbsCurve -n "tongue_C0_2_loc27Shape" -p "tongue_C0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_2_loc27_0crvShape" -p "tongue_C0_2_loc"; - rename -uid "6FD5752E-4BD0-8846-6F7D-9393D721279B"; +createNode nurbsCurve -n "tongue_C0_2_loc30_0crvShape" -p "tongue_C0_2_loc"; + rename -uid "BD2B5C20-4F6C-6A89-18F0-D2997899486D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6549,8 +6591,8 @@ createNode nurbsCurve -n "tongue_C0_2_loc27_0crvShape" -p "tongue_C0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_2_loc27_1crvShape" -p "tongue_C0_2_loc"; - rename -uid "B6095E93-4AE8-09E2-B2CA-72907076282E"; +createNode nurbsCurve -n "tongue_C0_2_loc30_1crvShape" -p "tongue_C0_2_loc"; + rename -uid "D75AC879-4F90-3B3E-4B3E-9F83D447FB0D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6568,10 +6610,10 @@ createNode nurbsCurve -n "tongue_C0_2_loc27_1crvShape" -p "tongue_C0_2_loc"; 0 0 -0.1875 ; createNode transform -n "tongue_C0_3_loc" -p "tongue_C0_2_loc"; - rename -uid "00F7DA78-4313-FD20-B6CE-068B1B325DBD"; + rename -uid "76976970-4081-7E73-7F5D-A6B9FB582E9C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -7.0903429653441218e-016 -0.062087327818261429 1.5794817263027481 ; + setAttr ".t" -type "double3" -7.0903429653440587e-016 -0.06208732781828985 1.579481726302749 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6579,12 +6621,12 @@ createNode transform -n "tongue_C0_3_loc" -p "tongue_C0_2_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999944 0.999999999999999 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.999999999999999 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "tongue_C0_3_locShape" -p "tongue_C0_3_loc"; - rename -uid "D25AB92D-47A8-C71A-97CE-75B65E25A9F3"; + rename -uid "504BFDA8-40C1-2988-8BC5-4DA21E45B1F9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6596,8 +6638,8 @@ createNode nurbsCurve -n "tongue_C0_3_locShape" -p "tongue_C0_3_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "tongue_C0_3_loc25Shape" -p "tongue_C0_3_loc"; - rename -uid "729DDE6B-42FD-5A6A-E9F2-25944E7B1D20"; +createNode nurbsCurve -n "tongue_C0_3_loc28Shape" -p "tongue_C0_3_loc"; + rename -uid "1487E921-4A4C-2C09-8AB9-7B84672E9B35"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6609,8 +6651,8 @@ createNode nurbsCurve -n "tongue_C0_3_loc25Shape" -p "tongue_C0_3_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "tongue_C0_3_loc26Shape" -p "tongue_C0_3_loc"; - rename -uid "29A0AD27-4984-BBF7-E0E7-428DB4438380"; +createNode nurbsCurve -n "tongue_C0_3_loc29Shape" -p "tongue_C0_3_loc"; + rename -uid "29408C29-4A5A-217E-66E9-758300C9BB0D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6622,8 +6664,8 @@ createNode nurbsCurve -n "tongue_C0_3_loc26Shape" -p "tongue_C0_3_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "tongue_C0_3_loc27Shape" -p "tongue_C0_3_loc"; - rename -uid "F90F389F-41B1-C3CC-7A12-02AC2767CC37"; +createNode nurbsCurve -n "tongue_C0_3_loc30Shape" -p "tongue_C0_3_loc"; + rename -uid "48984B67-4CE7-E5FB-3778-489FB7C146A5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6640,8 +6682,8 @@ createNode nurbsCurve -n "tongue_C0_3_loc27Shape" -p "tongue_C0_3_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_3_loc27_0crvShape" -p "tongue_C0_3_loc"; - rename -uid "B9B7D226-40EB-B390-6E05-1A82740B050F"; +createNode nurbsCurve -n "tongue_C0_3_loc30_0crvShape" -p "tongue_C0_3_loc"; + rename -uid "7C834444-49A1-5BA1-4D58-A5911E6D0F03"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6658,8 +6700,8 @@ createNode nurbsCurve -n "tongue_C0_3_loc27_0crvShape" -p "tongue_C0_3_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "tongue_C0_3_loc27_1crvShape" -p "tongue_C0_3_loc"; - rename -uid "62B43B48-47DB-D50E-885E-C9A539CD83B0"; +createNode nurbsCurve -n "tongue_C0_3_loc30_1crvShape" -p "tongue_C0_3_loc"; + rename -uid "86A2B3F2-46F7-62EB-3139-63B11E507596"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6677,7 +6719,7 @@ createNode nurbsCurve -n "tongue_C0_3_loc27_1crvShape" -p "tongue_C0_3_loc"; 0 0 -0.1875 ; createNode transform -n "tongue_C0_blade" -p "tongue_C0_root"; - rename -uid "FA83BC25-4DD1-9622-8D06-FC8B471521B2"; + rename -uid "177086F2-4229-9FF2-289E-1DA8C14FD075"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -6687,13 +6729,13 @@ createNode transform -n "tongue_C0_blade" -p "tongue_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000024 1.0000000000000013 1.0000000000000013 ; + setAttr ".s" -type "double3" 1.0000000000000024 1.0000000000000016 1.0000000000000013 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "tongue_C0_bladeShape" -p "tongue_C0_blade"; - rename -uid "F8D9D4A3-45E5-5465-3B4A-22801F2BD108"; + rename -uid "AB03CA26-474C-5C8E-1C7C-AE8188C819F9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6707,8 +6749,8 @@ createNode nurbsCurve -n "tongue_C0_bladeShape" -p "tongue_C0_blade"; 0 0.034344547807401184 0 0 0 0 ; -createNode aimConstraint -n "tongue_C0_blade_aimConstraint9" -p "tongue_C0_blade"; - rename -uid "E9904B03-4830-55F2-3435-529B64CCDE8F"; +createNode aimConstraint -n "tongue_C0_blade_aimConstraint10" -p "tongue_C0_blade"; + rename -uid "3D0E469A-4210-528C-3AAD-50AA6338BAF0"; addAttr -dcb 0 -ci true -sn "w0" -ln "tongue_C0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -6723,10 +6765,10 @@ createNode aimConstraint -n "tongue_C0_blade_aimConstraint9" -p "tongue_C0_blade setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" -3.0929968415421635e-012 -89.999999999996902 0 ; + setAttr ".rsrr" -type "double3" -1.030998947180722e-012 -89.999999999998963 0 ; setAttr -k on ".w0"; -createNode pointConstraint -n "tongue_C0_blade_pointConstraint9" -p "tongue_C0_blade"; - rename -uid "2ABAEB1A-45F4-048B-A717-0494AEAD9025"; +createNode pointConstraint -n "tongue_C0_blade_pointConstraint10" -p "tongue_C0_blade"; + rename -uid "027C676F-47BE-539B-3669-7EB31E69677D"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "tongue_C0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -6740,21 +6782,21 @@ createNode pointConstraint -n "tongue_C0_blade_pointConstraint9" -p "tongue_C0_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" -6.3108872417680944e-030 0 -4.4408920985006262e-016 ; + setAttr ".rst" -type "double3" 3.1554436208840472e-030 0 0 ; setAttr -k on ".w0"; createNode transform -n "tongue_C0_crv" -p "tongue_C0_root"; - rename -uid "59255783-4A68-59EE-8AB3-9AB2E4A4C2AE"; + rename -uid "314009AD-4223-2330-90B8-CC93843CA9FF"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -2.3232792471046793e-014 -175.06339877760735 -3.1060024283289889 ; - setAttr ".s" -type "double3" 10.648590201596399 10.648590201596415 10.648590201596409 ; + setAttr ".t" -type "double3" -2.3232792471046787e-014 -175.06339877760738 -3.1060024283289889 ; + setAttr ".s" -type "double3" 10.648590201596397 10.648590201596416 10.648590201596406 ; createNode nurbsCurve -n "tongue_C0_crvShape" -p "tongue_C0_crv"; - rename -uid "B6815D27-4268-4311-FA61-3B9BD2EB3646"; + rename -uid "2C7D1F1C-41C0-0BB2-A767-FDBDF0CFF1D1"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "tongue_C0_crvShapeOrig" -p "tongue_C0_crv"; - rename -uid "529F11CC-41C7-C863-B3A7-C0A11D7E80CC"; + rename -uid "19DBC66C-4FFE-1501-3947-87B256841BFE"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6768,18 +6810,18 @@ createNode nurbsCurve -n "tongue_C0_crvShapeOrig" -p "tongue_C0_crv"; 0 0 0 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_root"; - rename -uid "B60D650B-43DA-1D6C-A637-CF829E90D7DD"; + rename -uid "226A4047-4659-F66D-B776-B48640B4D18B"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -4.2522264729757852e-015 -30.612390245122924 -0.093664066372369681 ; - setAttr ".s" -type "double3" 1.828605076300752 1.8286050763007591 1.8286050763007546 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; - rename -uid "FC674BC7-49FD-3678-B3EF-73B711E1A6F0"; + setAttr ".t" -type "double3" -4.2522264729757852e-015 -30.612390245122928 -0.093664066372369612 ; + setAttr ".s" -type "double3" 1.8286050763007506 1.8286050763007589 1.8286050763007538 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; + rename -uid "6B9598EB-4B4C-56F4-3DE1-73B8505B7331"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; - rename -uid "228FC052-4978-422B-3C65-719C152B3655"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; + rename -uid "279E82F2-486D-FB20-9A9A-F38DBDF51C64"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6789,19 +6831,19 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 0 0 0 ; -createNode transform -n "mouth_C0_crv9" -p "mouth_C0_root"; - rename -uid "387C64C5-4C7E-B90E-B72B-1384A492D8AD"; +createNode transform -n "mouth_C0_crv10" -p "mouth_C0_root"; + rename -uid "A8E8A3F1-4A27-1E70-F01A-D1B179476AB8"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -4.2522264729757852e-015 -30.612390245122924 -0.093664066372369681 ; - setAttr ".s" -type "double3" 1.828605076300752 1.8286050763007591 1.8286050763007546 ; -createNode nurbsCurve -n "mouth_C0_crv9Shape" -p "mouth_C0_crv9"; - rename -uid "92382422-4561-F367-3511-EA8E3CDF8F20"; + setAttr ".t" -type "double3" -4.2522264729757852e-015 -30.612390245122928 -0.093664066372369612 ; + setAttr ".s" -type "double3" 1.8286050763007506 1.8286050763007589 1.8286050763007538 ; +createNode nurbsCurve -n "mouth_C0_crv10Shape" -p "mouth_C0_crv10"; + rename -uid "0B5AECC3-46CD-4D88-7130-7296DFDB4AD0"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crv9ShapeOrig" -p "mouth_C0_crv9"; - rename -uid "944AE3CA-4E65-094B-8A7D-E980B0FC3BF7"; +createNode nurbsCurve -n "mouth_C0_crv10ShapeOrig" -p "mouth_C0_crv10"; + rename -uid "30704DDA-4665-CF9F-FD40-C8A37A1D1152"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6812,7 +6854,7 @@ createNode nurbsCurve -n "mouth_C0_crv9ShapeOrig" -p "mouth_C0_crv9"; 0 0 0 ; createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; - rename -uid "30AEA6E8-46E6-3A66-347F-309A060194EA"; + rename -uid "1DDAC81C-403E-2C7F-D8AF-70A0004295FB"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -6825,23 +6867,25 @@ createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -5.2613992666289553 0.71045535901633627 -3.3130608822386209e-015 ; + setAttr ".t" -type "double3" -5.2613992666289535 0.71045535901632917 -3.3130608822386185e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6850,7 +6894,7 @@ createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.6711445512932588 1.6711445512932537 1.6711445512932512 ; + setAttr ".s" -type "double3" 1.671144551293259 1.6711445512932537 1.6711445512932515 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -6862,21 +6906,8 @@ createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; setAttr ".ikrefarray" -type "string" "neck_C0_head,local_C0_root,body_C0_root,spine_C0_eff"; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eyeslook_C0_rootShape" -p "eyeslook_C0_root"; - rename -uid "CDDEB93A-4BB8-5190-2AC5-B89C97587FC3"; + rename -uid "E55E0856-462C-EF85-68E2-0C88197CFD7A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6888,8 +6919,8 @@ createNode nurbsCurve -n "eyeslook_C0_rootShape" -p "eyeslook_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eyeslook_C0_root25Shape" -p "eyeslook_C0_root"; - rename -uid "04D74068-432A-1E73-87DA-5292FBF58529"; +createNode nurbsCurve -n "eyeslook_C0_root28Shape" -p "eyeslook_C0_root"; + rename -uid "947777DE-43E5-F88A-55CE-A3A4D730021B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6901,8 +6932,8 @@ createNode nurbsCurve -n "eyeslook_C0_root25Shape" -p "eyeslook_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eyeslook_C0_root26Shape" -p "eyeslook_C0_root"; - rename -uid "C832F54A-4A4C-9A57-A030-87BE28BE1BFB"; +createNode nurbsCurve -n "eyeslook_C0_root29Shape" -p "eyeslook_C0_root"; + rename -uid "DACB4333-458D-7A5D-8601-F5BB43009F4F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6914,8 +6945,8 @@ createNode nurbsCurve -n "eyeslook_C0_root26Shape" -p "eyeslook_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eyeslook_C0_root27Shape" -p "eyeslook_C0_root"; - rename -uid "AE180F52-49C6-8806-AE71-0C921CA3E966"; +createNode nurbsCurve -n "eyeslook_C0_root30Shape" -p "eyeslook_C0_root"; + rename -uid "84B14C87-41A4-3852-4E5C-E3B5B6E1C92D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6942,10 +6973,10 @@ createNode nurbsCurve -n "eyeslook_C0_root27Shape" -p "eyeslook_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eyeslook_C0_sizeRef" -p "eyeslook_C0_root"; - rename -uid "0E06809C-4DE6-255B-E777-9A8C077DCC1D"; + rename -uid "BEA2E5DC-4010-A520-DC2E-368C959A7BD3"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -4.6607527914310037e-016 0 1.049508226737736 ; + setAttr ".t" -type "double3" -4.6607527914310057e-016 3.5527136788005009e-015 1.0495082267377356 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6953,12 +6984,12 @@ createNode transform -n "eyeslook_C0_sizeRef" -p "eyeslook_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0495082267377338 1.0495082267377396 1.0495082267377354 ; + setAttr ".s" -type "double3" 1.0495082267377336 1.0495082267377394 1.0495082267377349 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "eye_R0_root" -p "neck_C0_head"; - rename -uid "7499D1C7-472F-2481-3761-35BB26745471"; + rename -uid "C969A6A6-444F-EF88-9641-04ACC11D9DDD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -6971,9 +7002,9 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; -max 2 -en "X:Y:Z" -at "enum"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.4961368484464241 0.70921581084615326 -0.51425464314724334 ; + setAttr ".t" -type "double3" -1.4961368484464239 0.70921581084614616 -0.51425464314724323 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6982,7 +7013,7 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999778 0.99999999999999933 -0.99999999999999867 ; + setAttr ".s" -type "double3" 0.99999999999999778 0.99999999999999944 -0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -6994,9 +7025,8 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr -k on ".upVectorDirection" 1; setAttr ".ikrefarray" -type "string" "eyeslook_C0_root"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eye_R0_rootShape" -p "eye_R0_root"; - rename -uid "4763A777-4E38-333C-00FE-218B4B560E8C"; + rename -uid "6FE787A0-49AD-5B47-4E1F-AAAC5FC4C5EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7008,8 +7038,8 @@ createNode nurbsCurve -n "eye_R0_rootShape" -p "eye_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_R0_root25Shape" -p "eye_R0_root"; - rename -uid "EF7B849B-4BAC-36BA-D360-A08C1756A2B2"; +createNode nurbsCurve -n "eye_R0_root28Shape" -p "eye_R0_root"; + rename -uid "4243ECD9-4752-2A11-C55C-259D6982F4A2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7021,8 +7051,8 @@ createNode nurbsCurve -n "eye_R0_root25Shape" -p "eye_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_R0_root26Shape" -p "eye_R0_root"; - rename -uid "673B01FD-466A-260E-423A-078694691261"; +createNode nurbsCurve -n "eye_R0_root29Shape" -p "eye_R0_root"; + rename -uid "C2CB86ED-4E8F-735B-CFCE-629F3AD656C0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7034,8 +7064,8 @@ createNode nurbsCurve -n "eye_R0_root26Shape" -p "eye_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_R0_root27Shape" -p "eye_R0_root"; - rename -uid "BBF3B01E-4A28-4716-EE2D-4BAE3BA1DBD1"; +createNode nurbsCurve -n "eye_R0_root30Shape" -p "eye_R0_root"; + rename -uid "B9631821-403C-F0E2-71F7-06915F45AE7B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7062,10 +7092,10 @@ createNode nurbsCurve -n "eye_R0_root27Shape" -p "eye_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eye_R0_look" -p "eye_R0_root"; - rename -uid "40E96273-4115-42EF-68F4-1182AB036B95"; + rename -uid "E0652A61-41C0-B4EF-B860-9EA1A9E1101C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -4.4408920985006262e-016 -1.0658141036401503e-014 3.7697842257179222 ; + setAttr ".t" -type "double3" -4.4408920985006262e-016 -1.0658141036401503e-014 3.769784225717923 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7073,12 +7103,12 @@ createNode transform -n "eye_R0_look" -p "eye_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999978 0.99999999999999944 ; + setAttr ".s" -type "double3" 0.99999999999999856 0.99999999999999978 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "eye_R0_lookShape" -p "eye_R0_look"; - rename -uid "D2535EDC-4236-3DBD-0821-2193A802CAD5"; + rename -uid "0E0D8FE2-4906-A32F-AAA8-2DAD4C5F866D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7090,8 +7120,8 @@ createNode nurbsCurve -n "eye_R0_lookShape" -p "eye_R0_look"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_R0_look25Shape" -p "eye_R0_look"; - rename -uid "BA0012AC-4194-5252-6A9B-95B8867AFA5A"; +createNode nurbsCurve -n "eye_R0_look28Shape" -p "eye_R0_look"; + rename -uid "27EFCC86-4545-9EB3-E5B7-B8AB6CB561B5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7103,8 +7133,8 @@ createNode nurbsCurve -n "eye_R0_look25Shape" -p "eye_R0_look"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_R0_look26Shape" -p "eye_R0_look"; - rename -uid "8EC6428A-4FF4-1A8D-04A2-B0B415E33152"; +createNode nurbsCurve -n "eye_R0_look29Shape" -p "eye_R0_look"; + rename -uid "DB3FEDE8-4AE2-7971-C0C0-A9B79A552573"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7116,8 +7146,8 @@ createNode nurbsCurve -n "eye_R0_look26Shape" -p "eye_R0_look"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_R0_look27Shape" -p "eye_R0_look"; - rename -uid "A9C55788-46B6-A7D5-408E-1C827905F7AE"; +createNode nurbsCurve -n "eye_R0_look30Shape" -p "eye_R0_look"; + rename -uid "D22D63CF-412A-1F92-C612-979B264BF65B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7134,8 +7164,8 @@ createNode nurbsCurve -n "eye_R0_look27Shape" -p "eye_R0_look"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_R0_look27_0crvShape" -p "eye_R0_look"; - rename -uid "29864C94-47BE-133D-7197-578BF9DE6FE7"; +createNode nurbsCurve -n "eye_R0_look30_0crvShape" -p "eye_R0_look"; + rename -uid "B78C4C39-47ED-5F54-CDB7-C5BB6BD1CD76"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7152,8 +7182,8 @@ createNode nurbsCurve -n "eye_R0_look27_0crvShape" -p "eye_R0_look"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_R0_look27_1crvShape" -p "eye_R0_look"; - rename -uid "E3AB140B-4092-14BB-AEB1-1F8576A82F40"; +createNode nurbsCurve -n "eye_R0_look30_1crvShape" -p "eye_R0_look"; + rename -uid "96AE0AA2-4DCD-331B-3DF8-FC8F6A0B0BF0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7171,19 +7201,19 @@ createNode nurbsCurve -n "eye_R0_look27_1crvShape" -p "eye_R0_look"; 0 0 -0.1875 ; createNode transform -n "eye_R0_crv" -p "eye_R0_root"; - rename -uid "FF97753C-467B-F8A0-9219-349AD9D5D443"; + rename -uid "E8824A92-433A-3EE1-23AE-3F97B6F69B74"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -0.51425464314723923 -30.070644536323631 -1.585973374993676 ; + setAttr ".t" -type "double3" -0.51425464314723912 -30.070644536323631 -1.585973374993676 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; - setAttr ".s" -type "double3" 1.7538799546502182 1.7538799546502193 -1.7538799546502115 ; + setAttr ".s" -type "double3" 1.7538799546502175 1.7538799546502193 -1.7538799546502111 ; createNode nurbsCurve -n "eye_R0_crvShape" -p "eye_R0_crv"; - rename -uid "CED9EF38-44B5-EBA5-0FF6-D3BCF1059013"; + rename -uid "7C6EBD7B-451B-AC95-2A73-E3BF1D41529A"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "eye_R0_crvShapeOrig" -p "eye_R0_crv"; - rename -uid "9E883FF7-4DE6-EF05-2F89-FEA06109FD46"; + rename -uid "2C4C5F8F-48D5-E770-8B67-1EA329BBFF1F"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7194,7 +7224,7 @@ createNode nurbsCurve -n "eye_R0_crvShapeOrig" -p "eye_R0_crv"; 0 0 0 ; createNode transform -n "eye_L0_root" -p "neck_C0_head"; - rename -uid "755B6301-49E8-3BBB-B127-EAB159004042"; + rename -uid "EDA094F8-4D77-4F5E-32B9-E88D3C2226CB"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7207,9 +7237,9 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; -max 2 -en "X:Y:Z" -at "enum"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.4961368484464233 0.70921581084615326 0.51425464314724123 ; + setAttr ".t" -type "double3" -1.4961368484464228 0.70921581084614616 0.51425464314724112 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7218,7 +7248,7 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999933 1 ; + setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999944 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -7230,9 +7260,8 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr -k on ".upVectorDirection" 1; setAttr ".ikrefarray" -type "string" "eyeslook_C0_root"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eye_L0_rootShape" -p "eye_L0_root"; - rename -uid "58882392-4091-DCFD-FFB9-4AB54FDBFB5A"; + rename -uid "F0CDA6E8-4E57-C408-6EC7-7AA3FF73FFC2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7244,8 +7273,8 @@ createNode nurbsCurve -n "eye_L0_rootShape" -p "eye_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_L0_root25Shape" -p "eye_L0_root"; - rename -uid "81B3E851-4CAA-D209-821C-10AA568466E7"; +createNode nurbsCurve -n "eye_L0_root28Shape" -p "eye_L0_root"; + rename -uid "4DED7A65-4AEB-839D-B1C7-04AC75272E7A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7257,8 +7286,8 @@ createNode nurbsCurve -n "eye_L0_root25Shape" -p "eye_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_L0_root26Shape" -p "eye_L0_root"; - rename -uid "35DBF5B2-445E-14E2-F0EE-20BF469AFFB1"; +createNode nurbsCurve -n "eye_L0_root29Shape" -p "eye_L0_root"; + rename -uid "F2B05F02-4137-EBD9-2AD0-B4BFD9D4142D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7270,8 +7299,8 @@ createNode nurbsCurve -n "eye_L0_root26Shape" -p "eye_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_L0_root27Shape" -p "eye_L0_root"; - rename -uid "C74D80C4-4767-18E0-7E9B-8CBAA5EC2DB2"; +createNode nurbsCurve -n "eye_L0_root30Shape" -p "eye_L0_root"; + rename -uid "664F5D65-4540-53D5-5FF5-03BE0B90FE0C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7298,10 +7327,10 @@ createNode nurbsCurve -n "eye_L0_root27Shape" -p "eye_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eye_L0_look" -p "eye_L0_root"; - rename -uid "6085B714-4C45-1064-696B-0EB09A46A831"; + rename -uid "7FD4FDC2-4E60-C518-9884-688DA2C441E0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1102230246251565e-016 -1.7763568394002505e-014 3.7697842257179146 ; + setAttr ".t" -type "double3" 1.1102230246251565e-016 -1.7763568394002505e-014 3.7697842257179142 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7309,12 +7338,12 @@ createNode transform -n "eye_L0_look" -p "eye_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999689 0.99999999999999944 0.99999999999999745 ; + setAttr ".s" -type "double3" 0.99999999999999645 0.99999999999999944 0.99999999999999722 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "eye_L0_lookShape" -p "eye_L0_look"; - rename -uid "BBC2ED41-4C09-F2D6-35DF-2583322EA5BB"; + rename -uid "4D766FEE-4B7B-1921-74C5-4D9D06036010"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7326,8 +7355,8 @@ createNode nurbsCurve -n "eye_L0_lookShape" -p "eye_L0_look"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_L0_look25Shape" -p "eye_L0_look"; - rename -uid "61089163-4989-708D-5D1A-E0A3DE1C1014"; +createNode nurbsCurve -n "eye_L0_look28Shape" -p "eye_L0_look"; + rename -uid "8CA44C0A-48FF-3F70-1F9C-81843DADB9CC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7339,8 +7368,8 @@ createNode nurbsCurve -n "eye_L0_look25Shape" -p "eye_L0_look"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_L0_look26Shape" -p "eye_L0_look"; - rename -uid "7E62F14E-4AD7-1BB9-9ED9-7DB69D3763EE"; +createNode nurbsCurve -n "eye_L0_look29Shape" -p "eye_L0_look"; + rename -uid "4D00E227-4613-E47C-CAD0-119765347F40"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7352,8 +7381,8 @@ createNode nurbsCurve -n "eye_L0_look26Shape" -p "eye_L0_look"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_L0_look27Shape" -p "eye_L0_look"; - rename -uid "63DFA5E4-4900-B3E2-208F-6584285F91EF"; +createNode nurbsCurve -n "eye_L0_look30Shape" -p "eye_L0_look"; + rename -uid "E73479A6-4484-E4F0-46BB-DF8183FC38AD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7370,8 +7399,8 @@ createNode nurbsCurve -n "eye_L0_look27Shape" -p "eye_L0_look"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_L0_look27_0crvShape" -p "eye_L0_look"; - rename -uid "231B75F5-44BD-0FC0-10FF-7EA338CA70B3"; +createNode nurbsCurve -n "eye_L0_look30_0crvShape" -p "eye_L0_look"; + rename -uid "16C4173F-4C43-5342-C2FF-B0BD408CD1EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7388,8 +7417,8 @@ createNode nurbsCurve -n "eye_L0_look27_0crvShape" -p "eye_L0_look"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_L0_look27_1crvShape" -p "eye_L0_look"; - rename -uid "4BCB31E4-4773-701D-FAF1-65B34CEC7F5E"; +createNode nurbsCurve -n "eye_L0_look30_1crvShape" -p "eye_L0_look"; + rename -uid "C2E6AF09-43DA-304F-C2CE-16BDD12902A5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7407,18 +7436,18 @@ createNode nurbsCurve -n "eye_L0_look27_1crvShape" -p "eye_L0_look"; 0 0 -0.1875 ; createNode transform -n "eye_L0_crv" -p "eye_L0_root"; - rename -uid "CE3B8FAB-4FD5-F116-DA96-6D8CF223EBAB"; + rename -uid "0710EAD5-4CBF-B059-6762-44B8B1B63150"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -0.51425464314724534 -30.070644536323631 -1.5859733749936722 ; - setAttr ".s" -type "double3" 1.7538799546502155 1.7538799546502193 1.7538799546502086 ; + setAttr ".t" -type "double3" -0.51425464314724501 -30.070644536323631 -1.5859733749936715 ; + setAttr ".s" -type "double3" 1.7538799546502144 1.7538799546502193 1.753879954650208 ; createNode nurbsCurve -n "eye_L0_crvShape" -p "eye_L0_crv"; - rename -uid "AB54E08C-4CD6-6E0B-4FB2-CB9C304BDC39"; + rename -uid "7FF1F799-4598-EA6C-FCB4-2088527B8461"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "eye_L0_crvShapeOrig" -p "eye_L0_crv"; - rename -uid "956162A3-450C-CE3A-866C-CF9DE733BAA8"; + rename -uid "D59DB5DA-49A1-572C-673B-2A843358BA13"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7429,10 +7458,10 @@ createNode nurbsCurve -n "eye_L0_crvShapeOrig" -p "eye_L0_crv"; 0 0 0 ; createNode transform -n "neck_C0_tan1" -p "neck_C0_neck"; - rename -uid "56683CF9-4647-00D3-CA57-55A59B3348E0"; + rename -uid "F0121DBB-49A5-C22F-DC46-329325A80A5F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.09787009621156309 -0.34322132772767233 -2.0300963192813322e-017 ; + setAttr ".t" -type "double3" 0.097870096211563007 -0.34322132772766523 -2.0300963192813322e-017 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7440,12 +7469,12 @@ createNode transform -n "neck_C0_tan1" -p "neck_C0_neck"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000002 1.0000000000000018 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 1.0000000000000018 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_tanShape1" -p "neck_C0_tan1"; - rename -uid "4430335D-4DF2-3752-E033-13AB8FF0DF6B"; + rename -uid "58BF6E9E-4BB5-92D9-59BB-998F95B6F1F9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7457,8 +7486,8 @@ createNode nurbsCurve -n "neck_C0_tanShape1" -p "neck_C0_tan1"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_tanShape18" -p "neck_C0_tan1"; - rename -uid "39A6617A-4582-E630-98FA-FD9CEC98593B"; +createNode nurbsCurve -n "neck_C0_tanShape20" -p "neck_C0_tan1"; + rename -uid "09EAF420-4E4A-4A15-96F1-818CB75322ED"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7470,8 +7499,8 @@ createNode nurbsCurve -n "neck_C0_tanShape18" -p "neck_C0_tan1"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_tanShape19" -p "neck_C0_tan1"; - rename -uid "AD7BF26F-4B2E-4B87-D4FA-F5BD08ED9748"; +createNode nurbsCurve -n "neck_C0_tanShape21" -p "neck_C0_tan1"; + rename -uid "8C95E0A1-4C5E-2BA7-6FEC-43A35131EFF3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7483,8 +7512,8 @@ createNode nurbsCurve -n "neck_C0_tanShape19" -p "neck_C0_tan1"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_tanShape20" -p "neck_C0_tan1"; - rename -uid "35AFD3E4-46AA-EE2D-E00B-AAA356E4CAC4"; +createNode nurbsCurve -n "neck_C0_tanShape22" -p "neck_C0_tan1"; + rename -uid "5EE996D4-491B-725D-9E08-3C9694954819"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7501,8 +7530,8 @@ createNode nurbsCurve -n "neck_C0_tanShape20" -p "neck_C0_tan1"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan18_0crvShape" -p "neck_C0_tan1"; - rename -uid "985A10C8-4337-C1B5-995F-4A9A19903D70"; +createNode nurbsCurve -n "neck_C0_tan20_0crvShape" -p "neck_C0_tan1"; + rename -uid "3B2F4A47-4924-9B2E-076C-518E62385F79"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7519,8 +7548,8 @@ createNode nurbsCurve -n "neck_C0_tan18_0crvShape" -p "neck_C0_tan1"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan18_1crvShape" -p "neck_C0_tan1"; - rename -uid "52B1CD05-47DD-68D4-8971-B5A77C560CEA"; +createNode nurbsCurve -n "neck_C0_tan20_1crvShape" -p "neck_C0_tan1"; + rename -uid "5AE2BFA7-4B13-1732-4F6B-2CB9919ADA48"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7538,19 +7567,19 @@ createNode nurbsCurve -n "neck_C0_tan18_1crvShape" -p "neck_C0_tan1"; 0 0 -0.1875 ; createNode transform -n "neck_C0_head_crv" -p "neck_C0_neck"; - rename -uid "A2242760-4388-30CC-57E2-A8A04A7C9DBA"; + rename -uid "0654AE50-4535-0C92-C868-2081C527B5AE"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.08983652654724944 -29.261428725477426 -4.0684386981538073e-015 ; + setAttr ".t" -type "double3" 0.089836526547249329 -29.261428725477415 -4.0684386981538041e-015 ; setAttr ".r" -type "double3" 0 -89.999999999999986 0 ; - setAttr ".s" -type "double3" 1.753879954650218 1.7538799546502188 1.7538799546502095 ; + setAttr ".s" -type "double3" 1.7538799546502168 1.7538799546502186 1.7538799546502091 ; createNode nurbsCurve -n "neck_C0_head_crvShape" -p "neck_C0_head_crv"; - rename -uid "1CD880D3-45F6-902F-20F9-8A9F947EB759"; + rename -uid "25ABB189-4BB4-EF41-C281-F9A6E92FB623"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "neck_C0_head_crvShapeOrig" -p "neck_C0_head_crv"; - rename -uid "7C192F4E-4741-002F-6629-EC9D20CD35A7"; + rename -uid "D921A649-41CC-7629-48CC-27AF008B1670"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7562,10 +7591,10 @@ createNode nurbsCurve -n "neck_C0_head_crvShapeOrig" -p "neck_C0_head_crv"; 0 0 0 ; createNode transform -n "neck_C0_tan0" -p "neck_C0_root"; - rename -uid "E5BCD85F-49CB-A941-BC19-549F8F780A96"; + rename -uid "D44527DB-49EF-E254-B033-E6A2BD9ACCB0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.076579783198171825 0.45329667709497912 3.850870476136893e-017 ; + setAttr ".t" -type "double3" -0.076579783198171825 0.45329667709497912 3.8508704761368141e-017 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7573,12 +7602,12 @@ createNode transform -n "neck_C0_tan0" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999645 0.99999999999999678 0.99999999999999956 ; + setAttr ".s" -type "double3" 0.999999999999996 0.99999999999999623 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_tanShape0" -p "neck_C0_tan0"; - rename -uid "9A5E4CF2-4F4E-2F4C-4413-8797BD1A7974"; + rename -uid "910E5454-4588-B969-0C66-C4AFE319EA88"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7590,8 +7619,8 @@ createNode nurbsCurve -n "neck_C0_tanShape0" -p "neck_C0_tan0"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_tanShape17" -p "neck_C0_tan0"; - rename -uid "45522055-4649-8DA5-669C-3B817F4F46AB"; +createNode nurbsCurve -n "neck_C0_tanShape19" -p "neck_C0_tan0"; + rename -uid "926AB24F-4E81-3384-1823-249E8CBE6D1E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7603,8 +7632,8 @@ createNode nurbsCurve -n "neck_C0_tanShape17" -p "neck_C0_tan0"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_tanShape18" -p "neck_C0_tan0"; - rename -uid "786C15EB-48CB-2945-B699-8C83A2FFC321"; +createNode nurbsCurve -n "neck_C0_tanShape20" -p "neck_C0_tan0"; + rename -uid "37E434CC-48ED-4D72-0AAD-CFA5BE476453"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7616,8 +7645,8 @@ createNode nurbsCurve -n "neck_C0_tanShape18" -p "neck_C0_tan0"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_tanShape19" -p "neck_C0_tan0"; - rename -uid "15733AD9-4C63-0B0D-67EA-D883C4007C50"; +createNode nurbsCurve -n "neck_C0_tanShape21" -p "neck_C0_tan0"; + rename -uid "71371F31-4E74-DF26-B155-52BCFAC02E47"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7634,8 +7663,8 @@ createNode nurbsCurve -n "neck_C0_tanShape19" -p "neck_C0_tan0"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan17_0crvShape" -p "neck_C0_tan0"; - rename -uid "6FF5CDE2-4485-D6FE-59C2-F1972FBEB58C"; +createNode nurbsCurve -n "neck_C0_tan19_0crvShape" -p "neck_C0_tan0"; + rename -uid "94E5732C-415A-688E-D751-B4BBD318FC5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7652,8 +7681,8 @@ createNode nurbsCurve -n "neck_C0_tan17_0crvShape" -p "neck_C0_tan0"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan17_1crvShape" -p "neck_C0_tan0"; - rename -uid "3B72D67F-46E6-C2E0-BC14-C1A428039E59"; +createNode nurbsCurve -n "neck_C0_tan19_1crvShape" -p "neck_C0_tan0"; + rename -uid "2C837AA3-46BD-8BDE-3AD5-E4B5C93A6309"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7671,8 +7700,8 @@ createNode nurbsCurve -n "neck_C0_tan17_1crvShape" -p "neck_C0_tan0"; 0 0 -0.1875 ; createNode transform -n "neck_C0_blade" -p "neck_C0_root"; - rename -uid "14B42D1E-41A4-214B-C62F-D8A83F668305"; - addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; + rename -uid "DC717246-432F-EE6C-BDD6-938AD66365A3"; + addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -dv 360 -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -7681,13 +7710,13 @@ createNode transform -n "neck_C0_blade" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.6711445512932508 1.6711445512932459 1.6711445512932432 ; + setAttr ".s" -type "double3" 1.6711445512932501 1.671144551293245 1.6711445512932428 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; - setAttr -k on ".bladeRollOffset" 360; + setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "neck_C0_bladeShape" -p "neck_C0_blade"; - rename -uid "E033B395-43FB-5568-7616-E2B9D0BA0D4E"; + rename -uid "21658D5F-4454-0036-0682-AF9D5DCFFFD0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7697,12 +7726,12 @@ createNode nurbsCurve -n "neck_C0_bladeShape" -p "neck_C0_blade"; 4 0 1 2 3 4 0 0 0 - 0.35903536862546165 0 0 - 0 0.11967845620848722 0 + 0.35903536862546187 0 0 + 0 0.11967845620848729 0 0 0 0 ; -createNode aimConstraint -n "neck_C0_blade_aimConstraint9" -p "neck_C0_blade"; - rename -uid "530B89A8-4961-8A24-A462-C4A59F59421E"; +createNode aimConstraint -n "neck_C0_blade_aimConstraint10" -p "neck_C0_blade"; + rename -uid "DCDAC093-4E74-2047-5057-FD8F24F20956"; addAttr -dcb 0 -ci true -sn "w0" -ln "neck_C0_tan0W0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -7717,11 +7746,11 @@ createNode aimConstraint -n "neck_C0_blade_aimConstraint9" -p "neck_C0_blade"; setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".o" -type "double3" 360 0 359.99999999999977 ; - setAttr ".rsrr" -type "double3" 540 2.5424100276768916e-029 459.5889880226357 ; + setAttr ".o" -type "double3" 360 0 359.9999999999996 ; + setAttr ".rsrr" -type "double3" 540 5.2260650568913885e-029 459.58898802263559 ; setAttr -k on ".w0"; -createNode pointConstraint -n "neck_C0_blade_pointConstraint9" -p "neck_C0_blade"; - rename -uid "F67E3FB2-4620-DD11-6D46-88B909877034"; +createNode pointConstraint -n "neck_C0_blade_pointConstraint10" -p "neck_C0_blade"; + rename -uid "0766E5B3-40F1-B6B9-9673-4C930E0656D3"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "neck_C0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -7735,22 +7764,22 @@ createNode pointConstraint -n "neck_C0_blade_pointConstraint9" -p "neck_C0_blade setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 -3.5527136788005009e-015 0 ; + setAttr ".rst" -type "double3" 1.1102230246251565e-016 3.5527136788005009e-015 0 ; setAttr -k on ".w0"; createNode transform -n "neck_C0_neck_crv" -p "neck_C0_root"; - rename -uid "21559A42-4276-A137-617A-A6AE24BF2C6E"; + rename -uid "D7CA43FE-4C66-D72C-C9B2-3CBAE3FE0EE3"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -0.57828081326916192 -26.793934099519543 -3.9146096093576519e-015 ; + setAttr ".t" -type "double3" -0.5782808132691617 -26.793934099519529 -3.9146096093576503e-015 ; setAttr ".r" -type "double3" 0 -89.999999999999986 0 ; - setAttr ".s" -type "double3" 1.7538799546502168 1.7538799546502126 1.7538799546502031 ; + setAttr ".s" -type "double3" 1.7538799546502162 1.753879954650212 1.7538799546502017 ; createNode nurbsCurve -n "neck_C0_neck_crvShape" -p "neck_C0_neck_crv"; - rename -uid "60358A8E-4A38-AFDC-8AB5-2EB3C7610EFF"; + rename -uid "B495D211-4560-B45D-B8A9-818CFC9E72E3"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "neck_C0_neck_crvShapeOrig" -p "neck_C0_neck_crv"; - rename -uid "107153BD-46D8-E4A1-6740-0CA0D4E69762"; + rename -uid "F77F6A54-4A5D-32C7-61CC-A9AE1A29EADC"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7763,7 +7792,7 @@ createNode nurbsCurve -n "neck_C0_neck_crvShapeOrig" -p "neck_C0_neck_crv"; 0 0 0 ; createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; - rename -uid "EC0BF0F8-4916-45E5-F399-05993FFEB71C"; + rename -uid "BABED455-4A07-D0A3-901E-7EB7C2272278"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7774,9 +7803,9 @@ createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "refArray" -ln "refArray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.7395848890977401 -0.016853043661003264 0.11673327753265016 ; + setAttr ".t" -type "double3" 1.7395848890977383 -0.016853043661003375 0.1167332775326502 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7785,7 +7814,7 @@ createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.000000000000002 1.0000000000000027 -0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000022 1.0000000000000029 -0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -7795,10 +7824,9 @@ createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "armUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".refArray" -type "string" "shoulder_R0_root,local_C0_root,body_C0_root,spine_C0_eff"; - setAttr ".parentJointIndex" -1; + setAttr ".refArray" -type "string" "shoulder_R0_root,local_C0_root,body_C0_root,spine_C0_eff,global_C0_root"; createNode nurbsCurve -n "shoulder_R0_rootShape" -p "shoulder_R0_root"; - rename -uid "6A451BB6-4E11-39D8-662D-7B9758DDDBF4"; + rename -uid "297CEB26-4D2F-AC1F-521C-92A307991DAD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7810,8 +7838,8 @@ createNode nurbsCurve -n "shoulder_R0_rootShape" -p "shoulder_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_R0_root10Shape" -p "shoulder_R0_root"; - rename -uid "9E3B1BC5-431C-4DD9-B25D-ADA7180644D1"; +createNode nurbsCurve -n "shoulder_R0_root4Shape" -p "shoulder_R0_root"; + rename -uid "24E326F4-40E6-E5D4-6763-968EE57984E2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7823,8 +7851,8 @@ createNode nurbsCurve -n "shoulder_R0_root10Shape" -p "shoulder_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_R0_root11Shape" -p "shoulder_R0_root"; - rename -uid "07B7183F-40EE-AA83-026D-C3B36C203D28"; +createNode nurbsCurve -n "shoulder_R0_root5Shape" -p "shoulder_R0_root"; + rename -uid "DC1779D0-4A1F-2DE0-176F-BEBF89CAC3D1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7836,8 +7864,8 @@ createNode nurbsCurve -n "shoulder_R0_root11Shape" -p "shoulder_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_R0_root12Shape" -p "shoulder_R0_root"; - rename -uid "AD6F5EF0-4704-7BC2-0B48-63B0E65DA496"; +createNode nurbsCurve -n "shoulder_R0_root6Shape" -p "shoulder_R0_root"; + rename -uid "BFBCC216-4D29-8FCE-A197-45AF668354DB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7864,10 +7892,10 @@ createNode nurbsCurve -n "shoulder_R0_root12Shape" -p "shoulder_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "shoulder_R0_tip" -p "shoulder_R0_root"; - rename -uid "E445464A-4CCC-EBE4-66BF-118975B827C4"; + rename -uid "C0337023-4C65-22F4-40E5-46920F3EF77C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.33303929285646028 -0.91350954729966849 -1.5239746815175856 ; + setAttr ".t" -type "double3" 0.33303929285645495 -0.91350954729966938 -1.5239746815175856 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7875,12 +7903,12 @@ createNode transform -n "shoulder_R0_tip" -p "shoulder_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999822 0.999999999999996 0.99999999999999867 ; + setAttr ".s" -type "double3" 0.99999999999999845 0.99999999999999589 0.99999999999999878 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "shoulder_R0_tipShape" -p "shoulder_R0_tip"; - rename -uid "93118612-4D0F-18C2-B94D-AB8D9798AFA3"; + rename -uid "0E3CF373-4FBB-BAC4-320C-2D9E0304F4CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7892,8 +7920,8 @@ createNode nurbsCurve -n "shoulder_R0_tipShape" -p "shoulder_R0_tip"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_R0_tip10Shape" -p "shoulder_R0_tip"; - rename -uid "86EE52CE-43E6-2CDD-F7CD-818360F3AD1A"; +createNode nurbsCurve -n "shoulder_R0_tip4Shape" -p "shoulder_R0_tip"; + rename -uid "08F44BA0-468F-65A2-C4FA-339E265ADB9D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7905,8 +7933,8 @@ createNode nurbsCurve -n "shoulder_R0_tip10Shape" -p "shoulder_R0_tip"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_R0_tip11Shape" -p "shoulder_R0_tip"; - rename -uid "01358800-4AC8-F72C-BCA1-9F8D79994ACA"; +createNode nurbsCurve -n "shoulder_R0_tip5Shape" -p "shoulder_R0_tip"; + rename -uid "F14BB49D-4875-A8BF-0022-B59B8CAF15C5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7918,8 +7946,8 @@ createNode nurbsCurve -n "shoulder_R0_tip11Shape" -p "shoulder_R0_tip"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_R0_tip12Shape" -p "shoulder_R0_tip"; - rename -uid "FA36E237-4691-B7B4-BDF8-A59BF2BAC3AC"; +createNode nurbsCurve -n "shoulder_R0_tip6Shape" -p "shoulder_R0_tip"; + rename -uid "47796A86-4153-15F5-9736-DA866FB99F9F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7936,8 +7964,8 @@ createNode nurbsCurve -n "shoulder_R0_tip12Shape" -p "shoulder_R0_tip"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_R0_tip12_0crvShape" -p "shoulder_R0_tip"; - rename -uid "3087D336-467A-EAB3-83F4-A68AB963F132"; +createNode nurbsCurve -n "shoulder_R0_tip6_0crvShape" -p "shoulder_R0_tip"; + rename -uid "C599754E-448E-FEB8-8549-938B6315F7C9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7954,8 +7982,8 @@ createNode nurbsCurve -n "shoulder_R0_tip12_0crvShape" -p "shoulder_R0_tip"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_R0_tip12_1crvShape" -p "shoulder_R0_tip"; - rename -uid "640844C8-4011-A307-BB2D-73BCD48E5FB0"; +createNode nurbsCurve -n "shoulder_R0_tip6_1crvShape" -p "shoulder_R0_tip"; + rename -uid "D590A9EE-40E5-A504-A1CC-09BE5E2624B5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7973,7 +8001,7 @@ createNode nurbsCurve -n "shoulder_R0_tip12_1crvShape" -p "shoulder_R0_tip"; 0 0 -0.1875 ; createNode transform -n "arm_R0_root" -p "shoulder_R0_tip"; - rename -uid "5A511CB6-4CED-052C-24D2-8CB941372467"; + rename -uid "8A7FF4CF-420E-31D4-C79F-17A9CAE1779E"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7986,49 +8014,43 @@ createNode transform -n "arm_R0_root" -p "shoulder_R0_tip"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; addAttr -ci true -sn "pinrefarray" -ln "pinrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "ikTR" -ln "ikTR" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "ikTR" -ln "ikTR" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "mirrorIK" -ln "mirrorIK" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 5.3290705182007514e-015 -8.8817841970012523e-016 -1.3322676295501878e-015 ; + setAttr ".t" -type "double3" 1.4210854715202004e-014 4.4408920985006262e-016 -1.5543122344752192e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" -95.878962023386919 44.411212983179865 -5.4710434405384927 ; + setAttr ".r" -type "double3" -95.878962023386919 44.41121298317988 -5.4710434405384891 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 0.99999999999999867 1.0000000000000007 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999833 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "arm_2jnt_01"; setAttr ".comp_name" -type "string" "arm"; setAttr ".comp_side" -type "string" "R"; - setAttr ".connector" -type "string" "standard"; + setAttr ".connector" -type "string" "shoulder_01"; setAttr ".ui_host" -type "string" "armUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".ikrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".pinrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root"; - setAttr ".maxstretch" 1.5; - setAttr ".ikTR" yes; - setAttr ".mirrorMid" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; + setAttr ".ikrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; + setAttr ".pinrefarray" -type "string" "shoulder_R0_tip,local_C0_root,body_C0_root,spine_C0_eff,spine_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "arm_R0_rootShape" -p "arm_R0_root"; - rename -uid "91CF4B93-4CAD-A175-1AC6-158A7C6FB333"; + rename -uid "C1DC4267-4B97-5D9B-A199-F391020E6739"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8040,8 +8062,8 @@ createNode nurbsCurve -n "arm_R0_rootShape" -p "arm_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_R0_root10Shape" -p "arm_R0_root"; - rename -uid "6EF6ECE3-4343-5AEF-4F0B-258A403BAF28"; +createNode nurbsCurve -n "arm_R0_root4Shape" -p "arm_R0_root"; + rename -uid "32DD88BD-4218-9D14-212B-C38CB5CEEC65"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8053,8 +8075,8 @@ createNode nurbsCurve -n "arm_R0_root10Shape" -p "arm_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_R0_root11Shape" -p "arm_R0_root"; - rename -uid "725A8F93-45ED-4D18-D2FB-15BD8D4B0933"; +createNode nurbsCurve -n "arm_R0_root5Shape" -p "arm_R0_root"; + rename -uid "B333549D-44EA-B1E2-B9D1-B7A43266A27A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8066,8 +8088,8 @@ createNode nurbsCurve -n "arm_R0_root11Shape" -p "arm_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_R0_root12Shape" -p "arm_R0_root"; - rename -uid "CFACADBF-46CA-B9EE-12AE-26895B0D5F48"; +createNode nurbsCurve -n "arm_R0_root6Shape" -p "arm_R0_root"; + rename -uid "5C44A207-4322-B817-1084-71B0BAA6C4FF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8094,24 +8116,24 @@ createNode nurbsCurve -n "arm_R0_root12Shape" -p "arm_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "arm_R0_elbow" -p "arm_R0_root"; - rename -uid "904F7568-4C76-7697-9659-F898BF28EC46"; + rename -uid "D777A6BB-470F-52A9-0262-6883D7F5800D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.8283335982323363 -3.5527136788005009e-015 0.078976790252910822 ; + setAttr ".t" -type "double3" 2.8283335982323248 7.1054273576010019e-015 0.078976790252910378 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 -10.688700162784276 0 ; + setAttr ".r" -type "double3" 0 -10.688700162784281 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999911 0.99999999999999956 ; + setAttr ".s" -type "double3" 0.99999999999999822 0.99999999999999845 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_R0_elbowShape" -p "arm_R0_elbow"; - rename -uid "28C17219-409B-FF1A-A427-5E98B2D26B06"; + rename -uid "E46DEF72-49E9-0378-9235-CDAEE1888E8C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8123,8 +8145,8 @@ createNode nurbsCurve -n "arm_R0_elbowShape" -p "arm_R0_elbow"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_R0_elbow10Shape" -p "arm_R0_elbow"; - rename -uid "B437C1F3-4EBB-02D9-71C6-BC8EC3592E4B"; +createNode nurbsCurve -n "arm_R0_elbow4Shape" -p "arm_R0_elbow"; + rename -uid "5F38415C-489A-ED25-6F57-9289AF0A7771"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8136,8 +8158,8 @@ createNode nurbsCurve -n "arm_R0_elbow10Shape" -p "arm_R0_elbow"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_R0_elbow11Shape" -p "arm_R0_elbow"; - rename -uid "472CD6F2-42AE-B21A-CBE9-3F8BB372A869"; +createNode nurbsCurve -n "arm_R0_elbow5Shape" -p "arm_R0_elbow"; + rename -uid "A333E810-4659-876C-BA72-39B24511FABD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8149,8 +8171,8 @@ createNode nurbsCurve -n "arm_R0_elbow11Shape" -p "arm_R0_elbow"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_R0_elbow12Shape" -p "arm_R0_elbow"; - rename -uid "5057770C-4200-B5EF-8FC8-19A784FDC971"; +createNode nurbsCurve -n "arm_R0_elbow6Shape" -p "arm_R0_elbow"; + rename -uid "7F09BF4C-41C1-476B-2DF2-B3ACAF382539"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8167,8 +8189,8 @@ createNode nurbsCurve -n "arm_R0_elbow12Shape" -p "arm_R0_elbow"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_elbow12_0crvShape" -p "arm_R0_elbow"; - rename -uid "1598BD80-44F8-2F19-EB47-C58119C701B0"; +createNode nurbsCurve -n "arm_R0_elbow6_0crvShape" -p "arm_R0_elbow"; + rename -uid "684C9420-44BE-922E-A303-23B9830E8841"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8185,8 +8207,8 @@ createNode nurbsCurve -n "arm_R0_elbow12_0crvShape" -p "arm_R0_elbow"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_elbow12_1crvShape" -p "arm_R0_elbow"; - rename -uid "E28248F5-4562-1BD5-63B9-87A22DC88556"; +createNode nurbsCurve -n "arm_R0_elbow6_1crvShape" -p "arm_R0_elbow"; + rename -uid "4FB6AFBA-4133-F7E3-EB53-279922B84F26"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8204,10 +8226,10 @@ createNode nurbsCurve -n "arm_R0_elbow12_1crvShape" -p "arm_R0_elbow"; 0 0 -0.1875 ; createNode transform -n "arm_R0_wrist" -p "arm_R0_elbow"; - rename -uid "83E9D882-4164-F7F9-6683-E18695EB5C33"; + rename -uid "93E37CDC-4ED0-E734-955D-C4B26FAC9116"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.9351547891496894 0 -0.11960611218230408 ; + setAttr ".t" -type "double3" 2.9351547891497014 -1.7763568394002505e-015 -0.11960611218230607 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8215,12 +8237,12 @@ createNode transform -n "arm_R0_wrist" -p "arm_R0_elbow"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000024 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000011 1.0000000000000022 1.0000000000000016 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_R0_wristShape" -p "arm_R0_wrist"; - rename -uid "71172AB2-41E6-F71C-2158-F09D65C9F55E"; + rename -uid "841D9686-4FED-C071-4FAD-68952224A795"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8232,8 +8254,8 @@ createNode nurbsCurve -n "arm_R0_wristShape" -p "arm_R0_wrist"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_R0_wrist10Shape" -p "arm_R0_wrist"; - rename -uid "27B40DB0-46F0-5024-F3E7-3EA0CC79E5B3"; +createNode nurbsCurve -n "arm_R0_wrist4Shape" -p "arm_R0_wrist"; + rename -uid "F8778ECC-4792-4B69-8214-44A35445543B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8245,8 +8267,8 @@ createNode nurbsCurve -n "arm_R0_wrist10Shape" -p "arm_R0_wrist"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_R0_wrist11Shape" -p "arm_R0_wrist"; - rename -uid "DA7B5411-4215-AA4A-11C2-488F46D4FB52"; +createNode nurbsCurve -n "arm_R0_wrist5Shape" -p "arm_R0_wrist"; + rename -uid "64A23620-4CFC-5F72-AD9C-068BD2999CC0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8258,8 +8280,8 @@ createNode nurbsCurve -n "arm_R0_wrist11Shape" -p "arm_R0_wrist"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_R0_wrist12Shape" -p "arm_R0_wrist"; - rename -uid "F0DAB3C9-4E17-6EEC-586E-B791423C062B"; +createNode nurbsCurve -n "arm_R0_wrist6Shape" -p "arm_R0_wrist"; + rename -uid "175483C2-4137-818B-B4F4-E7B6F3E971AE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8276,8 +8298,8 @@ createNode nurbsCurve -n "arm_R0_wrist12Shape" -p "arm_R0_wrist"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_wrist12_0crvShape" -p "arm_R0_wrist"; - rename -uid "35388687-4634-1D14-3080-A89B8594CD36"; +createNode nurbsCurve -n "arm_R0_wrist6_0crvShape" -p "arm_R0_wrist"; + rename -uid "826AB5AD-4570-D290-2FAE-B48711F1CB47"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8294,8 +8316,8 @@ createNode nurbsCurve -n "arm_R0_wrist12_0crvShape" -p "arm_R0_wrist"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_wrist12_1crvShape" -p "arm_R0_wrist"; - rename -uid "F7F31B8E-4E17-AA12-7B9C-1AA02B8F43EA"; +createNode nurbsCurve -n "arm_R0_wrist6_1crvShape" -p "arm_R0_wrist"; + rename -uid "4BAA9601-4D79-8C3A-57EC-7FB1F43E578E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8313,10 +8335,10 @@ createNode nurbsCurve -n "arm_R0_wrist12_1crvShape" -p "arm_R0_wrist"; 0 0 -0.1875 ; createNode transform -n "arm_R0_eff" -p "arm_R0_wrist"; - rename -uid "2048A907-4CE1-BAA8-EEAE-42874C6C8610"; + rename -uid "DE7DEE0C-4EAC-A3D4-C630-AC850E9A3F3B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3207237066308193 1.7763568394002505e-014 8.3266726846886741e-016 ; + setAttr ".t" -type "double3" 1.3207237066308193 1.7763568394002505e-015 4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8324,12 +8346,12 @@ createNode transform -n "arm_R0_eff" -p "arm_R0_wrist"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999978 0.99999999999999944 ; + setAttr ".s" -type "double3" 1.0000000000000009 1 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "arm_R0_effShape" -p "arm_R0_eff"; - rename -uid "EF4B7C23-48DB-A026-7EF6-E2A11A84D990"; + rename -uid "6C1E0597-4DBF-D56F-07BE-4294790434FB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8341,8 +8363,8 @@ createNode nurbsCurve -n "arm_R0_effShape" -p "arm_R0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "arm_R0_eff10Shape" -p "arm_R0_eff"; - rename -uid "D5700F01-4719-1B4A-7171-E2BB060B2761"; +createNode nurbsCurve -n "arm_R0_eff4Shape" -p "arm_R0_eff"; + rename -uid "5CE5418F-429D-D6EC-1A6C-279305AE53A6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8354,8 +8376,8 @@ createNode nurbsCurve -n "arm_R0_eff10Shape" -p "arm_R0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "arm_R0_eff11Shape" -p "arm_R0_eff"; - rename -uid "ADB566D2-446C-109B-F5AD-95B9C74F1ACE"; +createNode nurbsCurve -n "arm_R0_eff5Shape" -p "arm_R0_eff"; + rename -uid "32F96BEE-49AC-D690-54BA-51BD3F90A8AF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8367,8 +8389,8 @@ createNode nurbsCurve -n "arm_R0_eff11Shape" -p "arm_R0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "arm_R0_eff12Shape" -p "arm_R0_eff"; - rename -uid "F2B0BFD0-4526-227B-D0EF-479883C391B5"; +createNode nurbsCurve -n "arm_R0_eff6Shape" -p "arm_R0_eff"; + rename -uid "370867A7-4117-3B53-E6E6-03BE08216392"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8385,8 +8407,8 @@ createNode nurbsCurve -n "arm_R0_eff12Shape" -p "arm_R0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_eff12_0crvShape" -p "arm_R0_eff"; - rename -uid "F1E9CDB9-4441-8965-AC22-9C8CFD04AF61"; +createNode nurbsCurve -n "arm_R0_eff6_0crvShape" -p "arm_R0_eff"; + rename -uid "1397F1B8-4C48-4CB5-1EFF-67AF9368D152"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8403,8 +8425,8 @@ createNode nurbsCurve -n "arm_R0_eff12_0crvShape" -p "arm_R0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "arm_R0_eff12_1crvShape" -p "arm_R0_eff"; - rename -uid "F6D77D9A-4321-CEED-B2F4-83A5AE2A3C7D"; +createNode nurbsCurve -n "arm_R0_eff6_1crvShape" -p "arm_R0_eff"; + rename -uid "DA291FBB-408F-1C8B-948E-F7B2FDF83C42"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8422,7 +8444,7 @@ createNode nurbsCurve -n "arm_R0_eff12_1crvShape" -p "arm_R0_eff"; 0 0 -0.1875 ; createNode transform -n "armUI_R0_root" -p "arm_R0_eff"; - rename -uid "54D5B0D3-4595-D06B-C3FF-49A5AB2E5F39"; + rename -uid "58E53DD5-47FA-6B88-8066-979B7D0F5809"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -8446,12 +8468,14 @@ createNode transform -n "armUI_R0_root" -p "arm_R0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.2124561875008171 0.56073114764518017 -0.29276117198398854 ; + setAttr ".t" -type "double3" -1.2124561875008064 0.5607311476451784 -0.29276117198398954 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8459,7 +8483,7 @@ createNode transform -n "armUI_R0_root" -p "arm_R0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000002 1.0000000000000011 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 1.0000000000000011 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -8471,11 +8495,8 @@ createNode transform -n "armUI_R0_root" -p "arm_R0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "armUI_R0_rootShape" -p "armUI_R0_root"; - rename -uid "69D27EE2-4A84-2DEA-CEA4-3886153266FC"; + rename -uid "059A3C31-4893-DD92-5E9F-E79B35E4C528"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8487,8 +8508,8 @@ createNode nurbsCurve -n "armUI_R0_rootShape" -p "armUI_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "armUI_R0_root10Shape" -p "armUI_R0_root"; - rename -uid "4F79214D-41CE-466A-853F-D0AFEBC31AE9"; +createNode nurbsCurve -n "armUI_R0_root4Shape" -p "armUI_R0_root"; + rename -uid "F5F1E962-4E6C-5B50-F50C-64A2C5AED75A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8500,8 +8521,8 @@ createNode nurbsCurve -n "armUI_R0_root10Shape" -p "armUI_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "armUI_R0_root11Shape" -p "armUI_R0_root"; - rename -uid "BE95065F-4761-0952-66D9-679577A4097D"; +createNode nurbsCurve -n "armUI_R0_root5Shape" -p "armUI_R0_root"; + rename -uid "07319F72-45D5-7F99-D787-DD81E459CBB4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8513,8 +8534,8 @@ createNode nurbsCurve -n "armUI_R0_root11Shape" -p "armUI_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "armUI_R0_root12Shape" -p "armUI_R0_root"; - rename -uid "91C159D7-47F6-375D-3AB8-DE8E3FDB310A"; +createNode nurbsCurve -n "armUI_R0_root6Shape" -p "armUI_R0_root"; + rename -uid "A77E2C43-4BC8-931D-3FE9-2D9CAA1C6CC3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8541,24 +8562,24 @@ createNode nurbsCurve -n "armUI_R0_root12Shape" -p "armUI_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "armUI_R0_sizeRef" -p "armUI_R0_root"; - rename -uid "76E00CEA-4189-6F0F-9E6A-07A8CA089422"; + rename -uid "5CB715CB-4723-090B-663C-B7AE6EF40CC4"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.11347623085809433 -0.027001577630491269 1.0430060296210661 ; + setAttr ".t" -type "double3" 0.11347623085809122 -0.027001577630489493 1.0430060296210659 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 174.54691598541183 -3.3190804973696055 -134.6206758497523 ; + setAttr ".r" -type "double3" 5.4530840145881605 3.3190804973696189 45.37932415024774 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0495082267377429 1.049508226737738 -1.0495082267377398 ; + setAttr ".s" -type "double3" 1.0495082267377429 1.0495082267377378 1.0495082267377394 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "meta_R0_root" -p "arm_R0_eff"; - rename -uid "75512256-461E-C923-F331-76909B40C1BF"; + rename -uid "4BC9E70A-4AE6-D495-47F9-0EB1823774D0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -8567,22 +8588,22 @@ createNode transform -n "meta_R0_root" -p "arm_R0_eff"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "intScale" -ln "intScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "intRotation" -ln "intRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "intTranslation" -ln "intTranslation" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intScale" -ln "intScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intRotation" -ln "intRotation" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "intTranslation" -ln "intTranslation" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.0556240028445742 -0.075350553640975093 0.3529622528885028 ; + setAttr ".t" -type "double3" -1.055624002844568 -0.075350553640975093 0.3529622528885023 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 86.350349008867184 93.717381466937269 86.467960127478548 ; + setAttr ".r" -type "double3" 86.350349008866772 93.71738146693724 86.467960127478321 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.30838721081716908 0.30838721081716913 0.30838721081716913 ; + setAttr ".s" -type "double3" 0.30838721081716924 0.30838721081716941 0.30838721081716963 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -8592,12 +8613,8 @@ createNode transform -n "meta_R0_root" -p "arm_R0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".intScale" yes; - setAttr ".intRotation" yes; - setAttr ".intTranslation" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "meta_R0_rootShape" -p "meta_R0_root"; - rename -uid "31867632-444C-ED87-3A38-EAB46A67ACD6"; + rename -uid "3970A0AB-4BE4-4684-7A8E-668B4C05EB0A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8609,8 +8626,8 @@ createNode nurbsCurve -n "meta_R0_rootShape" -p "meta_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_R0_root10Shape" -p "meta_R0_root"; - rename -uid "B5678D21-4FB4-05E3-9DE2-D0833C22508E"; +createNode nurbsCurve -n "meta_R0_root4Shape" -p "meta_R0_root"; + rename -uid "8BC6228B-4F94-1BD7-9C5A-E1B5974C0447"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8622,8 +8639,8 @@ createNode nurbsCurve -n "meta_R0_root10Shape" -p "meta_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_R0_root11Shape" -p "meta_R0_root"; - rename -uid "A913896D-4195-946D-58DC-EA9682419007"; +createNode nurbsCurve -n "meta_R0_root5Shape" -p "meta_R0_root"; + rename -uid "B3BD0860-450F-D1AA-F868-66A03BE7BEA7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8635,8 +8652,8 @@ createNode nurbsCurve -n "meta_R0_root11Shape" -p "meta_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_R0_root12Shape" -p "meta_R0_root"; - rename -uid "BDFCBA38-4319-C9D8-E322-D1B1BC39D13C"; +createNode nurbsCurve -n "meta_R0_root6Shape" -p "meta_R0_root"; + rename -uid "0495BDB8-45ED-7258-5A76-7C814B2F7D3B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8663,10 +8680,10 @@ createNode nurbsCurve -n "meta_R0_root12Shape" -p "meta_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "meta_R0_0_loc" -p "meta_R0_root"; - rename -uid "A357D75A-429A-935C-588B-F780017230E7"; + rename -uid "CBE6345D-4209-F451-998A-8AB173108E4F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353617562 -2.1316282072803006e-014 -3.5527136788005009e-015 ; + setAttr ".t" -type "double3" 0.66320847353617252 2.1316282072803006e-014 -3.0198066269804258e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8674,12 +8691,12 @@ createNode transform -n "meta_R0_0_loc" -p "meta_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999967 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999956 0.99999999999999833 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_R0_0_locShape" -p "meta_R0_0_loc"; - rename -uid "6F019EEE-41F6-E0C0-53A3-41B8085EF946"; + rename -uid "4A0ADDC7-4D3C-28D7-23F1-5283E36FC02C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8691,8 +8708,8 @@ createNode nurbsCurve -n "meta_R0_0_locShape" -p "meta_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_R0_0_loc10Shape" -p "meta_R0_0_loc"; - rename -uid "15E374F8-4761-F1FA-98BE-BFB5C004DBA4"; +createNode nurbsCurve -n "meta_R0_0_loc4Shape" -p "meta_R0_0_loc"; + rename -uid "B81D9EF3-4E06-F5DD-3E9A-118C30C2546C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8704,8 +8721,8 @@ createNode nurbsCurve -n "meta_R0_0_loc10Shape" -p "meta_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_R0_0_loc11Shape" -p "meta_R0_0_loc"; - rename -uid "993C4757-4CCA-2250-68A7-75BC68EAE145"; +createNode nurbsCurve -n "meta_R0_0_loc5Shape" -p "meta_R0_0_loc"; + rename -uid "1E243561-41B5-4843-C341-15A4EFBACD1C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8717,8 +8734,8 @@ createNode nurbsCurve -n "meta_R0_0_loc11Shape" -p "meta_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_R0_0_loc12Shape" -p "meta_R0_0_loc"; - rename -uid "A724338A-453A-8D89-F0CC-F7A447B6ACD1"; +createNode nurbsCurve -n "meta_R0_0_loc6Shape" -p "meta_R0_0_loc"; + rename -uid "D4F0A3E1-4032-F4C0-2AC8-95AD8F713C98"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8735,8 +8752,8 @@ createNode nurbsCurve -n "meta_R0_0_loc12Shape" -p "meta_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_0_loc12_0crvShape" -p "meta_R0_0_loc"; - rename -uid "63DDE021-448C-1222-5285-0A94BF8AD51F"; +createNode nurbsCurve -n "meta_R0_0_loc6_0crvShape" -p "meta_R0_0_loc"; + rename -uid "89875F7F-44B1-1EF9-6EA2-70BDCAF20B62"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8753,8 +8770,8 @@ createNode nurbsCurve -n "meta_R0_0_loc12_0crvShape" -p "meta_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_0_loc12_1crvShape" -p "meta_R0_0_loc"; - rename -uid "D42F27ED-4D47-096F-C102-5ABDBD3BC3DB"; +createNode nurbsCurve -n "meta_R0_0_loc6_1crvShape" -p "meta_R0_0_loc"; + rename -uid "80F4B257-441C-9DE4-C8D9-BDB21446BD1A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8772,10 +8789,10 @@ createNode nurbsCurve -n "meta_R0_0_loc12_1crvShape" -p "meta_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "meta_R0_1_loc" -p "meta_R0_0_loc"; - rename -uid "E305A535-4EE6-2518-FA6B-878945ED086F"; + rename -uid "6C16C35A-496C-AB06-0F1D-F58000B227B0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353618095 3.5527136788005009e-014 -8.8817841970012523e-015 ; + setAttr ".t" -type "double3" 0.66320847353618362 -7.1054273576010019e-015 1.0658141036401503e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8783,12 +8800,12 @@ createNode transform -n "meta_R0_1_loc" -p "meta_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999967 1 1.0000000000000004 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_R0_1_locShape" -p "meta_R0_1_loc"; - rename -uid "E3FBDFCF-4E97-54E6-0ABA-FCAE7A6E2735"; + rename -uid "F65FEDD6-4D77-0E85-DB06-8683A969B46F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8800,8 +8817,8 @@ createNode nurbsCurve -n "meta_R0_1_locShape" -p "meta_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_R0_1_loc10Shape" -p "meta_R0_1_loc"; - rename -uid "A948031A-4546-329B-CC50-B789B5908F1B"; +createNode nurbsCurve -n "meta_R0_1_loc4Shape" -p "meta_R0_1_loc"; + rename -uid "96AA0D7E-464B-6DD5-7E1A-2E9020809277"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8813,8 +8830,8 @@ createNode nurbsCurve -n "meta_R0_1_loc10Shape" -p "meta_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_R0_1_loc11Shape" -p "meta_R0_1_loc"; - rename -uid "CF051AE8-4DDA-494F-02E4-1CA548DCF3A0"; +createNode nurbsCurve -n "meta_R0_1_loc5Shape" -p "meta_R0_1_loc"; + rename -uid "295F19B4-4170-F4D2-EB9D-EBA8320411C1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8826,8 +8843,8 @@ createNode nurbsCurve -n "meta_R0_1_loc11Shape" -p "meta_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_R0_1_loc12Shape" -p "meta_R0_1_loc"; - rename -uid "33851D11-4490-91CC-32DF-8D898247F0AB"; +createNode nurbsCurve -n "meta_R0_1_loc6Shape" -p "meta_R0_1_loc"; + rename -uid "E06A1752-4A55-26F6-605B-BBA4633866B3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8844,8 +8861,8 @@ createNode nurbsCurve -n "meta_R0_1_loc12Shape" -p "meta_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_1_loc12_0crvShape" -p "meta_R0_1_loc"; - rename -uid "04A0FE69-4440-6313-970E-E9A71CEA9922"; +createNode nurbsCurve -n "meta_R0_1_loc6_0crvShape" -p "meta_R0_1_loc"; + rename -uid "C2AED62B-4EB3-0022-5C35-70B8FD90D385"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8862,8 +8879,8 @@ createNode nurbsCurve -n "meta_R0_1_loc12_0crvShape" -p "meta_R0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_1_loc12_1crvShape" -p "meta_R0_1_loc"; - rename -uid "348DA87E-467D-96F4-1773-7CA64D510493"; +createNode nurbsCurve -n "meta_R0_1_loc6_1crvShape" -p "meta_R0_1_loc"; + rename -uid "0361B981-49A4-4929-0CC7-A98531B5D75C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8881,10 +8898,10 @@ createNode nurbsCurve -n "meta_R0_1_loc12_1crvShape" -p "meta_R0_1_loc"; 0 0 -0.1875 ; createNode transform -n "meta_R0_2_loc" -p "meta_R0_1_loc"; - rename -uid "3CC8B824-4B55-E3A2-C728-7D889941637A"; + rename -uid "88299E7F-4E94-45AC-8B2E-C48137698367"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.66320847353618673 -7.1054273576010019e-015 -1.4210854715202004e-014 ; + setAttr ".t" -type "double3" 0.66320847353618229 1.4210854715202004e-014 -3.0198066269804258e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8892,12 +8909,12 @@ createNode transform -n "meta_R0_2_loc" -p "meta_R0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000004 0.99999999999999911 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.999999999999999 0.99999999999999867 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "meta_R0_2_locShape" -p "meta_R0_2_loc"; - rename -uid "BE94C958-4E97-E39B-A5E4-918C673D7F9A"; + rename -uid "2868A4AB-4A66-AF06-DCAE-2CBC80FAE59D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8909,8 +8926,8 @@ createNode nurbsCurve -n "meta_R0_2_locShape" -p "meta_R0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "meta_R0_2_loc10Shape" -p "meta_R0_2_loc"; - rename -uid "0957809A-451A-0CAE-C8DA-95982E6BDE68"; +createNode nurbsCurve -n "meta_R0_2_loc4Shape" -p "meta_R0_2_loc"; + rename -uid "03FEA0B9-4009-0B27-E287-B8A8F1E65EA8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8922,8 +8939,8 @@ createNode nurbsCurve -n "meta_R0_2_loc10Shape" -p "meta_R0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "meta_R0_2_loc11Shape" -p "meta_R0_2_loc"; - rename -uid "B1C5ADEE-477A-B564-9F23-628BA01A9C56"; +createNode nurbsCurve -n "meta_R0_2_loc5Shape" -p "meta_R0_2_loc"; + rename -uid "5CFBFADA-4D62-D3F3-A2BD-98B89742A12C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8935,8 +8952,8 @@ createNode nurbsCurve -n "meta_R0_2_loc11Shape" -p "meta_R0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "meta_R0_2_loc12Shape" -p "meta_R0_2_loc"; - rename -uid "C6088053-4BF5-5183-159F-28BCF3427976"; +createNode nurbsCurve -n "meta_R0_2_loc6Shape" -p "meta_R0_2_loc"; + rename -uid "F46B5AE1-41BC-3E66-4FF2-D59BE51FCC27"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8953,8 +8970,8 @@ createNode nurbsCurve -n "meta_R0_2_loc12Shape" -p "meta_R0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_2_loc12_0crvShape" -p "meta_R0_2_loc"; - rename -uid "025956CC-4A29-5A97-FCAD-B5B7F133DD9C"; +createNode nurbsCurve -n "meta_R0_2_loc6_0crvShape" -p "meta_R0_2_loc"; + rename -uid "AA9FFBB5-4FC9-CA42-501B-1FA777577FD5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8971,8 +8988,8 @@ createNode nurbsCurve -n "meta_R0_2_loc12_0crvShape" -p "meta_R0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "meta_R0_2_loc12_1crvShape" -p "meta_R0_2_loc"; - rename -uid "843CB1D5-4F1A-88B3-79AE-5491C776A354"; +createNode nurbsCurve -n "meta_R0_2_loc6_1crvShape" -p "meta_R0_2_loc"; + rename -uid "D5C815CB-4917-B408-73FC-E0B23B91784E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8990,48 +9007,44 @@ createNode nurbsCurve -n "meta_R0_2_loc12_1crvShape" -p "meta_R0_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R3_root" -p "meta_R0_2_loc"; - rename -uid "CDB913A2-474F-EB8D-5F8D-27BFD8025ED1"; + rename -uid "0F9DB48B-4A2D-05E4-EC2F-36986D495EFA"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 3 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.27518484001103305 -0.17360051577779956 2.4946799341790555 ; + setAttr ".t" -type "double3" 0.2751848400110346 -0.17360051577778535 2.4946799341790573 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 5.4173319878585096 -68.587073855452374 -5.8163374181194527 ; + setAttr ".r" -type "double3" 5.4173319878599075 -68.587073855452473 -5.8163374181201082 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.292966824566181 1.292966824566179 1.2929668245661803 ; + setAttr ".s" -type "double3" 1.2929668245661803 1.2929668245661792 1.292966824566181 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "R"; - setAttr ".comp_index" 3; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_R3_rootShape" -p "finger_R3_root"; - rename -uid "E0ED0A5C-441B-E53D-EBA4-538DFBFDB854"; + rename -uid "0B67E883-4E1B-22DC-A0C6-8CBFC2CBE083"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9043,8 +9056,8 @@ createNode nurbsCurve -n "finger_R3_rootShape" -p "finger_R3_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R3_root10Shape" -p "finger_R3_root"; - rename -uid "38AA28E4-42AC-584A-A501-FA8F53DADFF8"; +createNode nurbsCurve -n "finger_R3_root4Shape" -p "finger_R3_root"; + rename -uid "49579A6C-4531-8138-FA8D-39B7F0357982"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9056,8 +9069,8 @@ createNode nurbsCurve -n "finger_R3_root10Shape" -p "finger_R3_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R3_root11Shape" -p "finger_R3_root"; - rename -uid "87DDD11A-4560-B232-2DFD-0B8495D9B0DE"; +createNode nurbsCurve -n "finger_R3_root5Shape" -p "finger_R3_root"; + rename -uid "9611491D-4A3B-C66F-DCE9-7CB4EB0CAC11"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9069,8 +9082,8 @@ createNode nurbsCurve -n "finger_R3_root11Shape" -p "finger_R3_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R3_root12Shape" -p "finger_R3_root"; - rename -uid "B2B41A9F-46F1-351C-E252-C481B175337C"; +createNode nurbsCurve -n "finger_R3_root6Shape" -p "finger_R3_root"; + rename -uid "8E875A67-4FA8-E734-CFB2-14A5BCBC1C37"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9097,10 +9110,10 @@ createNode nurbsCurve -n "finger_R3_root12Shape" -p "finger_R3_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_R3_0_loc" -p "finger_R3_root"; - rename -uid "267D16BF-43B8-2E61-5D15-C7A73E4FBEC1"; + rename -uid "ADD7E061-4F81-9FD5-042C-3EB45606A74D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.84766209830561579 2.8421709430404007e-014 -5.1070259132757201e-015 ; + setAttr ".t" -type "double3" 0.84766209830561312 2.8421709430404007e-014 -3.5527136788005009e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9108,12 +9121,12 @@ createNode transform -n "finger_R3_0_loc" -p "finger_R3_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999956 1.0000000000000011 ; + setAttr ".s" -type "double3" 1 1.0000000000000002 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R3_0_locShape" -p "finger_R3_0_loc"; - rename -uid "CA204D0E-4433-700F-0B42-52A702811C36"; + rename -uid "4F6393F1-4760-6609-F8CC-42BAC6818FA5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9125,8 +9138,8 @@ createNode nurbsCurve -n "finger_R3_0_locShape" -p "finger_R3_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R3_0_loc10Shape" -p "finger_R3_0_loc"; - rename -uid "266A8D3E-4201-859A-AA59-539E2A0681A2"; +createNode nurbsCurve -n "finger_R3_0_loc4Shape" -p "finger_R3_0_loc"; + rename -uid "6D926D25-442C-958C-A943-CC88F86A5109"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9138,8 +9151,8 @@ createNode nurbsCurve -n "finger_R3_0_loc10Shape" -p "finger_R3_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R3_0_loc11Shape" -p "finger_R3_0_loc"; - rename -uid "FB9B8944-4C30-E553-BEDF-FFA10B48270A"; +createNode nurbsCurve -n "finger_R3_0_loc5Shape" -p "finger_R3_0_loc"; + rename -uid "7064B1FB-4981-C27C-E283-489BB35BC403"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9151,8 +9164,8 @@ createNode nurbsCurve -n "finger_R3_0_loc11Shape" -p "finger_R3_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R3_0_loc12Shape" -p "finger_R3_0_loc"; - rename -uid "D8130D16-4541-B07E-B278-F1B17BE846A8"; +createNode nurbsCurve -n "finger_R3_0_loc6Shape" -p "finger_R3_0_loc"; + rename -uid "87AFC775-4099-D7F9-8BFF-86B34F45D69A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9169,8 +9182,8 @@ createNode nurbsCurve -n "finger_R3_0_loc12Shape" -p "finger_R3_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_0_loc12_0crvShape" -p "finger_R3_0_loc"; - rename -uid "072DCF7F-4AF2-F2ED-C63C-1BB6CF98A1E0"; +createNode nurbsCurve -n "finger_R3_0_loc6_0crvShape" -p "finger_R3_0_loc"; + rename -uid "A1C03AAC-4399-B438-331A-F9A3B60F0715"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9187,8 +9200,8 @@ createNode nurbsCurve -n "finger_R3_0_loc12_0crvShape" -p "finger_R3_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_0_loc12_1crvShape" -p "finger_R3_0_loc"; - rename -uid "9A0465AA-492E-0E7E-2EE0-C68C4D40A0CB"; +createNode nurbsCurve -n "finger_R3_0_loc6_1crvShape" -p "finger_R3_0_loc"; + rename -uid "35106F48-4AA3-B395-B342-8DA7E8EF2CC9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9206,10 +9219,10 @@ createNode nurbsCurve -n "finger_R3_0_loc12_1crvShape" -p "finger_R3_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R3_1_loc" -p "finger_R3_0_loc"; - rename -uid "13C32413-4F38-9365-58A0-44B266CB4B53"; + rename -uid "8A448344-457A-503A-BD92-C1BB8D4083C8"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.57524361070875241 3.5527136788005009e-015 4.4408920985006262e-015 ; + setAttr ".t" -type "double3" 0.57524361070876928 -2.1316282072803006e-014 -2.2204460492503131e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9217,12 +9230,12 @@ createNode transform -n "finger_R3_1_loc" -p "finger_R3_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999956 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999944 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R3_1_locShape" -p "finger_R3_1_loc"; - rename -uid "6572AA92-47D6-2661-D4B1-969835F09922"; + rename -uid "81916267-44E7-D8F5-B925-FBB316FCAE95"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9234,8 +9247,8 @@ createNode nurbsCurve -n "finger_R3_1_locShape" -p "finger_R3_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R3_1_loc10Shape" -p "finger_R3_1_loc"; - rename -uid "5958DE14-48B7-E176-1499-EABDC5278404"; +createNode nurbsCurve -n "finger_R3_1_loc4Shape" -p "finger_R3_1_loc"; + rename -uid "5D2DC5C7-4C2E-3B64-EB28-C583133324F1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9247,8 +9260,8 @@ createNode nurbsCurve -n "finger_R3_1_loc10Shape" -p "finger_R3_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R3_1_loc11Shape" -p "finger_R3_1_loc"; - rename -uid "BFC58D99-4842-0083-C2F8-0C8E618B6CA3"; +createNode nurbsCurve -n "finger_R3_1_loc5Shape" -p "finger_R3_1_loc"; + rename -uid "F054A5B3-41CC-F313-2748-209D5CAF4709"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9260,8 +9273,8 @@ createNode nurbsCurve -n "finger_R3_1_loc11Shape" -p "finger_R3_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R3_1_loc12Shape" -p "finger_R3_1_loc"; - rename -uid "99027AE2-4049-AA76-39CF-478B57A3BC2F"; +createNode nurbsCurve -n "finger_R3_1_loc6Shape" -p "finger_R3_1_loc"; + rename -uid "27AB33BC-4115-D1AB-7AA3-1F8CE23A6768"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9278,8 +9291,8 @@ createNode nurbsCurve -n "finger_R3_1_loc12Shape" -p "finger_R3_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_1_loc12_0crvShape" -p "finger_R3_1_loc"; - rename -uid "01AA1D38-4FA2-67A9-6117-A78D3FA4935F"; +createNode nurbsCurve -n "finger_R3_1_loc6_0crvShape" -p "finger_R3_1_loc"; + rename -uid "CF62549A-4B1F-1A9B-B2F9-BDBFB0A111B1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9296,8 +9309,8 @@ createNode nurbsCurve -n "finger_R3_1_loc12_0crvShape" -p "finger_R3_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_1_loc12_1crvShape" -p "finger_R3_1_loc"; - rename -uid "22A03EB2-429A-4513-442C-CB997D7B1EA1"; +createNode nurbsCurve -n "finger_R3_1_loc6_1crvShape" -p "finger_R3_1_loc"; + rename -uid "5D47F2A8-4A65-0C39-92AE-2FBAA0B487CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9315,10 +9328,10 @@ createNode nurbsCurve -n "finger_R3_1_loc12_1crvShape" -p "finger_R3_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R3_2_loc" -p "finger_R3_1_loc"; - rename -uid "7C41078C-4ACE-0D1A-BDF1-A2BDE3BEF470"; + rename -uid "F940BD21-4BFA-9187-5EDC-C784685C917C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.31616177259195322 3.5527136788005009e-015 1.3322676295501878e-015 ; + setAttr ".t" -type "double3" 0.31616177259193279 3.5527136788005009e-015 1.3322676295501878e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9326,12 +9339,12 @@ createNode transform -n "finger_R3_2_loc" -p "finger_R3_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000007 1 ; + setAttr ".s" -type "double3" 0.99999999999999956 1.000000000000002 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R3_2_locShape" -p "finger_R3_2_loc"; - rename -uid "0A24C39F-4D46-6D73-B642-208CB010F531"; + rename -uid "92A01921-4DD1-7954-D53C-06BBB8E53193"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9343,8 +9356,8 @@ createNode nurbsCurve -n "finger_R3_2_locShape" -p "finger_R3_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R3_2_loc10Shape" -p "finger_R3_2_loc"; - rename -uid "D0CF8017-4D5D-CA8C-B534-F7A4C86E79F8"; +createNode nurbsCurve -n "finger_R3_2_loc4Shape" -p "finger_R3_2_loc"; + rename -uid "A423738D-47B7-38B0-3CB4-14A1000EA314"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9356,8 +9369,8 @@ createNode nurbsCurve -n "finger_R3_2_loc10Shape" -p "finger_R3_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R3_2_loc11Shape" -p "finger_R3_2_loc"; - rename -uid "3DFEA4CF-444D-1D49-1763-54A0F8D805B5"; +createNode nurbsCurve -n "finger_R3_2_loc5Shape" -p "finger_R3_2_loc"; + rename -uid "E0D81BD6-4B61-613D-E063-66A450900808"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9369,8 +9382,8 @@ createNode nurbsCurve -n "finger_R3_2_loc11Shape" -p "finger_R3_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R3_2_loc12Shape" -p "finger_R3_2_loc"; - rename -uid "18C1DA05-466A-D9DE-B6E1-A7A453211520"; +createNode nurbsCurve -n "finger_R3_2_loc6Shape" -p "finger_R3_2_loc"; + rename -uid "BDE8C67A-4D29-5318-6E7D-A6ABF0E821D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9387,8 +9400,8 @@ createNode nurbsCurve -n "finger_R3_2_loc12Shape" -p "finger_R3_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_2_loc12_0crvShape" -p "finger_R3_2_loc"; - rename -uid "F79D126D-40E3-2FA0-1730-4E9B42C43243"; +createNode nurbsCurve -n "finger_R3_2_loc6_0crvShape" -p "finger_R3_2_loc"; + rename -uid "6EB75CCF-43B5-1DBF-73F1-769860A9AB8A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9405,8 +9418,8 @@ createNode nurbsCurve -n "finger_R3_2_loc12_0crvShape" -p "finger_R3_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R3_2_loc12_1crvShape" -p "finger_R3_2_loc"; - rename -uid "9753C681-4D95-5D99-F52A-8CAC3478A974"; +createNode nurbsCurve -n "finger_R3_2_loc6_1crvShape" -p "finger_R3_2_loc"; + rename -uid "36C61695-4F98-6A09-F884-FBA35A3E20CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9424,7 +9437,7 @@ createNode nurbsCurve -n "finger_R3_2_loc12_1crvShape" -p "finger_R3_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R3_blade" -p "finger_R3_root"; - rename -uid "1EDCCFB8-4F6E-5C79-0BCB-C18181CBFB60"; + rename -uid "95CEF167-4D23-0588-82CA-DFBC5448A90A"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -9434,13 +9447,13 @@ createNode transform -n "finger_R3_blade" -p "finger_R3_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999956 1.0000000000000011 ; + setAttr ".s" -type "double3" 1 1.0000000000000002 1 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_R3_bladeShape" -p "finger_R3_blade"; - rename -uid "2D4BFB92-4195-B347-EEA4-12A29285EE95"; + rename -uid "24ED18EE-4B9B-76E5-B2DC-99969D29149E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9450,12 +9463,12 @@ createNode nurbsCurve -n "finger_R3_bladeShape" -p "finger_R3_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970855 0 0 - 0 0.2585933649132362 0 + 0.7757800947397081 0 0 + 0 0.25859336491323603 0 0 0 0 ; -createNode aimConstraint -n "finger_R3_blade_aimConstraint4" -p "finger_R3_blade"; - rename -uid "2DAC94BB-4278-6EBD-1F2C-348ABCD1AF96"; +createNode aimConstraint -n "finger_R3_blade_aimConstraint2" -p "finger_R3_blade"; + rename -uid "FCE53984-41CD-860A-8561-13985B753EA4"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_R3_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -9471,8 +9484,8 @@ createNode aimConstraint -n "finger_R3_blade_aimConstraint4" -p "finger_R3_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_R3_blade_pointConstraint4" -p "finger_R3_blade"; - rename -uid "85715AA2-4AC0-FCAA-C57D-65B933E14A10"; +createNode pointConstraint -n "finger_R3_blade_pointConstraint2" -p "finger_R3_blade"; + rename -uid "D60795D2-43E4-672A-0F07-AEACC6B9F59A"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_R3_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -9486,22 +9499,22 @@ createNode pointConstraint -n "finger_R3_blade_pointConstraint4" -p "finger_R3_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 0 -2.2204460492503131e-016 ; + setAttr ".rst" -type "double3" -1.7763568394002505e-015 0 4.4408920985006262e-016 ; setAttr -k on ".w0"; createNode transform -n "finger_R3_crv" -p "finger_R3_root"; - rename -uid "23997B5B-44EE-57E1-0CAF-5BA11380EF79"; + rename -uid "B80D7D18-4E79-644B-7A1C-FEB947E407F3"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 8.1560938646754249 -29.032786855763426 1.4804327725048669 ; - setAttr ".r" -type "double3" 7.579166539414615 165.69575562109907 49.348303523761878 ; - setAttr ".s" -type "double3" 2.6320983106786127 2.6320983106786007 -2.6320983106786078 ; + setAttr ".t" -type "double3" 8.1560938646754462 -29.03278685576344 1.4804327725052238 ; + setAttr ".r" -type "double3" 7.579166539414997 165.69575562109972 49.348303523762006 ; + setAttr ".s" -type "double3" 2.6320983106786136 2.6320983106786024 -2.6320983106786064 ; createNode nurbsCurve -n "finger_R3_crvShape" -p "finger_R3_crv"; - rename -uid "C9DF6CCD-4B1F-37C2-166C-BBA926D67CA8"; + rename -uid "2A58F4C9-445B-FDF0-EBDF-128F4CFBD242"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_R3_crvShapeOrig" -p "finger_R3_crv"; - rename -uid "5431176B-4416-52FA-D7C4-208D4CABA93F"; + rename -uid "77899D4E-464C-39AF-1634-929B3994958B"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -9514,48 +9527,44 @@ createNode nurbsCurve -n "finger_R3_crvShapeOrig" -p "finger_R3_crv"; 0 0 0 ; createNode transform -n "finger_R2_root" -p "meta_R0_1_loc"; - rename -uid "C30E45C8-4433-3F21-9627-0FBDFDDF7AEC"; + rename -uid "A6D94801-4DB5-0F92-6C8B-929E1D7A1D1C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 2 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.21404201232122322 -0.17620518664706708 2.8414845756647473 ; + setAttr ".t" -type "double3" 0.21404201232122189 -0.17620518664705287 2.8414845756647278 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 19.114415121373995 -82.086889237978767 -14.829711404954789 ; + setAttr ".r" -type "double3" 19.114415121377579 -82.086889237978667 -14.829711404956637 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661798 1.2929668245661794 1.2929668245661805 ; + setAttr ".s" -type "double3" 1.2929668245661796 1.2929668245661781 1.2929668245661798 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "R"; - setAttr ".comp_index" 2; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_R2_rootShape" -p "finger_R2_root"; - rename -uid "C3F85167-4BE0-FBF5-23D9-3BBE1729628B"; + rename -uid "5A49D250-431F-DB03-14F7-828DB6690AEC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9567,8 +9576,8 @@ createNode nurbsCurve -n "finger_R2_rootShape" -p "finger_R2_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R2_root10Shape" -p "finger_R2_root"; - rename -uid "8CEDAEE3-41A3-E474-B750-CAAE960997C9"; +createNode nurbsCurve -n "finger_R2_root4Shape" -p "finger_R2_root"; + rename -uid "B9EB42C8-4748-CA48-FF3C-68AB72FB0236"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9580,8 +9589,8 @@ createNode nurbsCurve -n "finger_R2_root10Shape" -p "finger_R2_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R2_root11Shape" -p "finger_R2_root"; - rename -uid "7626F18F-40AC-CFC9-04CF-14846C4CC99A"; +createNode nurbsCurve -n "finger_R2_root5Shape" -p "finger_R2_root"; + rename -uid "C7C85716-42DA-3EB0-7294-638BBFBEC8C5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9593,8 +9602,8 @@ createNode nurbsCurve -n "finger_R2_root11Shape" -p "finger_R2_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R2_root12Shape" -p "finger_R2_root"; - rename -uid "D994AA6B-4067-E2B5-C699-698F52C49FFB"; +createNode nurbsCurve -n "finger_R2_root6Shape" -p "finger_R2_root"; + rename -uid "62F41753-4AE4-4B7C-741A-EF82271F63B8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9621,10 +9630,10 @@ createNode nurbsCurve -n "finger_R2_root12Shape" -p "finger_R2_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_R2_0_loc" -p "finger_R2_root"; - rename -uid "53A5B975-4934-5DB2-2961-1ABDA9ADA63B"; + rename -uid "1C002435-4A78-BA21-F276-6BABFEC460B0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.94501387217406485 -1.0658141036401503e-014 0 ; + setAttr ".t" -type "double3" 0.94501387217407817 -1.4210854715202004e-014 2.886579864025407e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9632,12 +9641,12 @@ createNode transform -n "finger_R2_0_loc" -p "finger_R2_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999922 1.0000000000000002 1 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000011 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R2_0_locShape" -p "finger_R2_0_loc"; - rename -uid "8C9E084B-4D1A-2BEF-3C04-45B25BD7214D"; + rename -uid "0588D26D-4BA9-AB82-3A14-4297EEAB2151"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9649,8 +9658,8 @@ createNode nurbsCurve -n "finger_R2_0_locShape" -p "finger_R2_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R2_0_loc10Shape" -p "finger_R2_0_loc"; - rename -uid "F0AAB297-415A-7F02-D9FE-308ADED29B82"; +createNode nurbsCurve -n "finger_R2_0_loc4Shape" -p "finger_R2_0_loc"; + rename -uid "D7711F29-4446-EE10-C1C1-F7B55EBB2459"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9662,8 +9671,8 @@ createNode nurbsCurve -n "finger_R2_0_loc10Shape" -p "finger_R2_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R2_0_loc11Shape" -p "finger_R2_0_loc"; - rename -uid "8CACB09F-470A-F873-97E7-47AB8C8AD580"; +createNode nurbsCurve -n "finger_R2_0_loc5Shape" -p "finger_R2_0_loc"; + rename -uid "425B1BF5-4549-4A01-26C8-708794A7AAB7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9675,8 +9684,8 @@ createNode nurbsCurve -n "finger_R2_0_loc11Shape" -p "finger_R2_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R2_0_loc12Shape" -p "finger_R2_0_loc"; - rename -uid "A9558526-49D2-956A-67FC-4EBC55686D0B"; +createNode nurbsCurve -n "finger_R2_0_loc6Shape" -p "finger_R2_0_loc"; + rename -uid "205E131C-4ECE-0E2A-83E9-B3A597BFAE74"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9693,8 +9702,8 @@ createNode nurbsCurve -n "finger_R2_0_loc12Shape" -p "finger_R2_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_0_loc12_0crvShape" -p "finger_R2_0_loc"; - rename -uid "A264ED9D-4025-B2DD-2BF7-CE834BF725DF"; +createNode nurbsCurve -n "finger_R2_0_loc6_0crvShape" -p "finger_R2_0_loc"; + rename -uid "21E508F1-4683-0A37-F273-F49FFD9B69E8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9711,8 +9720,8 @@ createNode nurbsCurve -n "finger_R2_0_loc12_0crvShape" -p "finger_R2_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_0_loc12_1crvShape" -p "finger_R2_0_loc"; - rename -uid "C6CA4DE1-4546-A924-300D-E89F206D7F78"; +createNode nurbsCurve -n "finger_R2_0_loc6_1crvShape" -p "finger_R2_0_loc"; + rename -uid "26E28634-4B53-E790-AEDD-C6973076E8C5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9730,10 +9739,10 @@ createNode nurbsCurve -n "finger_R2_0_loc12_1crvShape" -p "finger_R2_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R2_1_loc" -p "finger_R2_0_loc"; - rename -uid "3C53AAD5-4AA7-5285-4EF2-0A81E114FCA7"; + rename -uid "11B3449A-493B-C049-03AE-01B1448EBCAC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.76775488587176355 1.7763568394002505e-014 -1.3322676295501878e-015 ; + setAttr ".t" -type "double3" 0.76775488587174223 2.1316282072803006e-014 0 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9741,12 +9750,12 @@ createNode transform -n "finger_R2_1_loc" -p "finger_R2_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999989 0.99999999999999922 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999944 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R2_1_locShape" -p "finger_R2_1_loc"; - rename -uid "D65E40DA-462E-2A58-C805-9C8137DE8008"; + rename -uid "20AA3D6A-4C58-CA77-4E7F-F9AA50648EB6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9758,8 +9767,8 @@ createNode nurbsCurve -n "finger_R2_1_locShape" -p "finger_R2_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R2_1_loc10Shape" -p "finger_R2_1_loc"; - rename -uid "DD7FFFD5-4E07-EEB8-2AAE-2BB5FBF34BC3"; +createNode nurbsCurve -n "finger_R2_1_loc4Shape" -p "finger_R2_1_loc"; + rename -uid "629AA319-4975-BC72-5B95-37905FEEA73D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9771,8 +9780,8 @@ createNode nurbsCurve -n "finger_R2_1_loc10Shape" -p "finger_R2_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R2_1_loc11Shape" -p "finger_R2_1_loc"; - rename -uid "77A781B7-4CDD-E7CE-080A-E89840723C25"; +createNode nurbsCurve -n "finger_R2_1_loc5Shape" -p "finger_R2_1_loc"; + rename -uid "CEE38772-4C8E-8CDE-A47B-9CA8661C41C2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9784,8 +9793,8 @@ createNode nurbsCurve -n "finger_R2_1_loc11Shape" -p "finger_R2_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R2_1_loc12Shape" -p "finger_R2_1_loc"; - rename -uid "797D468E-4152-E952-FA66-0AB1243411D5"; +createNode nurbsCurve -n "finger_R2_1_loc6Shape" -p "finger_R2_1_loc"; + rename -uid "A7AFA673-4139-0DEE-80EA-75BE48745529"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9802,8 +9811,8 @@ createNode nurbsCurve -n "finger_R2_1_loc12Shape" -p "finger_R2_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_1_loc12_0crvShape" -p "finger_R2_1_loc"; - rename -uid "957EE5F4-42A6-085B-CC91-B3BFD4D7E004"; +createNode nurbsCurve -n "finger_R2_1_loc6_0crvShape" -p "finger_R2_1_loc"; + rename -uid "4BC265BF-49E1-4A33-4391-3883F38B50FB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9820,8 +9829,8 @@ createNode nurbsCurve -n "finger_R2_1_loc12_0crvShape" -p "finger_R2_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_1_loc12_1crvShape" -p "finger_R2_1_loc"; - rename -uid "C5AB688E-4C0D-0C14-7E50-C289522D2FCF"; +createNode nurbsCurve -n "finger_R2_1_loc6_1crvShape" -p "finger_R2_1_loc"; + rename -uid "423B7B5D-4B44-D4F7-E4E5-89B143C04D8E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9839,10 +9848,10 @@ createNode nurbsCurve -n "finger_R2_1_loc12_1crvShape" -p "finger_R2_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R2_2_loc" -p "finger_R2_1_loc"; - rename -uid "4B08B46F-424A-254F-3050-03BC9C120D15"; + rename -uid "678AB6E8-4473-CD44-CE59-F79966C4FE31"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.67457026674914733 -2.1316282072803006e-014 2.2204460492503131e-016 ; + setAttr ".t" -type "double3" 0.67457026674915888 -2.1316282072803006e-014 -8.8817841970012523e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9850,12 +9859,12 @@ createNode transform -n "finger_R2_2_loc" -p "finger_R2_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000004 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000004 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R2_2_locShape" -p "finger_R2_2_loc"; - rename -uid "33C4B327-454C-938F-8B26-409D3D1E460A"; + rename -uid "30273841-43F7-939D-3D42-0FA9475783BE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9867,8 +9876,8 @@ createNode nurbsCurve -n "finger_R2_2_locShape" -p "finger_R2_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R2_2_loc10Shape" -p "finger_R2_2_loc"; - rename -uid "AE9CC4A4-42A1-4A13-A601-6FADFF4CD7FA"; +createNode nurbsCurve -n "finger_R2_2_loc4Shape" -p "finger_R2_2_loc"; + rename -uid "E32E99FF-4343-9EC2-E4F5-06AB356D957D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9880,8 +9889,8 @@ createNode nurbsCurve -n "finger_R2_2_loc10Shape" -p "finger_R2_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R2_2_loc11Shape" -p "finger_R2_2_loc"; - rename -uid "71995CBB-4B86-AD0F-45BB-F0960DF6C996"; +createNode nurbsCurve -n "finger_R2_2_loc5Shape" -p "finger_R2_2_loc"; + rename -uid "35B65788-484A-14DE-424F-FB8E572DDE30"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9893,8 +9902,8 @@ createNode nurbsCurve -n "finger_R2_2_loc11Shape" -p "finger_R2_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R2_2_loc12Shape" -p "finger_R2_2_loc"; - rename -uid "93267893-44A8-240D-C3D8-758E896384C8"; +createNode nurbsCurve -n "finger_R2_2_loc6Shape" -p "finger_R2_2_loc"; + rename -uid "8444E6B6-4A74-45F1-8E51-3C95C75DFD98"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9911,8 +9920,8 @@ createNode nurbsCurve -n "finger_R2_2_loc12Shape" -p "finger_R2_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_2_loc12_0crvShape" -p "finger_R2_2_loc"; - rename -uid "3992A2F0-484C-8FA5-4601-C4B2931001F0"; +createNode nurbsCurve -n "finger_R2_2_loc6_0crvShape" -p "finger_R2_2_loc"; + rename -uid "0FC6023C-4815-978E-68B1-9EB5F2626094"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9929,8 +9938,8 @@ createNode nurbsCurve -n "finger_R2_2_loc12_0crvShape" -p "finger_R2_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R2_2_loc12_1crvShape" -p "finger_R2_2_loc"; - rename -uid "A623A87E-4B8B-4345-954E-DE8BFC59FF61"; +createNode nurbsCurve -n "finger_R2_2_loc6_1crvShape" -p "finger_R2_2_loc"; + rename -uid "6BDB2CB8-4EBC-E4AD-349F-2AA27C71D6F6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9948,7 +9957,7 @@ createNode nurbsCurve -n "finger_R2_2_loc12_1crvShape" -p "finger_R2_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R2_blade" -p "finger_R2_root"; - rename -uid "B999D9E4-4162-1A33-4DE9-70AF048220CE"; + rename -uid "786BFF57-41F6-EA48-6510-8787F513DB22"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -9958,13 +9967,13 @@ createNode transform -n "finger_R2_blade" -p "finger_R2_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999922 1.0000000000000002 1 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000011 1.0000000000000007 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_R2_bladeShape" -p "finger_R2_blade"; - rename -uid "BE0F6617-48B6-4515-F561-4DAB00B55D3A"; + rename -uid "6F48DFB1-41A1-0766-9552-E7821DA06A1B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9974,12 +9983,12 @@ createNode nurbsCurve -n "finger_R2_bladeShape" -p "finger_R2_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970788 0 0 - 0 0.25859336491323598 0 + 0.77578009473970777 0 0 + 0 0.25859336491323592 0 0 0 0 ; -createNode aimConstraint -n "finger_R2_blade_aimConstraint4" -p "finger_R2_blade"; - rename -uid "4471F1DC-4C5C-5FA5-A9B2-6EB7A750DB6E"; +createNode aimConstraint -n "finger_R2_blade_aimConstraint2" -p "finger_R2_blade"; + rename -uid "F7B13D37-45F0-D37D-A4FD-5490758402FA"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_R2_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -9995,8 +10004,8 @@ createNode aimConstraint -n "finger_R2_blade_aimConstraint4" -p "finger_R2_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_R2_blade_pointConstraint4" -p "finger_R2_blade"; - rename -uid "0F7F2503-42CB-5815-D4BF-BBA5AF292EB0"; +createNode pointConstraint -n "finger_R2_blade_pointConstraint2" -p "finger_R2_blade"; + rename -uid "1E118FA7-44BB-57A0-611C-EFA56626C4CD"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_R2_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -10010,22 +10019,23 @@ createNode pointConstraint -n "finger_R2_blade_pointConstraint4" -p "finger_R2_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 1.7763568394002505e-015 0 2.2204460492503131e-016 ; + setAttr ".rst" -type "double3" 1.7763568394002505e-015 -3.5527136788005009e-015 + -2.2204460492503131e-016 ; setAttr -k on ".w0"; createNode transform -n "finger_R2_crv" -p "finger_R2_root"; - rename -uid "C99325B1-49E0-B4AA-00BB-4FBC808383A0"; + rename -uid "4DA97A72-452D-502D-9A49-B5B2E9727D57"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 8.0630938931308833 -29.023661369441566 1.4173349723079292 ; - setAttr ".r" -type "double3" 0.54140613098995294 178.40951950034901 47.737641631363836 ; - setAttr ".s" -type "double3" 2.6320983106786113 2.6320983106785998 -2.6320983106786078 ; + setAttr ".t" -type "double3" 8.0630938931309224 -29.023661369441538 1.4173349723088247 ; + setAttr ".r" -type "double3" 0.54140613099114887 178.40951950035029 47.737641631363964 ; + setAttr ".s" -type "double3" 2.6320983106786127 2.6320983106786011 -2.6320983106786069 ; createNode nurbsCurve -n "finger_R2_crvShape" -p "finger_R2_crv"; - rename -uid "E4229D5F-4A17-B407-E5C8-478D2FD4E6BD"; + rename -uid "D51751CD-40AE-1011-092C-FE8AC4AFBD41"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_R2_crvShapeOrig" -p "finger_R2_crv"; - rename -uid "76A0A61E-4C26-7B70-A557-FE8448BCBB70"; + rename -uid "74263412-428D-7895-8879-D49797B30F6E"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -10038,48 +10048,44 @@ createNode nurbsCurve -n "finger_R2_crvShapeOrig" -p "finger_R2_crv"; 0 0 0 ; createNode transform -n "finger_R1_root" -p "meta_R0_0_loc"; - rename -uid "F68C4FA8-4100-DC5B-3A26-2384F673E3D3"; + rename -uid "B970E890-4DAF-B0C8-B61F-F68058FEEEDC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; - addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -dv 1 -min 0 -at "long"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.0077643969605927232 -0.1235840669671191 2.9483952421545734 ; + setAttr ".t" -type "double3" -0.0077643969605971641 -0.12358406696714752 2.9483952421545823 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 121.340213988702 -79.97701401742313 -112.77222628638549 ; + setAttr ".r" -type "double3" 121.34021398870063 -79.977014017422931 -112.77222628638486 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.292966824566181 1.2929668245661803 1.2929668245661798 ; + setAttr ".s" -type "double3" 1.2929668245661785 1.2929668245661794 1.2929668245661787 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; setAttr ".comp_type" -type "string" "chain_01"; setAttr ".comp_name" -type "string" "finger"; setAttr ".comp_side" -type "string" "R"; - setAttr ".comp_index" 1; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_R1_rootShape" -p "finger_R1_root"; - rename -uid "485839C1-4099-A530-A47B-87831389DBC5"; + rename -uid "00F14569-40B7-2DA5-4040-A3A3342E47AA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10091,8 +10097,8 @@ createNode nurbsCurve -n "finger_R1_rootShape" -p "finger_R1_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R1_root10Shape" -p "finger_R1_root"; - rename -uid "27B4A497-4D16-DDB7-C016-B7AACCD4B563"; +createNode nurbsCurve -n "finger_R1_root4Shape" -p "finger_R1_root"; + rename -uid "56D330F2-4FB6-D1A8-8C3E-4DA5191B29A8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10104,8 +10110,8 @@ createNode nurbsCurve -n "finger_R1_root10Shape" -p "finger_R1_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R1_root11Shape" -p "finger_R1_root"; - rename -uid "1D4E9502-4834-C70E-A9AE-C69BB712C619"; +createNode nurbsCurve -n "finger_R1_root5Shape" -p "finger_R1_root"; + rename -uid "6661540C-4A8F-ACA3-05B4-728EA4E4CF1D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10117,8 +10123,8 @@ createNode nurbsCurve -n "finger_R1_root11Shape" -p "finger_R1_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R1_root12Shape" -p "finger_R1_root"; - rename -uid "6AD37E81-4F63-4531-E9AF-27BB934659FD"; +createNode nurbsCurve -n "finger_R1_root6Shape" -p "finger_R1_root"; + rename -uid "71AF5DC3-4D3D-C1C4-68C1-5F8DD4720EBA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10145,10 +10151,10 @@ createNode nurbsCurve -n "finger_R1_root12Shape" -p "finger_R1_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_R1_0_loc" -p "finger_R1_root"; - rename -uid "509E9036-4360-434B-1B0A-D88E43C1AD59"; + rename -uid "24680FE6-40EF-CA60-E067-14865E3E065C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.99999999999998579 1.7763568394002505e-014 1.1102230246251565e-015 ; + setAttr ".t" -type "double3" 0.99999999999998224 2.1316282072803006e-014 -1.9984014443252818e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10156,12 +10162,12 @@ createNode transform -n "finger_R1_0_loc" -p "finger_R1_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999889 0.999999999999999 0.99999999999999978 ; + setAttr ".s" -type "double3" 1 0.99999999999999967 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R1_0_locShape" -p "finger_R1_0_loc"; - rename -uid "3A7D7C46-4E81-6C2B-2DEC-56B64D355D6B"; + rename -uid "B95534DC-41D3-28F3-78D4-3FB9556AE112"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10173,8 +10179,8 @@ createNode nurbsCurve -n "finger_R1_0_locShape" -p "finger_R1_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R1_0_loc10Shape" -p "finger_R1_0_loc"; - rename -uid "90E2667C-4816-9FBE-DCD9-DAA44346FA74"; +createNode nurbsCurve -n "finger_R1_0_loc4Shape" -p "finger_R1_0_loc"; + rename -uid "E481359B-40AE-45E3-A89D-068C743DC689"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10186,8 +10192,8 @@ createNode nurbsCurve -n "finger_R1_0_loc10Shape" -p "finger_R1_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R1_0_loc11Shape" -p "finger_R1_0_loc"; - rename -uid "4AC19B96-4B80-5BD8-6AEB-67B906FAD489"; +createNode nurbsCurve -n "finger_R1_0_loc5Shape" -p "finger_R1_0_loc"; + rename -uid "B7BE7D7D-450B-6BE5-4B13-C6BA96836E08"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10199,8 +10205,8 @@ createNode nurbsCurve -n "finger_R1_0_loc11Shape" -p "finger_R1_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R1_0_loc12Shape" -p "finger_R1_0_loc"; - rename -uid "564EA363-4D1E-F687-2F3B-3EB819E12616"; +createNode nurbsCurve -n "finger_R1_0_loc6Shape" -p "finger_R1_0_loc"; + rename -uid "66F0AED0-468E-7898-50EF-62A7AEF59879"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10217,8 +10223,8 @@ createNode nurbsCurve -n "finger_R1_0_loc12Shape" -p "finger_R1_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_0_loc12_0crvShape" -p "finger_R1_0_loc"; - rename -uid "C3E6EF81-47DC-A27D-A6A6-7E9CD7FF8253"; +createNode nurbsCurve -n "finger_R1_0_loc6_0crvShape" -p "finger_R1_0_loc"; + rename -uid "BFC4DF61-4704-477F-E38D-C38E73CFB558"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10235,8 +10241,8 @@ createNode nurbsCurve -n "finger_R1_0_loc12_0crvShape" -p "finger_R1_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_0_loc12_1crvShape" -p "finger_R1_0_loc"; - rename -uid "8C8A9165-4D2B-A21F-353D-1799A1AE94C0"; +createNode nurbsCurve -n "finger_R1_0_loc6_1crvShape" -p "finger_R1_0_loc"; + rename -uid "E847BF3C-445D-6A30-F65F-7A9E297A3D35"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10254,10 +10260,10 @@ createNode nurbsCurve -n "finger_R1_0_loc12_1crvShape" -p "finger_R1_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R1_1_loc" -p "finger_R1_0_loc"; - rename -uid "8E199701-464C-4AC1-FBCC-52BDE613A9CF"; + rename -uid "3322E38C-49DE-920D-4F3C-5DB3524C8D5B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.96412528414017551 0 -6.6613381477509392e-016 ; + setAttr ".t" -type "double3" 0.96412528414018972 1.4210854715202004e-014 -1.3322676295501878e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10265,12 +10271,12 @@ createNode transform -n "finger_R1_1_loc" -p "finger_R1_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999989 1 ; + setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999956 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R1_1_locShape" -p "finger_R1_1_loc"; - rename -uid "54C70F0E-4C80-A954-F815-8194F956655C"; + rename -uid "37E51D64-4818-BEF8-0BDE-46BD3107978A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10282,8 +10288,8 @@ createNode nurbsCurve -n "finger_R1_1_locShape" -p "finger_R1_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R1_1_loc10Shape" -p "finger_R1_1_loc"; - rename -uid "22609F92-4109-674E-23EF-6EA5C7681E01"; +createNode nurbsCurve -n "finger_R1_1_loc4Shape" -p "finger_R1_1_loc"; + rename -uid "84A7A96E-44F0-E818-B5A1-73A0C7CAB303"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10295,8 +10301,8 @@ createNode nurbsCurve -n "finger_R1_1_loc10Shape" -p "finger_R1_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R1_1_loc11Shape" -p "finger_R1_1_loc"; - rename -uid "CD5D962F-413F-80BF-5ECF-0F98AB09CA5B"; +createNode nurbsCurve -n "finger_R1_1_loc5Shape" -p "finger_R1_1_loc"; + rename -uid "0FF9D158-4349-12FD-A00C-59A3EE0A2398"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10308,8 +10314,8 @@ createNode nurbsCurve -n "finger_R1_1_loc11Shape" -p "finger_R1_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R1_1_loc12Shape" -p "finger_R1_1_loc"; - rename -uid "DABADDF8-49BC-E488-C492-44BCDBAA2B21"; +createNode nurbsCurve -n "finger_R1_1_loc6Shape" -p "finger_R1_1_loc"; + rename -uid "E10F16F7-4B2E-ADEE-BB5F-D68A1158E35D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10326,8 +10332,8 @@ createNode nurbsCurve -n "finger_R1_1_loc12Shape" -p "finger_R1_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_1_loc12_0crvShape" -p "finger_R1_1_loc"; - rename -uid "3353299E-471A-0AC9-9C13-F88BF5ED67D5"; +createNode nurbsCurve -n "finger_R1_1_loc6_0crvShape" -p "finger_R1_1_loc"; + rename -uid "A6BD7E9A-4175-FA60-C5B5-20B212F8BF59"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10344,8 +10350,8 @@ createNode nurbsCurve -n "finger_R1_1_loc12_0crvShape" -p "finger_R1_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_1_loc12_1crvShape" -p "finger_R1_1_loc"; - rename -uid "52B56AEC-46EE-16B1-53FC-D7BB8E363B42"; +createNode nurbsCurve -n "finger_R1_1_loc6_1crvShape" -p "finger_R1_1_loc"; + rename -uid "B9E7CD42-4309-C1D1-6F61-15BC756FCFBE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10363,10 +10369,10 @@ createNode nurbsCurve -n "finger_R1_1_loc12_1crvShape" -p "finger_R1_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R1_2_loc" -p "finger_R1_1_loc"; - rename -uid "139BD65B-4C6D-0A12-BFDE-C09F6DB9DD61"; + rename -uid "54B73F0B-4B21-370E-F52A-F28E00CAD7F5"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.58017281549591004 7.1054273576010019e-015 2.6645352591003757e-015 ; + setAttr ".t" -type "double3" 0.58017281549590116 -1.7763568394002505e-014 2.2204460492503131e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10374,12 +10380,12 @@ createNode transform -n "finger_R1_2_loc" -p "finger_R1_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999911 1.0000000000000009 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999989 0.99999999999999978 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R1_2_locShape" -p "finger_R1_2_loc"; - rename -uid "04094E67-4334-56D4-0A03-6681D76E422F"; + rename -uid "8006D1B6-436F-D285-4E64-CDA97F4CC4CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10391,8 +10397,8 @@ createNode nurbsCurve -n "finger_R1_2_locShape" -p "finger_R1_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R1_2_loc10Shape" -p "finger_R1_2_loc"; - rename -uid "D2B511E0-4E7C-AF02-AC21-B08C8DC2C050"; +createNode nurbsCurve -n "finger_R1_2_loc4Shape" -p "finger_R1_2_loc"; + rename -uid "17AD3A24-41A6-99FC-511C-C894AB61AA08"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10404,8 +10410,8 @@ createNode nurbsCurve -n "finger_R1_2_loc10Shape" -p "finger_R1_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R1_2_loc11Shape" -p "finger_R1_2_loc"; - rename -uid "242FFA13-43B3-E68A-10F9-81AD9473C716"; +createNode nurbsCurve -n "finger_R1_2_loc5Shape" -p "finger_R1_2_loc"; + rename -uid "955A2A13-4BE8-126C-4DD7-95A1FD7601E3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10417,8 +10423,8 @@ createNode nurbsCurve -n "finger_R1_2_loc11Shape" -p "finger_R1_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R1_2_loc12Shape" -p "finger_R1_2_loc"; - rename -uid "818AE26E-4FB4-8F50-D75C-BABBACD77318"; +createNode nurbsCurve -n "finger_R1_2_loc6Shape" -p "finger_R1_2_loc"; + rename -uid "BBB6D02C-44F4-26C4-27D0-CB9D11699D60"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10435,8 +10441,8 @@ createNode nurbsCurve -n "finger_R1_2_loc12Shape" -p "finger_R1_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_2_loc12_0crvShape" -p "finger_R1_2_loc"; - rename -uid "CC17030F-4F89-8FDE-BE39-579DFE4CD9F2"; +createNode nurbsCurve -n "finger_R1_2_loc6_0crvShape" -p "finger_R1_2_loc"; + rename -uid "2A8B7E1E-4EAC-5826-8346-A3919C59CC0C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10453,8 +10459,8 @@ createNode nurbsCurve -n "finger_R1_2_loc12_0crvShape" -p "finger_R1_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R1_2_loc12_1crvShape" -p "finger_R1_2_loc"; - rename -uid "17039965-4310-D3A0-1E65-369E824956DE"; +createNode nurbsCurve -n "finger_R1_2_loc6_1crvShape" -p "finger_R1_2_loc"; + rename -uid "DAA5BE6A-4C06-B0CE-BC07-2CAF074B9410"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10472,7 +10478,7 @@ createNode nurbsCurve -n "finger_R1_2_loc12_1crvShape" -p "finger_R1_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R1_blade" -p "finger_R1_root"; - rename -uid "127D15E2-4FCF-10E3-BC23-3AABB0F01C61"; + rename -uid "5C29EAA8-4AF4-8EC5-BDE6-F08904615876"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -10482,13 +10488,13 @@ createNode transform -n "finger_R1_blade" -p "finger_R1_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999889 0.999999999999999 0.99999999999999978 ; + setAttr ".s" -type "double3" 1 0.99999999999999967 1.0000000000000002 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_R1_bladeShape" -p "finger_R1_blade"; - rename -uid "ECA0D287-42A5-F172-5A64-BDBE3202E07E"; + rename -uid "1047D88B-46CC-8D88-6E8C-1CA773453EEF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10498,12 +10504,12 @@ createNode nurbsCurve -n "finger_R1_bladeShape" -p "finger_R1_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970855 0 0 - 0 0.2585933649132362 0 + 0.7757800947397071 0 0 + 0 0.2585933649132357 0 0 0 0 ; -createNode aimConstraint -n "finger_R1_blade_aimConstraint4" -p "finger_R1_blade"; - rename -uid "26650C56-4551-E3B3-3544-F28A380B9EBE"; +createNode aimConstraint -n "finger_R1_blade_aimConstraint2" -p "finger_R1_blade"; + rename -uid "08EAAFA1-4340-3E96-7E98-ABABB1500FB3"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_R1_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -10519,8 +10525,8 @@ createNode aimConstraint -n "finger_R1_blade_aimConstraint4" -p "finger_R1_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_R1_blade_pointConstraint4" -p "finger_R1_blade"; - rename -uid "C726341A-437A-E215-9C91-5D96D41436D6"; +createNode pointConstraint -n "finger_R1_blade_pointConstraint2" -p "finger_R1_blade"; + rename -uid "1EF44F14-46C8-E41D-EA6E-5A8EF755AA13"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_R1_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -10534,22 +10540,22 @@ createNode pointConstraint -n "finger_R1_blade_pointConstraint4" -p "finger_R1_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 1.7763568394002505e-015 0 6.6613381477509392e-016 ; + setAttr ".rst" -type "double3" -1.7763568394002505e-015 0 0 ; setAttr -k on ".w0"; createNode transform -n "finger_R1_crv" -p "finger_R1_root"; - rename -uid "D6D52165-4ABD-7676-50E4-5091DD922D90"; + rename -uid "69BE8723-42E9-769A-DAA8-048110CBA924"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 11.222433225153177 -28.040620010901328 1.1418187531091266 ; - setAttr ".r" -type "double3" 174.15150560514525 -9.9768879508742767 -125.88865264712163 ; - setAttr ".s" -type "double3" 2.6320983106786109 2.6320983106785985 -2.6320983106786064 ; + setAttr ".t" -type "double3" 11.222433225153221 -28.040620010901357 1.1418187531087722 ; + setAttr ".r" -type "double3" 174.15150560514482 -9.9768879508736816 -125.88865264712157 ; + setAttr ".s" -type "double3" 2.6320983106786127 2.6320983106786024 -2.6320983106786091 ; createNode nurbsCurve -n "finger_R1_crvShape" -p "finger_R1_crv"; - rename -uid "64ABEF08-457D-4E0C-CD4E-E79A12645B16"; + rename -uid "AFAD804A-45B0-B53F-24EF-4ABDDC918E56"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_R1_crvShapeOrig" -p "finger_R1_crv"; - rename -uid "79887E7F-402E-01AC-0C45-499CDEEB3A55"; + rename -uid "8280A8EC-4E07-2F63-8E08-50B29162F2FB"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -10562,7 +10568,7 @@ createNode nurbsCurve -n "finger_R1_crvShapeOrig" -p "finger_R1_crv"; 0 0 0 ; createNode transform -n "meta_R0_blade" -p "meta_R0_root"; - rename -uid "30E27998-4DD3-DDC5-53DA-8F9395C0A823"; + rename -uid "B72E4043-48A0-A9B6-F62F-299E73520FF4"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -10572,13 +10578,13 @@ createNode transform -n "meta_R0_blade" -p "meta_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999967 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999956 0.99999999999999833 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "meta_R0_bladeShape" -p "meta_R0_blade"; - rename -uid "E85E1ACA-46F8-6074-1CA1-5789EFF61688"; + rename -uid "DA66C139-46FA-A17D-2471-16890ADE9123"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10588,12 +10594,12 @@ createNode nurbsCurve -n "meta_R0_bladeShape" -p "meta_R0_blade"; 4 0 1 2 3 4 0 0 0 - 0.18503232649030144 0 0 - 0 0.061677442163433814 0 + 0.18503232649030155 0 0 + 0 0.061677442163433849 0 0 0 0 ; -createNode aimConstraint -n "meta_R0_blade_aimConstraint4" -p "meta_R0_blade"; - rename -uid "635FDB8B-4474-9BBE-70DB-5CB401667586"; +createNode aimConstraint -n "meta_R0_blade_aimConstraint2" -p "meta_R0_blade"; + rename -uid "EFA7C40A-48BC-62FE-6CB4-F6AED963AA4E"; addAttr -dcb 0 -ci true -sn "w0" -ln "meta_R0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -10609,8 +10615,8 @@ createNode aimConstraint -n "meta_R0_blade_aimConstraint4" -p "meta_R0_blade"; setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "meta_R0_blade_pointConstraint4" -p "meta_R0_blade"; - rename -uid "666314DB-4D42-6B57-6CB0-328E61680BC5"; +createNode pointConstraint -n "meta_R0_blade_pointConstraint2" -p "meta_R0_blade"; + rename -uid "08B060FC-4887-E960-7E6F-269BCAB099AD"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "meta_R0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -10624,22 +10630,22 @@ createNode pointConstraint -n "meta_R0_blade_pointConstraint4" -p "meta_R0_blade setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 0 -1.7763568394002505e-015 ; + setAttr ".rst" -type "double3" 0 7.1054273576010019e-015 -3.5527136788005009e-015 ; setAttr -k on ".w0"; createNode transform -n "meta_R0_crv" -p "meta_R0_root"; - rename -uid "843BA030-4FD9-3989-0ED1-26B52DD3DADA"; + rename -uid "9D50BA4B-4D4D-E3A4-C7B9-B9BFD4A4FBE1"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 3.8070066058400256 -38.076493243284922 11.714163621936679 ; - setAttr ".r" -type "double3" -98.404354317568433 44.654258545702419 -90.724179884703631 ; - setAttr ".s" -type "double3" 3.4032157947041304 3.4032157947041162 -3.4032157947041273 ; + setAttr ".t" -type "double3" 3.8070066058400012 -38.076493243284936 11.7141636219365 ; + setAttr ".r" -type "double3" -98.404354317568405 44.654258545702575 -90.724179884703659 ; + setAttr ".s" -type "double3" 3.4032157947041273 3.4032157947041131 -3.4032157947041233 ; createNode nurbsCurve -n "meta_R0_crvShape" -p "meta_R0_crv"; - rename -uid "3AC4A7CD-41CA-F979-0DD4-5481BE9F8BA6"; + rename -uid "60F60E37-4C0E-0D22-1280-C1BB5376240F"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "meta_R0_crvShapeOrig" -p "meta_R0_crv"; - rename -uid "AA8C90DA-464F-A640-6172-42966624DAB0"; + rename -uid "0D533335-499D-CBBA-D03B-FDA7E5AC7A70"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -10652,7 +10658,7 @@ createNode nurbsCurve -n "meta_R0_crvShapeOrig" -p "meta_R0_crv"; 0 0 0 ; createNode transform -n "finger_R0_root" -p "meta_R0_root"; - rename -uid "0264C2C3-4AAD-FA17-B720-B8979F05EEBF"; + rename -uid "AAE23DCA-49F7-CF54-3E82-DBB6E0106F82"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -10662,22 +10668,22 @@ createNode transform -n "finger_R0_root" -p "meta_R0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.1840372367976304 -0.30586006047048642 2.761423395950569 ; + setAttr ".t" -type "double3" -0.18403723679763262 -0.3058600604704651 2.7614233959505476 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 150.01356893808511 -71.606679450097744 -133.79382708613403 ; + setAttr ".r" -type "double3" 150.01356893808409 -71.60667945009763 -133.79382708613363 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.2929668245661814 1.2929668245661798 1.2929668245661825 ; + setAttr ".s" -type "double3" 1.2929668245661787 1.2929668245661794 1.2929668245661818 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -10687,12 +10693,9 @@ createNode transform -n "finger_R0_root" -p "meta_R0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "finger_R0_rootShape" -p "finger_R0_root"; - rename -uid "0A587E83-4B57-DEA6-2271-D99CC329951D"; + rename -uid "6D92965C-4203-CA9D-FC57-7889757C5626"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10704,8 +10707,8 @@ createNode nurbsCurve -n "finger_R0_rootShape" -p "finger_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R0_root10Shape" -p "finger_R0_root"; - rename -uid "66EB35C2-4993-4392-C838-74B87454B2B4"; +createNode nurbsCurve -n "finger_R0_root4Shape" -p "finger_R0_root"; + rename -uid "528C7771-47C2-E1C2-A05B-FA8B75CB1370"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10717,8 +10720,8 @@ createNode nurbsCurve -n "finger_R0_root10Shape" -p "finger_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R0_root11Shape" -p "finger_R0_root"; - rename -uid "F1BF3F25-43D0-A79E-6CEA-AC858F13D287"; +createNode nurbsCurve -n "finger_R0_root5Shape" -p "finger_R0_root"; + rename -uid "A25C7465-4CD7-10C9-E6D4-2090A87C4909"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10730,8 +10733,8 @@ createNode nurbsCurve -n "finger_R0_root11Shape" -p "finger_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R0_root12Shape" -p "finger_R0_root"; - rename -uid "ACDEDF38-4A5E-EBF0-0B0B-1F89BE937A99"; +createNode nurbsCurve -n "finger_R0_root6Shape" -p "finger_R0_root"; + rename -uid "8B6F4D6A-47F0-1311-1646-5DACE25EF60F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10758,10 +10761,10 @@ createNode nurbsCurve -n "finger_R0_root12Shape" -p "finger_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "finger_R0_0_loc" -p "finger_R0_root"; - rename -uid "99A0FB46-47A4-E2EF-5101-83A010F3D7EF"; + rename -uid "AC9DD948-4860-3D8C-F109-9082C77819E7"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.0000000000000178 1.0658141036401503e-014 6.2172489379008766e-015 ; + setAttr ".t" -type "double3" 1.0000000000000053 -3.5527136788005009e-015 4.4408920985006262e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10769,12 +10772,12 @@ createNode transform -n "finger_R0_0_loc" -p "finger_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999811 0.99999999999999978 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999833 0.99999999999999889 0.99999999999999867 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R0_0_locShape" -p "finger_R0_0_loc"; - rename -uid "532A4571-464C-DE39-BC14-3EBAD6834F44"; + rename -uid "01B7DA7F-4034-5B39-AA65-3A8E2CF3B38F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10786,8 +10789,8 @@ createNode nurbsCurve -n "finger_R0_0_locShape" -p "finger_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R0_0_loc10Shape" -p "finger_R0_0_loc"; - rename -uid "726EF14D-44CD-635E-0377-05B491D1A732"; +createNode nurbsCurve -n "finger_R0_0_loc4Shape" -p "finger_R0_0_loc"; + rename -uid "A4F47940-4D0B-7CA1-8AB5-949671E6FFAD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10799,8 +10802,8 @@ createNode nurbsCurve -n "finger_R0_0_loc10Shape" -p "finger_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R0_0_loc11Shape" -p "finger_R0_0_loc"; - rename -uid "DFA58B53-40F6-5923-0815-82AEE9230890"; +createNode nurbsCurve -n "finger_R0_0_loc5Shape" -p "finger_R0_0_loc"; + rename -uid "650F1FA0-41BA-87FE-E8FA-3D98A3051041"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10812,8 +10815,8 @@ createNode nurbsCurve -n "finger_R0_0_loc11Shape" -p "finger_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R0_0_loc12Shape" -p "finger_R0_0_loc"; - rename -uid "03D1A12F-4940-AF7E-EB40-678F9A60D160"; +createNode nurbsCurve -n "finger_R0_0_loc6Shape" -p "finger_R0_0_loc"; + rename -uid "7F30C39B-46CF-F8B4-52CB-4791BF016713"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10830,8 +10833,8 @@ createNode nurbsCurve -n "finger_R0_0_loc12Shape" -p "finger_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_0_loc12_0crvShape" -p "finger_R0_0_loc"; - rename -uid "F0D97C11-4F2B-96B4-6719-EBA4C68715AE"; +createNode nurbsCurve -n "finger_R0_0_loc6_0crvShape" -p "finger_R0_0_loc"; + rename -uid "51D20020-4206-2517-B071-939C399EDBB2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10848,8 +10851,8 @@ createNode nurbsCurve -n "finger_R0_0_loc12_0crvShape" -p "finger_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_0_loc12_1crvShape" -p "finger_R0_0_loc"; - rename -uid "203BFD0A-46E3-A6E7-33DB-AA9EE39FCD48"; +createNode nurbsCurve -n "finger_R0_0_loc6_1crvShape" -p "finger_R0_0_loc"; + rename -uid "65CAD3DD-45BE-90BC-C6F8-958A0E3A8D05"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10867,10 +10870,10 @@ createNode nurbsCurve -n "finger_R0_0_loc12_1crvShape" -p "finger_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R0_1_loc" -p "finger_R0_0_loc"; - rename -uid "C74786F3-478D-A7EB-9AB6-4E95713B0F2D"; + rename -uid "D00CE33A-4B34-D4E4-F7E9-D2B5E56DEDBD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.80442008080925653 -1.7763568394002505e-014 -4.4408920985006262e-016 ; + setAttr ".t" -type "double3" 0.80442008080928318 -7.1054273576010019e-015 8.8817841970012523e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10878,12 +10881,12 @@ createNode transform -n "finger_R0_1_loc" -p "finger_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 0.99999999999999978 0.99999999999999922 ; + setAttr ".s" -type "double3" 1.0000000000000016 1.0000000000000009 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R0_1_locShape" -p "finger_R0_1_loc"; - rename -uid "146D016E-4776-B175-4466-398E181BA7AD"; + rename -uid "7C62E544-436E-FA0A-8E25-ADA181AE4FB9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10895,8 +10898,8 @@ createNode nurbsCurve -n "finger_R0_1_locShape" -p "finger_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R0_1_loc10Shape" -p "finger_R0_1_loc"; - rename -uid "3CE0F637-4E72-6101-0522-ABBE51A0D9EC"; +createNode nurbsCurve -n "finger_R0_1_loc4Shape" -p "finger_R0_1_loc"; + rename -uid "A8949E6C-42D7-3468-1B40-BEA0DA557D79"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10908,8 +10911,8 @@ createNode nurbsCurve -n "finger_R0_1_loc10Shape" -p "finger_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R0_1_loc11Shape" -p "finger_R0_1_loc"; - rename -uid "504A363B-4872-82DC-1766-0AB9C4023BE9"; +createNode nurbsCurve -n "finger_R0_1_loc5Shape" -p "finger_R0_1_loc"; + rename -uid "77C637D0-4A70-2B90-E40A-52920EE55330"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10921,8 +10924,8 @@ createNode nurbsCurve -n "finger_R0_1_loc11Shape" -p "finger_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R0_1_loc12Shape" -p "finger_R0_1_loc"; - rename -uid "EFF4357E-4708-7C0F-0F9C-9CAA2D5DE245"; +createNode nurbsCurve -n "finger_R0_1_loc6Shape" -p "finger_R0_1_loc"; + rename -uid "1CDA2E15-4E89-B910-AC2E-C28082E2954E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10939,8 +10942,8 @@ createNode nurbsCurve -n "finger_R0_1_loc12Shape" -p "finger_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_1_loc12_0crvShape" -p "finger_R0_1_loc"; - rename -uid "896C9CF2-4BA5-FC30-8B88-E5BB63EF3D3F"; +createNode nurbsCurve -n "finger_R0_1_loc6_0crvShape" -p "finger_R0_1_loc"; + rename -uid "C5D944E9-4738-472C-1AAD-0AAF8A8428C9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10957,8 +10960,8 @@ createNode nurbsCurve -n "finger_R0_1_loc12_0crvShape" -p "finger_R0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_1_loc12_1crvShape" -p "finger_R0_1_loc"; - rename -uid "856589BA-4168-4CFB-0A9F-A2870A6FF7D3"; +createNode nurbsCurve -n "finger_R0_1_loc6_1crvShape" -p "finger_R0_1_loc"; + rename -uid "276B1B89-4E91-0F89-763D-9484878D4655"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -10976,10 +10979,10 @@ createNode nurbsCurve -n "finger_R0_1_loc12_1crvShape" -p "finger_R0_1_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R0_2_loc" -p "finger_R0_1_loc"; - rename -uid "3CC3C7CF-4E71-4744-F700-BCA0C605EF39"; + rename -uid "93FF5B87-4176-0728-DA2B-B198BADEB30F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.5843137039236872 1.7763568394002505e-014 -7.5495165674510645e-015 ; + setAttr ".t" -type "double3" 0.58431370392367654 2.1316282072803006e-014 -3.9968028886505635e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -10987,12 +10990,12 @@ createNode transform -n "finger_R0_2_loc" -p "finger_R0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999911 1.0000000000000002 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999922 1 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "finger_R0_2_locShape" -p "finger_R0_2_loc"; - rename -uid "BE4EF769-4F52-A50C-AEB8-239DC6FA9FB6"; + rename -uid "B86AB01F-4B48-A0CF-25A1-F594ACEC07E4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11004,8 +11007,8 @@ createNode nurbsCurve -n "finger_R0_2_locShape" -p "finger_R0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "finger_R0_2_loc10Shape" -p "finger_R0_2_loc"; - rename -uid "C41C81A1-44B2-92D5-9B0F-CF9FA906D737"; +createNode nurbsCurve -n "finger_R0_2_loc4Shape" -p "finger_R0_2_loc"; + rename -uid "BCD5588F-44AB-CDF6-C0FF-AA9F73EA40BC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11017,8 +11020,8 @@ createNode nurbsCurve -n "finger_R0_2_loc10Shape" -p "finger_R0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "finger_R0_2_loc11Shape" -p "finger_R0_2_loc"; - rename -uid "6355F1B3-4E4C-5695-74C2-C99BD3A9E0E6"; +createNode nurbsCurve -n "finger_R0_2_loc5Shape" -p "finger_R0_2_loc"; + rename -uid "6AC607F4-4ACC-14FB-24F9-DBB0D02F4C06"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11030,8 +11033,8 @@ createNode nurbsCurve -n "finger_R0_2_loc11Shape" -p "finger_R0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "finger_R0_2_loc12Shape" -p "finger_R0_2_loc"; - rename -uid "F0C9D086-4CA3-F832-0FDF-F2B4D5121C3E"; +createNode nurbsCurve -n "finger_R0_2_loc6Shape" -p "finger_R0_2_loc"; + rename -uid "E619F236-4FDC-D2B4-0313-84A6D2A5FDFC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11048,8 +11051,8 @@ createNode nurbsCurve -n "finger_R0_2_loc12Shape" -p "finger_R0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_2_loc12_0crvShape" -p "finger_R0_2_loc"; - rename -uid "DEE4FC07-4DD7-A1AE-5EFF-BFAC27695149"; +createNode nurbsCurve -n "finger_R0_2_loc6_0crvShape" -p "finger_R0_2_loc"; + rename -uid "D6CBA392-4923-69B4-6DC1-188679D8C8C1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11066,8 +11069,8 @@ createNode nurbsCurve -n "finger_R0_2_loc12_0crvShape" -p "finger_R0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "finger_R0_2_loc12_1crvShape" -p "finger_R0_2_loc"; - rename -uid "88F48BFD-426D-2583-E5C0-D296ED355B27"; +createNode nurbsCurve -n "finger_R0_2_loc6_1crvShape" -p "finger_R0_2_loc"; + rename -uid "6348317F-4E0F-EF4C-6DCD-629AE397F4EA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11085,7 +11088,7 @@ createNode nurbsCurve -n "finger_R0_2_loc12_1crvShape" -p "finger_R0_2_loc"; 0 0 -0.1875 ; createNode transform -n "finger_R0_blade" -p "finger_R0_root"; - rename -uid "B9B83662-4B24-2520-264A-768046DAA002"; + rename -uid "FA7586A4-4897-E26C-CC10-15A6F602D3E4"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -11095,13 +11098,13 @@ createNode transform -n "finger_R0_blade" -p "finger_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999811 0.99999999999999978 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999833 0.99999999999999889 0.99999999999999867 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "finger_R0_bladeShape" -p "finger_R0_blade"; - rename -uid "FE00019E-4F08-FCC8-DA9C-908156933DBE"; + rename -uid "13C6030A-4E6E-CFF8-6D66-C2BE7E53C27E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11111,12 +11114,12 @@ createNode nurbsCurve -n "finger_R0_bladeShape" -p "finger_R0_blade"; 4 0 1 2 3 4 0 0 0 - 0.77578009473970877 0 0 - 0 0.25859336491323626 0 + 0.77578009473970722 0 0 + 0 0.25859336491323576 0 0 0 0 ; -createNode aimConstraint -n "finger_R0_blade_aimConstraint4" -p "finger_R0_blade"; - rename -uid "4557C1E9-425B-B767-72C0-72ABB0E2C88C"; +createNode aimConstraint -n "finger_R0_blade_aimConstraint2" -p "finger_R0_blade"; + rename -uid "E66015EC-4D42-78B0-1DD6-038302A413BD"; addAttr -dcb 0 -ci true -sn "w0" -ln "finger_R0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -11132,8 +11135,8 @@ createNode aimConstraint -n "finger_R0_blade_aimConstraint4" -p "finger_R0_blade setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "finger_R0_blade_pointConstraint4" -p "finger_R0_blade"; - rename -uid "8062ECEC-4E99-5976-53BA-328334045C3B"; +createNode pointConstraint -n "finger_R0_blade_pointConstraint2" -p "finger_R0_blade"; + rename -uid "002C036A-473F-657E-1E62-0189EBBCA5A4"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "finger_R0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -11147,23 +11150,22 @@ createNode pointConstraint -n "finger_R0_blade_pointConstraint4" -p "finger_R0_b setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 1.7763568394002505e-015 -3.5527136788005009e-015 - 0 ; + setAttr ".rst" -type "double3" 1.7763568394002505e-015 3.5527136788005009e-015 -4.4408920985006262e-016 ; setAttr -k on ".w0"; createNode transform -n "finger_R0_crv" -p "finger_R0_root"; - rename -uid "90D9D410-4701-3FED-F7D1-D0A69F0DE6FB"; + rename -uid "32F1EB11-4F4C-EB35-87AC-2787473096E5"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 12.549990763713101 -27.33600805718115 2.4648652761301859 ; - setAttr ".r" -type "double3" 170.83456651198151 -22.111176212556135 -122.87938490445497 ; - setAttr ".s" -type "double3" 2.63209831067861 2.632098310678598 -2.6320983106786033 ; + setAttr ".t" -type "double3" 12.549990763713105 -27.336008057181196 2.4648652761299221 ; + setAttr ".r" -type "double3" 170.83456651198122 -22.111176212555637 -122.87938490445489 ; + setAttr ".s" -type "double3" 2.6320983106786091 2.6320983106785993 -2.632098310678602 ; createNode nurbsCurve -n "finger_R0_crvShape" -p "finger_R0_crv"; - rename -uid "28391D55-4A81-894C-8477-1D81420A7CE6"; + rename -uid "A21D815D-45D6-8F33-CB59-EF8AD4031525"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "finger_R0_crvShapeOrig" -p "finger_R0_crv"; - rename -uid "3C6D3A61-4B33-CC02-BDB4-8AAF22A3FCF0"; + rename -uid "8A07BAAC-4EEA-BC3B-E8EC-64901999684A"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -11176,7 +11178,7 @@ createNode nurbsCurve -n "finger_R0_crvShapeOrig" -p "finger_R0_crv"; 0 0 0 ; createNode transform -n "thumbRoll_R0_root" -p "meta_R0_root"; - rename -uid "123D5036-494C-70EC-A547-04858A7CA51C"; + rename -uid "6E1DDE1E-440A-D87E-CE58-C6A1812668E6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -11189,32 +11191,33 @@ createNode transform -n "thumbRoll_R0_root" -p "meta_R0_root"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.7 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.21303623709073749 -0.22489125789801534 0.13070337452154313 ; + setAttr ".t" -type "double3" 0.21303623709073394 -0.22489125789798692 0.13070337452153069 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" -5.7735227848336113 -84.001563523230956 11.009204406912341 ; + setAttr ".r" -type "double3" -5.7735227848313926 -84.001563523231013 11.009204406910072 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 3.4032157947041344 3.4032157947041166 3.4032157947041259 ; + setAttr ".s" -type "double3" 3.4032157947041268 3.4032157947041157 3.4032157947041233 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -11226,20 +11229,8 @@ createNode transform -n "thumbRoll_R0_root" -p "meta_R0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "sphere"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".ctlSize" 0.7; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "thumbRoll_R0_rootShape" -p "thumbRoll_R0_root"; - rename -uid "E706B0AA-4F02-5594-14E0-D9B384777C33"; + rename -uid "3ED4F6C5-42A0-929B-708E-AA86B2579A8C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11251,8 +11242,8 @@ createNode nurbsCurve -n "thumbRoll_R0_rootShape" -p "thumbRoll_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumbRoll_R0_root10Shape" -p "thumbRoll_R0_root"; - rename -uid "EE9FF6C2-494F-9436-7549-EBABA6BCB901"; +createNode nurbsCurve -n "thumbRoll_R0_root4Shape" -p "thumbRoll_R0_root"; + rename -uid "1E16621D-44B1-8B53-D5AC-4BB56215FE35"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11264,8 +11255,8 @@ createNode nurbsCurve -n "thumbRoll_R0_root10Shape" -p "thumbRoll_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumbRoll_R0_root11Shape" -p "thumbRoll_R0_root"; - rename -uid "587B2EC6-4B8C-5D0B-1AFC-91AFBF51DD20"; +createNode nurbsCurve -n "thumbRoll_R0_root5Shape" -p "thumbRoll_R0_root"; + rename -uid "DBBD629F-4E8E-2CDB-3C95-38BEEF9D05BC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11277,8 +11268,8 @@ createNode nurbsCurve -n "thumbRoll_R0_root11Shape" -p "thumbRoll_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumbRoll_R0_root12Shape" -p "thumbRoll_R0_root"; - rename -uid "34315271-4798-FA65-1DB2-B693B0FFB203"; +createNode nurbsCurve -n "thumbRoll_R0_root6Shape" -p "thumbRoll_R0_root"; + rename -uid "093BA305-4181-46C5-934B-C692C529BC39"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11305,24 +11296,24 @@ createNode nurbsCurve -n "thumbRoll_R0_root12Shape" -p "thumbRoll_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "thumbRoll_R0_sizeRef" -p "thumbRoll_R0_root"; - rename -uid "41E91C40-4257-7FEC-214C-A8B7AD6AEB2E"; + rename -uid "6FE82DD8-4831-548A-24DF-09AE91D6B976"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -8.8817841970012523e-016 4.0856207306205761e-014 1.0000000000000002 ; + setAttr ".t" -type "double3" 2.2204460492503131e-015 4.0856207306205761e-014 0.99999999999999956 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 180.00000000000159 44.430829212205644 ; + setAttr ".r" -type "double3" 0 0 44.430829212205637 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000016 0.99999999999999745 -1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000013 0.99999999999999745 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "thumb_R0_root" -p "thumbRoll_R0_root"; - rename -uid "4B8D4BCB-411C-65B0-1327-3095908F1282"; + rename -uid "25A6DC43-4A26-0DC6-96E9-51BD4B9BD15E"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -11332,22 +11323,22 @@ createNode transform -n "thumb_R0_root" -p "thumbRoll_R0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.5527136788005009e-015 -1.7763568394002505e-015 4.9960036108132044e-016 ; + setAttr ".t" -type "double3" 2.6645352591003757e-015 0 3.8857805861880479e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 110.8010863191307 -43.900240512232457 -37.623269198287836 ; + setAttr ".r" -type "double3" 110.80108631913072 -43.900240512232436 -37.623269198287858 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.489364347035111 0.48936434703510961 0.48936434703511195 ; + setAttr ".s" -type "double3" 0.48936434703511078 0.48936434703510989 0.48936434703511139 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -11357,12 +11348,9 @@ createNode transform -n "thumb_R0_root" -p "thumbRoll_R0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" ""; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "thumb_R0_rootShape" -p "thumb_R0_root"; - rename -uid "1B549365-4290-CEDF-0B28-CCBB74E1B970"; + rename -uid "766ECEC5-48FF-B526-ACC2-BB949AC2D0EE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11374,8 +11362,8 @@ createNode nurbsCurve -n "thumb_R0_rootShape" -p "thumb_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_R0_root10Shape" -p "thumb_R0_root"; - rename -uid "1E342236-46DA-3AA9-2540-A89BC4012FB7"; +createNode nurbsCurve -n "thumb_R0_root4Shape" -p "thumb_R0_root"; + rename -uid "3A881A6F-4B46-0CC9-F580-54A08EEA922A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11387,8 +11375,8 @@ createNode nurbsCurve -n "thumb_R0_root10Shape" -p "thumb_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_R0_root11Shape" -p "thumb_R0_root"; - rename -uid "E3701EBD-43A1-08FC-9E2D-26B57446BAF2"; +createNode nurbsCurve -n "thumb_R0_root5Shape" -p "thumb_R0_root"; + rename -uid "6D48528B-4C73-F253-C54C-B2BB4839F3E1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11400,8 +11388,8 @@ createNode nurbsCurve -n "thumb_R0_root11Shape" -p "thumb_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_R0_root12Shape" -p "thumb_R0_root"; - rename -uid "0833510B-4ED5-7863-FE2A-188BEFFB9E76"; +createNode nurbsCurve -n "thumb_R0_root6Shape" -p "thumb_R0_root"; + rename -uid "781F571D-44B8-E5AA-1DA4-2B87BC3897BB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11428,24 +11416,24 @@ createNode nurbsCurve -n "thumb_R0_root12Shape" -p "thumb_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "thumb_R0_0_loc" -p "thumb_R0_root"; - rename -uid "66950EE1-4079-3FF5-9D49-99A2DA75EEB1"; + rename -uid "747C3445-4961-75D2-C3C1-82A37FA07BA2"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.86054350703469851 0.0024095775966941346 -3.5527136788005009e-015 ; + setAttr ".t" -type "double3" 0.86054350703470206 0.002409577596695911 -7.1054273576010019e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0 -4.2384257498060753 ; + setAttr ".r" -type "double3" 0 0 -4.2384257498060656 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999922 0.99999999999999922 0.99999999999999956 ; + setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999978 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_R0_0_locShape" -p "thumb_R0_0_loc"; - rename -uid "3BF3BF84-4950-3C65-8571-5F893D74015E"; + rename -uid "8641E949-4C90-B6AA-0B9A-9DB77F178468"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11457,8 +11445,8 @@ createNode nurbsCurve -n "thumb_R0_0_locShape" -p "thumb_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_R0_0_loc10Shape" -p "thumb_R0_0_loc"; - rename -uid "DC80FD5C-4309-FE51-C994-36B1E9F715CA"; +createNode nurbsCurve -n "thumb_R0_0_loc4Shape" -p "thumb_R0_0_loc"; + rename -uid "8DE8C2FE-4630-CCBD-70E4-C8A570469097"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11470,8 +11458,8 @@ createNode nurbsCurve -n "thumb_R0_0_loc10Shape" -p "thumb_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_R0_0_loc11Shape" -p "thumb_R0_0_loc"; - rename -uid "E8D7D5B8-4373-C8CF-6B98-14906195B9DF"; +createNode nurbsCurve -n "thumb_R0_0_loc5Shape" -p "thumb_R0_0_loc"; + rename -uid "EB8FDE87-4B53-434E-60E9-13BEE085F138"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11483,8 +11471,8 @@ createNode nurbsCurve -n "thumb_R0_0_loc11Shape" -p "thumb_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_R0_0_loc12Shape" -p "thumb_R0_0_loc"; - rename -uid "9D7F0300-4859-EBA3-50AB-25842321E6F7"; +createNode nurbsCurve -n "thumb_R0_0_loc6Shape" -p "thumb_R0_0_loc"; + rename -uid "8394A900-4413-B6F1-4C5C-9DA06105ED44"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11501,8 +11489,8 @@ createNode nurbsCurve -n "thumb_R0_0_loc12Shape" -p "thumb_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_0_loc12_0crvShape" -p "thumb_R0_0_loc"; - rename -uid "6FF7243F-4483-8B98-5F83-4687933CF133"; +createNode nurbsCurve -n "thumb_R0_0_loc6_0crvShape" -p "thumb_R0_0_loc"; + rename -uid "E32346FB-4EBB-F90B-2F41-64956AADC2E8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11519,8 +11507,8 @@ createNode nurbsCurve -n "thumb_R0_0_loc12_0crvShape" -p "thumb_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_0_loc12_1crvShape" -p "thumb_R0_0_loc"; - rename -uid "B3302B82-4B4E-9F54-E55A-4AA2F150325F"; +createNode nurbsCurve -n "thumb_R0_0_loc6_1crvShape" -p "thumb_R0_0_loc"; + rename -uid "7087149B-4E57-81C0-D2E1-C68B8A41B67B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11538,10 +11526,10 @@ createNode nurbsCurve -n "thumb_R0_0_loc12_1crvShape" -p "thumb_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_R0_1_loc" -p "thumb_R0_0_loc"; - rename -uid "9216C108-4430-DC80-D16B-CDAD2B4636AD"; + rename -uid "3718944B-4FE5-729A-2109-249C73B279FB"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.76442580145521077 -3.5527136788005009e-015 2.1316282072803006e-014 ; + setAttr ".t" -type "double3" 0.764425801455209 1.7763568394002505e-015 2.1316282072803006e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -11549,12 +11537,12 @@ createNode transform -n "thumb_R0_1_loc" -p "thumb_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1 0.99999999999999933 ; + setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999911 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_R0_1_locShape" -p "thumb_R0_1_loc"; - rename -uid "79CBB4FF-48FE-D73A-99C6-6F829E39F140"; + rename -uid "AA6E99E8-42B5-EB38-8D13-80B19E697CF4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11566,8 +11554,8 @@ createNode nurbsCurve -n "thumb_R0_1_locShape" -p "thumb_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_R0_1_loc10Shape" -p "thumb_R0_1_loc"; - rename -uid "ECB129DE-4864-46A4-4BA5-E489E0B7924B"; +createNode nurbsCurve -n "thumb_R0_1_loc4Shape" -p "thumb_R0_1_loc"; + rename -uid "27F47601-4402-B838-A90E-8F903196D751"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11579,8 +11567,8 @@ createNode nurbsCurve -n "thumb_R0_1_loc10Shape" -p "thumb_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_R0_1_loc11Shape" -p "thumb_R0_1_loc"; - rename -uid "B22EBCFF-4440-C954-9DC8-3B8378908B5F"; +createNode nurbsCurve -n "thumb_R0_1_loc5Shape" -p "thumb_R0_1_loc"; + rename -uid "A83E5E22-43BF-D7AD-A9B2-99979AF00E8E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11592,8 +11580,8 @@ createNode nurbsCurve -n "thumb_R0_1_loc11Shape" -p "thumb_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_R0_1_loc12Shape" -p "thumb_R0_1_loc"; - rename -uid "F5984D20-42BA-B4F0-4C24-A99ADE479519"; +createNode nurbsCurve -n "thumb_R0_1_loc6Shape" -p "thumb_R0_1_loc"; + rename -uid "BBAAC151-4DFB-A5F4-7FA7-FCAEE06F2462"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11610,8 +11598,8 @@ createNode nurbsCurve -n "thumb_R0_1_loc12Shape" -p "thumb_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_1_loc12_0crvShape" -p "thumb_R0_1_loc"; - rename -uid "38D4C196-4CF9-66D8-7CBA-CF8056B4CA15"; +createNode nurbsCurve -n "thumb_R0_1_loc6_0crvShape" -p "thumb_R0_1_loc"; + rename -uid "C50D5C3C-4113-1E53-CD68-5482A09FA2F2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11628,8 +11616,8 @@ createNode nurbsCurve -n "thumb_R0_1_loc12_0crvShape" -p "thumb_R0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_1_loc12_1crvShape" -p "thumb_R0_1_loc"; - rename -uid "F3482B96-41D8-1F0D-7E4C-65B28ED5D546"; +createNode nurbsCurve -n "thumb_R0_1_loc6_1crvShape" -p "thumb_R0_1_loc"; + rename -uid "615371A2-4C23-B9C5-FE7F-E7BAF01F651C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11647,10 +11635,10 @@ createNode nurbsCurve -n "thumb_R0_1_loc12_1crvShape" -p "thumb_R0_1_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_R0_2_loc" -p "thumb_R0_1_loc"; - rename -uid "3DF4D5D7-43B0-3933-45E9-61A2DD2EAE97"; + rename -uid "E8D70256-450E-5C67-767D-D48FB11A2647"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.59482114915510742 9.7699626167013776e-015 -1.0658141036401503e-014 ; + setAttr ".t" -type "double3" 0.59482114915510742 6.2172489379008766e-015 3.5527136788005009e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -11658,12 +11646,12 @@ createNode transform -n "thumb_R0_2_loc" -p "thumb_R0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1 1.0000000000000009 ; + setAttr ".s" -type "double3" 1 1.0000000000000002 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "thumb_R0_2_locShape" -p "thumb_R0_2_loc"; - rename -uid "03BF7802-4A45-846D-BBA7-36A8109B3567"; + rename -uid "1FD06FA8-4857-E0D8-DBD7-4AA97DAB7A7A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11675,8 +11663,8 @@ createNode nurbsCurve -n "thumb_R0_2_locShape" -p "thumb_R0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "thumb_R0_2_loc10Shape" -p "thumb_R0_2_loc"; - rename -uid "55F1B365-4298-9B14-EF44-C492D78B66D0"; +createNode nurbsCurve -n "thumb_R0_2_loc4Shape" -p "thumb_R0_2_loc"; + rename -uid "C670F9D1-43D8-BC38-A5A4-F28A8EE564FB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11688,8 +11676,8 @@ createNode nurbsCurve -n "thumb_R0_2_loc10Shape" -p "thumb_R0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "thumb_R0_2_loc11Shape" -p "thumb_R0_2_loc"; - rename -uid "31F2B7F4-4EE2-4681-DA99-528A51F88CB4"; +createNode nurbsCurve -n "thumb_R0_2_loc5Shape" -p "thumb_R0_2_loc"; + rename -uid "A02B31B7-4910-0177-3F51-BE8780B893E4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11701,8 +11689,8 @@ createNode nurbsCurve -n "thumb_R0_2_loc11Shape" -p "thumb_R0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "thumb_R0_2_loc12Shape" -p "thumb_R0_2_loc"; - rename -uid "4F48C43C-4940-87A2-D9BE-5BBBFDD514E8"; +createNode nurbsCurve -n "thumb_R0_2_loc6Shape" -p "thumb_R0_2_loc"; + rename -uid "FD33CE21-47DB-AA69-2638-0E8478865545"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11719,8 +11707,8 @@ createNode nurbsCurve -n "thumb_R0_2_loc12Shape" -p "thumb_R0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_2_loc12_0crvShape" -p "thumb_R0_2_loc"; - rename -uid "B4F80CF5-4670-7DB2-1579-29BF4DE2328C"; +createNode nurbsCurve -n "thumb_R0_2_loc6_0crvShape" -p "thumb_R0_2_loc"; + rename -uid "8CBF8B54-4C43-5204-CF91-E8A2073E40E5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11737,8 +11725,8 @@ createNode nurbsCurve -n "thumb_R0_2_loc12_0crvShape" -p "thumb_R0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "thumb_R0_2_loc12_1crvShape" -p "thumb_R0_2_loc"; - rename -uid "73B73536-4FD2-F51B-7CC9-129A92ECF9CA"; +createNode nurbsCurve -n "thumb_R0_2_loc6_1crvShape" -p "thumb_R0_2_loc"; + rename -uid "F750D7ED-4B03-0CB8-0388-4988DB851487"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11756,7 +11744,7 @@ createNode nurbsCurve -n "thumb_R0_2_loc12_1crvShape" -p "thumb_R0_2_loc"; 0 0 -0.1875 ; createNode transform -n "thumb_R0_blade" -p "thumb_R0_root"; - rename -uid "D7246740-4D8A-0854-46F2-35818714A4E5"; + rename -uid "1CB395C4-4C72-7866-77F8-DDA2DB4AFF4F"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -11766,13 +11754,13 @@ createNode transform -n "thumb_R0_blade" -p "thumb_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999833 0.999999999999998 0.99999999999999867 ; + setAttr ".s" -type "double3" 0.99999999999999856 0.99999999999999822 0.99999999999999978 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "thumb_R0_bladeShape" -p "thumb_R0_blade"; - rename -uid "B5FDB6FB-4FF9-E5DE-6C03-92BDA38B1C39"; + rename -uid "C578AA88-473E-A932-7B93-9F9CBCCE5782"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11782,12 +11770,12 @@ createNode nurbsCurve -n "thumb_R0_bladeShape" -p "thumb_R0_blade"; 4 0 1 2 3 4 0 0 0 - 0.29361860822106661 0 0 - 0 0.097872869407022209 0 + 0.29361860822106645 0 0 + 0 0.097872869407022153 0 0 0 0 ; -createNode aimConstraint -n "thumb_R0_blade_aimConstraint4" -p "thumb_R0_blade"; - rename -uid "4994E681-4FA5-8986-112F-37BB816FBF84"; +createNode aimConstraint -n "thumb_R0_blade_aimConstraint2" -p "thumb_R0_blade"; + rename -uid "0F863B04-4EB6-282B-6E28-1F83BEA12B24"; addAttr -dcb 0 -ci true -sn "w0" -ln "thumb_R0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -11802,10 +11790,11 @@ createNode aimConstraint -n "thumb_R0_blade_aimConstraint4" -p "thumb_R0_blade"; setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" 3.3116584830426423e-016 2.365420225460605e-013 0.16043147704029556 ; + setAttr ".rsrr" -type "double3" 6.6233169660877251e-016 4.7308404509229538e-013 + 0.16043147704029556 ; setAttr -k on ".w0"; -createNode pointConstraint -n "thumb_R0_blade_pointConstraint4" -p "thumb_R0_blade"; - rename -uid "1C46812E-40BC-A51A-BD41-A9BDC9AC8165"; +createNode pointConstraint -n "thumb_R0_blade_pointConstraint2" -p "thumb_R0_blade"; + rename -uid "E6BCA4A0-4320-8704-4A0E-A19346F085CD"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "thumb_R0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -11819,22 +11808,22 @@ createNode pointConstraint -n "thumb_R0_blade_pointConstraint4" -p "thumb_R0_bla setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 -8.8817841970012523e-016 3.5527136788005009e-015 ; + setAttr ".rst" -type "double3" 0 -8.8817841970012523e-016 0 ; setAttr -k on ".w0"; createNode transform -n "thumb_R0_crv" -p "thumb_R0_root"; - rename -uid "377A3ECE-40FA-926B-E518-2D941C87E89A"; + rename -uid "34B5642F-4689-C0E1-82EE-1BA3A7CF18A4"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 14.330153889042867 -7.0737929587543151 17.725867635512827 ; - setAttr ".r" -type "double3" -55.556977946373244 -63.100734454449544 102.71864583729831 ; - setAttr ".s" -type "double3" 2.0434672163157246 2.0434672163157197 -2.0434672163157264 ; + setAttr ".t" -type "double3" 14.330153889042872 -7.0737929587543267 17.725867635512838 ; + setAttr ".r" -type "double3" -55.556977946373252 -63.100734454449608 102.71864583729831 ; + setAttr ".s" -type "double3" 2.0434672163157264 2.0434672163157197 -2.0434672163157255 ; createNode nurbsCurve -n "thumb_R0_crvShape" -p "thumb_R0_crv"; - rename -uid "3C01BECF-4454-FE53-42DF-2BA4F9DBBFF9"; + rename -uid "2CF2C629-4C66-D4D2-764C-B6809E0FD00D"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "thumb_R0_crvShapeOrig" -p "thumb_R0_crv"; - rename -uid "2233CDD5-45C9-3AF9-463A-E5A2E1252CB7"; + rename -uid "4A29B0C4-4465-A009-FCD4-7A80CFF86F7B"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -11847,19 +11836,19 @@ createNode nurbsCurve -n "thumb_R0_crvShapeOrig" -p "thumb_R0_crv"; 0 0 0 ; createNode transform -n "arm_R0_crv" -p "arm_R0_root"; - rename -uid "7A939C10-4A88-01FC-90E4-978D42720BB0"; + rename -uid "43A62435-471C-7F61-A05F-EB8D9B56E175"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 9.5792744434200383 -11.862061807473031 1.1564412205648709 ; - setAttr ".r" -type "double3" 2.1534408611046039 175.80406292066331 45.437740049298206 ; - setAttr ".s" -type "double3" 1.0495082267377434 1.0495082267377387 -1.0495082267377405 ; + setAttr ".t" -type "double3" 9.5792744434200294 -11.862061807473022 1.1564412205648698 ; + setAttr ".r" -type "double3" 2.1534408611046039 175.80406292066331 45.437740049298235 ; + setAttr ".s" -type "double3" 1.0495082267377431 1.0495082267377382 -1.04950822673774 ; createNode nurbsCurve -n "arm_R0_crvShape" -p "arm_R0_crv"; - rename -uid "37863709-40C3-AB49-C1D5-FC9B480CE816"; + rename -uid "4210867A-483E-7D62-0350-F3857C3292AD"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "arm_R0_crvShapeOrig" -p "arm_R0_crv"; - rename -uid "2DB68AB9-4DBD-4FFA-72BD-45A6FA498925"; + rename -uid "E5D589E0-4E59-6E10-2F94-4181CD3C0163"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -11872,8 +11861,9 @@ createNode nurbsCurve -n "arm_R0_crvShapeOrig" -p "arm_R0_crv"; 0 0 0 ; createNode transform -n "shoulder_R0_blade" -p "shoulder_R0_root"; - rename -uid "FF6ABEE5-4DCF-CBE7-87AC-F0A8E4EADFA7"; - addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; + rename -uid "12C73153-4D89-6BE4-57EB-FB8D1CAB7CAF"; + addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -dv 89.999999999999986 + -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -11882,13 +11872,13 @@ createNode transform -n "shoulder_R0_blade" -p "shoulder_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999611 0.99999999999999767 ; + setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999689 0.99999999999999778 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; - setAttr -k on ".bladeRollOffset" 90; + setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "shoulder_R0_bladeShape" -p "shoulder_R0_blade"; - rename -uid "25891283-4047-9E6A-E57E-4C882D8620CA"; + rename -uid "EDF8D81B-4906-9435-3C16-608F4BD47355"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11898,12 +11888,12 @@ createNode nurbsCurve -n "shoulder_R0_bladeShape" -p "shoulder_R0_blade"; 4 0 1 2 3 4 0 0 0 - 0.6000000000000012 0 0 - 0 0.2000000000000004 0 + 0.60000000000000131 0 0 + 0 0.20000000000000043 0 0 0 0 ; -createNode aimConstraint -n "shoulder_R0_blade_aimConstraint4" -p "shoulder_R0_blade"; - rename -uid "95CE0BB0-4BFD-7281-5CB8-D1BD4D3AF314"; +createNode aimConstraint -n "shoulder_R0_blade_aimConstraint2" -p "shoulder_R0_blade"; + rename -uid "EF988694-4424-D358-D76D-F6B83DB880F7"; addAttr -dcb 0 -ci true -sn "w0" -ln "shoulder_R0_tipW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -11918,11 +11908,11 @@ createNode aimConstraint -n "shoulder_R0_blade_aimConstraint4" -p "shoulder_R0_b setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".o" -type "double3" 90 179.99999999999937 180.00000000000011 ; - setAttr ".rsrr" -type "double3" 23.386262286473194 122.53864021838235 110.03040021520766 ; + setAttr ".o" -type "double3" 90 179.9999999999996 180.00000000000017 ; + setAttr ".rsrr" -type "double3" 23.386262286472839 122.53864021838231 110.03040021520752 ; setAttr -k on ".w0"; -createNode pointConstraint -n "shoulder_R0_blade_pointConstraint4" -p "shoulder_R0_blade"; - rename -uid "3370165E-48E4-71CC-B006-E094640C3499"; +createNode pointConstraint -n "shoulder_R0_blade_pointConstraint2" -p "shoulder_R0_blade"; + rename -uid "C3DF093D-4D84-C4F7-B535-38A5795098A7"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "shoulder_R0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; @@ -11937,23 +11927,23 @@ createNode pointConstraint -n "shoulder_R0_blade_pointConstraint4" -p "shoulder_ setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" -1.7763568394002505e-015 -1.9081958235744878e-017 - -2.7755575615628914e-017 ; + setAttr ".rst" -type "double3" -1.7763568394002505e-015 -2.6020852139652106e-017 + 0 ; setAttr -k on ".w0"; createNode transform -n "shoulder_R0_crv" -p "shoulder_R0_root"; - rename -uid "6E8EE9DA-49E8-3064-C40A-DA9474A34C95"; + rename -uid "FAACBF9B-47AF-3284-142F-6F89309FA883"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 15.507521470509836 0.0092761897382758005 0.11673327753265025 ; + setAttr ".t" -type "double3" 15.507521470509833 0.0092761897382757381 0.1167332775326503 ; setAttr ".r" -type "double3" 90.803889228153793 -89.999999999999986 0 ; - setAttr ".s" -type "double3" 1.0495082267377416 1.0495082267377367 -1.0495082267377369 ; + setAttr ".s" -type "double3" 1.0495082267377416 1.0495082267377367 -1.0495082267377365 ; createNode nurbsCurve -n "shoulder_R0_crvShape" -p "shoulder_R0_crv"; - rename -uid "8FF23251-4A71-6284-9BE0-7883C6AEDBF4"; + rename -uid "A1ED4CBF-4B0E-9A01-BC53-868AF0CBB011"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "shoulder_R0_crvShapeOrig" -p "shoulder_R0_crv"; - rename -uid "4846B445-4AE0-F037-3A8E-90BBAE58F7A5"; + rename -uid "E517D413-4844-8E6E-EF60-C685437AADA5"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -11964,7 +11954,7 @@ createNode nurbsCurve -n "shoulder_R0_crvShapeOrig" -p "shoulder_R0_crv"; 0 0 0 ; createNode transform -n "spine_C0_blade" -p "spine_C0_root"; - rename -uid "A80F13F2-43AD-38B6-8453-469C20962B74"; + rename -uid "C9FD6E77-415F-F0C6-6D65-A8A132484303"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -11974,13 +11964,13 @@ createNode transform -n "spine_C0_blade" -p "spine_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000013 0.99999999999999956 0.99999999999999833 ; + setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999967 0.99999999999999845 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "spine_C0_bladeShape" -p "spine_C0_blade"; - rename -uid "E4A013CC-4EDF-73BF-527F-1F8980A3D378"; + rename -uid "F6A7542E-4CF6-66B8-FEDA-F9A72E6DFF9C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -11994,8 +11984,8 @@ createNode nurbsCurve -n "spine_C0_bladeShape" -p "spine_C0_blade"; 0 0.10237829928482099 0 0 0 0 ; -createNode aimConstraint -n "spine_C0_blade_aimConstraint9" -p "spine_C0_blade"; - rename -uid "1C494D74-4F9B-E59F-A6F4-3099BA4D66D9"; +createNode aimConstraint -n "spine_C0_blade_aimConstraint10" -p "spine_C0_blade"; + rename -uid "AF458BF5-42E3-79E7-A51B-E299916EB72F"; addAttr -dcb 0 -ci true -sn "w0" -ln "spine_C0_effW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -12011,8 +12001,8 @@ createNode aimConstraint -n "spine_C0_blade_aimConstraint9" -p "spine_C0_blade"; setAttr ".erp" yes; setAttr ".wut" 2; setAttr -k on ".w0"; -createNode pointConstraint -n "spine_C0_blade_pointConstraint9" -p "spine_C0_blade"; - rename -uid "414CEC77-4671-D708-7EAF-AA8281C289C5"; +createNode pointConstraint -n "spine_C0_blade_pointConstraint10" -p "spine_C0_blade"; + rename -uid "A97C1C48-443E-1882-02BF-31A199443356"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "spine_C0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -12026,22 +12016,22 @@ createNode pointConstraint -n "spine_C0_blade_pointConstraint9" -p "spine_C0_bla setAttr -k off ".sy"; setAttr -k off ".sz"; setAttr ".erp" yes; - setAttr ".rst" -type "double3" 0 5.5511151231257827e-017 -6.1629758220391547e-033 ; + setAttr ".rst" -type "double3" 0 2.7755575615628914e-017 -6.1629758220391547e-033 ; setAttr -k on ".w0"; createNode transform -n "spine_C0_crv" -p "spine_C0_root"; - rename -uid "ED9A197E-4888-DA79-872D-87984B194B38"; + rename -uid "AFC419DD-4C0F-5ACD-8B23-9BBF67DDB8A4"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -11.390533694690752 0.19144303592045889 -4.2508893276606347e-017 ; + setAttr ".t" -type "double3" -11.390533694690751 0.19144303592045883 -4.2508893276606341e-017 ; setAttr ".r" -type "double3" 90.000000000000014 89.999999999999986 0 ; - setAttr ".s" -type "double3" 1.0495082267377405 1.0495082267377402 1.0495082267377389 ; + setAttr ".s" -type "double3" 1.0495082267377405 1.04950822673774 1.0495082267377389 ; createNode nurbsCurve -n "spine_C0_crvShape" -p "spine_C0_crv"; - rename -uid "A78C4254-41AA-AB23-A89B-C68F4739D6B3"; + rename -uid "D18FE64B-4233-5364-D4E2-20B55631DB59"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "spine_C0_crvShapeOrig" -p "spine_C0_crv"; - rename -uid "25232329-4AD5-5D3A-5B7D-9C986CCE5489"; + rename -uid "312FED03-45DD-9A4C-D2FD-639E5AD08883"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -12052,7 +12042,7 @@ createNode nurbsCurve -n "spine_C0_crvShapeOrig" -p "spine_C0_crv"; 0 0 0 ; createNode transform -n "leg_L0_root" -p "spine_C0_root"; - rename -uid "3DED1CD7-40ED-CF7A-E42C-E48870B26F02"; + rename -uid "40161BF3-4B29-2CFD-148E-20808C8A13AF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -12061,29 +12051,29 @@ createNode transform -n "leg_L0_root" -p "spine_C0_root"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; addAttr -ci true -sn "pinrefarray" -ln "pinrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.1814583394588016 2.2204460492503131e-016 -1.0212680564255745 ; + setAttr ".t" -type "double3" -1.1814583394588016 1.9428902930940239e-016 -1.0212680564255745 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0.29314386227018274 0 ; + setAttr ".r" -type "double3" 0 0.2931438622701828 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000024 0.99999999999999822 1 ; + setAttr ".s" -type "double3" 1.0000000000000022 0.99999999999999833 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -12093,18 +12083,13 @@ createNode transform -n "leg_L0_root" -p "spine_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "legUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root"; - setAttr ".upvrefarray" -type "string" ""; - setAttr ".pinrefarray" -type "string" ""; - setAttr ".maxstretch" 1.5; - setAttr ".div0" 2; - setAttr ".div1" 2; + setAttr ".ikrefarray" -type "string" "local_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,global_C0_root"; + setAttr ".pinrefarray" -type "string" "local_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "leg_L0_rootShape" -p "leg_L0_root"; - rename -uid "B73C9355-4FB3-0C57-BA0A-028F914CD61D"; + rename -uid "98CAB11C-4F19-B71B-241B-1A9D9105D5BD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12116,8 +12101,8 @@ createNode nurbsCurve -n "leg_L0_rootShape" -p "leg_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_L0_root25Shape" -p "leg_L0_root"; - rename -uid "ADB33EDA-4BA2-7509-E1D8-24B5AF7757D5"; +createNode nurbsCurve -n "leg_L0_root28Shape" -p "leg_L0_root"; + rename -uid "4CDF9AB3-4066-95A1-1659-E5A30B1BBB99"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12129,8 +12114,8 @@ createNode nurbsCurve -n "leg_L0_root25Shape" -p "leg_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_L0_root26Shape" -p "leg_L0_root"; - rename -uid "ED524A63-45E0-F566-D1E1-7B8171E57EF0"; +createNode nurbsCurve -n "leg_L0_root29Shape" -p "leg_L0_root"; + rename -uid "B17787ED-4FD8-901D-CD21-7F8D27FE4A87"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12142,8 +12127,8 @@ createNode nurbsCurve -n "leg_L0_root26Shape" -p "leg_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_L0_root27Shape" -p "leg_L0_root"; - rename -uid "8413835D-4D23-5C90-B6EA-2C9185A18BC4"; +createNode nurbsCurve -n "leg_L0_root30Shape" -p "leg_L0_root"; + rename -uid "3E6AE3A4-44FD-CD34-3BB1-39BF229A6534"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12170,10 +12155,10 @@ createNode nurbsCurve -n "leg_L0_root27Shape" -p "leg_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "leg_L0_knee" -p "leg_L0_root"; - rename -uid "2E1A1E86-4380-2A65-B08A-A89B3B65A084"; + rename -uid "780A4FBA-4CBD-2BF2-7507-73B77D1C1775"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -4.3795369772304023 0.38838644346805862 -2.4424906541753444e-015 ; + setAttr ".t" -type "double3" -4.3795369772304014 0.38838644346805862 -2.55351295663786e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12182,12 +12167,12 @@ createNode transform -n "leg_L0_knee" -p "leg_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999956 1.0000000000000018 ; + setAttr ".s" -type "double3" 1.0000000000000013 1 1.0000000000000018 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_L0_kneeShape" -p "leg_L0_knee"; - rename -uid "5DBBD3BE-4F4F-9EDF-0BBA-2EBF2AE50D53"; + rename -uid "9A912E87-41FB-455F-B0A6-778FFE39BE75"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12199,8 +12184,8 @@ createNode nurbsCurve -n "leg_L0_kneeShape" -p "leg_L0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_L0_knee25Shape" -p "leg_L0_knee"; - rename -uid "EB7E82E5-4B4A-CB9F-FB9C-5DBAFB42B173"; +createNode nurbsCurve -n "leg_L0_knee28Shape" -p "leg_L0_knee"; + rename -uid "2F92185E-44D1-BFCA-342E-F1A5CAD55C16"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12212,8 +12197,8 @@ createNode nurbsCurve -n "leg_L0_knee25Shape" -p "leg_L0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_L0_knee26Shape" -p "leg_L0_knee"; - rename -uid "44A4D7E5-4955-E6CF-982E-3E86CA78B2B4"; +createNode nurbsCurve -n "leg_L0_knee29Shape" -p "leg_L0_knee"; + rename -uid "CB3F0E8F-4266-C8EF-8E6D-5EA1AB52D7B1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12225,8 +12210,8 @@ createNode nurbsCurve -n "leg_L0_knee26Shape" -p "leg_L0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_L0_knee27Shape" -p "leg_L0_knee"; - rename -uid "F9D5C88F-4022-DADA-7904-3F8D102445FA"; +createNode nurbsCurve -n "leg_L0_knee30Shape" -p "leg_L0_knee"; + rename -uid "1225309E-46BC-9F98-3E4C-22A1A21C7E84"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12243,8 +12228,8 @@ createNode nurbsCurve -n "leg_L0_knee27Shape" -p "leg_L0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_knee27_0crvShape" -p "leg_L0_knee"; - rename -uid "33E00CD4-4FB8-4F13-AB05-42B647C52A41"; +createNode nurbsCurve -n "leg_L0_knee30_0crvShape" -p "leg_L0_knee"; + rename -uid "0DCA6E9F-46AB-B87A-F6ED-77A3983E6BCA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12261,8 +12246,8 @@ createNode nurbsCurve -n "leg_L0_knee27_0crvShape" -p "leg_L0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_knee27_1crvShape" -p "leg_L0_knee"; - rename -uid "B0788B16-4515-9B01-B384-1C8C0C2B3EB9"; +createNode nurbsCurve -n "leg_L0_knee30_1crvShape" -p "leg_L0_knee"; + rename -uid "C7AD79B2-494D-BC29-2F56-09BD055EF664"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12280,10 +12265,10 @@ createNode nurbsCurve -n "leg_L0_knee27_1crvShape" -p "leg_L0_knee"; 0 0 -0.1875 ; createNode transform -n "leg_L0_ankle" -p "leg_L0_knee"; - rename -uid "D43B8114-4B05-FD45-A293-DAA91E9DEF43"; + rename -uid "8EA2C2C9-4A41-57B8-40A1-26A700D50FB7"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.8817841970012523e-016 -4.5414075240554164 -0.74630601922779805 ; + setAttr ".t" -type "double3" 1.1102230246251565e-015 -4.5414075240554173 -0.74630601922779805 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12291,12 +12276,12 @@ createNode transform -n "leg_L0_ankle" -p "leg_L0_knee"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999989 0.99999999999999867 ; + setAttr ".s" -type "double3" 1.0000000000000009 0.99999999999999967 0.99999999999999878 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_L0_ankleShape" -p "leg_L0_ankle"; - rename -uid "0F25DA49-4F10-88CC-FE9E-30B728456F23"; + rename -uid "738889D4-4065-5B3D-2685-13A62C534317"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12308,8 +12293,8 @@ createNode nurbsCurve -n "leg_L0_ankleShape" -p "leg_L0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_L0_ankle25Shape" -p "leg_L0_ankle"; - rename -uid "6D1C3639-4A26-F3BE-7061-99B2CC9EAB10"; +createNode nurbsCurve -n "leg_L0_ankle28Shape" -p "leg_L0_ankle"; + rename -uid "C1BF62B0-43DA-41E4-ED13-49B628E00353"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12321,8 +12306,8 @@ createNode nurbsCurve -n "leg_L0_ankle25Shape" -p "leg_L0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_L0_ankle26Shape" -p "leg_L0_ankle"; - rename -uid "2297F6E8-46E5-B676-ABF5-69B0E01D812D"; +createNode nurbsCurve -n "leg_L0_ankle29Shape" -p "leg_L0_ankle"; + rename -uid "128F5014-4DE4-5859-AD11-65A6333272D5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12334,8 +12319,8 @@ createNode nurbsCurve -n "leg_L0_ankle26Shape" -p "leg_L0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_L0_ankle27Shape" -p "leg_L0_ankle"; - rename -uid "90B01792-4033-DDCE-CB89-298504FDF1CB"; +createNode nurbsCurve -n "leg_L0_ankle30Shape" -p "leg_L0_ankle"; + rename -uid "1206EA32-4235-E4A4-ED27-C7AB3185F1C9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12352,8 +12337,8 @@ createNode nurbsCurve -n "leg_L0_ankle27Shape" -p "leg_L0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_ankle27_0crvShape" -p "leg_L0_ankle"; - rename -uid "9D0913F1-4322-5D1D-3AF9-B795A308057A"; +createNode nurbsCurve -n "leg_L0_ankle30_0crvShape" -p "leg_L0_ankle"; + rename -uid "FAD0AC4B-499E-EAF5-38B8-FCAA859131D5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12370,8 +12355,8 @@ createNode nurbsCurve -n "leg_L0_ankle27_0crvShape" -p "leg_L0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_ankle27_1crvShape" -p "leg_L0_ankle"; - rename -uid "D1E14A8C-4A1A-2CBA-A3CB-E5B0F5747502"; +createNode nurbsCurve -n "leg_L0_ankle30_1crvShape" -p "leg_L0_ankle"; + rename -uid "7FC407D9-46ED-DDBA-18CE-D3A16F3C6640"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12389,10 +12374,10 @@ createNode nurbsCurve -n "leg_L0_ankle27_1crvShape" -p "leg_L0_ankle"; 0 0 -0.1875 ; createNode transform -n "leg_L0_eff" -p "leg_L0_ankle"; - rename -uid "C38326C7-43E7-9042-9B5B-52B67ECAAC54"; + rename -uid "7B86FE10-4D23-F6E9-920E-7BAB03653372"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0 2.886579864025407e-015 2.1377206638691333 ; + setAttr ".t" -type "double3" -2.2204460492503131e-016 3.9968028886505635e-015 2.1377206638691328 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12401,12 +12386,12 @@ createNode transform -n "leg_L0_eff" -p "leg_L0_ankle"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000038 0.99999999999999878 1.0000000000000029 ; + setAttr ".s" -type "double3" 1.000000000000004 0.999999999999999 1.0000000000000029 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_L0_effShape" -p "leg_L0_eff"; - rename -uid "769DCC92-4F33-9E57-1F3E-83A425B0F0E8"; + rename -uid "0D11E0E6-4CDB-A213-F070-A38B7B4E9173"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12418,8 +12403,8 @@ createNode nurbsCurve -n "leg_L0_effShape" -p "leg_L0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_L0_eff25Shape" -p "leg_L0_eff"; - rename -uid "08754BCA-4AB0-A2D0-CBD7-7488BF33AF63"; +createNode nurbsCurve -n "leg_L0_eff28Shape" -p "leg_L0_eff"; + rename -uid "4066F7DC-405A-5A86-249A-02AF11E5327E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12431,8 +12416,8 @@ createNode nurbsCurve -n "leg_L0_eff25Shape" -p "leg_L0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_L0_eff26Shape" -p "leg_L0_eff"; - rename -uid "CDA556BF-4FD9-4BEF-D295-9E9417679C6E"; +createNode nurbsCurve -n "leg_L0_eff29Shape" -p "leg_L0_eff"; + rename -uid "D15CEA1A-4731-3BC5-6AA6-A1914994579B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12444,8 +12429,8 @@ createNode nurbsCurve -n "leg_L0_eff26Shape" -p "leg_L0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_L0_eff27Shape" -p "leg_L0_eff"; - rename -uid "2D235D27-4D4C-07A6-244F-EE9F48F1FC24"; +createNode nurbsCurve -n "leg_L0_eff30Shape" -p "leg_L0_eff"; + rename -uid "0069116B-4E13-3F0D-2F1E-6DB0F4BEA9A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12462,8 +12447,8 @@ createNode nurbsCurve -n "leg_L0_eff27Shape" -p "leg_L0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_eff27_0crvShape" -p "leg_L0_eff"; - rename -uid "46A0FD2E-483A-8E4B-E3EF-DAB64B694AD4"; +createNode nurbsCurve -n "leg_L0_eff30_0crvShape" -p "leg_L0_eff"; + rename -uid "584BF469-42AF-B56F-1A7E-578F62424E9D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12480,8 +12465,8 @@ createNode nurbsCurve -n "leg_L0_eff27_0crvShape" -p "leg_L0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_L0_eff27_1crvShape" -p "leg_L0_eff"; - rename -uid "5880E246-42D6-4028-03CD-3083A126029F"; +createNode nurbsCurve -n "leg_L0_eff30_1crvShape" -p "leg_L0_eff"; + rename -uid "F497C158-43E4-27B8-EE25-96BCE2F9542B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12499,7 +12484,7 @@ createNode nurbsCurve -n "leg_L0_eff27_1crvShape" -p "leg_L0_eff"; 0 0 -0.1875 ; createNode transform -n "foot_L0_root" -p "leg_L0_ankle"; - rename -uid "FF88F0D0-43C7-2570-4AF1-A287A7D178D4"; + rename -uid "B99FFBE9-4CD6-A868-1347-619DBD154032"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -12508,20 +12493,20 @@ createNode transform -n "foot_L0_root" -p "leg_L0_ankle"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 4.4408920985006262e-016 1.7763568394002505e-015 0 ; + setAttr ".t" -type "double3" 2.2204460492503131e-016 2.886579864025407e-015 -1.1102230246251565e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 -84.230890510426093 0 ; + setAttr ".r" -type "double3" 0 -84.230890510426107 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.9997975226851844 0.99979752268518263 0.99979752268518174 ; + setAttr ".s" -type "double3" 0.9997975226851844 0.99979752268518252 0.99979752268518129 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -12531,10 +12516,8 @@ createNode transform -n "foot_L0_root" -p "leg_L0_ankle"; setAttr ".connector" -type "string" "leg_2jnt_01"; setAttr ".ui_host" -type "string" "legUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "foot_L0_rootShape" -p "foot_L0_root"; - rename -uid "E6C51719-49DC-65A5-A343-60BB0924044D"; + rename -uid "C2F8836D-4E83-14BE-C01F-8FA85ED1D3A4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12546,8 +12529,8 @@ createNode nurbsCurve -n "foot_L0_rootShape" -p "foot_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_root25Shape" -p "foot_L0_root"; - rename -uid "217037FB-4876-B3FA-E80A-2E8FC88B692E"; +createNode nurbsCurve -n "foot_L0_root28Shape" -p "foot_L0_root"; + rename -uid "32C35BAA-47FC-818E-2CA9-42BA2931BBA6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12559,8 +12542,8 @@ createNode nurbsCurve -n "foot_L0_root25Shape" -p "foot_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_root26Shape" -p "foot_L0_root"; - rename -uid "CFFB631E-4D49-3A17-6C82-8D8D92EEA39D"; +createNode nurbsCurve -n "foot_L0_root29Shape" -p "foot_L0_root"; + rename -uid "B0F25CC2-4B99-31BC-DF58-49AFA29C3D55"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12572,8 +12555,8 @@ createNode nurbsCurve -n "foot_L0_root26Shape" -p "foot_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_root27Shape" -p "foot_L0_root"; - rename -uid "ADF88041-4D94-B3E4-F0C5-53A199DCE677"; +createNode nurbsCurve -n "foot_L0_root30Shape" -p "foot_L0_root"; + rename -uid "0C49319B-48A5-D4FA-F78C-CD88F2DEBEDC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12600,10 +12583,10 @@ createNode nurbsCurve -n "foot_L0_root27Shape" -p "foot_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "foot_L0_0_loc" -p "foot_L0_root"; - rename -uid "AE47AC95-4789-894D-9667-FC915737F089"; + rename -uid "4074EE60-4838-63A3-4AB7-148E18F59DE4"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3903626031763237 -0.77423199221117356 -0.00087398468478294689 ; + setAttr ".t" -type "double3" 1.3903626031763232 -0.77423199221117334 -0.00087398468478339097 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12612,12 +12595,12 @@ createNode transform -n "foot_L0_0_loc" -p "foot_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999967 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999956 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_0_locShape" -p "foot_L0_0_loc"; - rename -uid "A2D0279C-4451-FDC8-2BF2-A787697A1FF4"; + rename -uid "64E91A18-4F4B-3151-484A-D9A9BDF1C57A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12629,8 +12612,8 @@ createNode nurbsCurve -n "foot_L0_0_locShape" -p "foot_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_0_loc25Shape" -p "foot_L0_0_loc"; - rename -uid "8A49BF70-4F9E-F51D-D4EB-9CABDA3AA239"; +createNode nurbsCurve -n "foot_L0_0_loc28Shape" -p "foot_L0_0_loc"; + rename -uid "4DA67256-463B-2205-0797-F582681E8BD5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12642,8 +12625,8 @@ createNode nurbsCurve -n "foot_L0_0_loc25Shape" -p "foot_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_0_loc26Shape" -p "foot_L0_0_loc"; - rename -uid "5761F470-4C99-7AD9-F64A-21B214EC01D9"; +createNode nurbsCurve -n "foot_L0_0_loc29Shape" -p "foot_L0_0_loc"; + rename -uid "C5E0CA0E-4DF0-36EE-A4EE-69A0F485604C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12655,8 +12638,8 @@ createNode nurbsCurve -n "foot_L0_0_loc26Shape" -p "foot_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_0_loc27Shape" -p "foot_L0_0_loc"; - rename -uid "9FF62DE8-4838-3C5A-1D32-829530E52100"; +createNode nurbsCurve -n "foot_L0_0_loc30Shape" -p "foot_L0_0_loc"; + rename -uid "929AAAF9-42D6-2ACC-7FA0-3BA041BFDDFD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12673,8 +12656,8 @@ createNode nurbsCurve -n "foot_L0_0_loc27Shape" -p "foot_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_0_loc27_0crvShape" -p "foot_L0_0_loc"; - rename -uid "97161137-4B8E-8A0D-A89A-DFB979D74678"; +createNode nurbsCurve -n "foot_L0_0_loc30_0crvShape" -p "foot_L0_0_loc"; + rename -uid "993EB147-4A62-6AF2-8861-2E8442045205"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12691,8 +12674,8 @@ createNode nurbsCurve -n "foot_L0_0_loc27_0crvShape" -p "foot_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_0_loc27_1crvShape" -p "foot_L0_0_loc"; - rename -uid "EB6641F6-4CB7-7C21-521C-A0AEACD5691A"; +createNode nurbsCurve -n "foot_L0_0_loc30_1crvShape" -p "foot_L0_0_loc"; + rename -uid "94106918-4D6C-C68C-CC69-068B2C2622B4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12710,10 +12693,10 @@ createNode nurbsCurve -n "foot_L0_0_loc27_1crvShape" -p "foot_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "foot_L0_1_loc" -p "foot_L0_0_loc"; - rename -uid "FBCFD713-4C59-D3B0-1C5C-388499524E80"; + rename -uid "73F916C7-4575-2D36-BA53-C88DD70AA8B0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.57241624162444471 0.052400542543840967 0.00053566803260851614 ; + setAttr ".t" -type "double3" 0.57241624162444493 0.052400542543840745 0.00053566803260851614 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12722,12 +12705,12 @@ createNode transform -n "foot_L0_1_loc" -p "foot_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1 0.999999999999999 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 0.99999999999999911 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_1_locShape" -p "foot_L0_1_loc"; - rename -uid "37A4A38A-4A5C-D4EB-135B-39BA12F2813E"; + rename -uid "8ECA5A7C-4E19-9EF7-F34D-D784B8B1EC52"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12739,8 +12722,8 @@ createNode nurbsCurve -n "foot_L0_1_locShape" -p "foot_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_1_loc25Shape" -p "foot_L0_1_loc"; - rename -uid "72BC23D2-431C-6127-D998-92A10BF586AA"; +createNode nurbsCurve -n "foot_L0_1_loc28Shape" -p "foot_L0_1_loc"; + rename -uid "E4533DAF-433F-6534-AE67-07BCBA5C7975"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12752,8 +12735,8 @@ createNode nurbsCurve -n "foot_L0_1_loc25Shape" -p "foot_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_1_loc26Shape" -p "foot_L0_1_loc"; - rename -uid "502E9883-44EE-1E81-630B-02A65A4F06E2"; +createNode nurbsCurve -n "foot_L0_1_loc29Shape" -p "foot_L0_1_loc"; + rename -uid "6EA0A721-4115-E4F7-4136-7487FE96D42B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12765,8 +12748,8 @@ createNode nurbsCurve -n "foot_L0_1_loc26Shape" -p "foot_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_1_loc27Shape" -p "foot_L0_1_loc"; - rename -uid "43B5E9D6-45FA-6DE5-A795-3EBBCEDB1D49"; +createNode nurbsCurve -n "foot_L0_1_loc30Shape" -p "foot_L0_1_loc"; + rename -uid "D25FCDDE-427E-78C5-AECD-DDB06FE3622E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12783,8 +12766,8 @@ createNode nurbsCurve -n "foot_L0_1_loc27Shape" -p "foot_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_1_loc27_0crvShape" -p "foot_L0_1_loc"; - rename -uid "9B260B1F-4C02-C37B-D52A-BE845504D1DE"; +createNode nurbsCurve -n "foot_L0_1_loc30_0crvShape" -p "foot_L0_1_loc"; + rename -uid "E3D8FAC5-4B36-1B99-EC87-02A1C4795EE4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12801,8 +12784,8 @@ createNode nurbsCurve -n "foot_L0_1_loc27_0crvShape" -p "foot_L0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_1_loc27_1crvShape" -p "foot_L0_1_loc"; - rename -uid "02DA8AD4-4DB7-AC2F-BAD4-649BCE060E18"; +createNode nurbsCurve -n "foot_L0_1_loc30_1crvShape" -p "foot_L0_1_loc"; + rename -uid "71FD686B-43CC-0A70-3833-1FB6E806799C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12820,14 +12803,14 @@ createNode nurbsCurve -n "foot_L0_1_loc27_1crvShape" -p "foot_L0_1_loc"; 0 0 -0.1875 ; createNode transform -n "foot_L0_2_loc" -p "foot_L0_1_loc"; - rename -uid "93163497-4164-D6D8-1DF9-41A303C3D2A5"; + rename -uid "C792DAA1-4D6B-18C2-D44A-A9A512E952F1"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.34999482654518399 -0.34355031336095371 -0.0018389437992678559 ; + setAttr ".t" -type "double3" 0.34999482654518399 -0.34355031336095382 -0.0018389437992676338 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 89.999999999999972 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; @@ -12837,7 +12820,7 @@ createNode transform -n "foot_L0_2_loc" -p "foot_L0_1_loc"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_2_locShape" -p "foot_L0_2_loc"; - rename -uid "281ECEB9-4EB1-BFD5-2D65-72B63A806411"; + rename -uid "96AD9173-45D6-13D6-94E3-28B883C759ED"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12849,8 +12832,8 @@ createNode nurbsCurve -n "foot_L0_2_locShape" -p "foot_L0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_2_loc25Shape" -p "foot_L0_2_loc"; - rename -uid "0EBBF120-48DA-559A-D3E6-2696875DB9BD"; +createNode nurbsCurve -n "foot_L0_2_loc28Shape" -p "foot_L0_2_loc"; + rename -uid "1B42C33E-4C11-E444-7583-25BEA19AF15B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12862,8 +12845,8 @@ createNode nurbsCurve -n "foot_L0_2_loc25Shape" -p "foot_L0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_2_loc26Shape" -p "foot_L0_2_loc"; - rename -uid "036E0A31-4A9A-E0AE-CF2E-4E9EC89C3256"; +createNode nurbsCurve -n "foot_L0_2_loc29Shape" -p "foot_L0_2_loc"; + rename -uid "CB6887E8-43BE-72F8-0507-78AF69B9A2CF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12875,8 +12858,8 @@ createNode nurbsCurve -n "foot_L0_2_loc26Shape" -p "foot_L0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_2_loc27Shape" -p "foot_L0_2_loc"; - rename -uid "380A8E0A-475D-EA31-6649-7392EE83BE0D"; +createNode nurbsCurve -n "foot_L0_2_loc30Shape" -p "foot_L0_2_loc"; + rename -uid "DA8445F6-43A2-1E7D-AB32-6C84D73AA005"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12893,8 +12876,8 @@ createNode nurbsCurve -n "foot_L0_2_loc27Shape" -p "foot_L0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_2_loc27_0crvShape" -p "foot_L0_2_loc"; - rename -uid "66C5017D-4BD0-6AFD-36D5-17A0282A2AD6"; +createNode nurbsCurve -n "foot_L0_2_loc30_0crvShape" -p "foot_L0_2_loc"; + rename -uid "3D01B6FD-4A3E-BB04-D210-3488390C4389"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12911,8 +12894,8 @@ createNode nurbsCurve -n "foot_L0_2_loc27_0crvShape" -p "foot_L0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_2_loc27_1crvShape" -p "foot_L0_2_loc"; - rename -uid "768F4A86-4985-D1E6-B431-B8818880FD69"; +createNode nurbsCurve -n "foot_L0_2_loc30_1crvShape" -p "foot_L0_2_loc"; + rename -uid "10175C4B-4F48-73D1-BDEB-BEB69F6BB232"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12930,19 +12913,19 @@ createNode nurbsCurve -n "foot_L0_2_loc27_1crvShape" -p "foot_L0_2_loc"; 0 0 -0.1875 ; createNode transform -n "foot_L0_crv" -p "foot_L0_root"; - rename -uid "ACD2E3DB-4082-9AA4-075F-859C02B3EC58"; + rename -uid "96E27369-4905-47EF-0CD7-FFA4C30CECC2"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.84123625248687084 -1.2934842521415504 1.0591437062861182 ; - setAttr ".r" -type "double3" 2.8990169397258381 84.223472754416591 2.9137877746396712 ; - setAttr ".s" -type "double3" 1.0497207713808367 1.0497207713808354 1.0497207713808356 ; + setAttr ".t" -type "double3" 0.84123625248687106 -1.2934842521415504 1.059143706286118 ; + setAttr ".r" -type "double3" 2.8990169397258461 84.223472754416619 2.9137877746396836 ; + setAttr ".s" -type "double3" 1.0497207713808365 1.0497207713808354 1.0497207713808352 ; createNode nurbsCurve -n "foot_L0_crvShape" -p "foot_L0_crv"; - rename -uid "D289D0B9-4893-B721-06FB-639BF513E786"; + rename -uid "C4D1DAF0-4617-A3B1-D229-7EB884503C24"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "foot_L0_crvShapeOrig" -p "foot_L0_crv"; - rename -uid "4ACC5E48-462C-3685-EF7B-889649A6447A"; + rename -uid "C1D89C98-4020-63DA-E3F5-3FA71362824F"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -12955,10 +12938,10 @@ createNode nurbsCurve -n "foot_L0_crvShapeOrig" -p "foot_L0_crv"; 0 0 0 ; createNode transform -n "foot_L0_heel" -p "foot_L0_root"; - rename -uid "7D99F1FB-4C9B-F748-5A00-FCA2CED78D14"; + rename -uid "04B7B98D-4BD2-32C2-39C6-EA8B43F44151"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.51442201408343324 -1.2883323665462261 -0.0019628851482431653 ; + setAttr ".t" -type "double3" -0.5144220140834328 -1.2883323665462258 -0.0019628851482431653 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -12966,12 +12949,12 @@ createNode transform -n "foot_L0_heel" -p "foot_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999944 1 0.99999999999999989 ; + setAttr ".s" -type "double3" 0.999999999999999 1 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_heelShape" -p "foot_L0_heel"; - rename -uid "39DC61B8-4747-F360-EBAC-6CBA57D2B8AA"; + rename -uid "EFFE0AE9-417B-C25A-38D3-3A820373D659"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12983,8 +12966,8 @@ createNode nurbsCurve -n "foot_L0_heelShape" -p "foot_L0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_heel25Shape" -p "foot_L0_heel"; - rename -uid "324D8148-4DB8-C2D4-45AF-40B8C76BF6E3"; +createNode nurbsCurve -n "foot_L0_heel28Shape" -p "foot_L0_heel"; + rename -uid "3C2F4B12-4D30-96C5-9AC4-A9BF1DEFAEF8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -12996,8 +12979,8 @@ createNode nurbsCurve -n "foot_L0_heel25Shape" -p "foot_L0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_heel26Shape" -p "foot_L0_heel"; - rename -uid "5AFF1CA8-497B-2249-0545-11A3A1BBC94C"; +createNode nurbsCurve -n "foot_L0_heel29Shape" -p "foot_L0_heel"; + rename -uid "7AE9F6A8-445A-E5C1-E7BA-608715DEBB45"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13009,8 +12992,8 @@ createNode nurbsCurve -n "foot_L0_heel26Shape" -p "foot_L0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_heel27Shape" -p "foot_L0_heel"; - rename -uid "D35E4127-4C2C-2E41-2140-0F9735BB77C7"; +createNode nurbsCurve -n "foot_L0_heel30Shape" -p "foot_L0_heel"; + rename -uid "EEDA2EB5-43DD-8EAE-FEB6-2C85A7E913D2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13027,8 +13010,8 @@ createNode nurbsCurve -n "foot_L0_heel27Shape" -p "foot_L0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_heel27_0crvShape" -p "foot_L0_heel"; - rename -uid "7C867369-435E-6133-DD4E-5187EAB6E062"; +createNode nurbsCurve -n "foot_L0_heel30_0crvShape" -p "foot_L0_heel"; + rename -uid "F2B34FAD-4E88-2C7E-E71A-0F95311D909D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13045,8 +13028,8 @@ createNode nurbsCurve -n "foot_L0_heel27_0crvShape" -p "foot_L0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_heel27_1crvShape" -p "foot_L0_heel"; - rename -uid "B07001DA-415D-30D5-644A-68A3C028C013"; +createNode nurbsCurve -n "foot_L0_heel30_1crvShape" -p "foot_L0_heel"; + rename -uid "D1CABA29-4665-9CBE-215B-64ACC91A7124"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13064,10 +13047,10 @@ createNode nurbsCurve -n "foot_L0_heel27_1crvShape" -p "foot_L0_heel"; 0 0 -0.1875 ; createNode transform -n "foot_L0_outpivot" -p "foot_L0_root"; - rename -uid "D2511BF3-44FC-5F50-78B8-4F822A439917"; + rename -uid "FF24CD9D-4585-27FF-05CF-42B6A9AD67B3"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3551807145991015 -1.2852474767223829 -0.54483578923279818 ; + setAttr ".t" -type "double3" 1.3551807145991011 -1.2852474767223827 -0.54483578923279863 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -13075,12 +13058,12 @@ createNode transform -n "foot_L0_outpivot" -p "foot_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999944 1 0.99999999999999989 ; + setAttr ".s" -type "double3" 0.999999999999999 1 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_outpivotShape" -p "foot_L0_outpivot"; - rename -uid "C4F4E771-4F54-435A-2B1E-C085C97F94FD"; + rename -uid "1E964282-4535-6070-9FA3-A2B83D55B388"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13092,8 +13075,8 @@ createNode nurbsCurve -n "foot_L0_outpivotShape" -p "foot_L0_outpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_outpivot25Shape" -p "foot_L0_outpivot"; - rename -uid "5C9412F9-456C-532D-441A-D29D43CBB5F9"; +createNode nurbsCurve -n "foot_L0_outpivot28Shape" -p "foot_L0_outpivot"; + rename -uid "7B8CDCDA-4E0E-EDD7-9F8F-4BA25AC036D9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13105,8 +13088,8 @@ createNode nurbsCurve -n "foot_L0_outpivot25Shape" -p "foot_L0_outpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_outpivot26Shape" -p "foot_L0_outpivot"; - rename -uid "02281F30-4F40-8E13-26DA-96868D6DB508"; +createNode nurbsCurve -n "foot_L0_outpivot29Shape" -p "foot_L0_outpivot"; + rename -uid "EE7BB27A-471F-ED1D-F32F-DE83FA14CB28"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13118,8 +13101,8 @@ createNode nurbsCurve -n "foot_L0_outpivot26Shape" -p "foot_L0_outpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_outpivot27Shape" -p "foot_L0_outpivot"; - rename -uid "7F5C5329-4B8D-84FA-136E-4CAE96F06301"; +createNode nurbsCurve -n "foot_L0_outpivot30Shape" -p "foot_L0_outpivot"; + rename -uid "DFEBCF28-4F85-FFF9-60B0-8892636C93D2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13136,8 +13119,8 @@ createNode nurbsCurve -n "foot_L0_outpivot27Shape" -p "foot_L0_outpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_outpivot27_0crvShape" -p "foot_L0_outpivot"; - rename -uid "3DE6AD47-45E4-9C8E-F1A2-578FCF16C30E"; +createNode nurbsCurve -n "foot_L0_outpivot30_0crvShape" -p "foot_L0_outpivot"; + rename -uid "8E2B41E9-42FD-2AD9-9792-218272548154"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13154,8 +13137,8 @@ createNode nurbsCurve -n "foot_L0_outpivot27_0crvShape" -p "foot_L0_outpivot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_outpivot27_1crvShape" -p "foot_L0_outpivot"; - rename -uid "D6EE045F-4246-7A92-C7B6-8593C4619DE8"; +createNode nurbsCurve -n "foot_L0_outpivot30_1crvShape" -p "foot_L0_outpivot"; + rename -uid "2805BAAC-4166-5CBB-51FD-C7BE6847B077"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13173,10 +13156,10 @@ createNode nurbsCurve -n "foot_L0_outpivot27_1crvShape" -p "foot_L0_outpivot"; 0 0 -0.1875 ; createNode transform -n "foot_L0_inpivot" -p "foot_L0_root"; - rename -uid "FA5F08FB-434C-802B-9B5F-9D94D07899D0"; + rename -uid "65871AD8-4B29-7380-6A79-E4BC6D7E868D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3551807145991013 -1.2905939540073492 0.6523426983376851 ; + setAttr ".t" -type "double3" 1.3551807145991011 -1.290593954007349 0.65234269833768466 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -13184,12 +13167,12 @@ createNode transform -n "foot_L0_inpivot" -p "foot_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999944 1 0.99999999999999989 ; + setAttr ".s" -type "double3" 0.999999999999999 1 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_L0_inpivotShape" -p "foot_L0_inpivot"; - rename -uid "A3473E90-4898-AAFC-4D4A-2ABCB28951DB"; + rename -uid "14BD0651-4D66-E31C-602E-5980123C4B1E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13201,8 +13184,8 @@ createNode nurbsCurve -n "foot_L0_inpivotShape" -p "foot_L0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_L0_inpivot25Shape" -p "foot_L0_inpivot"; - rename -uid "BB61937E-4D0F-98E1-9E03-47B6B9EAEE15"; +createNode nurbsCurve -n "foot_L0_inpivot28Shape" -p "foot_L0_inpivot"; + rename -uid "02BBA7EE-4276-2DDC-636A-49B821F91710"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13214,8 +13197,8 @@ createNode nurbsCurve -n "foot_L0_inpivot25Shape" -p "foot_L0_inpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_L0_inpivot26Shape" -p "foot_L0_inpivot"; - rename -uid "89CEF1F6-4B66-857F-79B8-84BEA3343E3B"; +createNode nurbsCurve -n "foot_L0_inpivot29Shape" -p "foot_L0_inpivot"; + rename -uid "F59E6983-4835-9A7C-40C2-779AA655DE36"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13227,8 +13210,8 @@ createNode nurbsCurve -n "foot_L0_inpivot26Shape" -p "foot_L0_inpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_L0_inpivot27Shape" -p "foot_L0_inpivot"; - rename -uid "9EB7ED94-43B6-78D1-BBA2-FDA00152787C"; +createNode nurbsCurve -n "foot_L0_inpivot30Shape" -p "foot_L0_inpivot"; + rename -uid "C9E8BFB3-414E-A7E8-3839-028DA05084FC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13245,8 +13228,8 @@ createNode nurbsCurve -n "foot_L0_inpivot27Shape" -p "foot_L0_inpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_inpivot27_0crvShape" -p "foot_L0_inpivot"; - rename -uid "D7B541F2-4134-B12E-B13A-A4BA18294844"; +createNode nurbsCurve -n "foot_L0_inpivot30_0crvShape" -p "foot_L0_inpivot"; + rename -uid "B04A0802-4D3F-6F5F-4683-50BD1F92E041"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13263,8 +13246,8 @@ createNode nurbsCurve -n "foot_L0_inpivot27_0crvShape" -p "foot_L0_inpivot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_L0_inpivot27_1crvShape" -p "foot_L0_inpivot"; - rename -uid "8EE342D6-4C8D-A349-D8AD-D18F951BF2F8"; +createNode nurbsCurve -n "foot_L0_inpivot30_1crvShape" -p "foot_L0_inpivot"; + rename -uid "A1C92A6F-4EB8-ECDE-B4E1-1D817E286478"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13282,19 +13265,19 @@ createNode nurbsCurve -n "foot_L0_inpivot27_1crvShape" -p "foot_L0_inpivot"; 0 0 -0.1875 ; createNode transform -n "foot_L0_1" -p "foot_L0_root"; - rename -uid "2AF59BE4-45AB-461C-120C-42948AB6770B"; + rename -uid "4DED4A7F-4310-369F-D841-309880F9BA10"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.84123625248687084 -1.2934842521415504 1.0591437062861182 ; - setAttr ".r" -type "double3" 2.8990169397258381 84.223472754416591 2.9137877746396712 ; - setAttr ".s" -type "double3" 1.0497207713808367 1.0497207713808354 1.0497207713808356 ; + setAttr ".t" -type "double3" 0.84123625248687106 -1.2934842521415504 1.059143706286118 ; + setAttr ".r" -type "double3" 2.8990169397258461 84.223472754416619 2.9137877746396836 ; + setAttr ".s" -type "double3" 1.0497207713808365 1.0497207713808354 1.0497207713808352 ; createNode nurbsCurve -n "foot_L0_Shape1" -p "foot_L0_1"; - rename -uid "8EA58EAD-47FC-BDFE-18F3-DFABD52546C6"; + rename -uid "390C28C4-4D91-BBA6-3A2D-129F1DA37855"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "foot_L0_Shape1Orig" -p "foot_L0_1"; - rename -uid "FCA0635B-4FD2-567D-43E5-6888F231643F"; + rename -uid "F75BF762-4139-A512-639E-27AD33E27424"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -13308,7 +13291,7 @@ createNode nurbsCurve -n "foot_L0_Shape1Orig" -p "foot_L0_1"; 0 0 0 ; createNode transform -n "legUI_L0_root" -p "foot_L0_root"; - rename -uid "FADB5402-41CC-5E85-D4A4-D987FBBFCB70"; + rename -uid "C3290E5D-4057-5E15-271D-87AB92554BA3"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -13332,21 +13315,23 @@ createNode transform -n "legUI_L0_root" -p "foot_L0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.5990855265032945 0.51029795172993664 -1.4395512694570036 ; + setAttr ".t" -type "double3" 0.59908552650329416 0.51029795172993664 -1.4395512694570038 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 89.999999999999972 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000011 1 0.99999999999999845 ; + setAttr ".s" -type "double3" 1.0000000000000009 1 0.999999999999998 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -13358,11 +13343,8 @@ createNode transform -n "legUI_L0_root" -p "foot_L0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legUI_L0_rootShape" -p "legUI_L0_root"; - rename -uid "9ACDC1BE-498E-5CEE-98C6-D7A3BC5A7339"; + rename -uid "3BA185E4-491B-A24D-84F0-D7AFE6A0328D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13374,8 +13356,8 @@ createNode nurbsCurve -n "legUI_L0_rootShape" -p "legUI_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legUI_L0_root25Shape" -p "legUI_L0_root"; - rename -uid "D3F7F5AE-41E9-F8E1-885D-88B77397FFA3"; +createNode nurbsCurve -n "legUI_L0_root28Shape" -p "legUI_L0_root"; + rename -uid "A6DB2133-4F38-D6DA-5105-0CBEA4ADB266"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13387,8 +13369,8 @@ createNode nurbsCurve -n "legUI_L0_root25Shape" -p "legUI_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legUI_L0_root26Shape" -p "legUI_L0_root"; - rename -uid "C35BEF43-4342-493F-364E-3994D275D2F5"; +createNode nurbsCurve -n "legUI_L0_root29Shape" -p "legUI_L0_root"; + rename -uid "DBE2A310-44DE-2758-009B-A69EAB318848"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13400,8 +13382,8 @@ createNode nurbsCurve -n "legUI_L0_root26Shape" -p "legUI_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legUI_L0_root27Shape" -p "legUI_L0_root"; - rename -uid "0CC80AF5-4C44-448B-EDF7-E48F4590B5BF"; +createNode nurbsCurve -n "legUI_L0_root30Shape" -p "legUI_L0_root"; + rename -uid "E74C16A7-4727-1FD6-4ACC-2C99BDCA4660"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13428,36 +13410,36 @@ createNode nurbsCurve -n "legUI_L0_root27Shape" -p "legUI_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legUI_L0_sizeRef" -p "legUI_L0_root"; - rename -uid "02DBE776-4C5B-858A-C18C-A181AF6483E0"; + rename -uid "E287E6A6-40B2-1BB8-FD2E-9B89D601BCED"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.10551782846565061 2.2204460492503131e-016 1.0444039858906486 ; + setAttr ".t" -type "double3" -0.10551782846565105 -2.2204460492503131e-016 1.0444039858906484 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" -0.029616667963981724 -5.7690337251489909 0.29463615418735922 ; + setAttr ".r" -type "double3" -0.029616667963981717 -5.7690337251489883 0.29463615418735928 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0497207713808359 1.0497207713808356 1.0497207713808374 ; + setAttr ".s" -type "double3" 1.0497207713808356 1.0497207713808356 1.0497207713808374 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "leg_L0_crv" -p "leg_L0_root"; - rename -uid "0559414B-4256-5FC3-B871-708445BC7150"; + rename -uid "585220C3-4323-4AD0-ED8C-EA9D3EB401A2"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.214166852209233 0.19144303592045905 0.9690219642037361 ; + setAttr ".t" -type "double3" -10.214166852209233 0.19144303592045897 0.96902196420373599 ; setAttr ".r" -type "double3" 89.999999999998764 89.706856137729844 0 ; - setAttr ".s" -type "double3" 1.0495082267377407 1.0495082267377378 1.0495082267377411 ; + setAttr ".s" -type "double3" 1.0495082267377405 1.049508226737738 1.0495082267377407 ; createNode nurbsCurve -n "leg_L0_crvShape" -p "leg_L0_crv"; - rename -uid "4AB24201-4057-7725-E293-D4B2860D3AAB"; + rename -uid "2CC9AD70-4929-54CE-6BD9-65A76D8EF680"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "leg_L0_crvShapeOrig" -p "leg_L0_crv"; - rename -uid "57A2A05B-4359-F9AC-B761-BEA21E319FE8"; + rename -uid "792B7C41-423A-891A-C74D-30869924F1FF"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -13470,7 +13452,7 @@ createNode nurbsCurve -n "leg_L0_crvShapeOrig" -p "leg_L0_crv"; 0 0 0 ; createNode transform -n "leg_R0_root" -p "spine_C0_root"; - rename -uid "68C62DB2-4033-977F-AF96-4B9233D1422B"; + rename -uid "E9F3FF50-403F-CA4C-8FCA-CEB552B554AF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -13479,29 +13461,29 @@ createNode transform -n "leg_R0_root" -p "spine_C0_root"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; addAttr -ci true -sn "pinrefarray" -ln "pinrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -sn "mirrorMid" -ln "mirrorMid" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.1814583394588016 6.6613381477509392e-016 1.0212680564255747 ; + setAttr ".t" -type "double3" -1.1814583394588016 7.7715611723760958e-016 1.0212680564255743 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 -0.29314386227019551 0 ; + setAttr ".r" -type "double3" 0 -0.29314386227019557 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000022 0.99999999999999845 -0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000022 0.99999999999999822 -1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -13511,18 +13493,13 @@ createNode transform -n "leg_R0_root" -p "spine_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "legUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root"; - setAttr ".upvrefarray" -type "string" ""; - setAttr ".pinrefarray" -type "string" ""; - setAttr ".maxstretch" 1.5; - setAttr ".div0" 2; - setAttr ".div1" 2; + setAttr ".ikrefarray" -type "string" "local_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,global_C0_root"; + setAttr ".pinrefarray" -type "string" "local_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "leg_R0_rootShape" -p "leg_R0_root"; - rename -uid "6A9DBA4C-448B-2939-34DE-8A9D15DB29F3"; + rename -uid "0C2D60C3-452C-EFA0-CADC-C9A6DE2124DC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13534,8 +13511,8 @@ createNode nurbsCurve -n "leg_R0_rootShape" -p "leg_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_R0_root25Shape" -p "leg_R0_root"; - rename -uid "563F71F7-42CF-C494-5DBA-10BF8C8911CE"; +createNode nurbsCurve -n "leg_R0_root4Shape" -p "leg_R0_root"; + rename -uid "BD348ED9-41BC-7495-B25D-559CCD872405"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13547,8 +13524,8 @@ createNode nurbsCurve -n "leg_R0_root25Shape" -p "leg_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_R0_root26Shape" -p "leg_R0_root"; - rename -uid "F79F48C2-46E5-BBD9-F18E-DEBD3CAA4BA6"; +createNode nurbsCurve -n "leg_R0_root5Shape" -p "leg_R0_root"; + rename -uid "FA0D7DC2-41B3-3925-9EC9-A6AEDC03969E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13560,8 +13537,8 @@ createNode nurbsCurve -n "leg_R0_root26Shape" -p "leg_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_R0_root27Shape" -p "leg_R0_root"; - rename -uid "242C2E18-4D38-4AD9-AC78-EDAC677478E4"; +createNode nurbsCurve -n "leg_R0_root6Shape" -p "leg_R0_root"; + rename -uid "5EA45749-4BE0-38DC-9EED-9691E7A83746"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13588,10 +13565,10 @@ createNode nurbsCurve -n "leg_R0_root27Shape" -p "leg_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "leg_R0_knee" -p "leg_R0_root"; - rename -uid "C5A92A65-41AE-B805-EB97-59A43243B105"; + rename -uid "A7C0872D-4A34-8005-718C-898149D97704"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -4.3795369772304085 0.3883864434680584 -4.6629367034256575e-015 ; + setAttr ".t" -type "double3" -4.3795369772304023 0.38838644346805862 -3.7747582837255322e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -13600,12 +13577,12 @@ createNode transform -n "leg_R0_knee" -p "leg_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999911 1.0000000000000018 ; + setAttr ".s" -type "double3" 1.0000000000000011 1 1.0000000000000018 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_R0_kneeShape" -p "leg_R0_knee"; - rename -uid "684F92D7-4E92-0352-83A8-6FB7F8F6DB94"; + rename -uid "D5003133-4D3C-12F9-AA37-C49EBBBF1761"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13617,8 +13594,8 @@ createNode nurbsCurve -n "leg_R0_kneeShape" -p "leg_R0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_R0_knee25Shape" -p "leg_R0_knee"; - rename -uid "7F89AFE1-4D8D-B2E7-60EF-C4A13BB1BE71"; +createNode nurbsCurve -n "leg_R0_knee4Shape" -p "leg_R0_knee"; + rename -uid "6A415001-45AB-1311-3CFE-7BBEEB2E9B1A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13630,8 +13607,8 @@ createNode nurbsCurve -n "leg_R0_knee25Shape" -p "leg_R0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_R0_knee26Shape" -p "leg_R0_knee"; - rename -uid "DE576E35-433B-3BE8-380A-AA8DA96FA257"; +createNode nurbsCurve -n "leg_R0_knee5Shape" -p "leg_R0_knee"; + rename -uid "F028A3EA-4FA3-6468-0786-428B793ACEA0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13643,8 +13620,8 @@ createNode nurbsCurve -n "leg_R0_knee26Shape" -p "leg_R0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_R0_knee27Shape" -p "leg_R0_knee"; - rename -uid "10AFE2A6-4AA8-10B6-B4E3-F0B83E59DEF9"; +createNode nurbsCurve -n "leg_R0_knee6Shape" -p "leg_R0_knee"; + rename -uid "ABA11490-4465-7411-A54C-A7AEB48B97FC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13661,8 +13638,8 @@ createNode nurbsCurve -n "leg_R0_knee27Shape" -p "leg_R0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_knee27_0crvShape" -p "leg_R0_knee"; - rename -uid "51BC9BDD-4FCC-1B63-349E-ED942AFA2A12"; +createNode nurbsCurve -n "leg_R0_knee6_0crvShape" -p "leg_R0_knee"; + rename -uid "27797664-4C6D-B922-EC60-0A8D3DBBEF69"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13679,8 +13656,8 @@ createNode nurbsCurve -n "leg_R0_knee27_0crvShape" -p "leg_R0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_knee27_1crvShape" -p "leg_R0_knee"; - rename -uid "A137523A-4925-5497-160E-D68543D1ACE7"; +createNode nurbsCurve -n "leg_R0_knee6_1crvShape" -p "leg_R0_knee"; + rename -uid "C8C6F2FD-40E6-837B-6B90-828295640CBE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13698,10 +13675,10 @@ createNode nurbsCurve -n "leg_R0_knee27_1crvShape" -p "leg_R0_knee"; 0 0 -0.1875 ; createNode transform -n "leg_R0_ankle" -p "leg_R0_knee"; - rename -uid "F12D648D-4BD2-4819-1951-13A422FC4F87"; + rename -uid "C7658E00-448E-0656-C085-5CAF065A51E3"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -3.3306690738754696e-015 -4.5414075240554155 -0.74630601922780038 ; + setAttr ".t" -type "double3" -6.6613381477509392e-016 -4.5414075240554155 -0.74630601922780004 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -13709,12 +13686,12 @@ createNode transform -n "leg_R0_ankle" -p "leg_R0_knee"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000022 0.99999999999999989 0.99999999999999878 ; + setAttr ".s" -type "double3" 1.0000000000000016 0.99999999999999989 0.99999999999999878 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_R0_ankleShape" -p "leg_R0_ankle"; - rename -uid "1CC3D5B1-4B3E-3A28-93ED-70B8E4FD15FF"; + rename -uid "D9F1987C-4691-2118-32A1-BBA508DCB5E7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13726,8 +13703,8 @@ createNode nurbsCurve -n "leg_R0_ankleShape" -p "leg_R0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_R0_ankle25Shape" -p "leg_R0_ankle"; - rename -uid "5ABD47EF-4398-15B2-F654-D6A97596E200"; +createNode nurbsCurve -n "leg_R0_ankle4Shape" -p "leg_R0_ankle"; + rename -uid "D82525FD-4457-A31B-8417-C48C00AE8464"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13739,8 +13716,8 @@ createNode nurbsCurve -n "leg_R0_ankle25Shape" -p "leg_R0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_R0_ankle26Shape" -p "leg_R0_ankle"; - rename -uid "B2E7E98E-4424-5639-4AE6-0D85D7B6D64A"; +createNode nurbsCurve -n "leg_R0_ankle5Shape" -p "leg_R0_ankle"; + rename -uid "DFA4AE6B-41E8-9301-DBA4-4FB871B8C2B3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13752,8 +13729,8 @@ createNode nurbsCurve -n "leg_R0_ankle26Shape" -p "leg_R0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_R0_ankle27Shape" -p "leg_R0_ankle"; - rename -uid "BFFEB731-458C-E717-4C65-DAB96D9FB96F"; +createNode nurbsCurve -n "leg_R0_ankle6Shape" -p "leg_R0_ankle"; + rename -uid "17332D19-4C45-047E-804B-E5B8BF89B40D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13770,8 +13747,8 @@ createNode nurbsCurve -n "leg_R0_ankle27Shape" -p "leg_R0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_ankle27_0crvShape" -p "leg_R0_ankle"; - rename -uid "5B5CF71C-4BE0-B3DB-D805-A6AABD99FD49"; +createNode nurbsCurve -n "leg_R0_ankle6_0crvShape" -p "leg_R0_ankle"; + rename -uid "0E0D00B8-4DB6-108C-6B6F-0AA74C71F480"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13788,8 +13765,8 @@ createNode nurbsCurve -n "leg_R0_ankle27_0crvShape" -p "leg_R0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_ankle27_1crvShape" -p "leg_R0_ankle"; - rename -uid "60921819-48D3-4D20-A1F7-4BBEB9B6089A"; +createNode nurbsCurve -n "leg_R0_ankle6_1crvShape" -p "leg_R0_ankle"; + rename -uid "7FCC3DAB-4F9D-0A84-2E75-569EA63285D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13807,10 +13784,10 @@ createNode nurbsCurve -n "leg_R0_ankle27_1crvShape" -p "leg_R0_ankle"; 0 0 -0.1875 ; createNode transform -n "leg_R0_eff" -p "leg_R0_ankle"; - rename -uid "A05D230C-41E0-8265-345A-8B982CE22EDF"; + rename -uid "BC21A577-4691-A92A-710C-DDA175232B39"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.9984014443252818e-015 2.4424906541753444e-015 2.1377206638691328 ; + setAttr ".t" -type "double3" 1.5543122344752192e-015 2.4424906541753444e-015 2.1377206638691337 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -13819,12 +13796,12 @@ createNode transform -n "leg_R0_eff" -p "leg_R0_ankle"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000029 1.0000000000000002 1.0000000000000024 ; + setAttr ".s" -type "double3" 1.0000000000000042 0.99999999999999878 1.0000000000000031 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "leg_R0_effShape" -p "leg_R0_eff"; - rename -uid "03C5C901-4D52-F881-2D59-BBA8505C3872"; + rename -uid "8EF35C6F-4634-C731-AD38-DE81BE6F4480"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13836,8 +13813,8 @@ createNode nurbsCurve -n "leg_R0_effShape" -p "leg_R0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "leg_R0_eff25Shape" -p "leg_R0_eff"; - rename -uid "820A43F4-4217-AC39-F2A9-95921550DFFA"; +createNode nurbsCurve -n "leg_R0_eff4Shape" -p "leg_R0_eff"; + rename -uid "01114149-44B9-F5B9-2F9B-F1B78DC92271"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13849,8 +13826,8 @@ createNode nurbsCurve -n "leg_R0_eff25Shape" -p "leg_R0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "leg_R0_eff26Shape" -p "leg_R0_eff"; - rename -uid "3DB9E0E9-472A-0FD8-0AE6-AC9D0584E514"; +createNode nurbsCurve -n "leg_R0_eff5Shape" -p "leg_R0_eff"; + rename -uid "D32620EB-4E19-B8BE-29CC-D8B2635D060F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13862,8 +13839,8 @@ createNode nurbsCurve -n "leg_R0_eff26Shape" -p "leg_R0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "leg_R0_eff27Shape" -p "leg_R0_eff"; - rename -uid "71BB0BD0-4CAC-7F9E-D05F-118CC6BA36C9"; +createNode nurbsCurve -n "leg_R0_eff6Shape" -p "leg_R0_eff"; + rename -uid "134A21A0-433C-83AF-E5A6-388FEEAB19A4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13880,8 +13857,8 @@ createNode nurbsCurve -n "leg_R0_eff27Shape" -p "leg_R0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_eff27_0crvShape" -p "leg_R0_eff"; - rename -uid "0A7E898A-4905-707D-CBEF-9B8F35293F65"; +createNode nurbsCurve -n "leg_R0_eff6_0crvShape" -p "leg_R0_eff"; + rename -uid "46B5D75E-402D-8198-E6DD-9697E2C94EA3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13898,8 +13875,8 @@ createNode nurbsCurve -n "leg_R0_eff27_0crvShape" -p "leg_R0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "leg_R0_eff27_1crvShape" -p "leg_R0_eff"; - rename -uid "919EA3B5-4DD6-FF64-5971-C1BCFF6EDE0E"; +createNode nurbsCurve -n "leg_R0_eff6_1crvShape" -p "leg_R0_eff"; + rename -uid "4B2BE4BD-4419-6783-7BFA-1AA9E9A56FC1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13917,7 +13894,7 @@ createNode nurbsCurve -n "leg_R0_eff27_1crvShape" -p "leg_R0_eff"; 0 0 -0.1875 ; createNode transform -n "foot_R0_root" -p "leg_R0_ankle"; - rename -uid "7E5ADD70-4B9A-DF12-3DF9-DBAA61715DC7"; + rename -uid "F81A4DA7-4C6C-7492-BC0C-E98E4BB42F79"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -13926,20 +13903,20 @@ createNode transform -n "foot_R0_root" -p "leg_R0_ankle"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.2212453270876722e-015 1.9984014443252818e-015 2.2204460492503131e-016 ; + setAttr ".t" -type "double3" 5.5511151231257827e-016 1.7763568394002505e-015 0 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 -84.230890510426093 0 ; + setAttr ".r" -type "double3" 0 -84.230890510426036 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99979752268518451 0.99979752268518429 0.99979752268518296 ; + setAttr ".s" -type "double3" 0.99979752268518485 0.99979752268518218 0.99979752268518141 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -13949,10 +13926,8 @@ createNode transform -n "foot_R0_root" -p "leg_R0_ankle"; setAttr ".connector" -type "string" "leg_2jnt_01"; setAttr ".ui_host" -type "string" "legUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "foot_R0_rootShape" -p "foot_R0_root"; - rename -uid "A8B63760-4592-C335-A908-B5BAC99DED11"; + rename -uid "939DDADE-48F7-8905-DA5A-F48F25CAF3CF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13964,8 +13939,8 @@ createNode nurbsCurve -n "foot_R0_rootShape" -p "foot_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_root25Shape" -p "foot_R0_root"; - rename -uid "914095FA-4A88-2B9B-287D-A08B5BC60175"; +createNode nurbsCurve -n "foot_R0_root4Shape" -p "foot_R0_root"; + rename -uid "F83B0205-44B9-CFEB-28E4-8A8F3CECCE7C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13977,8 +13952,8 @@ createNode nurbsCurve -n "foot_R0_root25Shape" -p "foot_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_root26Shape" -p "foot_R0_root"; - rename -uid "8562E0CE-45A8-C768-D4FB-F88550F6637D"; +createNode nurbsCurve -n "foot_R0_root5Shape" -p "foot_R0_root"; + rename -uid "549E319F-4F1A-1DED-0BA5-BCAAD83FB163"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -13990,8 +13965,8 @@ createNode nurbsCurve -n "foot_R0_root26Shape" -p "foot_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_root27Shape" -p "foot_R0_root"; - rename -uid "722E3881-4A66-8998-06DE-04B069DAF2C0"; +createNode nurbsCurve -n "foot_R0_root6Shape" -p "foot_R0_root"; + rename -uid "CF66E927-468B-7802-08AC-76877021EC3C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14018,24 +13993,24 @@ createNode nurbsCurve -n "foot_R0_root27Shape" -p "foot_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "foot_R0_0_loc" -p "foot_R0_root"; - rename -uid "897AC8A6-4509-9812-F3FC-BCA3739341E4"; + rename -uid "4A8FFE71-46E9-8B5A-B47C-BEB18092B6C5"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3903626031763234 -0.77423199221117323 -0.00087398468478161462 ; + setAttr ".t" -type "double3" 1.3903626031763223 -0.77423199221117389 -0.00087398468478183666 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0 -22.49024465344802 ; + setAttr ".r" -type "double3" 0 0 -22.490244653448066 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999822 0.99999999999999856 0.99999999999999911 ; + setAttr ".s" -type "double3" 0.99999999999999845 0.99999999999999956 1.0000000000000011 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_0_locShape" -p "foot_R0_0_loc"; - rename -uid "566AD260-4FBC-F468-25BC-A99D215C9C3D"; + rename -uid "88B52614-44A3-B8CF-6B77-96AF68489843"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14047,8 +14022,8 @@ createNode nurbsCurve -n "foot_R0_0_locShape" -p "foot_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_0_loc25Shape" -p "foot_R0_0_loc"; - rename -uid "51BB368B-4DB0-3D19-3478-3E96F0BA0620"; +createNode nurbsCurve -n "foot_R0_0_loc4Shape" -p "foot_R0_0_loc"; + rename -uid "287D9699-45BA-B250-0765-C3A30E596711"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14060,8 +14035,8 @@ createNode nurbsCurve -n "foot_R0_0_loc25Shape" -p "foot_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_0_loc26Shape" -p "foot_R0_0_loc"; - rename -uid "EC890CE6-494B-DAFD-17C0-B893D075ADC7"; +createNode nurbsCurve -n "foot_R0_0_loc5Shape" -p "foot_R0_0_loc"; + rename -uid "591828FE-4CE3-2159-A3E1-F8BF68DFBCE7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14073,8 +14048,8 @@ createNode nurbsCurve -n "foot_R0_0_loc26Shape" -p "foot_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_0_loc27Shape" -p "foot_R0_0_loc"; - rename -uid "EC559A03-480B-F671-43DA-119666455D70"; +createNode nurbsCurve -n "foot_R0_0_loc6Shape" -p "foot_R0_0_loc"; + rename -uid "9EDFE4E8-4D1E-EFF9-A276-C0AEE435636A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14091,8 +14066,8 @@ createNode nurbsCurve -n "foot_R0_0_loc27Shape" -p "foot_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_0_loc27_0crvShape" -p "foot_R0_0_loc"; - rename -uid "5E1A3BE4-49BC-160C-8DE4-F3B31262C62A"; +createNode nurbsCurve -n "foot_R0_0_loc6_0crvShape" -p "foot_R0_0_loc"; + rename -uid "A70BFF6B-4DDE-7FE8-C1AC-E7A44FFA8F11"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14109,8 +14084,8 @@ createNode nurbsCurve -n "foot_R0_0_loc27_0crvShape" -p "foot_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_0_loc27_1crvShape" -p "foot_R0_0_loc"; - rename -uid "F8323E7C-4EB8-0B10-CFE0-B59AD49392F9"; +createNode nurbsCurve -n "foot_R0_0_loc6_1crvShape" -p "foot_R0_0_loc"; + rename -uid "B744348F-45BE-73D2-5483-AE9B2DE9EA0E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14128,24 +14103,24 @@ createNode nurbsCurve -n "foot_R0_0_loc27_1crvShape" -p "foot_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "foot_R0_1_loc" -p "foot_R0_0_loc"; - rename -uid "4857E195-4757-3C0C-5C66-BC86493FF26C"; + rename -uid "F063FDCD-4FE2-4124-C150-B9B786DAAEFE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.57241624162444316 0.052400542543842743 0.00053566803260785001 ; + setAttr ".t" -type "double3" 0.57241624162444515 0.0524005425438413 0.0005356680326082941 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 0 22.49024465344802 ; + setAttr ".r" -type "double3" 0 0 22.490244653448027 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000016 1.0000000000000002 1.0000000000000011 ; + setAttr ".s" -type "double3" 1.0000000000000009 1 0.99999999999999911 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_1_locShape" -p "foot_R0_1_loc"; - rename -uid "8678076A-4D70-75BB-40BC-A797BCEC5332"; + rename -uid "DCB57212-4E1B-2986-0881-71BC78110964"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14157,8 +14132,8 @@ createNode nurbsCurve -n "foot_R0_1_locShape" -p "foot_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_1_loc25Shape" -p "foot_R0_1_loc"; - rename -uid "98A0AAC2-438C-FB0F-955F-9A8B042F31C1"; +createNode nurbsCurve -n "foot_R0_1_loc4Shape" -p "foot_R0_1_loc"; + rename -uid "59176BCF-407E-13EB-0BA1-3C8631A968BD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14170,8 +14145,8 @@ createNode nurbsCurve -n "foot_R0_1_loc25Shape" -p "foot_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_1_loc26Shape" -p "foot_R0_1_loc"; - rename -uid "A8243406-4C17-9CA5-A59D-B880B8666F52"; +createNode nurbsCurve -n "foot_R0_1_loc5Shape" -p "foot_R0_1_loc"; + rename -uid "A80D3149-4166-E52F-ECD7-D7B2083B8DDF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14183,8 +14158,8 @@ createNode nurbsCurve -n "foot_R0_1_loc26Shape" -p "foot_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_1_loc27Shape" -p "foot_R0_1_loc"; - rename -uid "A0B431DB-4FEC-30CD-DB32-9EB9680D7ABE"; +createNode nurbsCurve -n "foot_R0_1_loc6Shape" -p "foot_R0_1_loc"; + rename -uid "23412282-4232-BBA6-0B80-49BF02CD9538"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14201,8 +14176,8 @@ createNode nurbsCurve -n "foot_R0_1_loc27Shape" -p "foot_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_1_loc27_0crvShape" -p "foot_R0_1_loc"; - rename -uid "9E0C7DEF-42F9-0F95-AF09-31B72C61F715"; +createNode nurbsCurve -n "foot_R0_1_loc6_0crvShape" -p "foot_R0_1_loc"; + rename -uid "A9977BE5-44F6-A0CA-823E-06A1828628E3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14219,8 +14194,8 @@ createNode nurbsCurve -n "foot_R0_1_loc27_0crvShape" -p "foot_R0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_1_loc27_1crvShape" -p "foot_R0_1_loc"; - rename -uid "10894C43-42F4-0AB3-F211-6D8E29A3C5B0"; +createNode nurbsCurve -n "foot_R0_1_loc6_1crvShape" -p "foot_R0_1_loc"; + rename -uid "AC69BD81-45FC-4312-15B7-9AB33F91AD4B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14238,10 +14213,10 @@ createNode nurbsCurve -n "foot_R0_1_loc27_1crvShape" -p "foot_R0_1_loc"; 0 0 -0.1875 ; createNode transform -n "foot_R0_2_loc" -p "foot_R0_1_loc"; - rename -uid "4F5A0228-48C0-620D-2D50-1D86F3DF9CA1"; + rename -uid "1BC0ACC5-4A4D-2250-95D6-C9ACA96FB806"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.34999482654518421 -0.34355031336095415 -0.0018389437992674118 ; + setAttr ".t" -type "double3" 0.3499948265451831 -0.34355031336095398 -0.0018389437992665236 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -14250,12 +14225,12 @@ createNode transform -n "foot_R0_2_loc" -p "foot_R0_1_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000011 1.0000000000000004 1.000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999967 1.0000000000000013 0.99999999999999811 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_2_locShape" -p "foot_R0_2_loc"; - rename -uid "D6779881-41E2-AB8B-BD1C-E18015EE3E2E"; + rename -uid "260A65A9-4AA4-860C-14CF-61B8D870FB34"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14267,8 +14242,8 @@ createNode nurbsCurve -n "foot_R0_2_locShape" -p "foot_R0_2_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_2_loc25Shape" -p "foot_R0_2_loc"; - rename -uid "4E72952B-4146-DCD1-2749-DA82F7E0CBF9"; +createNode nurbsCurve -n "foot_R0_2_loc4Shape" -p "foot_R0_2_loc"; + rename -uid "64FF479D-477E-3CEC-6E71-64A1F9DB8188"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14280,8 +14255,8 @@ createNode nurbsCurve -n "foot_R0_2_loc25Shape" -p "foot_R0_2_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_2_loc26Shape" -p "foot_R0_2_loc"; - rename -uid "63B44DB0-4CD8-5984-9AAF-C392377CB084"; +createNode nurbsCurve -n "foot_R0_2_loc5Shape" -p "foot_R0_2_loc"; + rename -uid "04195C99-49FF-74AE-4BCD-69A0F3D8AAAE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14293,8 +14268,8 @@ createNode nurbsCurve -n "foot_R0_2_loc26Shape" -p "foot_R0_2_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_2_loc27Shape" -p "foot_R0_2_loc"; - rename -uid "367081C1-430B-C651-4F56-47B43C6C57CF"; +createNode nurbsCurve -n "foot_R0_2_loc6Shape" -p "foot_R0_2_loc"; + rename -uid "BEFE9C42-4677-D01B-CFAD-4C9C67B4B7B0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14311,8 +14286,8 @@ createNode nurbsCurve -n "foot_R0_2_loc27Shape" -p "foot_R0_2_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_2_loc27_0crvShape" -p "foot_R0_2_loc"; - rename -uid "F95E3A31-4C18-5688-4D06-2EB8B3CB56AF"; +createNode nurbsCurve -n "foot_R0_2_loc6_0crvShape" -p "foot_R0_2_loc"; + rename -uid "47CC2FA6-409D-998F-6BE1-A0961C474E53"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14329,8 +14304,8 @@ createNode nurbsCurve -n "foot_R0_2_loc27_0crvShape" -p "foot_R0_2_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_2_loc27_1crvShape" -p "foot_R0_2_loc"; - rename -uid "98D7B537-41CE-7A77-49B1-D3B2EA3BB2A4"; +createNode nurbsCurve -n "foot_R0_2_loc6_1crvShape" -p "foot_R0_2_loc"; + rename -uid "30E6C64C-485C-C75C-8CD2-33AD2036BD5E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14348,19 +14323,19 @@ createNode nurbsCurve -n "foot_R0_2_loc27_1crvShape" -p "foot_R0_2_loc"; 0 0 -0.1875 ; createNode transform -n "foot_R0_crv" -p "foot_R0_root"; - rename -uid "125BCE9A-4298-6826-81D5-AD93A321590B"; + rename -uid "E2D09470-4A08-0E15-886B-8C83ED8C40AF"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.84123625248687028 -1.2934842521415475 1.0591437062861169 ; - setAttr ".r" -type "double3" 177.10098306027425 -84.223472754416562 -177.08621222536053 ; - setAttr ".s" -type "double3" 1.0497207713808359 1.0497207713808343 -1.0497207713808352 ; + setAttr ".t" -type "double3" 0.84123625248686917 -1.2934842521415504 1.0591437062861191 ; + setAttr ".r" -type "double3" 177.1009830602743 -84.223472754416505 -177.08621222536055 ; + setAttr ".s" -type "double3" 1.0497207713808365 1.0497207713808354 -1.049720771380835 ; createNode nurbsCurve -n "foot_R0_crvShape" -p "foot_R0_crv"; - rename -uid "81473DCD-4B44-4E84-1545-9D978A44BDE9"; + rename -uid "430A07DB-42B0-8221-07F6-98A3C6498E58"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "foot_R0_crvShapeOrig" -p "foot_R0_crv"; - rename -uid "2127B6BD-46F8-7529-30CF-25B8F987E82E"; + rename -uid "F0D0C716-468C-84D9-D6CC-82B81CA891B7"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -14373,10 +14348,10 @@ createNode nurbsCurve -n "foot_R0_crvShapeOrig" -p "foot_R0_crv"; 0 0 0 ; createNode transform -n "foot_R0_heel" -p "foot_R0_root"; - rename -uid "54F1C5D7-4E4A-EFD5-F5DF-9C85F362A4B6"; + rename -uid "3991BDBE-452A-88AB-7557-A6AB4D83A76F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.51442201408343335 -1.2883323665462234 -0.0019628851482422771 ; + setAttr ".t" -type "double3" -0.51442201408343335 -1.2883323665462258 -0.0019628851482431653 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -14384,12 +14359,12 @@ createNode transform -n "foot_R0_heel" -p "foot_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999878 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999911 1 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_heelShape" -p "foot_R0_heel"; - rename -uid "A1ECC640-4CC1-A343-672A-83817A7701A9"; + rename -uid "0FED76BA-447D-8106-CAF4-7AA592DC9175"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14401,8 +14376,8 @@ createNode nurbsCurve -n "foot_R0_heelShape" -p "foot_R0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_heel25Shape" -p "foot_R0_heel"; - rename -uid "3E2BCF5A-41BA-24BE-C7C5-BA8748A4E1B7"; +createNode nurbsCurve -n "foot_R0_heel4Shape" -p "foot_R0_heel"; + rename -uid "F69BDAC3-4BE4-52DD-D6F1-0DADD20DC1B0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14414,8 +14389,8 @@ createNode nurbsCurve -n "foot_R0_heel25Shape" -p "foot_R0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_heel26Shape" -p "foot_R0_heel"; - rename -uid "B1ADAB25-42E9-E61E-CBB4-8A8717CAA6EF"; +createNode nurbsCurve -n "foot_R0_heel5Shape" -p "foot_R0_heel"; + rename -uid "5C42B95D-41DA-D0B6-05A5-3DB81C7DB81D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14427,8 +14402,8 @@ createNode nurbsCurve -n "foot_R0_heel26Shape" -p "foot_R0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_heel27Shape" -p "foot_R0_heel"; - rename -uid "3C7D2846-4D44-1261-C0ED-AAA00F88A8EA"; +createNode nurbsCurve -n "foot_R0_heel6Shape" -p "foot_R0_heel"; + rename -uid "79695443-4F0A-E370-5B4A-C5BDA22F21B7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14445,8 +14420,8 @@ createNode nurbsCurve -n "foot_R0_heel27Shape" -p "foot_R0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_heel27_0crvShape" -p "foot_R0_heel"; - rename -uid "FAE26AAC-48AB-30B6-1F4E-29A5A8C42E53"; +createNode nurbsCurve -n "foot_R0_heel6_0crvShape" -p "foot_R0_heel"; + rename -uid "F3A974A4-48F5-5376-A58C-1B858A11B739"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14463,8 +14438,8 @@ createNode nurbsCurve -n "foot_R0_heel27_0crvShape" -p "foot_R0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_heel27_1crvShape" -p "foot_R0_heel"; - rename -uid "85000C9F-44DA-562F-B70D-B2B7A8E2BAF5"; +createNode nurbsCurve -n "foot_R0_heel6_1crvShape" -p "foot_R0_heel"; + rename -uid "8553C637-42B7-8939-869C-7A8A764839FF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14482,10 +14457,10 @@ createNode nurbsCurve -n "foot_R0_heel27_1crvShape" -p "foot_R0_heel"; 0 0 -0.1875 ; createNode transform -n "foot_R0_outpivot" -p "foot_R0_root"; - rename -uid "3B0EE826-4470-6AB9-1540-43BD42EC3B83"; + rename -uid "D3949A08-4689-25CB-75BD-988FCCABA4B7"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3551807145991002 -1.2852474767223807 -0.54483578923279619 ; + setAttr ".t" -type "double3" 1.3551807145991006 -1.2852474767223834 -0.54483578923279752 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -14493,12 +14468,12 @@ createNode transform -n "foot_R0_outpivot" -p "foot_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999878 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999911 1 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_outpivotShape" -p "foot_R0_outpivot"; - rename -uid "7F6374C2-4C99-4F92-B4B0-3EB55DDB72D8"; + rename -uid "4B462151-444B-A4E5-0DBD-B4A76F03E50B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14510,8 +14485,8 @@ createNode nurbsCurve -n "foot_R0_outpivotShape" -p "foot_R0_outpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_outpivot25Shape" -p "foot_R0_outpivot"; - rename -uid "E35CE0F4-44E2-7C3C-4C98-7DBA55A28094"; +createNode nurbsCurve -n "foot_R0_outpivot4Shape" -p "foot_R0_outpivot"; + rename -uid "7F7278E9-4966-43B2-F92F-90A773E3A036"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14523,8 +14498,8 @@ createNode nurbsCurve -n "foot_R0_outpivot25Shape" -p "foot_R0_outpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_outpivot26Shape" -p "foot_R0_outpivot"; - rename -uid "BAE64686-4EEC-ECBA-04EB-5C9B84DB8E22"; +createNode nurbsCurve -n "foot_R0_outpivot5Shape" -p "foot_R0_outpivot"; + rename -uid "4DF6E19E-4EE7-3728-356A-0A9CE2D11536"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14536,8 +14511,8 @@ createNode nurbsCurve -n "foot_R0_outpivot26Shape" -p "foot_R0_outpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_outpivot27Shape" -p "foot_R0_outpivot"; - rename -uid "0BC11A1E-4ECA-B633-D304-53A02A206466"; +createNode nurbsCurve -n "foot_R0_outpivot6Shape" -p "foot_R0_outpivot"; + rename -uid "DAAA926E-4387-4FD6-D778-078879CCED82"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14554,8 +14529,8 @@ createNode nurbsCurve -n "foot_R0_outpivot27Shape" -p "foot_R0_outpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_outpivot27_0crvShape" -p "foot_R0_outpivot"; - rename -uid "3994963B-41EF-723B-9524-F48EA7797360"; +createNode nurbsCurve -n "foot_R0_outpivot6_0crvShape" -p "foot_R0_outpivot"; + rename -uid "8BCF9C02-416E-72ED-0F97-89A983D4148B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14572,8 +14547,8 @@ createNode nurbsCurve -n "foot_R0_outpivot27_0crvShape" -p "foot_R0_outpivot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_outpivot27_1crvShape" -p "foot_R0_outpivot"; - rename -uid "60ECF76F-4B96-7693-FF7A-75A7B5618CC5"; +createNode nurbsCurve -n "foot_R0_outpivot6_1crvShape" -p "foot_R0_outpivot"; + rename -uid "FAC02D99-437E-5BDD-346B-EF9FF7EBAA36"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14591,10 +14566,10 @@ createNode nurbsCurve -n "foot_R0_outpivot27_1crvShape" -p "foot_R0_outpivot"; 0 0 -0.1875 ; createNode transform -n "foot_R0_inpivot" -p "foot_R0_root"; - rename -uid "61B102C7-42EB-B120-8D03-C3B18FD71FA6"; + rename -uid "0ADF1F26-4160-392F-8178-4483F1145626"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3551807145991004 -1.2905939540073474 0.65234269833768666 ; + setAttr ".t" -type "double3" 1.3551807145990993 -1.2905939540073492 0.6523426983376861 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -14602,12 +14577,12 @@ createNode transform -n "foot_R0_inpivot" -p "foot_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999878 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999911 1 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "foot_R0_inpivotShape" -p "foot_R0_inpivot"; - rename -uid "7A8C6E77-4435-87EB-D5FD-CF8BB09A4CD3"; + rename -uid "B1ECD9C5-47F9-00DF-D146-64BA1E275FBE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14619,8 +14594,8 @@ createNode nurbsCurve -n "foot_R0_inpivotShape" -p "foot_R0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "foot_R0_inpivot25Shape" -p "foot_R0_inpivot"; - rename -uid "18FFB1BA-4F76-20C0-8F4C-4D9DBAB284C2"; +createNode nurbsCurve -n "foot_R0_inpivot4Shape" -p "foot_R0_inpivot"; + rename -uid "E96F3F2F-44F6-36A0-A103-49B48BE4D4DE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14632,8 +14607,8 @@ createNode nurbsCurve -n "foot_R0_inpivot25Shape" -p "foot_R0_inpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "foot_R0_inpivot26Shape" -p "foot_R0_inpivot"; - rename -uid "EDF59F40-4B4E-0DF9-43CD-7F94CCFE164E"; +createNode nurbsCurve -n "foot_R0_inpivot5Shape" -p "foot_R0_inpivot"; + rename -uid "61651EF3-431B-4A69-E0F2-D8897BDB1021"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14645,8 +14620,8 @@ createNode nurbsCurve -n "foot_R0_inpivot26Shape" -p "foot_R0_inpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "foot_R0_inpivot27Shape" -p "foot_R0_inpivot"; - rename -uid "EEFAADF7-4E5B-0C4A-78B5-20AD829CC8B8"; +createNode nurbsCurve -n "foot_R0_inpivot6Shape" -p "foot_R0_inpivot"; + rename -uid "67878FB5-40A6-6316-5B03-47BE3B2A31A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14663,8 +14638,8 @@ createNode nurbsCurve -n "foot_R0_inpivot27Shape" -p "foot_R0_inpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_inpivot27_0crvShape" -p "foot_R0_inpivot"; - rename -uid "3C66DD34-49A6-FFC1-33B8-86A7234A7B57"; +createNode nurbsCurve -n "foot_R0_inpivot6_0crvShape" -p "foot_R0_inpivot"; + rename -uid "95229D44-4C65-FC39-181E-7387B6CC2F80"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14681,8 +14656,8 @@ createNode nurbsCurve -n "foot_R0_inpivot27_0crvShape" -p "foot_R0_inpivot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "foot_R0_inpivot27_1crvShape" -p "foot_R0_inpivot"; - rename -uid "B7481CE4-4E65-E21A-7CE6-42ADC8106084"; +createNode nurbsCurve -n "foot_R0_inpivot6_1crvShape" -p "foot_R0_inpivot"; + rename -uid "B3E91446-413E-EF7A-1F43-1DB8009D39D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14700,19 +14675,19 @@ createNode nurbsCurve -n "foot_R0_inpivot27_1crvShape" -p "foot_R0_inpivot"; 0 0 -0.1875 ; createNode transform -n "foot_R0_1" -p "foot_R0_root"; - rename -uid "C56BBEE6-46C4-A333-EB6E-39931E167CBA"; + rename -uid "F9221D09-4E19-8EFF-5B2B-6FBF476AF05E"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.84123625248687028 -1.2934842521415475 1.0591437062861169 ; - setAttr ".r" -type "double3" 177.10098306027425 -84.223472754416562 -177.08621222536053 ; - setAttr ".s" -type "double3" 1.0497207713808359 1.0497207713808343 -1.0497207713808352 ; + setAttr ".t" -type "double3" 0.84123625248686917 -1.2934842521415504 1.0591437062861191 ; + setAttr ".r" -type "double3" 177.1009830602743 -84.223472754416505 -177.08621222536055 ; + setAttr ".s" -type "double3" 1.0497207713808365 1.0497207713808354 -1.049720771380835 ; createNode nurbsCurve -n "foot_R0_Shape1" -p "foot_R0_1"; - rename -uid "2A0B4152-438C-6A68-BDE8-FC972BE43AFB"; + rename -uid "7799FFF4-482A-ABEF-3877-11840F072704"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "foot_R0_Shape1Orig" -p "foot_R0_1"; - rename -uid "8B77A4E9-4783-0D8C-FF1E-2EACB47C71AD"; + rename -uid "C747E92B-45D1-27A4-8CC7-7EAD07D3E8A3"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -14726,7 +14701,7 @@ createNode nurbsCurve -n "foot_R0_Shape1Orig" -p "foot_R0_1"; 0 0 0 ; createNode transform -n "legUI_R0_root" -p "foot_R0_root"; - rename -uid "A6C5AEF4-462A-C713-3FC3-10876D47550B"; + rename -uid "B6A1BA3D-4F84-C45D-176E-BF9F89277509"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -14750,12 +14725,14 @@ createNode transform -n "legUI_R0_root" -p "foot_R0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.59908552650329661 0.5102979517299373 -1.4395512694570001 ; + setAttr ".t" -type "double3" 0.59908552650329572 0.51029795172993597 -1.4395512694570041 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -14764,7 +14741,7 @@ createNode transform -n "legUI_R0_root" -p "foot_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000036 0.99999999999999878 1.0000000000000013 ; + setAttr ".s" -type "double3" 1.0000000000000009 1 0.99999999999999778 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -14776,11 +14753,8 @@ createNode transform -n "legUI_R0_root" -p "foot_R0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legUI_R0_rootShape" -p "legUI_R0_root"; - rename -uid "E40C421C-4A84-1B39-991D-139340B16BE1"; + rename -uid "0730A00A-48AE-FF7D-00F7-70BDA4B86BFC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14792,8 +14766,8 @@ createNode nurbsCurve -n "legUI_R0_rootShape" -p "legUI_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legUI_R0_root25Shape" -p "legUI_R0_root"; - rename -uid "54341298-4C94-50AB-7A7D-18A471485A38"; +createNode nurbsCurve -n "legUI_R0_root4Shape" -p "legUI_R0_root"; + rename -uid "E5816228-4B7C-048F-ECDE-FEA87DAA0348"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14805,8 +14779,8 @@ createNode nurbsCurve -n "legUI_R0_root25Shape" -p "legUI_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legUI_R0_root26Shape" -p "legUI_R0_root"; - rename -uid "A746A64B-4DC1-33B7-8C51-3189BDD27A1C"; +createNode nurbsCurve -n "legUI_R0_root5Shape" -p "legUI_R0_root"; + rename -uid "5A30FFB7-4908-F874-ABAC-DDAA99E837F3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14818,8 +14792,8 @@ createNode nurbsCurve -n "legUI_R0_root26Shape" -p "legUI_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legUI_R0_root27Shape" -p "legUI_R0_root"; - rename -uid "3CC4CCB5-4FD9-1C54-7B8A-BB85914436D9"; +createNode nurbsCurve -n "legUI_R0_root6Shape" -p "legUI_R0_root"; + rename -uid "F0766BC1-44E6-2187-9E66-9EBAF584BEBD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -14846,36 +14820,36 @@ createNode nurbsCurve -n "legUI_R0_root27Shape" -p "legUI_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legUI_R0_sizeRef" -p "legUI_R0_root"; - rename -uid "7976011F-40BF-3ADF-E363-47B0483FF5DA"; + rename -uid "E36D6DB5-4661-F097-832B-3D859469B186"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.10551782846564928 -4.4408920985006262e-016 1.0444039858906451 ; + setAttr ".t" -type "double3" -0.1055178284656515 -2.2204460492503131e-016 1.0444039858906486 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0.029616667963943445 174.23096627485103 0.29463615418732969 ; + setAttr ".r" -type "double3" -0.029616667963955585 -5.7690337251490096 0.29463615418734485 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0497207713808316 1.0497207713808354 -1.0497207713808339 ; + setAttr ".s" -type "double3" 1.0497207713808356 1.0497207713808356 1.0497207713808376 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "leg_R0_crv" -p "leg_R0_root"; - rename -uid "643C1B12-41CB-56BD-0AE4-14B43DEF6128"; + rename -uid "2C44ADB9-4C1E-18B4-F19F-ADAFA4CDB87E"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.214166852209233 0.1914430359204585 0.96902196420373432 ; + setAttr ".t" -type "double3" -10.214166852209233 0.19144303592045839 0.96902196420373365 ; setAttr ".r" -type "double3" 90 -89.706856137729801 -179.99999999999815 ; - setAttr ".s" -type "double3" 1.0495082267377411 1.0495082267377378 -1.0495082267377407 ; + setAttr ".s" -type "double3" 1.0495082267377405 1.0495082267377378 -1.0495082267377407 ; createNode nurbsCurve -n "leg_R0_crvShape" -p "leg_R0_crv"; - rename -uid "0EE19EDA-4283-A073-727C-B2B759257E86"; + rename -uid "23638CBD-4C7E-6A12-3A87-2CA2495BFCB4"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "leg_R0_crvShapeOrig" -p "leg_R0_crv"; - rename -uid "247D980C-4DB1-CF54-A440-A9996AD8C46A"; + rename -uid "E3FF2F23-4490-C1DD-CEE8-DFB01946E39E"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -14888,999 +14862,999 @@ createNode nurbsCurve -n "leg_R0_crvShapeOrig" -p "leg_R0_crv"; 0 0 0 ; createNode lightLinker -s -n "lightLinker1"; - rename -uid "7C218431-49B6-0C9A-1965-88B7508C00FD"; + rename -uid "E93B7F2B-4182-4655-73A4-31956CE931F8"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "CB11AE2F-4842-E86D-1E32-5AA65E991767"; + rename -uid "D463EFA9-41CF-7A30-AEBF-959FF840F298"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "76CA94A9-4342-FECA-B366-7CB87BFEBE18"; + rename -uid "72FCE104-4D89-DD3A-EDC5-12AB4F97F675"; createNode displayLayerManager -n "layerManager"; - rename -uid "B3A00A8E-414E-2197-334B-6382C68EADDD"; + rename -uid "3474FF24-4C39-B59D-18D5-A6BAB78F10E1"; createNode displayLayer -n "defaultLayer"; - rename -uid "4BEC5440-4E24-B33C-470C-998F04382A20"; + rename -uid "273B9BD5-4D88-1B5C-4F57-11BF27B01E55"; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "33D391F7-4186-E08F-068E-368DC9C3B3CA"; + rename -uid "241A89AA-45BE-799F-24D0-A4AD59163B33"; createNode renderLayer -n "defaultRenderLayer"; - rename -uid "FD9A5986-45BC-EDA8-28D5-42A9E6B9702D"; + rename -uid "2AA7D889-4DAD-320F-7FA9-0D8BACEC1D23"; setAttr ".g" yes; -createNode animCurveUU -n "spine_C0_root_st_profile1"; - rename -uid "86131292-4FB7-0B0E-7BE6-76B8788A3192"; +createNode animCurveUU -n "spine_C0_root_st_profile"; + rename -uid "AE390B45-44BA-56AD-10BF-DCBE7E6810B2"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "spine_C0_root_sq_profile1"; - rename -uid "8B934DC1-49DB-E520-BE25-D8B3DA7DF803"; +createNode animCurveUU -n "spine_C0_root_sq_profile"; + rename -uid "632EAF81-414C-D806-C45A-2E9D276885D9"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode unitConversion -n "unitConversion131"; - rename -uid "62E23BCA-4AD6-6048-D2A9-558E5C75D82A"; +createNode unitConversion -n "unitConversion148"; + rename -uid "7EC11F4E-4C7A-130A-2C64-C4BBBD99C7A1"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns411"; - rename -uid "C254DC23-473C-0AF2-79B9-ECB3EA2F6B94"; +createNode mgear_curveCns -n "mgear_curveCns451"; + rename -uid "2127668B-4C22-D9AD-253A-76B78AF64FED"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak559"; - rename -uid "C5C98EB6-42EA-FE98-BD94-9999DE171C91"; -createNode objectSet -n "mgear_curveCns411Set"; - rename -uid "4595F037-440A-814D-D7A4-F099E8DD7402"; +createNode tweak -n "tweak599"; + rename -uid "CB1CB3E6-4C14-CF68-316B-0E8B7C3E2D9C"; +createNode objectSet -n "mgear_curveCns451Set"; + rename -uid "91190971-4476-CD58-54AA-69866D80DD00"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns411GroupId"; - rename -uid "815E3A79-410C-1707-2202-98B0829829BB"; +createNode groupId -n "mgear_curveCns451GroupId"; + rename -uid "3711B6F5-485D-B278-64A5-CA9C7A6AD2EC"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns411GroupParts"; - rename -uid "BC1CA34D-4136-94F3-D359-2EB71A0E0E51"; +createNode groupParts -n "mgear_curveCns451GroupParts"; + rename -uid "79E0EC20-4773-8C97-60CE-77935145A077"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet559"; - rename -uid "6AEB18B3-44C5-427F-E114-18935C3D0608"; +createNode objectSet -n "tweakSet599"; + rename -uid "1281F6F8-4BBA-B4F7-1BE0-9082EEE0DC1B"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8687"; - rename -uid "335ED6D5-44F5-6154-EA22-A48030ADF76B"; +createNode groupId -n "groupId8767"; + rename -uid "28EDE5E5-410D-FEFC-7BC4-6A8AB760501F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1118"; - rename -uid "FFB32030-4CE2-774B-A7B1-6E9110967F8C"; +createNode groupParts -n "groupParts1198"; + rename -uid "E0AC32DC-4345-A14A-6CAF-9F84818CAFF2"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion132"; - rename -uid "EA2EA449-4A89-33D9-F02F-6C8E182A8585"; +createNode unitConversion -n "unitConversion149"; + rename -uid "0AE3CEE6-4A4B-B865-BD43-9B8D64F40155"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns412"; - rename -uid "CE28F5CE-43C5-D5AC-38C9-BEADAF840535"; +createNode mgear_curveCns -n "mgear_curveCns452"; + rename -uid "DC51E475-4F7B-31D8-D62E-CA9642157C59"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak560"; - rename -uid "463E6B21-467C-29D9-61B5-7098E824B607"; -createNode objectSet -n "mgear_curveCns412Set"; - rename -uid "4BB358DE-4777-4580-8507-12855632F466"; +createNode tweak -n "tweak600"; + rename -uid "1485F214-4ACA-2AA7-CFEE-FAAF8AEF9541"; +createNode objectSet -n "mgear_curveCns452Set"; + rename -uid "ABA3B672-4426-C320-9B89-9C96BAA0B3F9"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns412GroupId"; - rename -uid "DBEFB33B-4BE2-7D0D-1EC5-F3B3BE8651E2"; +createNode groupId -n "mgear_curveCns452GroupId"; + rename -uid "4AD73B69-4538-14B9-F9AA-8CA138EF5740"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns412GroupParts"; - rename -uid "ECECE56B-40F2-1B40-2F09-3FAAEBE76C5D"; +createNode groupParts -n "mgear_curveCns452GroupParts"; + rename -uid "891D9EA2-46CA-876E-6EBC-CABB68430CB2"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet560"; - rename -uid "240EB338-439A-DB4A-78F4-E299A7359032"; +createNode objectSet -n "tweakSet600"; + rename -uid "595D1665-46CE-3E03-268B-32BF5BA4CE94"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8689"; - rename -uid "04937EA8-49A4-33AF-94DD-4E93D353C0B3"; +createNode groupId -n "groupId8769"; + rename -uid "62053CB1-4F44-541E-3F42-7FADEA39B5EE"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1120"; - rename -uid "9050DB8E-4C43-E29D-BA5D-5FB75252BAF8"; +createNode groupParts -n "groupParts1200"; + rename -uid "08253CCA-42B5-76C1-CA66-24B1ECFBF522"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "arm_L0_root_st_profile1"; - rename -uid "08AD7BD2-4A72-A264-075D-22AC5DD9BE91"; +createNode animCurveUU -n "arm_L0_root_st_profile"; + rename -uid "9CAF819C-4ECC-37DE-59F0-B48F4E30CCC8"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -0.5 1 0; -createNode animCurveUU -n "arm_L0_root_sq_profile1"; - rename -uid "ED558E52-4AAF-4365-8CFD-7299D7991019"; +createNode animCurveUU -n "arm_L0_root_sq_profile"; + rename -uid "D20A66CF-400A-6213-FC04-189E15B9761B"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 0.5 1 0; -createNode mgear_curveCns -n "mgear_curveCns413"; - rename -uid "5173493B-42E3-4348-0198-FB946EE064FE"; +createNode mgear_curveCns -n "mgear_curveCns453"; + rename -uid "93E766E5-483C-45FB-AB10-638C4E21475D"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak561"; - rename -uid "EE2A43C0-4FBC-B6A1-B906-77B5386E17B5"; -createNode objectSet -n "mgear_curveCns413Set"; - rename -uid "F2A5AF88-44F5-E7D0-1616-D1BD025F296B"; +createNode tweak -n "tweak601"; + rename -uid "8D47EFAA-4FBC-7A9C-8454-01BE382AD7F6"; +createNode objectSet -n "mgear_curveCns453Set"; + rename -uid "7E8E55A1-460A-96C8-0DC4-6AAA5524837D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns413GroupId"; - rename -uid "9DAA6DA6-4A5F-5050-E68F-CCA198219B2A"; +createNode groupId -n "mgear_curveCns453GroupId"; + rename -uid "385C7A71-4488-5D6E-92A5-9EBA812F0E07"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns413GroupParts"; - rename -uid "DDD3E413-48D5-C55B-2701-DAB83FE9D6CF"; +createNode groupParts -n "mgear_curveCns453GroupParts"; + rename -uid "84C57C03-4811-8015-2868-9C8D9FD53B62"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet561"; - rename -uid "C2AA61D1-4D20-AD3C-DFCF-09AE6E193E75"; +createNode objectSet -n "tweakSet601"; + rename -uid "80149292-4FBB-AC84-8400-95A1732A072C"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8691"; - rename -uid "51F3D333-47BC-B185-AA25-3B955FDF5C16"; +createNode groupId -n "groupId8771"; + rename -uid "71DAE1EE-4360-0BFD-8955-4397C1222714"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1122"; - rename -uid "A6D7E6A8-46F3-CB58-DD5A-5FB991DDBB6B"; +createNode groupParts -n "groupParts1202"; + rename -uid "069C92DE-4C6A-3328-0539-68B3BA38C5DA"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion133"; - rename -uid "B860C866-42DE-9E2F-13D0-6E8784EB34EA"; +createNode unitConversion -n "unitConversion150"; + rename -uid "231DAEFE-431A-400E-B3BB-749ACDB3DEDE"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns414"; - rename -uid "A34FDD9D-493A-3001-9F58-799E59792687"; +createNode mgear_curveCns -n "mgear_curveCns454"; + rename -uid "3337B501-409A-628C-3BE4-A2BF7AC33813"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak562"; - rename -uid "1B38FA9A-4CA6-A4F0-F021-D4A8C1869EE8"; -createNode objectSet -n "mgear_curveCns414Set"; - rename -uid "30587D29-4A7F-E784-1F45-DF857ED562A6"; +createNode tweak -n "tweak602"; + rename -uid "1F69B8D2-450D-9774-6879-C981015C2EF6"; +createNode objectSet -n "mgear_curveCns454Set"; + rename -uid "617AF949-4DD1-1165-0247-C1979250A424"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns414GroupId"; - rename -uid "9C60E762-4B54-B709-C42E-CDAD6016E9FA"; +createNode groupId -n "mgear_curveCns454GroupId"; + rename -uid "FE396ECA-4C74-2C0F-9BA6-3DB4F19531AC"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns414GroupParts"; - rename -uid "EB76CEFC-40A1-FB17-F850-FB90F81E65C9"; +createNode groupParts -n "mgear_curveCns454GroupParts"; + rename -uid "58A874A1-44D6-E56A-BE8C-3A943CC47DA9"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet562"; - rename -uid "C03989B2-4D49-595F-B4AE-AC878C9E6C44"; +createNode objectSet -n "tweakSet602"; + rename -uid "0441E7BC-4D3B-A74B-601E-7C9F96823479"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8693"; - rename -uid "C0801F8E-4050-208C-F46B-8391BB6C0659"; +createNode groupId -n "groupId8773"; + rename -uid "9B1646C0-49C8-BABA-7207-9193DD8DF746"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1124"; - rename -uid "E209E005-4FA7-8446-F83A-76A5FC8D6500"; +createNode groupParts -n "groupParts1204"; + rename -uid "E57BD2BD-4AEA-3C98-2DE4-009681545A5D"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion134"; - rename -uid "FA22B9C6-4E0F-C6B9-761D-C584E0239B92"; +createNode unitConversion -n "unitConversion151"; + rename -uid "3858583B-44B1-965C-EB86-59B97D35D806"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns415"; - rename -uid "795017E2-4AA8-0A04-5CE5-B1AF07B19920"; +createNode mgear_curveCns -n "mgear_curveCns455"; + rename -uid "F2C6F76F-4D9A-6BAA-4E24-54AFCEE2E5BB"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak563"; - rename -uid "3515CA15-4513-2625-AE2D-FEBBACC2A08F"; -createNode objectSet -n "mgear_curveCns415Set"; - rename -uid "E6415723-4721-9FBB-ACB4-A8887DDC006A"; +createNode tweak -n "tweak603"; + rename -uid "65447CE5-4A6E-ECDD-9AB5-BEA0FADFB3AA"; +createNode objectSet -n "mgear_curveCns455Set"; + rename -uid "EEC3D671-4F0E-01E7-EFF4-0C9DBCB16F1D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns415GroupId"; - rename -uid "1CA55628-4F09-4FFC-43F0-959D9A55F127"; +createNode groupId -n "mgear_curveCns455GroupId"; + rename -uid "EEE4256E-41E8-12AF-0650-F49386F82AD1"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns415GroupParts"; - rename -uid "798025F1-436F-B412-C8B8-0C8A394EE2D6"; +createNode groupParts -n "mgear_curveCns455GroupParts"; + rename -uid "914F4A53-4DC9-0389-944F-D49DE81DC51B"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet563"; - rename -uid "C12BA378-4131-61EA-33F0-A49AEE5FC1A1"; +createNode objectSet -n "tweakSet603"; + rename -uid "8C9EE0D2-4548-FFAE-121F-7A9993B4E2DD"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8695"; - rename -uid "D7DA8C1E-4C0C-A197-45B4-2791F77CBAF5"; +createNode groupId -n "groupId8775"; + rename -uid "CE4FC7DD-4566-1FE4-2A0E-D08FA85C3BB1"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1126"; - rename -uid "7272383E-40F3-35D3-A3FA-E68F1F5C66F6"; +createNode groupParts -n "groupParts1206"; + rename -uid "B0A83B8C-4EB7-31B1-16CE-CDA050B67D79"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion135"; - rename -uid "52B38306-4DDA-BF8C-1050-B8ABA436E38B"; +createNode unitConversion -n "unitConversion152"; + rename -uid "10621F09-46E9-9638-EE55-7CB52A6C43E5"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns416"; - rename -uid "C83CBC82-4CA1-7648-60FC-6DA7CF997E5E"; +createNode mgear_curveCns -n "mgear_curveCns456"; + rename -uid "0065608D-4415-C742-A57D-B5B18CE339DF"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak564"; - rename -uid "2A6D9454-412F-6907-C2D4-9CB9BD13EBF6"; -createNode objectSet -n "mgear_curveCns416Set"; - rename -uid "C0F3A7B4-46C3-28F1-D50C-DF907B85F232"; +createNode tweak -n "tweak604"; + rename -uid "79C924F5-47D1-4A0E-6188-A0BCD65D9879"; +createNode objectSet -n "mgear_curveCns456Set"; + rename -uid "D0DD5625-4D89-8F47-6723-72AA82CB9A72"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns416GroupId"; - rename -uid "609F9569-448E-D89B-A4C2-FE928F2F51D6"; +createNode groupId -n "mgear_curveCns456GroupId"; + rename -uid "62F42DB3-4A48-311F-C40C-8B921E0B1EB4"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns416GroupParts"; - rename -uid "1CF2E0C9-4C85-3BF9-BD33-9EB6EAB10A35"; +createNode groupParts -n "mgear_curveCns456GroupParts"; + rename -uid "F579346B-411C-D3F6-A01F-B5B6484BCAE5"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet564"; - rename -uid "164A5A74-4A06-C4B3-4A55-A09F7086B668"; +createNode objectSet -n "tweakSet604"; + rename -uid "8280B28B-4249-B7FB-F65B-86BC614A47D7"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8697"; - rename -uid "D0318D02-435D-EEF0-014B-E8B61D029CBF"; +createNode groupId -n "groupId8777"; + rename -uid "6D921188-407E-4934-493E-49974817B35D"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1128"; - rename -uid "1422E34A-4274-EC7B-F7AD-CA8D93888B44"; +createNode groupParts -n "groupParts1208"; + rename -uid "5D471672-4667-5B01-F8DF-338E20A17181"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion136"; - rename -uid "C58A66CE-4872-4BA9-7651-C4AC9AFE9100"; +createNode unitConversion -n "unitConversion153"; + rename -uid "F1033AF7-49B1-142F-2493-A18C42B7770B"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns417"; - rename -uid "3CF3F509-4E6E-35AF-F1B6-459B3A06C2DE"; +createNode mgear_curveCns -n "mgear_curveCns457"; + rename -uid "B7BF2B6C-4A31-4E58-B462-15B584818690"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak565"; - rename -uid "2CE81560-4C90-F866-71CC-D5B78A4321C9"; -createNode objectSet -n "mgear_curveCns417Set"; - rename -uid "53ACF9DC-4B9C-06DC-3DE2-52B7C81C096E"; +createNode tweak -n "tweak605"; + rename -uid "01DAF145-4579-9A06-8C55-F998EBF72005"; +createNode objectSet -n "mgear_curveCns457Set"; + rename -uid "8FB14802-4CBE-1B28-B72A-749594929604"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns417GroupId"; - rename -uid "AA9638C6-4E0B-2699-6D1A-2D836D972657"; +createNode groupId -n "mgear_curveCns457GroupId"; + rename -uid "91EF8BA0-4813-EBAD-D8D6-828725D8B43A"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns417GroupParts"; - rename -uid "21D7D57B-4253-09D5-7D80-869CF9A0168C"; +createNode groupParts -n "mgear_curveCns457GroupParts"; + rename -uid "6723A0BA-4953-20D6-463A-DC822E3DBBDF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet565"; - rename -uid "3FBD380B-4112-E1BB-56E6-06AA250CEE8F"; +createNode objectSet -n "tweakSet605"; + rename -uid "48CDCAFB-4367-7F1D-42B4-1189A01B6F12"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8699"; - rename -uid "77A5B50E-4A54-8936-F17A-E8901AC627E7"; +createNode groupId -n "groupId8779"; + rename -uid "31B4E5FC-4A07-E030-C330-BCB9B3134838"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1130"; - rename -uid "7454F433-4AC9-8DA0-76ED-3D877DE08609"; +createNode groupParts -n "groupParts1210"; + rename -uid "1AEBC5E8-4D16-ACDF-8AA9-DE81AE06CF7A"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion137"; - rename -uid "1DF5DB6D-4594-1B51-4587-368AE123975F"; +createNode unitConversion -n "unitConversion154"; + rename -uid "6AE00A2B-41C5-DA00-1AAB-8B91C3990B0A"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns418"; - rename -uid "E23AF286-417B-6587-5079-BAA61414AB5A"; +createNode mgear_curveCns -n "mgear_curveCns458"; + rename -uid "29CD0224-486B-A66A-0B1C-F5AE39682F6B"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak566"; - rename -uid "99F5D621-4A76-6BAC-2FFC-0DBA7D045610"; -createNode objectSet -n "mgear_curveCns418Set"; - rename -uid "A101D9FC-4FC7-627B-00FF-F0A69F13DB6B"; +createNode tweak -n "tweak606"; + rename -uid "392C92DE-4184-6CDC-9495-39B2C62F36BC"; +createNode objectSet -n "mgear_curveCns458Set"; + rename -uid "CBA1A5C2-4D36-B3DC-301B-1AB786AB076D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns418GroupId"; - rename -uid "F31365BF-42B7-20D2-98C4-34A0E10F7B8C"; +createNode groupId -n "mgear_curveCns458GroupId"; + rename -uid "2FD1E05F-4FD1-53A0-289F-A38C4AF14272"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns418GroupParts"; - rename -uid "B3786F30-49B3-2278-34EA-CFB15542572D"; +createNode groupParts -n "mgear_curveCns458GroupParts"; + rename -uid "2604A46D-432A-BF3E-991F-4CACC759C0BA"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet566"; - rename -uid "2C1B9099-446D-07AB-FD49-81A78A29E279"; +createNode objectSet -n "tweakSet606"; + rename -uid "F6ED9315-4A3F-1700-A160-5DA48D91A3C4"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8701"; - rename -uid "FD1595A8-4CDE-BF87-9226-79A460665DDA"; +createNode groupId -n "groupId8781"; + rename -uid "8C4B65E9-4D35-CF2C-153C-8385190B1415"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1132"; - rename -uid "011960F3-4A1C-8CD1-1323-9491042E99D2"; +createNode groupParts -n "groupParts1212"; + rename -uid "A6233C2D-459F-6B4D-2BEB-219EF100D436"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion138"; - rename -uid "B7E4C6AE-4DB3-9CCB-A84C-279D430BEEBA"; +createNode unitConversion -n "unitConversion155"; + rename -uid "5D71898E-4E62-142A-E5D6-669E6DB9D8D8"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns419"; - rename -uid "D9CFBA83-4078-64E0-5F49-F8BFF3C578A9"; +createNode mgear_curveCns -n "mgear_curveCns459"; + rename -uid "002CC421-4990-C3E7-7F03-8FA9B53786C9"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak567"; - rename -uid "30389922-46BD-0163-B1A4-CD864E53D5D3"; -createNode objectSet -n "mgear_curveCns419Set"; - rename -uid "EA5A9E88-4C75-47DF-3069-B39246462E96"; +createNode tweak -n "tweak607"; + rename -uid "B0A8F85B-47E8-E7CD-904C-D1BE64AE6BCA"; +createNode objectSet -n "mgear_curveCns459Set"; + rename -uid "6F20A5E3-4452-D6F8-9097-2AB177415CD7"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns419GroupId"; - rename -uid "3DAB2651-4A5D-6ADD-EE55-06B1FC421EBF"; +createNode groupId -n "mgear_curveCns459GroupId"; + rename -uid "9A0FF802-4C47-0914-4359-D1B0ED0EDB9C"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns419GroupParts"; - rename -uid "C2716E78-41EC-150B-8E95-DAB841DE8570"; +createNode groupParts -n "mgear_curveCns459GroupParts"; + rename -uid "EA4851CB-4771-F472-EB5E-2E97E47F8FB8"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet567"; - rename -uid "F1DE65EA-40DC-7D0A-0DF1-98B54E535154"; +createNode objectSet -n "tweakSet607"; + rename -uid "2BAB2339-40FB-EAB6-1E2F-8782D03D215F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8703"; - rename -uid "2810E626-4253-FF57-58F3-0D828937B062"; +createNode groupId -n "groupId8783"; + rename -uid "5B29ECE0-43C5-3814-8DBB-04BD7F3F7164"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1134"; - rename -uid "5888866B-4CB5-3F35-4A53-85AD44998444"; +createNode groupParts -n "groupParts1214"; + rename -uid "69FF4185-41C3-67BB-A58E-76A0E749DA4F"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "neck_C0_root_st_profile1"; - rename -uid "764BB2CA-4F2A-7D9E-F6EC-C39C6962843F"; +createNode animCurveUU -n "neck_C0_root_st_profile"; + rename -uid "9C1E6810-4C8A-C3A0-FFE7-8DBE4AA30D77"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "neck_C0_root_sq_profile1"; - rename -uid "D4D0148B-446C-9393-907D-6BA5691114D3"; +createNode animCurveUU -n "neck_C0_root_sq_profile"; + rename -uid "1C1D864E-4A37-786D-4073-28B05775F84D"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode unitConversion -n "unitConversion139"; - rename -uid "7DC4E739-4A40-15B3-B5B9-EABEAD4D4769"; +createNode unitConversion -n "unitConversion156"; + rename -uid "9A76F984-4A94-893A-04AA-AD97519DAE43"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns420"; - rename -uid "51BB92FA-4B26-10C6-4197-14A500D5FB04"; +createNode mgear_curveCns -n "mgear_curveCns460"; + rename -uid "B323E41A-477A-C7E5-3165-2F9FEB65C529"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak568"; - rename -uid "EFD3BCC4-4DEF-C936-DEB1-B5BA89E70E0F"; -createNode objectSet -n "mgear_curveCns420Set"; - rename -uid "D0ECC38F-4482-8119-56B8-68BEA8A5FE55"; +createNode tweak -n "tweak608"; + rename -uid "3A8A55BF-4254-CBB6-0E5D-2D8DCD660744"; +createNode objectSet -n "mgear_curveCns460Set"; + rename -uid "F53781B7-470C-88D5-8271-00A09BE96EF1"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns420GroupId"; - rename -uid "B73B4273-419B-8E71-9562-CBA463831488"; +createNode groupId -n "mgear_curveCns460GroupId"; + rename -uid "E3C42E4A-4C76-307E-4C54-678AB3A5151F"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns420GroupParts"; - rename -uid "1D72A0C9-4955-5A89-6959-BE9B0726E7A4"; +createNode groupParts -n "mgear_curveCns460GroupParts"; + rename -uid "E6F16595-4D9E-8303-9D37-EC9F9D5A7A56"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet568"; - rename -uid "B21F9434-4459-DBBB-85E1-4F8E03E20FB3"; +createNode objectSet -n "tweakSet608"; + rename -uid "697B50C1-4B97-5E66-7C3F-5C8974B6FB37"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8705"; - rename -uid "DCC9D92B-4B02-C15C-CF19-678622398B97"; +createNode groupId -n "groupId8785"; + rename -uid "5BA3CA7F-4ADC-894D-236B-A79C75034560"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1136"; - rename -uid "247E005B-4A8A-6840-4D27-F4A1D902D1F0"; +createNode groupParts -n "groupParts1216"; + rename -uid "176439E7-44E0-A437-2593-D3829D328308"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns421"; - rename -uid "D8CBC82E-44A8-7E51-9101-A184BA4655DF"; +createNode mgear_curveCns -n "mgear_curveCns461"; + rename -uid "E28824AE-4DD8-957A-07EF-6AA8B74C3D42"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak569"; - rename -uid "CE3FC090-433B-33C1-9568-3FA97520F5F1"; -createNode objectSet -n "mgear_curveCns421Set"; - rename -uid "E58945C5-42D3-1C32-FA26-FC96EB9A21FC"; +createNode tweak -n "tweak609"; + rename -uid "97648F76-4BF8-0A71-D480-4E913F12EB4A"; +createNode objectSet -n "mgear_curveCns461Set"; + rename -uid "E186DC90-4B66-4118-E789-339D7B0B9531"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns421GroupId"; - rename -uid "04985014-4705-5F1A-CE85-D49108A916B5"; +createNode groupId -n "mgear_curveCns461GroupId"; + rename -uid "DC418B68-4FEB-846D-6E55-8AB77CCAE0B5"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns421GroupParts"; - rename -uid "18434CD7-47AE-61A6-A007-56AA737268CE"; +createNode groupParts -n "mgear_curveCns461GroupParts"; + rename -uid "970DAD91-49A3-6A2D-D191-598AB14314FB"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet569"; - rename -uid "9B627779-483E-789D-8EE8-4E88D8AC6907"; +createNode objectSet -n "tweakSet609"; + rename -uid "39EC5F2C-43B6-5377-E013-E48F2A9D437E"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8707"; - rename -uid "CA3C463B-45CA-BBBF-76B5-DA862E234675"; +createNode groupId -n "groupId8787"; + rename -uid "01D20DDF-494B-FDAA-7E54-7A9809DA02B7"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1138"; - rename -uid "27A424DD-4E14-D4E3-590B-2BB9E9D7B94A"; +createNode groupParts -n "groupParts1218"; + rename -uid "CB37CCD7-4DE0-18B9-AEB4-68ACC47CF1CF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns422"; - rename -uid "DB83A8F1-483D-BE3E-F1FD-3DA07389A062"; +createNode mgear_curveCns -n "mgear_curveCns462"; + rename -uid "48A1F673-4D35-6C43-FCFA-6EB3A2FCCCB1"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak570"; - rename -uid "B91F5AEF-4CBA-0FE9-1E32-6DB122963A15"; -createNode objectSet -n "mgear_curveCns422Set"; - rename -uid "5172BDED-45EF-B0CB-E43B-7BAF10E4405B"; +createNode tweak -n "tweak610"; + rename -uid "801067A6-43DB-1D12-328F-5F96FE9D7B54"; +createNode objectSet -n "mgear_curveCns462Set"; + rename -uid "C0B5EFEB-4DE9-294D-713B-D59E54A48542"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns422GroupId"; - rename -uid "FF278F09-45F8-88E6-9BF3-1F967C929BA2"; +createNode groupId -n "mgear_curveCns462GroupId"; + rename -uid "BFDBB55E-4DA8-F332-1E61-4DB3D92D69D6"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns422GroupParts"; - rename -uid "70CF8242-45F7-B941-EBEB-77893EFCD4C2"; +createNode groupParts -n "mgear_curveCns462GroupParts"; + rename -uid "83D2D426-4E29-89CF-B66B-54A9B0947BA7"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet570"; - rename -uid "66D8FE82-4976-6C29-042C-208D9B490BBE"; +createNode objectSet -n "tweakSet610"; + rename -uid "817C6ADB-4FF6-E7D7-62EF-35867E8F59CF"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8709"; - rename -uid "8E1BDEFA-4D8C-ED26-6479-83B86EF17ADD"; +createNode groupId -n "groupId8789"; + rename -uid "EC8A65E2-4105-B825-6676-82BBD46FB6B5"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1140"; - rename -uid "FD1CDCF1-4928-BF13-5BE8-5E82C85F0C83"; +createNode groupParts -n "groupParts1220"; + rename -uid "F45BBE38-4247-6FFE-D3D9-9D871075A2AF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns423"; - rename -uid "FE77E5ED-4477-5BC3-36B6-21BD14B9854D"; +createNode mgear_curveCns -n "mgear_curveCns463"; + rename -uid "309F9A94-4DE1-F39A-5005-21A055FAD37D"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak571"; - rename -uid "5D08B303-4055-2495-034A-3DB9225D90EE"; -createNode objectSet -n "mgear_curveCns423Set"; - rename -uid "42FEA382-41C3-62B6-893C-31B2375EA182"; +createNode tweak -n "tweak611"; + rename -uid "F960157E-4E9C-5839-0DD8-4E96C7FBE287"; +createNode objectSet -n "mgear_curveCns463Set"; + rename -uid "45C9405A-4C0E-2A1C-0BA4-C299C3B40F99"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns423GroupId"; - rename -uid "1B7DCCD6-4541-D65C-214D-9DACED1E40A8"; +createNode groupId -n "mgear_curveCns463GroupId"; + rename -uid "82061475-4A8D-6316-6E18-AC949131424C"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns423GroupParts"; - rename -uid "5E4DF6D3-43AE-3493-A659-83B72308AE97"; +createNode groupParts -n "mgear_curveCns463GroupParts"; + rename -uid "5658644D-4A0C-3AC0-9567-1DB74F39A8D6"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet571"; - rename -uid "71F884A0-415F-03FB-3479-188C47638FB9"; +createNode objectSet -n "tweakSet611"; + rename -uid "D45829D3-4A2A-19F0-1769-56AC031F051C"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8711"; - rename -uid "F072D6DC-4F7E-6700-16BF-53A85B73ACD2"; +createNode groupId -n "groupId8791"; + rename -uid "13DF1C2E-4A94-B8B0-3B80-19A147A70F13"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1142"; - rename -uid "28A7D250-43B8-E78B-F720-2EAD9207E99D"; +createNode groupParts -n "groupParts1222"; + rename -uid "714203C6-48AF-D71A-204B-99938A921C96"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns424"; - rename -uid "6839CFD3-4B9C-426A-D441-12BF3B49951B"; +createNode mgear_curveCns -n "mgear_curveCns464"; + rename -uid "A2D170DD-420D-7E95-F6F8-579F7AF405C2"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak572"; - rename -uid "00029F26-4F47-F456-A848-DBB54530AE89"; -createNode objectSet -n "mgear_curveCns424Set"; - rename -uid "EA6EC778-4461-99D7-2821-60BDA8F4A095"; +createNode tweak -n "tweak612"; + rename -uid "C31FFEFD-4EA9-5D5A-B144-689F7C029999"; +createNode objectSet -n "mgear_curveCns464Set"; + rename -uid "ADB2C4B0-46C8-5B01-BBE8-F8ABADB59F62"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns424GroupId"; - rename -uid "339922A1-45FD-9A20-8FD2-68861B351322"; +createNode groupId -n "mgear_curveCns464GroupId"; + rename -uid "FD9ED851-4302-75A5-5D7D-7987B27734A5"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns424GroupParts"; - rename -uid "00BD5A6F-4D57-08BD-E199-5085E7E7C8BF"; +createNode groupParts -n "mgear_curveCns464GroupParts"; + rename -uid "C093F8B9-4F51-5F6C-1359-6788490B61B9"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet572"; - rename -uid "87A41D42-4EA8-2BBA-E9DB-B79E5AA965E9"; +createNode objectSet -n "tweakSet612"; + rename -uid "206D5F5E-4587-49C4-ECDE-31971C5B6901"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8713"; - rename -uid "EF00F464-4470-ED06-5787-AEBB957A4B9D"; +createNode groupId -n "groupId8793"; + rename -uid "314FB0D2-468A-2060-FAEF-E4B962514DBC"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1144"; - rename -uid "F3C9F536-4F85-93EF-8B30-2493B127ECC3"; +createNode groupParts -n "groupParts1224"; + rename -uid "E90D550D-49F4-0F5A-DAC9-988D6F428E76"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns425"; - rename -uid "7E9972B4-4750-F653-13D1-F8860557B6A5"; +createNode mgear_curveCns -n "mgear_curveCns465"; + rename -uid "ACC7AF7E-4402-92AC-8CA5-99820366E4D2"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak573"; - rename -uid "B271DC0B-4EC6-715B-B901-12B291D8B675"; -createNode objectSet -n "mgear_curveCns425Set"; - rename -uid "2163590B-49CE-EB4F-C2FE-1A89C05280E7"; +createNode tweak -n "tweak613"; + rename -uid "7DE88B75-4CC2-5554-C789-2BA338478BD3"; +createNode objectSet -n "mgear_curveCns465Set"; + rename -uid "98E33397-47C5-ADC9-EACD-DABB3BAF7146"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns425GroupId"; - rename -uid "99DA8A6D-429B-89F0-BC5C-D084AB9E5436"; +createNode groupId -n "mgear_curveCns465GroupId"; + rename -uid "5AAE1F42-4AEB-239D-3549-DE84C5106C0C"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns425GroupParts"; - rename -uid "C5E4345E-4724-4BC3-8A2E-3BB3D4393468"; +createNode groupParts -n "mgear_curveCns465GroupParts"; + rename -uid "A4D2E7AF-4766-C74F-9179-039C32DD09B4"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet573"; - rename -uid "AE42273F-4D42-AB0D-DA34-C8880A5E151A"; +createNode objectSet -n "tweakSet613"; + rename -uid "80DE07FA-4A07-96D9-B161-E6AF9D600981"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8715"; - rename -uid "614E1D29-48A6-7AE7-C221-F8BDFA23DFF3"; +createNode groupId -n "groupId8795"; + rename -uid "6CC0D58D-414F-53E0-7558-C0B1D7EF1651"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1146"; - rename -uid "1746E2AF-488D-5A30-8559-16A8D3B44742"; +createNode groupParts -n "groupParts1226"; + rename -uid "02916AC0-40C5-3AF2-3BF8-34B7773A01FE"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion140"; - rename -uid "E65ECD78-4DB3-05FA-6A5C-47A4279BE0D6"; +createNode unitConversion -n "unitConversion157"; + rename -uid "18CBC48D-48E2-4952-2DD3-A594AF4C4F67"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns426"; - rename -uid "AAEF2DFD-41BA-A368-C835-8097103F1708"; +createNode mgear_curveCns -n "mgear_curveCns466"; + rename -uid "3D01B5BE-4081-EFBC-2599-FA90D28C2147"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak574"; - rename -uid "6BE33333-45A9-0549-EF0D-FFA2EC40E4E7"; -createNode objectSet -n "mgear_curveCns426Set"; - rename -uid "4D510C57-4EA6-2970-814F-AD9E6B6097D1"; +createNode tweak -n "tweak614"; + rename -uid "BFCD49F5-4423-5B09-EA45-7980CB220A03"; +createNode objectSet -n "mgear_curveCns466Set"; + rename -uid "E1712865-4EEF-F697-821E-288DB5DDF66A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns426GroupId"; - rename -uid "654CEB38-44F2-BD5F-A81F-EDB92E17C14F"; +createNode groupId -n "mgear_curveCns466GroupId"; + rename -uid "4950E3E0-4258-7DF9-024E-87925A38F9EC"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns426GroupParts"; - rename -uid "92B864C3-4EEC-0C79-6541-AC87943E0EEA"; +createNode groupParts -n "mgear_curveCns466GroupParts"; + rename -uid "F77AC12E-4B0F-5B6B-E815-94B30BE8A679"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet574"; - rename -uid "33E1192C-40FE-874C-2517-B0A122F87607"; +createNode objectSet -n "tweakSet614"; + rename -uid "EB644380-4667-F502-ACDF-81984E039108"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8717"; - rename -uid "CEBB0356-4139-E447-CEE8-37BA2E5B6783"; +createNode groupId -n "groupId8797"; + rename -uid "21F23092-4D96-9A39-BB7D-B79D2EE6D2E6"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1148"; - rename -uid "CF4D479E-43AD-38A1-254E-2496F2D444CE"; +createNode groupParts -n "groupParts1228"; + rename -uid "8C66EB2E-4153-97AD-620A-CF86C51DF580"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns427"; - rename -uid "6496BD4E-4FBC-3E17-BADF-E3A7DBDC49A9"; +createNode mgear_curveCns -n "mgear_curveCns467"; + rename -uid "A5D991A1-4C03-5978-4C9C-F6B45DF01966"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak575"; - rename -uid "8B6A45ED-42A1-6AD3-CFFD-4BB946358EEF"; -createNode objectSet -n "mgear_curveCns427Set"; - rename -uid "61E513FF-45E8-279D-CA2C-EA9B9F41B059"; +createNode tweak -n "tweak615"; + rename -uid "533D1F6C-41E0-F37A-A2C0-4EB90C632D3E"; +createNode objectSet -n "mgear_curveCns467Set"; + rename -uid "1337549A-4C45-C58C-2C8A-078793ECA05E"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns427GroupId"; - rename -uid "C6794BBE-4BAF-BEA2-F387-A59F65077D06"; +createNode groupId -n "mgear_curveCns467GroupId"; + rename -uid "410E1FDC-4F6E-8ED3-464E-22B1B51363A4"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns427GroupParts"; - rename -uid "DFD2116B-43E0-C13E-79BF-1C80C02C74E3"; +createNode groupParts -n "mgear_curveCns467GroupParts"; + rename -uid "4142E735-4566-66AD-DA0F-9E8A8C76BA5A"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet575"; - rename -uid "EF2839BD-4EA5-9100-1FFE-6AB24BEB95F5"; +createNode objectSet -n "tweakSet615"; + rename -uid "D82EAAEC-4FEC-64A6-5DBE-62AD76D0D386"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8719"; - rename -uid "97D0E198-4D4A-3495-EFA9-E594E0958F19"; +createNode groupId -n "groupId8799"; + rename -uid "E7A37DF3-4AD2-07FB-0A94-C1B2C9D31E83"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1150"; - rename -uid "9BE865FA-4828-0254-E573-68AF4C28F0E4"; +createNode groupParts -n "groupParts1230"; + rename -uid "41209562-46D6-9D97-7536-72887479ECF4"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns428"; - rename -uid "62264257-47A3-FDDE-D3B5-A0AB84789E38"; +createNode mgear_curveCns -n "mgear_curveCns468"; + rename -uid "5859750E-4F87-0110-812E-BFB58899EBDA"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak576"; - rename -uid "E1C4776B-4175-B719-A783-57BF37BA9F84"; -createNode objectSet -n "mgear_curveCns428Set"; - rename -uid "9C3A5D3B-4AF1-037F-152C-64A3381389E3"; +createNode tweak -n "tweak616"; + rename -uid "E6D49D73-4911-061C-8AF8-AABCA9BD984D"; +createNode objectSet -n "mgear_curveCns468Set"; + rename -uid "B53F2DB6-476C-936F-F517-528E8B24953A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns428GroupId"; - rename -uid "4B978DBB-48DD-D48B-8393-25ADBB024D2C"; +createNode groupId -n "mgear_curveCns468GroupId"; + rename -uid "1F420979-4385-853F-46EE-DDAD735C1806"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns428GroupParts"; - rename -uid "3808F352-4C9E-3118-1584-BEA7BE2CF976"; +createNode groupParts -n "mgear_curveCns468GroupParts"; + rename -uid "84650683-47C6-8274-11A7-B095771A55B0"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet576"; - rename -uid "5F1CB803-4E21-08A4-2A9C-748255620757"; +createNode objectSet -n "tweakSet616"; + rename -uid "09E353DA-4A64-7357-511A-6F911222E14C"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8721"; - rename -uid "A208168D-462F-BCB1-D8B4-F08096F16587"; +createNode groupId -n "groupId8801"; + rename -uid "62127FD4-44A5-5F07-072D-84B4A2E797E9"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1152"; - rename -uid "8C17305D-403E-8E2A-41FF-9A822823A52C"; +createNode groupParts -n "groupParts1232"; + rename -uid "E94A2A66-4954-1AFE-A02C-8680B8602AEF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion141"; - rename -uid "87526030-4E82-7156-1768-C68FBD6CE109"; +createNode unitConversion -n "unitConversion158"; + rename -uid "0A0A18B0-4FD5-569D-824D-839B1088303D"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns429"; - rename -uid "B1ECC11D-4D75-D8EF-AE85-0F9CAA485DFA"; +createNode mgear_curveCns -n "mgear_curveCns469"; + rename -uid "CC9AD703-42F5-D26B-7331-6C8AA2368A66"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak577"; - rename -uid "7D1BF52F-441D-57CC-BD5E-739A2D9286CF"; -createNode objectSet -n "mgear_curveCns429Set"; - rename -uid "22DBD876-491F-859D-8182-EF95D953B12B"; +createNode tweak -n "tweak617"; + rename -uid "0106F029-48D7-C194-865B-F388E5061812"; +createNode objectSet -n "mgear_curveCns469Set"; + rename -uid "CAEDC71A-4B42-B549-3152-67B214B36899"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns429GroupId"; - rename -uid "96F05BAE-4BB6-7A41-96D1-6E9D668FC0A4"; +createNode groupId -n "mgear_curveCns469GroupId"; + rename -uid "18E5A321-48BA-E5EA-A72B-C6AEEA4FE7FF"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns429GroupParts"; - rename -uid "BC6B8F8B-42AC-4BE0-65D6-4B9474E023DD"; +createNode groupParts -n "mgear_curveCns469GroupParts"; + rename -uid "4D1F56EF-4288-652E-CF75-B785C468F070"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet577"; - rename -uid "F490BE81-4FDF-BED4-3BD2-FC9517A5F23C"; +createNode objectSet -n "tweakSet617"; + rename -uid "4DCC44F2-4724-7810-700E-36BEA4A101AC"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8723"; - rename -uid "8024EA21-4215-F6BF-BAF8-A59C978F457E"; +createNode groupId -n "groupId8803"; + rename -uid "1EDCBEE8-4151-1368-BCD9-629D96140C8A"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1154"; - rename -uid "728D0AFC-41F3-1202-0F47-90BDE2F3DB85"; +createNode groupParts -n "groupParts1234"; + rename -uid "BD0A674A-49A2-E2CF-86FA-CA91CF153094"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; createNode animCurveUU -n "arm_R0_root_st_profile1"; - rename -uid "637DB92B-4566-A6E2-EC8E-A38EDF3D09ED"; + rename -uid "B53705A1-4C87-1B9D-642D-C18E637E0F6E"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -0.5 1 0; createNode animCurveUU -n "arm_R0_root_sq_profile1"; - rename -uid "213E8849-4A12-9413-E06C-6BBF575E9D5D"; + rename -uid "E450F0A8-4C28-C4BD-44DE-2BBFACEE2327"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 0.5 1 0; -createNode mgear_curveCns -n "mgear_curveCns430"; - rename -uid "348F2FB1-40C5-B72B-8662-F9AC68CE49C1"; +createNode mgear_curveCns -n "mgear_curveCns470"; + rename -uid "8E262FDC-476A-BE97-92C5-7BBA30AB79CD"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak578"; - rename -uid "CF9906E9-405E-6AE4-7D70-7BBE977B76D1"; -createNode objectSet -n "mgear_curveCns430Set"; - rename -uid "A987155E-4154-F128-A278-64AEDC0CD7D9"; +createNode tweak -n "tweak618"; + rename -uid "19152F01-44A9-3853-FBAD-6BB2D9F43026"; +createNode objectSet -n "mgear_curveCns470Set"; + rename -uid "188D0569-4859-1008-D799-D6B18193CC17"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns430GroupId"; - rename -uid "42BDE6CB-479C-AA85-A007-FBB9B20D1D20"; +createNode groupId -n "mgear_curveCns470GroupId"; + rename -uid "9F4D4D56-47A4-6DEB-C5D0-E6AC7791B11D"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns430GroupParts"; - rename -uid "A2502EE2-4AC5-B8DE-0ABC-CFA05B52185E"; +createNode groupParts -n "mgear_curveCns470GroupParts"; + rename -uid "3F1CDD8D-4227-B125-E80F-14B8C059BE95"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet578"; - rename -uid "B326BBE1-422A-962B-4F58-09B685B9599F"; +createNode objectSet -n "tweakSet618"; + rename -uid "13EFCEFD-47F5-63A0-D17E-EFBCE2CA96F2"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8725"; - rename -uid "DB12BE78-4F4D-DD5E-1B05-798F07C2674B"; +createNode groupId -n "groupId8805"; + rename -uid "00AB8847-424C-DD04-61B4-3BA261BD096F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1156"; - rename -uid "BE645734-4274-6D69-2F0F-AA85F71A279B"; +createNode groupParts -n "groupParts1236"; + rename -uid "93A77A9D-4479-A33F-3010-59AE12232C98"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion142"; - rename -uid "B9636738-4302-8912-EC19-29B6AC2B1AE9"; +createNode unitConversion -n "unitConversion159"; + rename -uid "D7F0E350-44FF-5EAD-C649-069A641BE144"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns431"; - rename -uid "D9501E6E-4F0F-8587-82EC-56BDF886AA6A"; +createNode mgear_curveCns -n "mgear_curveCns471"; + rename -uid "29D64BE3-4038-1C5A-B99D-BAB1D148E700"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak579"; - rename -uid "F6A03781-42DB-0159-E5AF-999FA30F11C3"; -createNode objectSet -n "mgear_curveCns431Set"; - rename -uid "51C614BA-4268-0BFB-1AA2-3F872D3EF4D2"; +createNode tweak -n "tweak619"; + rename -uid "8359D8E0-474C-E1EB-B6E5-F083EA00B476"; +createNode objectSet -n "mgear_curveCns471Set"; + rename -uid "BFBB6845-4F64-0A98-B5CF-338528D69EB2"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns431GroupId"; - rename -uid "A9482C64-4177-83E8-409F-55B3A10F50D7"; +createNode groupId -n "mgear_curveCns471GroupId"; + rename -uid "C1C5B86D-48D1-0418-E2C6-D6BB7E7BA128"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns431GroupParts"; - rename -uid "263210DF-4745-51AF-521B-078A41136A95"; +createNode groupParts -n "mgear_curveCns471GroupParts"; + rename -uid "6DDA4919-4DDF-921D-8972-51863D093590"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet579"; - rename -uid "E65579BD-4348-56FF-9450-5EAE0E4CD141"; +createNode objectSet -n "tweakSet619"; + rename -uid "84449FED-4C05-7DB2-0899-12ADD910A60A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8727"; - rename -uid "A17B4E36-42D2-CB0A-5509-3B9B843AAC60"; +createNode groupId -n "groupId8807"; + rename -uid "1A31BA0C-4FB8-9B68-A6DF-DCBB4CEA5BC2"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1158"; - rename -uid "9B466C8C-4D46-047C-D809-34BC1D7BBDF0"; +createNode groupParts -n "groupParts1238"; + rename -uid "CE1EAF23-4901-85D4-055E-909E7511D44F"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion143"; - rename -uid "36423457-4C8C-8947-0C93-29A86761F45D"; +createNode unitConversion -n "unitConversion160"; + rename -uid "E19EF50E-4A78-C245-9FF0-C6B6ACB4770A"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns432"; - rename -uid "324000B2-43B4-CD63-2A45-41832E4B5719"; +createNode mgear_curveCns -n "mgear_curveCns472"; + rename -uid "BA4041E2-41B4-4354-2B3E-9198EEBD1DCC"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak580"; - rename -uid "40059E4D-463F-1FA7-679A-BFA7422D6DB7"; -createNode objectSet -n "mgear_curveCns432Set"; - rename -uid "82ECEA30-4E8F-FC7E-DF36-7EA6FFE2D7B1"; +createNode tweak -n "tweak620"; + rename -uid "319A8BA2-4730-8F34-4805-78BAF268400B"; +createNode objectSet -n "mgear_curveCns472Set"; + rename -uid "04D78997-4B79-0C81-BEAE-5C94825264A2"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns432GroupId"; - rename -uid "56FC99C2-48AE-315B-6663-0BBAA73F0284"; +createNode groupId -n "mgear_curveCns472GroupId"; + rename -uid "D22C116D-40FB-9450-A40F-6780C30CDC02"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns432GroupParts"; - rename -uid "06973B11-4CCD-BA9F-90DF-6BB17DBFD06B"; +createNode groupParts -n "mgear_curveCns472GroupParts"; + rename -uid "EDE49B73-46DC-1F34-1ED4-3AB33A3E2143"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet580"; - rename -uid "CF667DF2-4396-76DF-2769-04ACD1E62121"; +createNode objectSet -n "tweakSet620"; + rename -uid "4295DD3F-47DB-2974-C264-81A6CD856AC0"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8729"; - rename -uid "6887B69F-4D75-A0F8-4484-B685B1C31151"; +createNode groupId -n "groupId8809"; + rename -uid "6C662EE5-45F8-3C17-6384-8E9EE8944BEE"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1160"; - rename -uid "90CE59B4-48D4-CF21-52F1-0A9FF7478480"; +createNode groupParts -n "groupParts1240"; + rename -uid "72EE73C6-4480-0E33-812E-809D3E63FBEA"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion144"; - rename -uid "0D2473EE-46D6-71CA-68AD-869EFCCD2B19"; +createNode unitConversion -n "unitConversion161"; + rename -uid "B3F14709-4E37-9878-5D49-4AACD486C344"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns433"; - rename -uid "6D46A20F-4E87-FE32-6211-F7A61D0891BD"; +createNode mgear_curveCns -n "mgear_curveCns473"; + rename -uid "796F265D-4363-A309-3941-94B5577F5FAF"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak581"; - rename -uid "4F0DB648-4054-C5E9-47B7-99B79277624E"; -createNode objectSet -n "mgear_curveCns433Set"; - rename -uid "BAC70D31-4C96-C1F6-407D-20B944FA5615"; +createNode tweak -n "tweak621"; + rename -uid "D2D0F15F-44D1-7E32-E7BD-0083021EC5FB"; +createNode objectSet -n "mgear_curveCns473Set"; + rename -uid "A65C0FF6-4DE3-A4DD-6BDB-62828B1EA085"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns433GroupId"; - rename -uid "72969D48-4A9E-0719-FE53-1EAA91E5AC7E"; +createNode groupId -n "mgear_curveCns473GroupId"; + rename -uid "A9C8F405-4C06-5924-2D63-51AC45892DE7"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns433GroupParts"; - rename -uid "921F45B4-4AB8-2BC5-6C40-4F8DEF2B0335"; +createNode groupParts -n "mgear_curveCns473GroupParts"; + rename -uid "87B8D26F-4378-1669-4293-55AC537ADA6C"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet581"; - rename -uid "7F038BCA-42E9-1CFE-F5A7-6C8345AE9F48"; +createNode objectSet -n "tweakSet621"; + rename -uid "6BFAA29C-4C61-CBCC-0267-0EB84B8281B5"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8731"; - rename -uid "606E0992-4E8A-31E0-3BB6-0086F1C868F1"; +createNode groupId -n "groupId8811"; + rename -uid "7D11EF4C-42BF-2FD9-6B1E-EC99AB6ABAFA"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1162"; - rename -uid "DAA21534-448C-1E41-1A24-C48EA370286F"; +createNode groupParts -n "groupParts1242"; + rename -uid "353F9E22-4993-5E6A-9EBD-2B8E3D7B0FDE"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion145"; - rename -uid "FD8A4B63-45D8-2139-CD3D-EBAB7982ED7C"; +createNode unitConversion -n "unitConversion162"; + rename -uid "C0C76FE5-4293-F01D-C716-B5A002017585"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns434"; - rename -uid "189972D6-4DC2-6D33-2B22-ECB3B18275A3"; +createNode mgear_curveCns -n "mgear_curveCns474"; + rename -uid "68315F43-4894-496F-68E8-70948C2F7321"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak582"; - rename -uid "D33B237A-4C76-500D-16B7-70A4D2F15498"; -createNode objectSet -n "mgear_curveCns434Set"; - rename -uid "29A6FB0E-4A05-C25F-FA09-2290EF6D9C16"; +createNode tweak -n "tweak622"; + rename -uid "6662B9DA-4B9E-E7A0-E57F-FF966F53955D"; +createNode objectSet -n "mgear_curveCns474Set"; + rename -uid "CBD129C7-4B1B-B749-E1FF-60A0EB916A6A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns434GroupId"; - rename -uid "16BB488A-45A4-6733-3FA5-5798CCD1C309"; +createNode groupId -n "mgear_curveCns474GroupId"; + rename -uid "1522CD8A-4627-EAE2-3274-78AC1C872A29"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns434GroupParts"; - rename -uid "8447E106-47FB-9EBA-AC21-5DB65C28A798"; +createNode groupParts -n "mgear_curveCns474GroupParts"; + rename -uid "73A12010-4511-4FB7-6603-84958A5391D8"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet582"; - rename -uid "2CB22691-472B-D3C9-4FA4-9EB95B3AAB59"; +createNode objectSet -n "tweakSet622"; + rename -uid "43923750-49C7-B42B-E2A7-51ABF2734D38"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8733"; - rename -uid "1D5D9171-49D2-97A9-250C-BAAEEF1A9B13"; +createNode groupId -n "groupId8813"; + rename -uid "28BA8B7B-4B3E-F5AD-6401-E68B7534CB6F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1164"; - rename -uid "F814FD2C-4501-4AE9-D512-DBAD4B49DA34"; +createNode groupParts -n "groupParts1244"; + rename -uid "8FBF3776-4042-0571-A965-5B8B868E39E6"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion146"; - rename -uid "9005297F-488C-3407-F1D1-F0B417B11B7C"; +createNode unitConversion -n "unitConversion163"; + rename -uid "9EE6BF9E-49F2-8051-0145-14BF3BF8D888"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns435"; - rename -uid "49BB732B-472D-C49E-0B61-DDB1AB153A01"; +createNode mgear_curveCns -n "mgear_curveCns475"; + rename -uid "5A48258B-4712-387D-FF28-9C9AD42C4238"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak583"; - rename -uid "FE119985-43F8-A8C7-77E3-058F7EDD7E33"; -createNode objectSet -n "mgear_curveCns435Set"; - rename -uid "C359E15C-4E18-A6EA-DB0E-D4B51A3461BB"; +createNode tweak -n "tweak623"; + rename -uid "FB0A96DB-4CF7-5DDE-1B29-D3A3A7458ED8"; +createNode objectSet -n "mgear_curveCns475Set"; + rename -uid "CDFF8B7A-4B93-129B-09B2-4F882F41E30C"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns435GroupId"; - rename -uid "DB00AA2B-4936-9C25-5618-F08A756F8D52"; +createNode groupId -n "mgear_curveCns475GroupId"; + rename -uid "C6396D2B-436F-04AA-84F8-AEBF17821200"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns435GroupParts"; - rename -uid "4308A096-47B4-9CA9-91CE-36B74B72D14C"; +createNode groupParts -n "mgear_curveCns475GroupParts"; + rename -uid "BA137669-4B49-D5DE-4D23-8EABB3A1EE72"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet583"; - rename -uid "344FC4F3-4472-11DD-4E8C-7E95BC4D9E87"; +createNode objectSet -n "tweakSet623"; + rename -uid "D2DE9FA4-49CF-70DE-FD27-339B253F3FBB"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8735"; - rename -uid "94B91D9B-4982-64F1-76B5-B2AD227356A6"; +createNode groupId -n "groupId8815"; + rename -uid "CDC93E76-4B8F-B42A-A19E-D99C30E7454F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1166"; - rename -uid "7AEB5AFA-4C40-6B60-8FBE-96ABC89E8692"; +createNode groupParts -n "groupParts1246"; + rename -uid "9754CF7C-4196-A227-AE22-AA8F77276F2C"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion147"; - rename -uid "34CE390F-4301-E08E-C67B-6683C4BF1204"; +createNode unitConversion -n "unitConversion164"; + rename -uid "38427B25-4F9E-6584-AFB4-F2B401B81112"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns436"; - rename -uid "FA6BCF03-4699-32AC-5F07-9FB6870BCFAB"; +createNode mgear_curveCns -n "mgear_curveCns476"; + rename -uid "0026FA6F-442B-B3B5-104C-44A0E234E583"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak584"; - rename -uid "EC980DD2-4C43-5ADD-26D9-BA9588EE885A"; -createNode objectSet -n "mgear_curveCns436Set"; - rename -uid "AE5D1901-44AF-DEF3-8EFF-EB94B2511F7D"; +createNode tweak -n "tweak624"; + rename -uid "075FEAEF-45C6-7403-70F0-8C9D72CB7E74"; +createNode objectSet -n "mgear_curveCns476Set"; + rename -uid "0176136F-4B2C-8C14-C5EF-A69D01EBFEBF"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns436GroupId"; - rename -uid "18B83AB1-4B1C-CB37-AEDF-CA87861BA935"; +createNode groupId -n "mgear_curveCns476GroupId"; + rename -uid "FA08E5B0-478C-F188-C05A-ABA8857A01E5"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns436GroupParts"; - rename -uid "FFC5760D-4C6F-C609-CFEA-DEA0C6A6A371"; +createNode groupParts -n "mgear_curveCns476GroupParts"; + rename -uid "3A367FA5-4765-AAAD-34DA-06ACA30BC676"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet584"; - rename -uid "E6A1B06F-4075-81B2-5E63-E8932D818F76"; +createNode objectSet -n "tweakSet624"; + rename -uid "3F6528C4-47EE-6E9E-D506-F883A67E6E68"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8737"; - rename -uid "72F34A1E-44A7-2ABA-23EC-658780A61AF7"; +createNode groupId -n "groupId8817"; + rename -uid "B01A7C2F-4990-571C-AC01-FC89F45F89F0"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1168"; - rename -uid "8C5D39ED-465D-B3CD-BA5D-EEB2CF9002FC"; +createNode groupParts -n "groupParts1248"; + rename -uid "D79B879F-4558-7602-4772-DCB01A972124"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "leg_L0_root_st_profile1"; - rename -uid "6F9C144C-4D97-D234-F24D-D49BE3C7275A"; +createNode animCurveUU -n "leg_L0_root_st_profile"; + rename -uid "D51E85C4-4590-61A9-7428-A48DE3E96606"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "leg_L0_root_sq_profile1"; - rename -uid "C68FAA89-4AA2-32B7-A80D-DA8D835D2D90"; +createNode animCurveUU -n "leg_L0_root_sq_profile"; + rename -uid "E1E9900B-4CD0-8B71-C356-B789C0788981"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns437"; - rename -uid "CA945228-44EC-1AC7-A08F-6D9A93A8849B"; +createNode mgear_curveCns -n "mgear_curveCns477"; + rename -uid "BBD17CCE-40E6-1C70-57A6-4380D0E7D024"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak585"; - rename -uid "AA16C151-4E94-D990-CFCA-0B87B3A576F2"; -createNode objectSet -n "mgear_curveCns437Set"; - rename -uid "592F10A3-4F63-8D21-F6AA-139A8B49B38C"; +createNode tweak -n "tweak625"; + rename -uid "02A57130-4859-EC06-D0AD-EFB0E94D45D8"; +createNode objectSet -n "mgear_curveCns477Set"; + rename -uid "57FB8F5E-4D58-9991-F0D8-958647307602"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns437GroupId"; - rename -uid "B24B1CF8-44FE-2BD8-9ECB-EDA9E9CB4D23"; +createNode groupId -n "mgear_curveCns477GroupId"; + rename -uid "6F76E598-438C-00CE-7C5F-E38970CEC2EB"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns437GroupParts"; - rename -uid "46E2A1E9-43B8-AD5B-7383-98BE9856CE9F"; +createNode groupParts -n "mgear_curveCns477GroupParts"; + rename -uid "B57D3634-4740-5A86-5743-3EBF7F3F33A2"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet585"; - rename -uid "2D25710B-48AC-7339-22C2-DD88C9EBE343"; +createNode objectSet -n "tweakSet625"; + rename -uid "F0CCDF29-4451-9E56-4E7B-A9BB88CB02A3"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8739"; - rename -uid "380C1CEB-4460-5E92-636A-2DA4AD1E2860"; +createNode groupId -n "groupId8819"; + rename -uid "40A82E62-423D-2DF7-738A-26B9AD09B8CE"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1170"; - rename -uid "3709B094-4B26-93B2-686C-A79AA5120720"; +createNode groupParts -n "groupParts1250"; + rename -uid "30C20A11-4943-FD0D-323C-30875FFEBC62"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns438"; - rename -uid "AD815CC8-48A4-8BC9-AA33-3A8D439272A6"; +createNode mgear_curveCns -n "mgear_curveCns478"; + rename -uid "0295FF8F-4209-C323-99EC-F99BD0CDA9D4"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak586"; - rename -uid "5E1F7A4C-4FCF-F5F7-909B-EF932C3AEA57"; -createNode objectSet -n "mgear_curveCns438Set"; - rename -uid "479BB742-4E87-CCAF-49C0-079D4E74B765"; +createNode tweak -n "tweak626"; + rename -uid "D1922B21-4BF1-0921-E5EE-3893A91DF7D9"; +createNode objectSet -n "mgear_curveCns478Set"; + rename -uid "F0CAF722-4DF7-82BB-1FEB-2FB1E41144B3"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns438GroupId"; - rename -uid "7E01C3E1-426F-EC94-D6EB-D89FCDF95897"; +createNode groupId -n "mgear_curveCns478GroupId"; + rename -uid "88B170D8-491D-2A76-BB68-05B32C26F734"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns438GroupParts"; - rename -uid "B83133D1-4ACB-B397-A5DE-12AE33A10B83"; +createNode groupParts -n "mgear_curveCns478GroupParts"; + rename -uid "D6573FAC-4494-4A47-E003-45999F0904E6"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet586"; - rename -uid "122F4E57-444C-EAB0-2A93-E0941F969415"; +createNode objectSet -n "tweakSet626"; + rename -uid "234E34B6-4D5F-8E69-3316-33BB82694E2F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8741"; - rename -uid "0B3E8A81-4350-48FF-B1D1-2187278E158F"; +createNode groupId -n "groupId8821"; + rename -uid "34B7548C-4970-2B4E-E6F6-00A12EB56439"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1172"; - rename -uid "C69A0639-443A-F62E-1C32-86B46F3C9418"; +createNode groupParts -n "groupParts1252"; + rename -uid "4AB36852-478F-4651-C299-E58BA415FA19"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns439"; - rename -uid "F4780B70-41EA-9AA7-3C6F-ED8FC7A6236A"; +createNode mgear_curveCns -n "mgear_curveCns479"; + rename -uid "703DDCE5-4B51-AC7D-6592-C0BBA5E1920F"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak587"; - rename -uid "9717ADF9-4633-AEE9-B53B-0CAD3284EF7B"; -createNode objectSet -n "mgear_curveCns439Set"; - rename -uid "2C54006B-4AEF-9C02-D4B2-D6A1013BEFCE"; +createNode tweak -n "tweak627"; + rename -uid "137D2E7E-42C1-9DC7-F448-DFBB850A5F97"; +createNode objectSet -n "mgear_curveCns479Set"; + rename -uid "350F0E2F-42D9-FF91-F235-35B3BBB32164"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns439GroupId"; - rename -uid "10AF0D11-45D3-75CB-6007-FDA7BA2653F8"; +createNode groupId -n "mgear_curveCns479GroupId"; + rename -uid "AE52A70C-4687-8E5C-19F6-07A7DD6C9655"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns439GroupParts"; - rename -uid "B72A41CB-4AC9-B289-63CA-E6BFD19788C3"; +createNode groupParts -n "mgear_curveCns479GroupParts"; + rename -uid "695D90B3-4559-02B4-EF0D-CB91C32E196C"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet587"; - rename -uid "5B3E51CB-4AA6-263B-E03D-03A57E1176CB"; +createNode objectSet -n "tweakSet627"; + rename -uid "84E9F1FE-4367-3EF8-2EC0-24846F403C75"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8743"; - rename -uid "D134E9D1-4E69-6668-D316-3984F67240E8"; +createNode groupId -n "groupId8823"; + rename -uid "CA62AE78-4BB0-9D4F-C29C-7EA663D689E9"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1174"; - rename -uid "E6CF5782-4B8F-1937-BBA0-C8A22FD8CDF5"; +createNode groupParts -n "groupParts1254"; + rename -uid "AAA54092-4F91-3FB1-8C9F-80965F9ED1AE"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "leg_R0_root_st_profile"; - rename -uid "C8CDE234-4A8F-C1F8-1964-C687DC6391C9"; +createNode animCurveUU -n "leg_R0_root_st_profile1"; + rename -uid "554F7AC2-4738-77E1-EC96-10B0065F4CDF"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "leg_R0_root_sq_profile"; - rename -uid "11D9731B-4A4D-6835-6DBB-759CC672DBD6"; +createNode animCurveUU -n "leg_R0_root_sq_profile1"; + rename -uid "26E47BD8-41DA-2B00-3C58-0DBFC69D4CCD"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns440"; - rename -uid "70F136BF-488A-8A8A-B53E-E59A1146C53E"; +createNode mgear_curveCns -n "mgear_curveCns480"; + rename -uid "D95F15DE-4313-45CF-DAF8-C0835C8B695F"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak588"; - rename -uid "A4175B9A-4296-16C9-FF83-32A629C4C611"; -createNode objectSet -n "mgear_curveCns440Set"; - rename -uid "E87BF3CC-4DE0-A57D-40A4-808DAF0D3BA4"; +createNode tweak -n "tweak628"; + rename -uid "5D22EC37-41CA-2B13-8DE6-87BC812EC506"; +createNode objectSet -n "mgear_curveCns480Set"; + rename -uid "A6301360-4BBC-0E62-B66A-E9B0B77387FE"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns440GroupId"; - rename -uid "31354F13-449C-F77B-CB2E-1CBD85C01D12"; +createNode groupId -n "mgear_curveCns480GroupId"; + rename -uid "0E35D8AF-4000-4626-A791-029A324C978A"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns440GroupParts"; - rename -uid "6A263843-41FB-BAAF-980A-B18B02C3045F"; +createNode groupParts -n "mgear_curveCns480GroupParts"; + rename -uid "3D02FC4E-47C9-4C85-D097-279E7E38ADCB"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet588"; - rename -uid "D02AD947-4F68-C6BB-49D8-72A3DB80B85C"; +createNode objectSet -n "tweakSet628"; + rename -uid "4BF65396-41DD-7CA2-860D-15A99634926A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8745"; - rename -uid "F26D3FEA-4392-1988-5EAC-989086DF22D0"; +createNode groupId -n "groupId8825"; + rename -uid "82446721-499D-DEDF-C5D2-7F84AF44DA7F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1176"; - rename -uid "EEF0A8C4-41E6-0F8C-3123-5C9E09B0215C"; +createNode groupParts -n "groupParts1256"; + rename -uid "EB6CD083-4573-42BE-7162-53AB9EDDAE10"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns441"; - rename -uid "8F3D6F74-4DF7-6F2A-BD67-B6ACE9DA804A"; +createNode mgear_curveCns -n "mgear_curveCns481"; + rename -uid "6E9E5D27-47B4-63A3-84A9-F2B8BF1F8D99"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak589"; - rename -uid "69FE70ED-4A0F-1C86-9484-3BAC9F2AF2B9"; -createNode objectSet -n "mgear_curveCns441Set"; - rename -uid "6FC7587C-48F0-0BEF-6C31-BCB9A5DBEB06"; +createNode tweak -n "tweak629"; + rename -uid "2A9D62E0-4188-4A10-976F-A1A9079486E4"; +createNode objectSet -n "mgear_curveCns481Set"; + rename -uid "D0013EBB-4962-573F-0143-0A8BE8DDBAED"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns441GroupId"; - rename -uid "D6556C99-4213-5C17-D7E7-20BB553C59BE"; +createNode groupId -n "mgear_curveCns481GroupId"; + rename -uid "7004F407-4F05-8CAC-EA72-2591B735038D"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns441GroupParts"; - rename -uid "593A7337-4352-B3FE-A15E-41B9577BE238"; +createNode groupParts -n "mgear_curveCns481GroupParts"; + rename -uid "8276EBCC-46F9-A737-DADB-0BA7369C96C1"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet589"; - rename -uid "1B6C42C4-4918-06FF-B689-A4A05EDAEFBA"; +createNode objectSet -n "tweakSet629"; + rename -uid "805A2672-4639-8234-1301-E3A917CBE9CB"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8747"; - rename -uid "1876125A-49CC-524E-FD62-AA9112D643A8"; +createNode groupId -n "groupId8827"; + rename -uid "BF3BAD20-42BD-5473-AC06-4C90A8C0D879"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1178"; - rename -uid "C67982B6-4346-598E-6793-06A984D00928"; +createNode groupParts -n "groupParts1258"; + rename -uid "3EDFEB1C-4ADB-A095-A47E-F1905B046FDF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns442"; - rename -uid "8612C551-469C-63E6-A5A9-2F84CA405673"; +createNode mgear_curveCns -n "mgear_curveCns482"; + rename -uid "8F4194AC-45EF-44DE-6333-FD897C02E083"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak590"; - rename -uid "3704EEAA-480A-1DCA-788B-82BF2DB4E50B"; -createNode objectSet -n "mgear_curveCns442Set"; - rename -uid "65CFCB30-4227-431E-04E5-BB840F6D830F"; +createNode tweak -n "tweak630"; + rename -uid "1A08832E-4EAE-CFB0-1E55-9CAA138E61A8"; +createNode objectSet -n "mgear_curveCns482Set"; + rename -uid "9F78BC17-4647-E3E0-D603-D1AFA4E42EB4"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns442GroupId"; - rename -uid "554C7142-4D71-327B-5B12-D6BBBE5D6871"; +createNode groupId -n "mgear_curveCns482GroupId"; + rename -uid "759C09B9-4B4D-A325-B4B3-CE931EC8F695"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns442GroupParts"; - rename -uid "CF950B57-41AB-137D-CB49-4298C8B3F05C"; +createNode groupParts -n "mgear_curveCns482GroupParts"; + rename -uid "84520EC3-400F-1C86-548A-AABFE20C4A7D"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet590"; - rename -uid "3C60F627-4B3B-4854-524C-9DA4E5446920"; +createNode objectSet -n "tweakSet630"; + rename -uid "77EFBC8B-4483-A3E0-82FE-528897087E9D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId8749"; - rename -uid "B8B422C8-4CE3-5919-5742-3F896269C7A1"; +createNode groupId -n "groupId8829"; + rename -uid "B53270CB-4B0C-9755-AAB9-7A93F38A33AE"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts1180"; - rename -uid "96BA0227-4E65-A8AA-C76C-9E98BD07B719"; +createNode groupParts -n "groupParts1260"; + rename -uid "D310D476-4B60-B45C-4C9B-4CA3ECDF6033"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; createNode script -n "uiConfigurationScriptNode"; - rename -uid "093946A3-4A4E-10B7-F93B-50A3E5F1F0BE"; + rename -uid "66D2A573-4BF1-BF2F-78B6-99BFF7141625"; setAttr ".b" -type "string" ( "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n" + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n" @@ -15905,24 +15879,24 @@ createNode script -n "uiConfigurationScriptNode"; + " -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n" + " -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n" + " -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n" - + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1168\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n" + + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1300\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n" + "\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n" + " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n" - + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1168\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n" - + " -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" - + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n" - + " -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n" - + " -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n" - + " -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n" - + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n" - + " -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n" - + " outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n" - + " -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n" - + " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" - + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n" - + " -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n" - + " -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n" + + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1300\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n" + + " -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n" + + " -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n" + + " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n" + + " -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n" + + " -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n" + + " -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n" + + " -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n" + + " animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n" + + " -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n" + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n" + " -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n" + " dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n" @@ -15949,14 +15923,14 @@ createNode script -n "uiConfigurationScriptNode"; + "\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n" + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"left3\\\" -ps 1 80 78 -ps 2 20 100 -ps 3 80 22 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap true\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1168\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1168\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" - + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Outliner\")) \n\t\t\t\t\t\"outlinerPanel\"\n\t\t\t\t\t\"$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" - + "\t\t\t\t\t\"outlinerPanel -edit -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1300\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1300\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Outliner\")) \n\t\t\t\t\t\"outlinerPanel\"\n\t\t\t\t\t\"$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -docTag \\\"isolOutln_fromSeln\\\" \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + + "\t\t\t\t\t\"outlinerPanel -edit -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -docTag \\\"isolOutln_fromSeln\\\" \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Script Editor\")) \n\t\t\t\t\t\"scriptedPanel\"\n\t\t\t\t\t\"$panelName = `scriptedPanel -unParent -type \\\"scriptEditorPanel\\\" -l (localizedPanelLabel(\\\"Script Editor\\\")) -mbv $menusOkayInPanels `\"\n\t\t\t\t\t\"scriptedPanel -edit -l (localizedPanelLabel(\\\"Script Editor\\\")) -mbv $menusOkayInPanels $panelName\"\n\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); setAttr ".st" 3; createNode script -n "sceneConfigurationScriptNode"; - rename -uid "DFA6B35A-4AC5-B3F6-2B5A-798628D34796"; + rename -uid "5177B696-438F-B220-2A7B-56A61BA1BD0C"; setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; setAttr ".st" 6; select -ne :time1; @@ -15985,1307 +15959,1310 @@ select -ne :defaultResolution; select -ne :hardwareRenderGlobals; setAttr ".ctrs" 256; setAttr ".btrs" 512; -connectAttr "spine_C0_root_st_profile1.o" "spine_C0_root.st_profile"; -connectAttr "spine_C0_root_sq_profile1.o" "spine_C0_root.sq_profile"; -connectAttr "arm_L0_root_st_profile1.o" "arm_L0_root.st_profile"; -connectAttr "arm_L0_root_sq_profile1.o" "arm_L0_root.sq_profile"; -connectAttr "finger_L3_blade_pointConstraint9.ctx" "finger_L3_blade.tx" -l on; -connectAttr "finger_L3_blade_pointConstraint9.cty" "finger_L3_blade.ty" -l on; -connectAttr "finger_L3_blade_pointConstraint9.ctz" "finger_L3_blade.tz" -l on; -connectAttr "finger_L3_blade_aimConstraint9.crx" "finger_L3_blade.rx" -l on; -connectAttr "finger_L3_blade_aimConstraint9.cry" "finger_L3_blade.ry" -l on; -connectAttr "finger_L3_blade_aimConstraint9.crz" "finger_L3_blade.rz" -l on; -connectAttr "finger_L3_blade.pim" "finger_L3_blade_aimConstraint9.cpim"; -connectAttr "finger_L3_blade.t" "finger_L3_blade_aimConstraint9.ct"; -connectAttr "finger_L3_blade.rp" "finger_L3_blade_aimConstraint9.crp"; -connectAttr "finger_L3_blade.rpt" "finger_L3_blade_aimConstraint9.crt"; -connectAttr "finger_L3_blade.ro" "finger_L3_blade_aimConstraint9.cro"; -connectAttr "finger_L3_0_loc.t" "finger_L3_blade_aimConstraint9.tg[0].tt"; -connectAttr "finger_L3_0_loc.rp" "finger_L3_blade_aimConstraint9.tg[0].trp"; -connectAttr "finger_L3_0_loc.rpt" "finger_L3_blade_aimConstraint9.tg[0].trt"; -connectAttr "finger_L3_0_loc.pm" "finger_L3_blade_aimConstraint9.tg[0].tpm"; -connectAttr "finger_L3_blade_aimConstraint9.w0" "finger_L3_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "finger_L3_root.wm" "finger_L3_blade_aimConstraint9.wum"; -connectAttr "unitConversion134.o" "finger_L3_blade_aimConstraint9.ox"; -connectAttr "finger_L3_blade.pim" "finger_L3_blade_pointConstraint9.cpim"; -connectAttr "finger_L3_blade.rp" "finger_L3_blade_pointConstraint9.crp"; -connectAttr "finger_L3_blade.rpt" "finger_L3_blade_pointConstraint9.crt"; -connectAttr "finger_L3_root.t" "finger_L3_blade_pointConstraint9.tg[0].tt"; -connectAttr "finger_L3_root.rp" "finger_L3_blade_pointConstraint9.tg[0].trp"; -connectAttr "finger_L3_root.rpt" "finger_L3_blade_pointConstraint9.tg[0].trt"; -connectAttr "finger_L3_root.pm" "finger_L3_blade_pointConstraint9.tg[0].tpm"; -connectAttr "finger_L3_blade_pointConstraint9.w0" "finger_L3_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns415.og[0]" "finger_L3_crvShape.cr"; -connectAttr "tweak563.pl[0].cp[0]" "finger_L3_crvShape.twl"; -connectAttr "mgear_curveCns415GroupId.id" "finger_L3_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns415Set.mwc" "finger_L3_crvShape.iog.og[0].gco"; -connectAttr "groupId8695.id" "finger_L3_crvShape.iog.og[1].gid"; -connectAttr "tweakSet563.mwc" "finger_L3_crvShape.iog.og[1].gco"; -connectAttr "finger_L2_blade_pointConstraint9.ctx" "finger_L2_blade.tx" -l on; -connectAttr "finger_L2_blade_pointConstraint9.cty" "finger_L2_blade.ty" -l on; -connectAttr "finger_L2_blade_pointConstraint9.ctz" "finger_L2_blade.tz" -l on; -connectAttr "finger_L2_blade_aimConstraint9.crx" "finger_L2_blade.rx" -l on; -connectAttr "finger_L2_blade_aimConstraint9.cry" "finger_L2_blade.ry" -l on; -connectAttr "finger_L2_blade_aimConstraint9.crz" "finger_L2_blade.rz" -l on; -connectAttr "finger_L2_blade.pim" "finger_L2_blade_aimConstraint9.cpim"; -connectAttr "finger_L2_blade.t" "finger_L2_blade_aimConstraint9.ct"; -connectAttr "finger_L2_blade.rp" "finger_L2_blade_aimConstraint9.crp"; -connectAttr "finger_L2_blade.rpt" "finger_L2_blade_aimConstraint9.crt"; -connectAttr "finger_L2_blade.ro" "finger_L2_blade_aimConstraint9.cro"; -connectAttr "finger_L2_0_loc.t" "finger_L2_blade_aimConstraint9.tg[0].tt"; -connectAttr "finger_L2_0_loc.rp" "finger_L2_blade_aimConstraint9.tg[0].trp"; -connectAttr "finger_L2_0_loc.rpt" "finger_L2_blade_aimConstraint9.tg[0].trt"; -connectAttr "finger_L2_0_loc.pm" "finger_L2_blade_aimConstraint9.tg[0].tpm"; -connectAttr "finger_L2_blade_aimConstraint9.w0" "finger_L2_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "finger_L2_root.wm" "finger_L2_blade_aimConstraint9.wum"; -connectAttr "unitConversion135.o" "finger_L2_blade_aimConstraint9.ox"; -connectAttr "finger_L2_blade.pim" "finger_L2_blade_pointConstraint9.cpim"; -connectAttr "finger_L2_blade.rp" "finger_L2_blade_pointConstraint9.crp"; -connectAttr "finger_L2_blade.rpt" "finger_L2_blade_pointConstraint9.crt"; -connectAttr "finger_L2_root.t" "finger_L2_blade_pointConstraint9.tg[0].tt"; -connectAttr "finger_L2_root.rp" "finger_L2_blade_pointConstraint9.tg[0].trp"; -connectAttr "finger_L2_root.rpt" "finger_L2_blade_pointConstraint9.tg[0].trt"; -connectAttr "finger_L2_root.pm" "finger_L2_blade_pointConstraint9.tg[0].tpm"; -connectAttr "finger_L2_blade_pointConstraint9.w0" "finger_L2_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns416.og[0]" "finger_L2_crvShape.cr"; -connectAttr "tweak564.pl[0].cp[0]" "finger_L2_crvShape.twl"; -connectAttr "mgear_curveCns416GroupId.id" "finger_L2_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns416Set.mwc" "finger_L2_crvShape.iog.og[0].gco"; -connectAttr "groupId8697.id" "finger_L2_crvShape.iog.og[1].gid"; -connectAttr "tweakSet564.mwc" "finger_L2_crvShape.iog.og[1].gco"; -connectAttr "finger_L1_blade_pointConstraint9.ctx" "finger_L1_blade.tx" -l on; -connectAttr "finger_L1_blade_pointConstraint9.cty" "finger_L1_blade.ty" -l on; -connectAttr "finger_L1_blade_pointConstraint9.ctz" "finger_L1_blade.tz" -l on; -connectAttr "finger_L1_blade_aimConstraint9.crx" "finger_L1_blade.rx" -l on; -connectAttr "finger_L1_blade_aimConstraint9.cry" "finger_L1_blade.ry" -l on; -connectAttr "finger_L1_blade_aimConstraint9.crz" "finger_L1_blade.rz" -l on; -connectAttr "finger_L1_blade.pim" "finger_L1_blade_aimConstraint9.cpim"; -connectAttr "finger_L1_blade.t" "finger_L1_blade_aimConstraint9.ct"; -connectAttr "finger_L1_blade.rp" "finger_L1_blade_aimConstraint9.crp"; -connectAttr "finger_L1_blade.rpt" "finger_L1_blade_aimConstraint9.crt"; -connectAttr "finger_L1_blade.ro" "finger_L1_blade_aimConstraint9.cro"; -connectAttr "finger_L1_0_loc.t" "finger_L1_blade_aimConstraint9.tg[0].tt"; -connectAttr "finger_L1_0_loc.rp" "finger_L1_blade_aimConstraint9.tg[0].trp"; -connectAttr "finger_L1_0_loc.rpt" "finger_L1_blade_aimConstraint9.tg[0].trt"; -connectAttr "finger_L1_0_loc.pm" "finger_L1_blade_aimConstraint9.tg[0].tpm"; -connectAttr "finger_L1_blade_aimConstraint9.w0" "finger_L1_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "finger_L1_root.wm" "finger_L1_blade_aimConstraint9.wum"; -connectAttr "unitConversion136.o" "finger_L1_blade_aimConstraint9.ox"; -connectAttr "finger_L1_blade.pim" "finger_L1_blade_pointConstraint9.cpim"; -connectAttr "finger_L1_blade.rp" "finger_L1_blade_pointConstraint9.crp"; -connectAttr "finger_L1_blade.rpt" "finger_L1_blade_pointConstraint9.crt"; -connectAttr "finger_L1_root.t" "finger_L1_blade_pointConstraint9.tg[0].tt"; -connectAttr "finger_L1_root.rp" "finger_L1_blade_pointConstraint9.tg[0].trp"; -connectAttr "finger_L1_root.rpt" "finger_L1_blade_pointConstraint9.tg[0].trt"; -connectAttr "finger_L1_root.pm" "finger_L1_blade_pointConstraint9.tg[0].tpm"; -connectAttr "finger_L1_blade_pointConstraint9.w0" "finger_L1_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns417.og[0]" "finger_L1_crvShape.cr"; -connectAttr "tweak565.pl[0].cp[0]" "finger_L1_crvShape.twl"; -connectAttr "mgear_curveCns417GroupId.id" "finger_L1_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns417Set.mwc" "finger_L1_crvShape.iog.og[0].gco"; -connectAttr "groupId8699.id" "finger_L1_crvShape.iog.og[1].gid"; -connectAttr "tweakSet565.mwc" "finger_L1_crvShape.iog.og[1].gco"; -connectAttr "meta_L0_blade_pointConstraint9.ctx" "meta_L0_blade.tx" -l on; -connectAttr "meta_L0_blade_pointConstraint9.cty" "meta_L0_blade.ty" -l on; -connectAttr "meta_L0_blade_pointConstraint9.ctz" "meta_L0_blade.tz" -l on; -connectAttr "meta_L0_blade_aimConstraint9.crx" "meta_L0_blade.rx" -l on; -connectAttr "meta_L0_blade_aimConstraint9.cry" "meta_L0_blade.ry" -l on; -connectAttr "meta_L0_blade_aimConstraint9.crz" "meta_L0_blade.rz" -l on; -connectAttr "meta_L0_blade.pim" "meta_L0_blade_aimConstraint9.cpim"; -connectAttr "meta_L0_blade.t" "meta_L0_blade_aimConstraint9.ct"; -connectAttr "meta_L0_blade.rp" "meta_L0_blade_aimConstraint9.crp"; -connectAttr "meta_L0_blade.rpt" "meta_L0_blade_aimConstraint9.crt"; -connectAttr "meta_L0_blade.ro" "meta_L0_blade_aimConstraint9.cro"; -connectAttr "meta_L0_0_loc.t" "meta_L0_blade_aimConstraint9.tg[0].tt"; -connectAttr "meta_L0_0_loc.rp" "meta_L0_blade_aimConstraint9.tg[0].trp"; -connectAttr "meta_L0_0_loc.rpt" "meta_L0_blade_aimConstraint9.tg[0].trt"; -connectAttr "meta_L0_0_loc.pm" "meta_L0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "meta_L0_blade_aimConstraint9.w0" "meta_L0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "meta_L0_root.wm" "meta_L0_blade_aimConstraint9.wum"; -connectAttr "unitConversion133.o" "meta_L0_blade_aimConstraint9.ox"; -connectAttr "meta_L0_blade.pim" "meta_L0_blade_pointConstraint9.cpim"; -connectAttr "meta_L0_blade.rp" "meta_L0_blade_pointConstraint9.crp"; -connectAttr "meta_L0_blade.rpt" "meta_L0_blade_pointConstraint9.crt"; -connectAttr "meta_L0_root.t" "meta_L0_blade_pointConstraint9.tg[0].tt"; -connectAttr "meta_L0_root.rp" "meta_L0_blade_pointConstraint9.tg[0].trp"; -connectAttr "meta_L0_root.rpt" "meta_L0_blade_pointConstraint9.tg[0].trt"; -connectAttr "meta_L0_root.pm" "meta_L0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "meta_L0_blade_pointConstraint9.w0" "meta_L0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns414.og[0]" "meta_L0_crvShape.cr"; -connectAttr "tweak562.pl[0].cp[0]" "meta_L0_crvShape.twl"; -connectAttr "mgear_curveCns414GroupId.id" "meta_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns414Set.mwc" "meta_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8693.id" "meta_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet562.mwc" "meta_L0_crvShape.iog.og[1].gco"; -connectAttr "finger_L0_blade_pointConstraint9.ctx" "finger_L0_blade.tx" -l on; -connectAttr "finger_L0_blade_pointConstraint9.cty" "finger_L0_blade.ty" -l on; -connectAttr "finger_L0_blade_pointConstraint9.ctz" "finger_L0_blade.tz" -l on; -connectAttr "finger_L0_blade_aimConstraint9.crx" "finger_L0_blade.rx" -l on; -connectAttr "finger_L0_blade_aimConstraint9.cry" "finger_L0_blade.ry" -l on; -connectAttr "finger_L0_blade_aimConstraint9.crz" "finger_L0_blade.rz" -l on; -connectAttr "finger_L0_blade.pim" "finger_L0_blade_aimConstraint9.cpim"; -connectAttr "finger_L0_blade.t" "finger_L0_blade_aimConstraint9.ct"; -connectAttr "finger_L0_blade.rp" "finger_L0_blade_aimConstraint9.crp"; -connectAttr "finger_L0_blade.rpt" "finger_L0_blade_aimConstraint9.crt"; -connectAttr "finger_L0_blade.ro" "finger_L0_blade_aimConstraint9.cro"; -connectAttr "finger_L0_0_loc.t" "finger_L0_blade_aimConstraint9.tg[0].tt"; -connectAttr "finger_L0_0_loc.rp" "finger_L0_blade_aimConstraint9.tg[0].trp"; -connectAttr "finger_L0_0_loc.rpt" "finger_L0_blade_aimConstraint9.tg[0].trt"; -connectAttr "finger_L0_0_loc.pm" "finger_L0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "finger_L0_blade_aimConstraint9.w0" "finger_L0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "finger_L0_root.wm" "finger_L0_blade_aimConstraint9.wum"; -connectAttr "unitConversion137.o" "finger_L0_blade_aimConstraint9.ox"; -connectAttr "finger_L0_blade.pim" "finger_L0_blade_pointConstraint9.cpim"; -connectAttr "finger_L0_blade.rp" "finger_L0_blade_pointConstraint9.crp"; -connectAttr "finger_L0_blade.rpt" "finger_L0_blade_pointConstraint9.crt"; -connectAttr "finger_L0_root.t" "finger_L0_blade_pointConstraint9.tg[0].tt"; -connectAttr "finger_L0_root.rp" "finger_L0_blade_pointConstraint9.tg[0].trp"; -connectAttr "finger_L0_root.rpt" "finger_L0_blade_pointConstraint9.tg[0].trt"; -connectAttr "finger_L0_root.pm" "finger_L0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "finger_L0_blade_pointConstraint9.w0" "finger_L0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns418.og[0]" "finger_L0_crvShape.cr"; -connectAttr "tweak566.pl[0].cp[0]" "finger_L0_crvShape.twl"; -connectAttr "mgear_curveCns418GroupId.id" "finger_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns418Set.mwc" "finger_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8701.id" "finger_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet566.mwc" "finger_L0_crvShape.iog.og[1].gco"; -connectAttr "thumb_L0_blade_pointConstraint9.ctx" "thumb_L0_blade.tx" -l on; -connectAttr "thumb_L0_blade_pointConstraint9.cty" "thumb_L0_blade.ty" -l on; -connectAttr "thumb_L0_blade_pointConstraint9.ctz" "thumb_L0_blade.tz" -l on; -connectAttr "thumb_L0_blade_aimConstraint9.crx" "thumb_L0_blade.rx" -l on; -connectAttr "thumb_L0_blade_aimConstraint9.cry" "thumb_L0_blade.ry" -l on; -connectAttr "thumb_L0_blade_aimConstraint9.crz" "thumb_L0_blade.rz" -l on; -connectAttr "thumb_L0_blade.pim" "thumb_L0_blade_aimConstraint9.cpim"; -connectAttr "thumb_L0_blade.t" "thumb_L0_blade_aimConstraint9.ct"; -connectAttr "thumb_L0_blade.rp" "thumb_L0_blade_aimConstraint9.crp"; -connectAttr "thumb_L0_blade.rpt" "thumb_L0_blade_aimConstraint9.crt"; -connectAttr "thumb_L0_blade.ro" "thumb_L0_blade_aimConstraint9.cro"; -connectAttr "thumb_L0_0_loc.t" "thumb_L0_blade_aimConstraint9.tg[0].tt"; -connectAttr "thumb_L0_0_loc.rp" "thumb_L0_blade_aimConstraint9.tg[0].trp"; -connectAttr "thumb_L0_0_loc.rpt" "thumb_L0_blade_aimConstraint9.tg[0].trt"; -connectAttr "thumb_L0_0_loc.pm" "thumb_L0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "thumb_L0_blade_aimConstraint9.w0" "thumb_L0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "thumb_L0_root.wm" "thumb_L0_blade_aimConstraint9.wum"; -connectAttr "unitConversion138.o" "thumb_L0_blade_aimConstraint9.ox"; -connectAttr "thumb_L0_blade.pim" "thumb_L0_blade_pointConstraint9.cpim"; -connectAttr "thumb_L0_blade.rp" "thumb_L0_blade_pointConstraint9.crp"; -connectAttr "thumb_L0_blade.rpt" "thumb_L0_blade_pointConstraint9.crt"; -connectAttr "thumb_L0_root.t" "thumb_L0_blade_pointConstraint9.tg[0].tt"; -connectAttr "thumb_L0_root.rp" "thumb_L0_blade_pointConstraint9.tg[0].trp"; -connectAttr "thumb_L0_root.rpt" "thumb_L0_blade_pointConstraint9.tg[0].trt"; -connectAttr "thumb_L0_root.pm" "thumb_L0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "thumb_L0_blade_pointConstraint9.w0" "thumb_L0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns419.og[0]" "thumb_L0_crvShape.cr"; -connectAttr "tweak567.pl[0].cp[0]" "thumb_L0_crvShape.twl"; -connectAttr "mgear_curveCns419GroupId.id" "thumb_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns419Set.mwc" "thumb_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8703.id" "thumb_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet567.mwc" "thumb_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns413.og[0]" "arm_L0_crvShape.cr"; -connectAttr "tweak561.pl[0].cp[0]" "arm_L0_crvShape.twl"; -connectAttr "mgear_curveCns413GroupId.id" "arm_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns413Set.mwc" "arm_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8691.id" "arm_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet561.mwc" "arm_L0_crvShape.iog.og[1].gco"; -connectAttr "shoulder_L0_blade_pointConstraint9.ctx" "shoulder_L0_blade.tx" -l on - ; -connectAttr "shoulder_L0_blade_pointConstraint9.cty" "shoulder_L0_blade.ty" -l on - ; -connectAttr "shoulder_L0_blade_pointConstraint9.ctz" "shoulder_L0_blade.tz" -l on - ; -connectAttr "shoulder_L0_blade_aimConstraint9.crx" "shoulder_L0_blade.rx" -l on; -connectAttr "shoulder_L0_blade_aimConstraint9.cry" "shoulder_L0_blade.ry" -l on; -connectAttr "shoulder_L0_blade_aimConstraint9.crz" "shoulder_L0_blade.rz" -l on; -connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_aimConstraint9.cpim"; -connectAttr "shoulder_L0_blade.t" "shoulder_L0_blade_aimConstraint9.ct"; -connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_aimConstraint9.crp"; -connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_aimConstraint9.crt"; -connectAttr "shoulder_L0_blade.ro" "shoulder_L0_blade_aimConstraint9.cro"; -connectAttr "shoulder_L0_tip.t" "shoulder_L0_blade_aimConstraint9.tg[0].tt"; -connectAttr "shoulder_L0_tip.rp" "shoulder_L0_blade_aimConstraint9.tg[0].trp"; -connectAttr "shoulder_L0_tip.rpt" "shoulder_L0_blade_aimConstraint9.tg[0].trt"; -connectAttr "shoulder_L0_tip.pm" "shoulder_L0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "shoulder_L0_blade_aimConstraint9.w0" "shoulder_L0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "shoulder_L0_root.wm" "shoulder_L0_blade_aimConstraint9.wum"; -connectAttr "unitConversion132.o" "shoulder_L0_blade_aimConstraint9.ox"; -connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_pointConstraint9.cpim"; -connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_pointConstraint9.crp"; -connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_pointConstraint9.crt"; -connectAttr "shoulder_L0_root.t" "shoulder_L0_blade_pointConstraint9.tg[0].tt"; -connectAttr "shoulder_L0_root.rp" "shoulder_L0_blade_pointConstraint9.tg[0].trp" - ; -connectAttr "shoulder_L0_root.rpt" "shoulder_L0_blade_pointConstraint9.tg[0].trt" - ; -connectAttr "shoulder_L0_root.pm" "shoulder_L0_blade_pointConstraint9.tg[0].tpm" - ; -connectAttr "shoulder_L0_blade_pointConstraint9.w0" "shoulder_L0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns412.og[0]" "shoulder_L0_crvShape.cr"; -connectAttr "tweak560.pl[0].cp[0]" "shoulder_L0_crvShape.twl"; -connectAttr "mgear_curveCns412GroupId.id" "shoulder_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns412Set.mwc" "shoulder_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8689.id" "shoulder_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet560.mwc" "shoulder_L0_crvShape.iog.og[1].gco"; -connectAttr "neck_C0_root_st_profile1.o" "neck_C0_root.st_profile"; -connectAttr "neck_C0_root_sq_profile1.o" "neck_C0_root.sq_profile"; -connectAttr "mgear_curveCns423.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak571.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns423GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns423Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId8711.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet571.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "mgear_curveCns424.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak572.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns424GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns424Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId8713.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet572.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "tongue_C0_blade_pointConstraint9.ctx" "tongue_C0_blade.tx" -l on; -connectAttr "tongue_C0_blade_pointConstraint9.cty" "tongue_C0_blade.ty" -l on; -connectAttr "tongue_C0_blade_pointConstraint9.ctz" "tongue_C0_blade.tz" -l on; -connectAttr "tongue_C0_blade_aimConstraint9.crx" "tongue_C0_blade.rx" -l on; -connectAttr "tongue_C0_blade_aimConstraint9.cry" "tongue_C0_blade.ry" -l on; -connectAttr "tongue_C0_blade_aimConstraint9.crz" "tongue_C0_blade.rz" -l on; -connectAttr "tongue_C0_blade.pim" "tongue_C0_blade_aimConstraint9.cpim"; -connectAttr "tongue_C0_blade.t" "tongue_C0_blade_aimConstraint9.ct"; -connectAttr "tongue_C0_blade.rp" "tongue_C0_blade_aimConstraint9.crp"; -connectAttr "tongue_C0_blade.rpt" "tongue_C0_blade_aimConstraint9.crt"; -connectAttr "tongue_C0_blade.ro" "tongue_C0_blade_aimConstraint9.cro"; -connectAttr "tongue_C0_0_loc.t" "tongue_C0_blade_aimConstraint9.tg[0].tt"; -connectAttr "tongue_C0_0_loc.rp" "tongue_C0_blade_aimConstraint9.tg[0].trp"; -connectAttr "tongue_C0_0_loc.rpt" "tongue_C0_blade_aimConstraint9.tg[0].trt"; -connectAttr "tongue_C0_0_loc.pm" "tongue_C0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "tongue_C0_blade_aimConstraint9.w0" "tongue_C0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "tongue_C0_root.wm" "tongue_C0_blade_aimConstraint9.wum"; -connectAttr "unitConversion140.o" "tongue_C0_blade_aimConstraint9.ox"; -connectAttr "tongue_C0_blade.pim" "tongue_C0_blade_pointConstraint9.cpim"; -connectAttr "tongue_C0_blade.rp" "tongue_C0_blade_pointConstraint9.crp"; -connectAttr "tongue_C0_blade.rpt" "tongue_C0_blade_pointConstraint9.crt"; -connectAttr "tongue_C0_root.t" "tongue_C0_blade_pointConstraint9.tg[0].tt"; -connectAttr "tongue_C0_root.rp" "tongue_C0_blade_pointConstraint9.tg[0].trp"; -connectAttr "tongue_C0_root.rpt" "tongue_C0_blade_pointConstraint9.tg[0].trt"; -connectAttr "tongue_C0_root.pm" "tongue_C0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "tongue_C0_blade_pointConstraint9.w0" "tongue_C0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns426.og[0]" "tongue_C0_crvShape.cr"; -connectAttr "tweak574.pl[0].cp[0]" "tongue_C0_crvShape.twl"; -connectAttr "mgear_curveCns426GroupId.id" "tongue_C0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns426Set.mwc" "tongue_C0_crvShape.iog.og[0].gco"; -connectAttr "groupId8717.id" "tongue_C0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet574.mwc" "tongue_C0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns422.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak570.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns422GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns422Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId8709.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet570.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "mgear_curveCns425.og[0]" "mouth_C0_crv9Shape.cr"; -connectAttr "tweak573.pl[0].cp[0]" "mouth_C0_crv9Shape.twl"; -connectAttr "mgear_curveCns425GroupId.id" "mouth_C0_crv9Shape.iog.og[0].gid"; -connectAttr "mgear_curveCns425Set.mwc" "mouth_C0_crv9Shape.iog.og[0].gco"; -connectAttr "groupId8715.id" "mouth_C0_crv9Shape.iog.og[1].gid"; -connectAttr "tweakSet573.mwc" "mouth_C0_crv9Shape.iog.og[1].gco"; -connectAttr "mgear_curveCns427.og[0]" "eye_R0_crvShape.cr"; -connectAttr "tweak575.pl[0].cp[0]" "eye_R0_crvShape.twl"; -connectAttr "mgear_curveCns427GroupId.id" "eye_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns427Set.mwc" "eye_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8719.id" "eye_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet575.mwc" "eye_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns428.og[0]" "eye_L0_crvShape.cr"; -connectAttr "tweak576.pl[0].cp[0]" "eye_L0_crvShape.twl"; -connectAttr "mgear_curveCns428GroupId.id" "eye_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns428Set.mwc" "eye_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8721.id" "eye_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet576.mwc" "eye_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns421.og[0]" "neck_C0_head_crvShape.cr"; -connectAttr "tweak569.pl[0].cp[0]" "neck_C0_head_crvShape.twl"; -connectAttr "mgear_curveCns421GroupId.id" "neck_C0_head_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns421Set.mwc" "neck_C0_head_crvShape.iog.og[0].gco"; -connectAttr "groupId8707.id" "neck_C0_head_crvShape.iog.og[1].gid"; -connectAttr "tweakSet569.mwc" "neck_C0_head_crvShape.iog.og[1].gco"; -connectAttr "neck_C0_blade_pointConstraint9.ctx" "neck_C0_blade.tx" -l on; -connectAttr "neck_C0_blade_pointConstraint9.cty" "neck_C0_blade.ty" -l on; -connectAttr "neck_C0_blade_pointConstraint9.ctz" "neck_C0_blade.tz" -l on; -connectAttr "neck_C0_blade_aimConstraint9.crx" "neck_C0_blade.rx" -l on; -connectAttr "neck_C0_blade_aimConstraint9.cry" "neck_C0_blade.ry" -l on; -connectAttr "neck_C0_blade_aimConstraint9.crz" "neck_C0_blade.rz" -l on; -connectAttr "neck_C0_blade.pim" "neck_C0_blade_aimConstraint9.cpim"; -connectAttr "neck_C0_blade.t" "neck_C0_blade_aimConstraint9.ct"; -connectAttr "neck_C0_blade.rp" "neck_C0_blade_aimConstraint9.crp"; -connectAttr "neck_C0_blade.rpt" "neck_C0_blade_aimConstraint9.crt"; -connectAttr "neck_C0_blade.ro" "neck_C0_blade_aimConstraint9.cro"; -connectAttr "neck_C0_tan0.t" "neck_C0_blade_aimConstraint9.tg[0].tt"; -connectAttr "neck_C0_tan0.rp" "neck_C0_blade_aimConstraint9.tg[0].trp"; -connectAttr "neck_C0_tan0.rpt" "neck_C0_blade_aimConstraint9.tg[0].trt"; -connectAttr "neck_C0_tan0.pm" "neck_C0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "neck_C0_blade_aimConstraint9.w0" "neck_C0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "neck_C0_root.wm" "neck_C0_blade_aimConstraint9.wum"; -connectAttr "unitConversion139.o" "neck_C0_blade_aimConstraint9.ox"; -connectAttr "neck_C0_blade.pim" "neck_C0_blade_pointConstraint9.cpim"; -connectAttr "neck_C0_blade.rp" "neck_C0_blade_pointConstraint9.crp"; -connectAttr "neck_C0_blade.rpt" "neck_C0_blade_pointConstraint9.crt"; -connectAttr "neck_C0_root.t" "neck_C0_blade_pointConstraint9.tg[0].tt"; -connectAttr "neck_C0_root.rp" "neck_C0_blade_pointConstraint9.tg[0].trp"; -connectAttr "neck_C0_root.rpt" "neck_C0_blade_pointConstraint9.tg[0].trt"; -connectAttr "neck_C0_root.pm" "neck_C0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "neck_C0_blade_pointConstraint9.w0" "neck_C0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns420.og[0]" "neck_C0_neck_crvShape.cr"; -connectAttr "tweak568.pl[0].cp[0]" "neck_C0_neck_crvShape.twl"; -connectAttr "mgear_curveCns420GroupId.id" "neck_C0_neck_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns420Set.mwc" "neck_C0_neck_crvShape.iog.og[0].gco"; -connectAttr "groupId8705.id" "neck_C0_neck_crvShape.iog.og[1].gid"; -connectAttr "tweakSet568.mwc" "neck_C0_neck_crvShape.iog.og[1].gco"; +connectAttr "spine_C0_root_st_profile.o" "spine_C0_root.st_profile"; +connectAttr "spine_C0_root_sq_profile.o" "spine_C0_root.sq_profile"; +connectAttr "arm_L0_root_st_profile.o" "arm_L0_root.st_profile"; +connectAttr "arm_L0_root_sq_profile.o" "arm_L0_root.sq_profile"; +connectAttr "finger_L3_blade_pointConstraint10.ctx" "finger_L3_blade.tx" -l on; +connectAttr "finger_L3_blade_pointConstraint10.cty" "finger_L3_blade.ty" -l on; +connectAttr "finger_L3_blade_pointConstraint10.ctz" "finger_L3_blade.tz" -l on; +connectAttr "finger_L3_blade_aimConstraint10.crx" "finger_L3_blade.rx" -l on; +connectAttr "finger_L3_blade_aimConstraint10.cry" "finger_L3_blade.ry" -l on; +connectAttr "finger_L3_blade_aimConstraint10.crz" "finger_L3_blade.rz" -l on; +connectAttr "finger_L3_blade.pim" "finger_L3_blade_aimConstraint10.cpim"; +connectAttr "finger_L3_blade.t" "finger_L3_blade_aimConstraint10.ct"; +connectAttr "finger_L3_blade.rp" "finger_L3_blade_aimConstraint10.crp"; +connectAttr "finger_L3_blade.rpt" "finger_L3_blade_aimConstraint10.crt"; +connectAttr "finger_L3_blade.ro" "finger_L3_blade_aimConstraint10.cro"; +connectAttr "finger_L3_0_loc.t" "finger_L3_blade_aimConstraint10.tg[0].tt"; +connectAttr "finger_L3_0_loc.rp" "finger_L3_blade_aimConstraint10.tg[0].trp"; +connectAttr "finger_L3_0_loc.rpt" "finger_L3_blade_aimConstraint10.tg[0].trt"; +connectAttr "finger_L3_0_loc.pm" "finger_L3_blade_aimConstraint10.tg[0].tpm"; +connectAttr "finger_L3_blade_aimConstraint10.w0" "finger_L3_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "finger_L3_root.wm" "finger_L3_blade_aimConstraint10.wum"; +connectAttr "unitConversion151.o" "finger_L3_blade_aimConstraint10.ox"; +connectAttr "finger_L3_blade.pim" "finger_L3_blade_pointConstraint10.cpim"; +connectAttr "finger_L3_blade.rp" "finger_L3_blade_pointConstraint10.crp"; +connectAttr "finger_L3_blade.rpt" "finger_L3_blade_pointConstraint10.crt"; +connectAttr "finger_L3_root.t" "finger_L3_blade_pointConstraint10.tg[0].tt"; +connectAttr "finger_L3_root.rp" "finger_L3_blade_pointConstraint10.tg[0].trp"; +connectAttr "finger_L3_root.rpt" "finger_L3_blade_pointConstraint10.tg[0].trt"; +connectAttr "finger_L3_root.pm" "finger_L3_blade_pointConstraint10.tg[0].tpm"; +connectAttr "finger_L3_blade_pointConstraint10.w0" "finger_L3_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns455.og[0]" "finger_L3_crvShape.cr"; +connectAttr "tweak603.pl[0].cp[0]" "finger_L3_crvShape.twl"; +connectAttr "mgear_curveCns455GroupId.id" "finger_L3_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns455Set.mwc" "finger_L3_crvShape.iog.og[0].gco"; +connectAttr "groupId8775.id" "finger_L3_crvShape.iog.og[1].gid"; +connectAttr "tweakSet603.mwc" "finger_L3_crvShape.iog.og[1].gco"; +connectAttr "finger_L2_blade_pointConstraint10.ctx" "finger_L2_blade.tx" -l on; +connectAttr "finger_L2_blade_pointConstraint10.cty" "finger_L2_blade.ty" -l on; +connectAttr "finger_L2_blade_pointConstraint10.ctz" "finger_L2_blade.tz" -l on; +connectAttr "finger_L2_blade_aimConstraint10.crx" "finger_L2_blade.rx" -l on; +connectAttr "finger_L2_blade_aimConstraint10.cry" "finger_L2_blade.ry" -l on; +connectAttr "finger_L2_blade_aimConstraint10.crz" "finger_L2_blade.rz" -l on; +connectAttr "finger_L2_blade.pim" "finger_L2_blade_aimConstraint10.cpim"; +connectAttr "finger_L2_blade.t" "finger_L2_blade_aimConstraint10.ct"; +connectAttr "finger_L2_blade.rp" "finger_L2_blade_aimConstraint10.crp"; +connectAttr "finger_L2_blade.rpt" "finger_L2_blade_aimConstraint10.crt"; +connectAttr "finger_L2_blade.ro" "finger_L2_blade_aimConstraint10.cro"; +connectAttr "finger_L2_0_loc.t" "finger_L2_blade_aimConstraint10.tg[0].tt"; +connectAttr "finger_L2_0_loc.rp" "finger_L2_blade_aimConstraint10.tg[0].trp"; +connectAttr "finger_L2_0_loc.rpt" "finger_L2_blade_aimConstraint10.tg[0].trt"; +connectAttr "finger_L2_0_loc.pm" "finger_L2_blade_aimConstraint10.tg[0].tpm"; +connectAttr "finger_L2_blade_aimConstraint10.w0" "finger_L2_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "finger_L2_root.wm" "finger_L2_blade_aimConstraint10.wum"; +connectAttr "unitConversion152.o" "finger_L2_blade_aimConstraint10.ox"; +connectAttr "finger_L2_blade.pim" "finger_L2_blade_pointConstraint10.cpim"; +connectAttr "finger_L2_blade.rp" "finger_L2_blade_pointConstraint10.crp"; +connectAttr "finger_L2_blade.rpt" "finger_L2_blade_pointConstraint10.crt"; +connectAttr "finger_L2_root.t" "finger_L2_blade_pointConstraint10.tg[0].tt"; +connectAttr "finger_L2_root.rp" "finger_L2_blade_pointConstraint10.tg[0].trp"; +connectAttr "finger_L2_root.rpt" "finger_L2_blade_pointConstraint10.tg[0].trt"; +connectAttr "finger_L2_root.pm" "finger_L2_blade_pointConstraint10.tg[0].tpm"; +connectAttr "finger_L2_blade_pointConstraint10.w0" "finger_L2_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns456.og[0]" "finger_L2_crvShape.cr"; +connectAttr "tweak604.pl[0].cp[0]" "finger_L2_crvShape.twl"; +connectAttr "mgear_curveCns456GroupId.id" "finger_L2_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns456Set.mwc" "finger_L2_crvShape.iog.og[0].gco"; +connectAttr "groupId8777.id" "finger_L2_crvShape.iog.og[1].gid"; +connectAttr "tweakSet604.mwc" "finger_L2_crvShape.iog.og[1].gco"; +connectAttr "finger_L1_blade_pointConstraint10.ctx" "finger_L1_blade.tx" -l on; +connectAttr "finger_L1_blade_pointConstraint10.cty" "finger_L1_blade.ty" -l on; +connectAttr "finger_L1_blade_pointConstraint10.ctz" "finger_L1_blade.tz" -l on; +connectAttr "finger_L1_blade_aimConstraint10.crx" "finger_L1_blade.rx" -l on; +connectAttr "finger_L1_blade_aimConstraint10.cry" "finger_L1_blade.ry" -l on; +connectAttr "finger_L1_blade_aimConstraint10.crz" "finger_L1_blade.rz" -l on; +connectAttr "finger_L1_blade.pim" "finger_L1_blade_aimConstraint10.cpim"; +connectAttr "finger_L1_blade.t" "finger_L1_blade_aimConstraint10.ct"; +connectAttr "finger_L1_blade.rp" "finger_L1_blade_aimConstraint10.crp"; +connectAttr "finger_L1_blade.rpt" "finger_L1_blade_aimConstraint10.crt"; +connectAttr "finger_L1_blade.ro" "finger_L1_blade_aimConstraint10.cro"; +connectAttr "finger_L1_0_loc.t" "finger_L1_blade_aimConstraint10.tg[0].tt"; +connectAttr "finger_L1_0_loc.rp" "finger_L1_blade_aimConstraint10.tg[0].trp"; +connectAttr "finger_L1_0_loc.rpt" "finger_L1_blade_aimConstraint10.tg[0].trt"; +connectAttr "finger_L1_0_loc.pm" "finger_L1_blade_aimConstraint10.tg[0].tpm"; +connectAttr "finger_L1_blade_aimConstraint10.w0" "finger_L1_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "finger_L1_root.wm" "finger_L1_blade_aimConstraint10.wum"; +connectAttr "unitConversion153.o" "finger_L1_blade_aimConstraint10.ox"; +connectAttr "finger_L1_blade.pim" "finger_L1_blade_pointConstraint10.cpim"; +connectAttr "finger_L1_blade.rp" "finger_L1_blade_pointConstraint10.crp"; +connectAttr "finger_L1_blade.rpt" "finger_L1_blade_pointConstraint10.crt"; +connectAttr "finger_L1_root.t" "finger_L1_blade_pointConstraint10.tg[0].tt"; +connectAttr "finger_L1_root.rp" "finger_L1_blade_pointConstraint10.tg[0].trp"; +connectAttr "finger_L1_root.rpt" "finger_L1_blade_pointConstraint10.tg[0].trt"; +connectAttr "finger_L1_root.pm" "finger_L1_blade_pointConstraint10.tg[0].tpm"; +connectAttr "finger_L1_blade_pointConstraint10.w0" "finger_L1_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns457.og[0]" "finger_L1_crvShape.cr"; +connectAttr "tweak605.pl[0].cp[0]" "finger_L1_crvShape.twl"; +connectAttr "mgear_curveCns457GroupId.id" "finger_L1_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns457Set.mwc" "finger_L1_crvShape.iog.og[0].gco"; +connectAttr "groupId8779.id" "finger_L1_crvShape.iog.og[1].gid"; +connectAttr "tweakSet605.mwc" "finger_L1_crvShape.iog.og[1].gco"; +connectAttr "meta_L0_blade_pointConstraint10.ctx" "meta_L0_blade.tx" -l on; +connectAttr "meta_L0_blade_pointConstraint10.cty" "meta_L0_blade.ty" -l on; +connectAttr "meta_L0_blade_pointConstraint10.ctz" "meta_L0_blade.tz" -l on; +connectAttr "meta_L0_blade_aimConstraint10.crx" "meta_L0_blade.rx" -l on; +connectAttr "meta_L0_blade_aimConstraint10.cry" "meta_L0_blade.ry" -l on; +connectAttr "meta_L0_blade_aimConstraint10.crz" "meta_L0_blade.rz" -l on; +connectAttr "meta_L0_blade.pim" "meta_L0_blade_aimConstraint10.cpim"; +connectAttr "meta_L0_blade.t" "meta_L0_blade_aimConstraint10.ct"; +connectAttr "meta_L0_blade.rp" "meta_L0_blade_aimConstraint10.crp"; +connectAttr "meta_L0_blade.rpt" "meta_L0_blade_aimConstraint10.crt"; +connectAttr "meta_L0_blade.ro" "meta_L0_blade_aimConstraint10.cro"; +connectAttr "meta_L0_0_loc.t" "meta_L0_blade_aimConstraint10.tg[0].tt"; +connectAttr "meta_L0_0_loc.rp" "meta_L0_blade_aimConstraint10.tg[0].trp"; +connectAttr "meta_L0_0_loc.rpt" "meta_L0_blade_aimConstraint10.tg[0].trt"; +connectAttr "meta_L0_0_loc.pm" "meta_L0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "meta_L0_blade_aimConstraint10.w0" "meta_L0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "meta_L0_root.wm" "meta_L0_blade_aimConstraint10.wum"; +connectAttr "unitConversion150.o" "meta_L0_blade_aimConstraint10.ox"; +connectAttr "meta_L0_blade.pim" "meta_L0_blade_pointConstraint10.cpim"; +connectAttr "meta_L0_blade.rp" "meta_L0_blade_pointConstraint10.crp"; +connectAttr "meta_L0_blade.rpt" "meta_L0_blade_pointConstraint10.crt"; +connectAttr "meta_L0_root.t" "meta_L0_blade_pointConstraint10.tg[0].tt"; +connectAttr "meta_L0_root.rp" "meta_L0_blade_pointConstraint10.tg[0].trp"; +connectAttr "meta_L0_root.rpt" "meta_L0_blade_pointConstraint10.tg[0].trt"; +connectAttr "meta_L0_root.pm" "meta_L0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "meta_L0_blade_pointConstraint10.w0" "meta_L0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns454.og[0]" "meta_L0_crvShape.cr"; +connectAttr "tweak602.pl[0].cp[0]" "meta_L0_crvShape.twl"; +connectAttr "mgear_curveCns454GroupId.id" "meta_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns454Set.mwc" "meta_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8773.id" "meta_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet602.mwc" "meta_L0_crvShape.iog.og[1].gco"; +connectAttr "finger_L0_blade_pointConstraint10.ctx" "finger_L0_blade.tx" -l on; +connectAttr "finger_L0_blade_pointConstraint10.cty" "finger_L0_blade.ty" -l on; +connectAttr "finger_L0_blade_pointConstraint10.ctz" "finger_L0_blade.tz" -l on; +connectAttr "finger_L0_blade_aimConstraint10.crx" "finger_L0_blade.rx" -l on; +connectAttr "finger_L0_blade_aimConstraint10.cry" "finger_L0_blade.ry" -l on; +connectAttr "finger_L0_blade_aimConstraint10.crz" "finger_L0_blade.rz" -l on; +connectAttr "finger_L0_blade.pim" "finger_L0_blade_aimConstraint10.cpim"; +connectAttr "finger_L0_blade.t" "finger_L0_blade_aimConstraint10.ct"; +connectAttr "finger_L0_blade.rp" "finger_L0_blade_aimConstraint10.crp"; +connectAttr "finger_L0_blade.rpt" "finger_L0_blade_aimConstraint10.crt"; +connectAttr "finger_L0_blade.ro" "finger_L0_blade_aimConstraint10.cro"; +connectAttr "finger_L0_0_loc.t" "finger_L0_blade_aimConstraint10.tg[0].tt"; +connectAttr "finger_L0_0_loc.rp" "finger_L0_blade_aimConstraint10.tg[0].trp"; +connectAttr "finger_L0_0_loc.rpt" "finger_L0_blade_aimConstraint10.tg[0].trt"; +connectAttr "finger_L0_0_loc.pm" "finger_L0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "finger_L0_blade_aimConstraint10.w0" "finger_L0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "finger_L0_root.wm" "finger_L0_blade_aimConstraint10.wum"; +connectAttr "unitConversion154.o" "finger_L0_blade_aimConstraint10.ox"; +connectAttr "finger_L0_blade.pim" "finger_L0_blade_pointConstraint10.cpim"; +connectAttr "finger_L0_blade.rp" "finger_L0_blade_pointConstraint10.crp"; +connectAttr "finger_L0_blade.rpt" "finger_L0_blade_pointConstraint10.crt"; +connectAttr "finger_L0_root.t" "finger_L0_blade_pointConstraint10.tg[0].tt"; +connectAttr "finger_L0_root.rp" "finger_L0_blade_pointConstraint10.tg[0].trp"; +connectAttr "finger_L0_root.rpt" "finger_L0_blade_pointConstraint10.tg[0].trt"; +connectAttr "finger_L0_root.pm" "finger_L0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "finger_L0_blade_pointConstraint10.w0" "finger_L0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns458.og[0]" "finger_L0_crvShape.cr"; +connectAttr "tweak606.pl[0].cp[0]" "finger_L0_crvShape.twl"; +connectAttr "mgear_curveCns458GroupId.id" "finger_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns458Set.mwc" "finger_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8781.id" "finger_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet606.mwc" "finger_L0_crvShape.iog.og[1].gco"; +connectAttr "thumb_L0_blade_pointConstraint10.ctx" "thumb_L0_blade.tx" -l on; +connectAttr "thumb_L0_blade_pointConstraint10.cty" "thumb_L0_blade.ty" -l on; +connectAttr "thumb_L0_blade_pointConstraint10.ctz" "thumb_L0_blade.tz" -l on; +connectAttr "thumb_L0_blade_aimConstraint10.crx" "thumb_L0_blade.rx" -l on; +connectAttr "thumb_L0_blade_aimConstraint10.cry" "thumb_L0_blade.ry" -l on; +connectAttr "thumb_L0_blade_aimConstraint10.crz" "thumb_L0_blade.rz" -l on; +connectAttr "thumb_L0_blade.pim" "thumb_L0_blade_aimConstraint10.cpim"; +connectAttr "thumb_L0_blade.t" "thumb_L0_blade_aimConstraint10.ct"; +connectAttr "thumb_L0_blade.rp" "thumb_L0_blade_aimConstraint10.crp"; +connectAttr "thumb_L0_blade.rpt" "thumb_L0_blade_aimConstraint10.crt"; +connectAttr "thumb_L0_blade.ro" "thumb_L0_blade_aimConstraint10.cro"; +connectAttr "thumb_L0_0_loc.t" "thumb_L0_blade_aimConstraint10.tg[0].tt"; +connectAttr "thumb_L0_0_loc.rp" "thumb_L0_blade_aimConstraint10.tg[0].trp"; +connectAttr "thumb_L0_0_loc.rpt" "thumb_L0_blade_aimConstraint10.tg[0].trt"; +connectAttr "thumb_L0_0_loc.pm" "thumb_L0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "thumb_L0_blade_aimConstraint10.w0" "thumb_L0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "thumb_L0_root.wm" "thumb_L0_blade_aimConstraint10.wum"; +connectAttr "unitConversion155.o" "thumb_L0_blade_aimConstraint10.ox"; +connectAttr "thumb_L0_blade.pim" "thumb_L0_blade_pointConstraint10.cpim"; +connectAttr "thumb_L0_blade.rp" "thumb_L0_blade_pointConstraint10.crp"; +connectAttr "thumb_L0_blade.rpt" "thumb_L0_blade_pointConstraint10.crt"; +connectAttr "thumb_L0_root.t" "thumb_L0_blade_pointConstraint10.tg[0].tt"; +connectAttr "thumb_L0_root.rp" "thumb_L0_blade_pointConstraint10.tg[0].trp"; +connectAttr "thumb_L0_root.rpt" "thumb_L0_blade_pointConstraint10.tg[0].trt"; +connectAttr "thumb_L0_root.pm" "thumb_L0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "thumb_L0_blade_pointConstraint10.w0" "thumb_L0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns459.og[0]" "thumb_L0_crvShape.cr"; +connectAttr "tweak607.pl[0].cp[0]" "thumb_L0_crvShape.twl"; +connectAttr "mgear_curveCns459GroupId.id" "thumb_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns459Set.mwc" "thumb_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8783.id" "thumb_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet607.mwc" "thumb_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns453.og[0]" "arm_L0_crvShape.cr"; +connectAttr "tweak601.pl[0].cp[0]" "arm_L0_crvShape.twl"; +connectAttr "mgear_curveCns453GroupId.id" "arm_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns453Set.mwc" "arm_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8771.id" "arm_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet601.mwc" "arm_L0_crvShape.iog.og[1].gco"; +connectAttr "shoulder_L0_blade_pointConstraint10.ctx" "shoulder_L0_blade.tx" -l on + ; +connectAttr "shoulder_L0_blade_pointConstraint10.cty" "shoulder_L0_blade.ty" -l on + ; +connectAttr "shoulder_L0_blade_pointConstraint10.ctz" "shoulder_L0_blade.tz" -l on + ; +connectAttr "shoulder_L0_blade_aimConstraint10.crx" "shoulder_L0_blade.rx" -l on + ; +connectAttr "shoulder_L0_blade_aimConstraint10.cry" "shoulder_L0_blade.ry" -l on + ; +connectAttr "shoulder_L0_blade_aimConstraint10.crz" "shoulder_L0_blade.rz" -l on + ; +connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_aimConstraint10.cpim"; +connectAttr "shoulder_L0_blade.t" "shoulder_L0_blade_aimConstraint10.ct"; +connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_aimConstraint10.crp"; +connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_aimConstraint10.crt"; +connectAttr "shoulder_L0_blade.ro" "shoulder_L0_blade_aimConstraint10.cro"; +connectAttr "shoulder_L0_tip.t" "shoulder_L0_blade_aimConstraint10.tg[0].tt"; +connectAttr "shoulder_L0_tip.rp" "shoulder_L0_blade_aimConstraint10.tg[0].trp"; +connectAttr "shoulder_L0_tip.rpt" "shoulder_L0_blade_aimConstraint10.tg[0].trt"; +connectAttr "shoulder_L0_tip.pm" "shoulder_L0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "shoulder_L0_blade_aimConstraint10.w0" "shoulder_L0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "shoulder_L0_root.wm" "shoulder_L0_blade_aimConstraint10.wum"; +connectAttr "unitConversion149.o" "shoulder_L0_blade_aimConstraint10.ox"; +connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_pointConstraint10.cpim"; +connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_pointConstraint10.crp"; +connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_pointConstraint10.crt"; +connectAttr "shoulder_L0_root.t" "shoulder_L0_blade_pointConstraint10.tg[0].tt"; +connectAttr "shoulder_L0_root.rp" "shoulder_L0_blade_pointConstraint10.tg[0].trp" + ; +connectAttr "shoulder_L0_root.rpt" "shoulder_L0_blade_pointConstraint10.tg[0].trt" + ; +connectAttr "shoulder_L0_root.pm" "shoulder_L0_blade_pointConstraint10.tg[0].tpm" + ; +connectAttr "shoulder_L0_blade_pointConstraint10.w0" "shoulder_L0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns452.og[0]" "shoulder_L0_crvShape.cr"; +connectAttr "tweak600.pl[0].cp[0]" "shoulder_L0_crvShape.twl"; +connectAttr "mgear_curveCns452GroupId.id" "shoulder_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns452Set.mwc" "shoulder_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8769.id" "shoulder_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet600.mwc" "shoulder_L0_crvShape.iog.og[1].gco"; +connectAttr "neck_C0_root_st_profile.o" "neck_C0_root.st_profile"; +connectAttr "neck_C0_root_sq_profile.o" "neck_C0_root.sq_profile"; +connectAttr "mgear_curveCns463.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak611.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns463GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns463Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId8791.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet611.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "mgear_curveCns464.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak612.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns464GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns464Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId8793.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet612.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "tongue_C0_blade_pointConstraint10.ctx" "tongue_C0_blade.tx" -l on; +connectAttr "tongue_C0_blade_pointConstraint10.cty" "tongue_C0_blade.ty" -l on; +connectAttr "tongue_C0_blade_pointConstraint10.ctz" "tongue_C0_blade.tz" -l on; +connectAttr "tongue_C0_blade_aimConstraint10.crx" "tongue_C0_blade.rx" -l on; +connectAttr "tongue_C0_blade_aimConstraint10.cry" "tongue_C0_blade.ry" -l on; +connectAttr "tongue_C0_blade_aimConstraint10.crz" "tongue_C0_blade.rz" -l on; +connectAttr "tongue_C0_blade.pim" "tongue_C0_blade_aimConstraint10.cpim"; +connectAttr "tongue_C0_blade.t" "tongue_C0_blade_aimConstraint10.ct"; +connectAttr "tongue_C0_blade.rp" "tongue_C0_blade_aimConstraint10.crp"; +connectAttr "tongue_C0_blade.rpt" "tongue_C0_blade_aimConstraint10.crt"; +connectAttr "tongue_C0_blade.ro" "tongue_C0_blade_aimConstraint10.cro"; +connectAttr "tongue_C0_0_loc.t" "tongue_C0_blade_aimConstraint10.tg[0].tt"; +connectAttr "tongue_C0_0_loc.rp" "tongue_C0_blade_aimConstraint10.tg[0].trp"; +connectAttr "tongue_C0_0_loc.rpt" "tongue_C0_blade_aimConstraint10.tg[0].trt"; +connectAttr "tongue_C0_0_loc.pm" "tongue_C0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "tongue_C0_blade_aimConstraint10.w0" "tongue_C0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "tongue_C0_root.wm" "tongue_C0_blade_aimConstraint10.wum"; +connectAttr "unitConversion157.o" "tongue_C0_blade_aimConstraint10.ox"; +connectAttr "tongue_C0_blade.pim" "tongue_C0_blade_pointConstraint10.cpim"; +connectAttr "tongue_C0_blade.rp" "tongue_C0_blade_pointConstraint10.crp"; +connectAttr "tongue_C0_blade.rpt" "tongue_C0_blade_pointConstraint10.crt"; +connectAttr "tongue_C0_root.t" "tongue_C0_blade_pointConstraint10.tg[0].tt"; +connectAttr "tongue_C0_root.rp" "tongue_C0_blade_pointConstraint10.tg[0].trp"; +connectAttr "tongue_C0_root.rpt" "tongue_C0_blade_pointConstraint10.tg[0].trt"; +connectAttr "tongue_C0_root.pm" "tongue_C0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "tongue_C0_blade_pointConstraint10.w0" "tongue_C0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns466.og[0]" "tongue_C0_crvShape.cr"; +connectAttr "tweak614.pl[0].cp[0]" "tongue_C0_crvShape.twl"; +connectAttr "mgear_curveCns466GroupId.id" "tongue_C0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns466Set.mwc" "tongue_C0_crvShape.iog.og[0].gco"; +connectAttr "groupId8797.id" "tongue_C0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet614.mwc" "tongue_C0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns462.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak610.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns462GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns462Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId8789.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet610.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "mgear_curveCns465.og[0]" "mouth_C0_crv10Shape.cr"; +connectAttr "tweak613.pl[0].cp[0]" "mouth_C0_crv10Shape.twl"; +connectAttr "mgear_curveCns465GroupId.id" "mouth_C0_crv10Shape.iog.og[0].gid"; +connectAttr "mgear_curveCns465Set.mwc" "mouth_C0_crv10Shape.iog.og[0].gco"; +connectAttr "groupId8795.id" "mouth_C0_crv10Shape.iog.og[1].gid"; +connectAttr "tweakSet613.mwc" "mouth_C0_crv10Shape.iog.og[1].gco"; +connectAttr "mgear_curveCns467.og[0]" "eye_R0_crvShape.cr"; +connectAttr "tweak615.pl[0].cp[0]" "eye_R0_crvShape.twl"; +connectAttr "mgear_curveCns467GroupId.id" "eye_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns467Set.mwc" "eye_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8799.id" "eye_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet615.mwc" "eye_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns468.og[0]" "eye_L0_crvShape.cr"; +connectAttr "tweak616.pl[0].cp[0]" "eye_L0_crvShape.twl"; +connectAttr "mgear_curveCns468GroupId.id" "eye_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns468Set.mwc" "eye_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8801.id" "eye_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet616.mwc" "eye_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns461.og[0]" "neck_C0_head_crvShape.cr"; +connectAttr "tweak609.pl[0].cp[0]" "neck_C0_head_crvShape.twl"; +connectAttr "mgear_curveCns461GroupId.id" "neck_C0_head_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns461Set.mwc" "neck_C0_head_crvShape.iog.og[0].gco"; +connectAttr "groupId8787.id" "neck_C0_head_crvShape.iog.og[1].gid"; +connectAttr "tweakSet609.mwc" "neck_C0_head_crvShape.iog.og[1].gco"; +connectAttr "neck_C0_blade_pointConstraint10.ctx" "neck_C0_blade.tx" -l on; +connectAttr "neck_C0_blade_pointConstraint10.cty" "neck_C0_blade.ty" -l on; +connectAttr "neck_C0_blade_pointConstraint10.ctz" "neck_C0_blade.tz" -l on; +connectAttr "neck_C0_blade_aimConstraint10.crx" "neck_C0_blade.rx" -l on; +connectAttr "neck_C0_blade_aimConstraint10.cry" "neck_C0_blade.ry" -l on; +connectAttr "neck_C0_blade_aimConstraint10.crz" "neck_C0_blade.rz" -l on; +connectAttr "neck_C0_blade.pim" "neck_C0_blade_aimConstraint10.cpim"; +connectAttr "neck_C0_blade.t" "neck_C0_blade_aimConstraint10.ct"; +connectAttr "neck_C0_blade.rp" "neck_C0_blade_aimConstraint10.crp"; +connectAttr "neck_C0_blade.rpt" "neck_C0_blade_aimConstraint10.crt"; +connectAttr "neck_C0_blade.ro" "neck_C0_blade_aimConstraint10.cro"; +connectAttr "neck_C0_tan0.t" "neck_C0_blade_aimConstraint10.tg[0].tt"; +connectAttr "neck_C0_tan0.rp" "neck_C0_blade_aimConstraint10.tg[0].trp"; +connectAttr "neck_C0_tan0.rpt" "neck_C0_blade_aimConstraint10.tg[0].trt"; +connectAttr "neck_C0_tan0.pm" "neck_C0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "neck_C0_blade_aimConstraint10.w0" "neck_C0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "neck_C0_root.wm" "neck_C0_blade_aimConstraint10.wum"; +connectAttr "unitConversion156.o" "neck_C0_blade_aimConstraint10.ox"; +connectAttr "neck_C0_blade.pim" "neck_C0_blade_pointConstraint10.cpim"; +connectAttr "neck_C0_blade.rp" "neck_C0_blade_pointConstraint10.crp"; +connectAttr "neck_C0_blade.rpt" "neck_C0_blade_pointConstraint10.crt"; +connectAttr "neck_C0_root.t" "neck_C0_blade_pointConstraint10.tg[0].tt"; +connectAttr "neck_C0_root.rp" "neck_C0_blade_pointConstraint10.tg[0].trp"; +connectAttr "neck_C0_root.rpt" "neck_C0_blade_pointConstraint10.tg[0].trt"; +connectAttr "neck_C0_root.pm" "neck_C0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "neck_C0_blade_pointConstraint10.w0" "neck_C0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns460.og[0]" "neck_C0_neck_crvShape.cr"; +connectAttr "tweak608.pl[0].cp[0]" "neck_C0_neck_crvShape.twl"; +connectAttr "mgear_curveCns460GroupId.id" "neck_C0_neck_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns460Set.mwc" "neck_C0_neck_crvShape.iog.og[0].gco"; +connectAttr "groupId8785.id" "neck_C0_neck_crvShape.iog.og[1].gid"; +connectAttr "tweakSet608.mwc" "neck_C0_neck_crvShape.iog.og[1].gco"; connectAttr "arm_R0_root_st_profile1.o" "arm_R0_root.st_profile"; connectAttr "arm_R0_root_sq_profile1.o" "arm_R0_root.sq_profile"; -connectAttr "finger_R3_blade_pointConstraint4.ctx" "finger_R3_blade.tx" -l on; -connectAttr "finger_R3_blade_pointConstraint4.cty" "finger_R3_blade.ty" -l on; -connectAttr "finger_R3_blade_pointConstraint4.ctz" "finger_R3_blade.tz" -l on; -connectAttr "finger_R3_blade_aimConstraint4.crx" "finger_R3_blade.rx" -l on; -connectAttr "finger_R3_blade_aimConstraint4.cry" "finger_R3_blade.ry" -l on; -connectAttr "finger_R3_blade_aimConstraint4.crz" "finger_R3_blade.rz" -l on; -connectAttr "finger_R3_blade.pim" "finger_R3_blade_aimConstraint4.cpim"; -connectAttr "finger_R3_blade.t" "finger_R3_blade_aimConstraint4.ct"; -connectAttr "finger_R3_blade.rp" "finger_R3_blade_aimConstraint4.crp"; -connectAttr "finger_R3_blade.rpt" "finger_R3_blade_aimConstraint4.crt"; -connectAttr "finger_R3_blade.ro" "finger_R3_blade_aimConstraint4.cro"; -connectAttr "finger_R3_0_loc.t" "finger_R3_blade_aimConstraint4.tg[0].tt"; -connectAttr "finger_R3_0_loc.rp" "finger_R3_blade_aimConstraint4.tg[0].trp"; -connectAttr "finger_R3_0_loc.rpt" "finger_R3_blade_aimConstraint4.tg[0].trt"; -connectAttr "finger_R3_0_loc.pm" "finger_R3_blade_aimConstraint4.tg[0].tpm"; -connectAttr "finger_R3_blade_aimConstraint4.w0" "finger_R3_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "finger_R3_root.wm" "finger_R3_blade_aimConstraint4.wum"; -connectAttr "unitConversion143.o" "finger_R3_blade_aimConstraint4.ox"; -connectAttr "finger_R3_blade.pim" "finger_R3_blade_pointConstraint4.cpim"; -connectAttr "finger_R3_blade.rp" "finger_R3_blade_pointConstraint4.crp"; -connectAttr "finger_R3_blade.rpt" "finger_R3_blade_pointConstraint4.crt"; -connectAttr "finger_R3_root.t" "finger_R3_blade_pointConstraint4.tg[0].tt"; -connectAttr "finger_R3_root.rp" "finger_R3_blade_pointConstraint4.tg[0].trp"; -connectAttr "finger_R3_root.rpt" "finger_R3_blade_pointConstraint4.tg[0].trt"; -connectAttr "finger_R3_root.pm" "finger_R3_blade_pointConstraint4.tg[0].tpm"; -connectAttr "finger_R3_blade_pointConstraint4.w0" "finger_R3_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns432.og[0]" "finger_R3_crvShape.cr"; -connectAttr "tweak580.pl[0].cp[0]" "finger_R3_crvShape.twl"; -connectAttr "mgear_curveCns432GroupId.id" "finger_R3_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns432Set.mwc" "finger_R3_crvShape.iog.og[0].gco"; -connectAttr "groupId8729.id" "finger_R3_crvShape.iog.og[1].gid"; -connectAttr "tweakSet580.mwc" "finger_R3_crvShape.iog.og[1].gco"; -connectAttr "finger_R2_blade_pointConstraint4.ctx" "finger_R2_blade.tx" -l on; -connectAttr "finger_R2_blade_pointConstraint4.cty" "finger_R2_blade.ty" -l on; -connectAttr "finger_R2_blade_pointConstraint4.ctz" "finger_R2_blade.tz" -l on; -connectAttr "finger_R2_blade_aimConstraint4.crx" "finger_R2_blade.rx" -l on; -connectAttr "finger_R2_blade_aimConstraint4.cry" "finger_R2_blade.ry" -l on; -connectAttr "finger_R2_blade_aimConstraint4.crz" "finger_R2_blade.rz" -l on; -connectAttr "finger_R2_blade.pim" "finger_R2_blade_aimConstraint4.cpim"; -connectAttr "finger_R2_blade.t" "finger_R2_blade_aimConstraint4.ct"; -connectAttr "finger_R2_blade.rp" "finger_R2_blade_aimConstraint4.crp"; -connectAttr "finger_R2_blade.rpt" "finger_R2_blade_aimConstraint4.crt"; -connectAttr "finger_R2_blade.ro" "finger_R2_blade_aimConstraint4.cro"; -connectAttr "finger_R2_0_loc.t" "finger_R2_blade_aimConstraint4.tg[0].tt"; -connectAttr "finger_R2_0_loc.rp" "finger_R2_blade_aimConstraint4.tg[0].trp"; -connectAttr "finger_R2_0_loc.rpt" "finger_R2_blade_aimConstraint4.tg[0].trt"; -connectAttr "finger_R2_0_loc.pm" "finger_R2_blade_aimConstraint4.tg[0].tpm"; -connectAttr "finger_R2_blade_aimConstraint4.w0" "finger_R2_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "finger_R2_root.wm" "finger_R2_blade_aimConstraint4.wum"; -connectAttr "unitConversion144.o" "finger_R2_blade_aimConstraint4.ox"; -connectAttr "finger_R2_blade.pim" "finger_R2_blade_pointConstraint4.cpim"; -connectAttr "finger_R2_blade.rp" "finger_R2_blade_pointConstraint4.crp"; -connectAttr "finger_R2_blade.rpt" "finger_R2_blade_pointConstraint4.crt"; -connectAttr "finger_R2_root.t" "finger_R2_blade_pointConstraint4.tg[0].tt"; -connectAttr "finger_R2_root.rp" "finger_R2_blade_pointConstraint4.tg[0].trp"; -connectAttr "finger_R2_root.rpt" "finger_R2_blade_pointConstraint4.tg[0].trt"; -connectAttr "finger_R2_root.pm" "finger_R2_blade_pointConstraint4.tg[0].tpm"; -connectAttr "finger_R2_blade_pointConstraint4.w0" "finger_R2_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns433.og[0]" "finger_R2_crvShape.cr"; -connectAttr "tweak581.pl[0].cp[0]" "finger_R2_crvShape.twl"; -connectAttr "mgear_curveCns433GroupId.id" "finger_R2_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns433Set.mwc" "finger_R2_crvShape.iog.og[0].gco"; -connectAttr "groupId8731.id" "finger_R2_crvShape.iog.og[1].gid"; -connectAttr "tweakSet581.mwc" "finger_R2_crvShape.iog.og[1].gco"; -connectAttr "finger_R1_blade_pointConstraint4.ctx" "finger_R1_blade.tx" -l on; -connectAttr "finger_R1_blade_pointConstraint4.cty" "finger_R1_blade.ty" -l on; -connectAttr "finger_R1_blade_pointConstraint4.ctz" "finger_R1_blade.tz" -l on; -connectAttr "finger_R1_blade_aimConstraint4.crx" "finger_R1_blade.rx" -l on; -connectAttr "finger_R1_blade_aimConstraint4.cry" "finger_R1_blade.ry" -l on; -connectAttr "finger_R1_blade_aimConstraint4.crz" "finger_R1_blade.rz" -l on; -connectAttr "finger_R1_blade.pim" "finger_R1_blade_aimConstraint4.cpim"; -connectAttr "finger_R1_blade.t" "finger_R1_blade_aimConstraint4.ct"; -connectAttr "finger_R1_blade.rp" "finger_R1_blade_aimConstraint4.crp"; -connectAttr "finger_R1_blade.rpt" "finger_R1_blade_aimConstraint4.crt"; -connectAttr "finger_R1_blade.ro" "finger_R1_blade_aimConstraint4.cro"; -connectAttr "finger_R1_0_loc.t" "finger_R1_blade_aimConstraint4.tg[0].tt"; -connectAttr "finger_R1_0_loc.rp" "finger_R1_blade_aimConstraint4.tg[0].trp"; -connectAttr "finger_R1_0_loc.rpt" "finger_R1_blade_aimConstraint4.tg[0].trt"; -connectAttr "finger_R1_0_loc.pm" "finger_R1_blade_aimConstraint4.tg[0].tpm"; -connectAttr "finger_R1_blade_aimConstraint4.w0" "finger_R1_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "finger_R1_root.wm" "finger_R1_blade_aimConstraint4.wum"; -connectAttr "unitConversion145.o" "finger_R1_blade_aimConstraint4.ox"; -connectAttr "finger_R1_blade.pim" "finger_R1_blade_pointConstraint4.cpim"; -connectAttr "finger_R1_blade.rp" "finger_R1_blade_pointConstraint4.crp"; -connectAttr "finger_R1_blade.rpt" "finger_R1_blade_pointConstraint4.crt"; -connectAttr "finger_R1_root.t" "finger_R1_blade_pointConstraint4.tg[0].tt"; -connectAttr "finger_R1_root.rp" "finger_R1_blade_pointConstraint4.tg[0].trp"; -connectAttr "finger_R1_root.rpt" "finger_R1_blade_pointConstraint4.tg[0].trt"; -connectAttr "finger_R1_root.pm" "finger_R1_blade_pointConstraint4.tg[0].tpm"; -connectAttr "finger_R1_blade_pointConstraint4.w0" "finger_R1_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns434.og[0]" "finger_R1_crvShape.cr"; -connectAttr "tweak582.pl[0].cp[0]" "finger_R1_crvShape.twl"; -connectAttr "mgear_curveCns434GroupId.id" "finger_R1_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns434Set.mwc" "finger_R1_crvShape.iog.og[0].gco"; -connectAttr "groupId8733.id" "finger_R1_crvShape.iog.og[1].gid"; -connectAttr "tweakSet582.mwc" "finger_R1_crvShape.iog.og[1].gco"; -connectAttr "meta_R0_blade_pointConstraint4.ctx" "meta_R0_blade.tx" -l on; -connectAttr "meta_R0_blade_pointConstraint4.cty" "meta_R0_blade.ty" -l on; -connectAttr "meta_R0_blade_pointConstraint4.ctz" "meta_R0_blade.tz" -l on; -connectAttr "meta_R0_blade_aimConstraint4.crx" "meta_R0_blade.rx" -l on; -connectAttr "meta_R0_blade_aimConstraint4.cry" "meta_R0_blade.ry" -l on; -connectAttr "meta_R0_blade_aimConstraint4.crz" "meta_R0_blade.rz" -l on; -connectAttr "meta_R0_blade.pim" "meta_R0_blade_aimConstraint4.cpim"; -connectAttr "meta_R0_blade.t" "meta_R0_blade_aimConstraint4.ct"; -connectAttr "meta_R0_blade.rp" "meta_R0_blade_aimConstraint4.crp"; -connectAttr "meta_R0_blade.rpt" "meta_R0_blade_aimConstraint4.crt"; -connectAttr "meta_R0_blade.ro" "meta_R0_blade_aimConstraint4.cro"; -connectAttr "meta_R0_0_loc.t" "meta_R0_blade_aimConstraint4.tg[0].tt"; -connectAttr "meta_R0_0_loc.rp" "meta_R0_blade_aimConstraint4.tg[0].trp"; -connectAttr "meta_R0_0_loc.rpt" "meta_R0_blade_aimConstraint4.tg[0].trt"; -connectAttr "meta_R0_0_loc.pm" "meta_R0_blade_aimConstraint4.tg[0].tpm"; -connectAttr "meta_R0_blade_aimConstraint4.w0" "meta_R0_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "meta_R0_root.wm" "meta_R0_blade_aimConstraint4.wum"; -connectAttr "unitConversion142.o" "meta_R0_blade_aimConstraint4.ox"; -connectAttr "meta_R0_blade.pim" "meta_R0_blade_pointConstraint4.cpim"; -connectAttr "meta_R0_blade.rp" "meta_R0_blade_pointConstraint4.crp"; -connectAttr "meta_R0_blade.rpt" "meta_R0_blade_pointConstraint4.crt"; -connectAttr "meta_R0_root.t" "meta_R0_blade_pointConstraint4.tg[0].tt"; -connectAttr "meta_R0_root.rp" "meta_R0_blade_pointConstraint4.tg[0].trp"; -connectAttr "meta_R0_root.rpt" "meta_R0_blade_pointConstraint4.tg[0].trt"; -connectAttr "meta_R0_root.pm" "meta_R0_blade_pointConstraint4.tg[0].tpm"; -connectAttr "meta_R0_blade_pointConstraint4.w0" "meta_R0_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns431.og[0]" "meta_R0_crvShape.cr"; -connectAttr "tweak579.pl[0].cp[0]" "meta_R0_crvShape.twl"; -connectAttr "mgear_curveCns431GroupId.id" "meta_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns431Set.mwc" "meta_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8727.id" "meta_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet579.mwc" "meta_R0_crvShape.iog.og[1].gco"; -connectAttr "finger_R0_blade_pointConstraint4.ctx" "finger_R0_blade.tx" -l on; -connectAttr "finger_R0_blade_pointConstraint4.cty" "finger_R0_blade.ty" -l on; -connectAttr "finger_R0_blade_pointConstraint4.ctz" "finger_R0_blade.tz" -l on; -connectAttr "finger_R0_blade_aimConstraint4.crx" "finger_R0_blade.rx" -l on; -connectAttr "finger_R0_blade_aimConstraint4.cry" "finger_R0_blade.ry" -l on; -connectAttr "finger_R0_blade_aimConstraint4.crz" "finger_R0_blade.rz" -l on; -connectAttr "finger_R0_blade.pim" "finger_R0_blade_aimConstraint4.cpim"; -connectAttr "finger_R0_blade.t" "finger_R0_blade_aimConstraint4.ct"; -connectAttr "finger_R0_blade.rp" "finger_R0_blade_aimConstraint4.crp"; -connectAttr "finger_R0_blade.rpt" "finger_R0_blade_aimConstraint4.crt"; -connectAttr "finger_R0_blade.ro" "finger_R0_blade_aimConstraint4.cro"; -connectAttr "finger_R0_0_loc.t" "finger_R0_blade_aimConstraint4.tg[0].tt"; -connectAttr "finger_R0_0_loc.rp" "finger_R0_blade_aimConstraint4.tg[0].trp"; -connectAttr "finger_R0_0_loc.rpt" "finger_R0_blade_aimConstraint4.tg[0].trt"; -connectAttr "finger_R0_0_loc.pm" "finger_R0_blade_aimConstraint4.tg[0].tpm"; -connectAttr "finger_R0_blade_aimConstraint4.w0" "finger_R0_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "finger_R0_root.wm" "finger_R0_blade_aimConstraint4.wum"; -connectAttr "unitConversion146.o" "finger_R0_blade_aimConstraint4.ox"; -connectAttr "finger_R0_blade.pim" "finger_R0_blade_pointConstraint4.cpim"; -connectAttr "finger_R0_blade.rp" "finger_R0_blade_pointConstraint4.crp"; -connectAttr "finger_R0_blade.rpt" "finger_R0_blade_pointConstraint4.crt"; -connectAttr "finger_R0_root.t" "finger_R0_blade_pointConstraint4.tg[0].tt"; -connectAttr "finger_R0_root.rp" "finger_R0_blade_pointConstraint4.tg[0].trp"; -connectAttr "finger_R0_root.rpt" "finger_R0_blade_pointConstraint4.tg[0].trt"; -connectAttr "finger_R0_root.pm" "finger_R0_blade_pointConstraint4.tg[0].tpm"; -connectAttr "finger_R0_blade_pointConstraint4.w0" "finger_R0_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns435.og[0]" "finger_R0_crvShape.cr"; -connectAttr "tweak583.pl[0].cp[0]" "finger_R0_crvShape.twl"; -connectAttr "mgear_curveCns435GroupId.id" "finger_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns435Set.mwc" "finger_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8735.id" "finger_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet583.mwc" "finger_R0_crvShape.iog.og[1].gco"; -connectAttr "thumb_R0_blade_pointConstraint4.ctx" "thumb_R0_blade.tx" -l on; -connectAttr "thumb_R0_blade_pointConstraint4.cty" "thumb_R0_blade.ty" -l on; -connectAttr "thumb_R0_blade_pointConstraint4.ctz" "thumb_R0_blade.tz" -l on; -connectAttr "thumb_R0_blade_aimConstraint4.crx" "thumb_R0_blade.rx" -l on; -connectAttr "thumb_R0_blade_aimConstraint4.cry" "thumb_R0_blade.ry" -l on; -connectAttr "thumb_R0_blade_aimConstraint4.crz" "thumb_R0_blade.rz" -l on; -connectAttr "thumb_R0_blade.pim" "thumb_R0_blade_aimConstraint4.cpim"; -connectAttr "thumb_R0_blade.t" "thumb_R0_blade_aimConstraint4.ct"; -connectAttr "thumb_R0_blade.rp" "thumb_R0_blade_aimConstraint4.crp"; -connectAttr "thumb_R0_blade.rpt" "thumb_R0_blade_aimConstraint4.crt"; -connectAttr "thumb_R0_blade.ro" "thumb_R0_blade_aimConstraint4.cro"; -connectAttr "thumb_R0_0_loc.t" "thumb_R0_blade_aimConstraint4.tg[0].tt"; -connectAttr "thumb_R0_0_loc.rp" "thumb_R0_blade_aimConstraint4.tg[0].trp"; -connectAttr "thumb_R0_0_loc.rpt" "thumb_R0_blade_aimConstraint4.tg[0].trt"; -connectAttr "thumb_R0_0_loc.pm" "thumb_R0_blade_aimConstraint4.tg[0].tpm"; -connectAttr "thumb_R0_blade_aimConstraint4.w0" "thumb_R0_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "thumb_R0_root.wm" "thumb_R0_blade_aimConstraint4.wum"; -connectAttr "unitConversion147.o" "thumb_R0_blade_aimConstraint4.ox"; -connectAttr "thumb_R0_blade.pim" "thumb_R0_blade_pointConstraint4.cpim"; -connectAttr "thumb_R0_blade.rp" "thumb_R0_blade_pointConstraint4.crp"; -connectAttr "thumb_R0_blade.rpt" "thumb_R0_blade_pointConstraint4.crt"; -connectAttr "thumb_R0_root.t" "thumb_R0_blade_pointConstraint4.tg[0].tt"; -connectAttr "thumb_R0_root.rp" "thumb_R0_blade_pointConstraint4.tg[0].trp"; -connectAttr "thumb_R0_root.rpt" "thumb_R0_blade_pointConstraint4.tg[0].trt"; -connectAttr "thumb_R0_root.pm" "thumb_R0_blade_pointConstraint4.tg[0].tpm"; -connectAttr "thumb_R0_blade_pointConstraint4.w0" "thumb_R0_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns436.og[0]" "thumb_R0_crvShape.cr"; -connectAttr "tweak584.pl[0].cp[0]" "thumb_R0_crvShape.twl"; -connectAttr "mgear_curveCns436GroupId.id" "thumb_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns436Set.mwc" "thumb_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8737.id" "thumb_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet584.mwc" "thumb_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns430.og[0]" "arm_R0_crvShape.cr"; -connectAttr "tweak578.pl[0].cp[0]" "arm_R0_crvShape.twl"; -connectAttr "mgear_curveCns430GroupId.id" "arm_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns430Set.mwc" "arm_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8725.id" "arm_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet578.mwc" "arm_R0_crvShape.iog.og[1].gco"; -connectAttr "shoulder_R0_blade_pointConstraint4.ctx" "shoulder_R0_blade.tx" -l on - ; -connectAttr "shoulder_R0_blade_pointConstraint4.cty" "shoulder_R0_blade.ty" -l on - ; -connectAttr "shoulder_R0_blade_pointConstraint4.ctz" "shoulder_R0_blade.tz" -l on - ; -connectAttr "shoulder_R0_blade_aimConstraint4.crx" "shoulder_R0_blade.rx" -l on; -connectAttr "shoulder_R0_blade_aimConstraint4.cry" "shoulder_R0_blade.ry" -l on; -connectAttr "shoulder_R0_blade_aimConstraint4.crz" "shoulder_R0_blade.rz" -l on; -connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_aimConstraint4.cpim"; -connectAttr "shoulder_R0_blade.t" "shoulder_R0_blade_aimConstraint4.ct"; -connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_aimConstraint4.crp"; -connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_aimConstraint4.crt"; -connectAttr "shoulder_R0_blade.ro" "shoulder_R0_blade_aimConstraint4.cro"; -connectAttr "shoulder_R0_tip.t" "shoulder_R0_blade_aimConstraint4.tg[0].tt"; -connectAttr "shoulder_R0_tip.rp" "shoulder_R0_blade_aimConstraint4.tg[0].trp"; -connectAttr "shoulder_R0_tip.rpt" "shoulder_R0_blade_aimConstraint4.tg[0].trt"; -connectAttr "shoulder_R0_tip.pm" "shoulder_R0_blade_aimConstraint4.tg[0].tpm"; -connectAttr "shoulder_R0_blade_aimConstraint4.w0" "shoulder_R0_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "shoulder_R0_root.wm" "shoulder_R0_blade_aimConstraint4.wum"; -connectAttr "unitConversion141.o" "shoulder_R0_blade_aimConstraint4.ox"; -connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_pointConstraint4.cpim"; -connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_pointConstraint4.crp"; -connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_pointConstraint4.crt"; -connectAttr "shoulder_R0_root.t" "shoulder_R0_blade_pointConstraint4.tg[0].tt"; -connectAttr "shoulder_R0_root.rp" "shoulder_R0_blade_pointConstraint4.tg[0].trp" - ; -connectAttr "shoulder_R0_root.rpt" "shoulder_R0_blade_pointConstraint4.tg[0].trt" - ; -connectAttr "shoulder_R0_root.pm" "shoulder_R0_blade_pointConstraint4.tg[0].tpm" - ; -connectAttr "shoulder_R0_blade_pointConstraint4.w0" "shoulder_R0_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns429.og[0]" "shoulder_R0_crvShape.cr"; -connectAttr "tweak577.pl[0].cp[0]" "shoulder_R0_crvShape.twl"; -connectAttr "mgear_curveCns429GroupId.id" "shoulder_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns429Set.mwc" "shoulder_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8723.id" "shoulder_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet577.mwc" "shoulder_R0_crvShape.iog.og[1].gco"; -connectAttr "spine_C0_blade_pointConstraint9.ctx" "spine_C0_blade.tx" -l on; -connectAttr "spine_C0_blade_pointConstraint9.cty" "spine_C0_blade.ty" -l on; -connectAttr "spine_C0_blade_pointConstraint9.ctz" "spine_C0_blade.tz" -l on; -connectAttr "spine_C0_blade_aimConstraint9.crx" "spine_C0_blade.rx" -l on; -connectAttr "spine_C0_blade_aimConstraint9.cry" "spine_C0_blade.ry" -l on; -connectAttr "spine_C0_blade_aimConstraint9.crz" "spine_C0_blade.rz" -l on; -connectAttr "spine_C0_blade.pim" "spine_C0_blade_aimConstraint9.cpim"; -connectAttr "spine_C0_blade.t" "spine_C0_blade_aimConstraint9.ct"; -connectAttr "spine_C0_blade.rp" "spine_C0_blade_aimConstraint9.crp"; -connectAttr "spine_C0_blade.rpt" "spine_C0_blade_aimConstraint9.crt"; -connectAttr "spine_C0_blade.ro" "spine_C0_blade_aimConstraint9.cro"; -connectAttr "spine_C0_eff.t" "spine_C0_blade_aimConstraint9.tg[0].tt"; -connectAttr "spine_C0_eff.rp" "spine_C0_blade_aimConstraint9.tg[0].trp"; -connectAttr "spine_C0_eff.rpt" "spine_C0_blade_aimConstraint9.tg[0].trt"; -connectAttr "spine_C0_eff.pm" "spine_C0_blade_aimConstraint9.tg[0].tpm"; -connectAttr "spine_C0_blade_aimConstraint9.w0" "spine_C0_blade_aimConstraint9.tg[0].tw" - ; -connectAttr "spine_C0_root.wm" "spine_C0_blade_aimConstraint9.wum"; -connectAttr "unitConversion131.o" "spine_C0_blade_aimConstraint9.ox"; -connectAttr "spine_C0_blade.pim" "spine_C0_blade_pointConstraint9.cpim"; -connectAttr "spine_C0_blade.rp" "spine_C0_blade_pointConstraint9.crp"; -connectAttr "spine_C0_blade.rpt" "spine_C0_blade_pointConstraint9.crt"; -connectAttr "spine_C0_root.t" "spine_C0_blade_pointConstraint9.tg[0].tt"; -connectAttr "spine_C0_root.rp" "spine_C0_blade_pointConstraint9.tg[0].trp"; -connectAttr "spine_C0_root.rpt" "spine_C0_blade_pointConstraint9.tg[0].trt"; -connectAttr "spine_C0_root.pm" "spine_C0_blade_pointConstraint9.tg[0].tpm"; -connectAttr "spine_C0_blade_pointConstraint9.w0" "spine_C0_blade_pointConstraint9.tg[0].tw" - ; -connectAttr "mgear_curveCns411.og[0]" "spine_C0_crvShape.cr"; -connectAttr "tweak559.pl[0].cp[0]" "spine_C0_crvShape.twl"; -connectAttr "mgear_curveCns411GroupId.id" "spine_C0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns411Set.mwc" "spine_C0_crvShape.iog.og[0].gco"; -connectAttr "groupId8687.id" "spine_C0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet559.mwc" "spine_C0_crvShape.iog.og[1].gco"; -connectAttr "leg_L0_root_st_profile1.o" "leg_L0_root.st_profile"; -connectAttr "leg_L0_root_sq_profile1.o" "leg_L0_root.sq_profile"; -connectAttr "mgear_curveCns438.og[0]" "foot_L0_crvShape.cr"; -connectAttr "tweak586.pl[0].cp[0]" "foot_L0_crvShape.twl"; -connectAttr "mgear_curveCns438GroupId.id" "foot_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns438Set.mwc" "foot_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8741.id" "foot_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet586.mwc" "foot_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns439.og[0]" "foot_L0_Shape1.cr"; -connectAttr "tweak587.pl[0].cp[0]" "foot_L0_Shape1.twl"; -connectAttr "mgear_curveCns439GroupId.id" "foot_L0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns439Set.mwc" "foot_L0_Shape1.iog.og[0].gco"; -connectAttr "groupId8743.id" "foot_L0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet587.mwc" "foot_L0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns437.og[0]" "leg_L0_crvShape.cr"; -connectAttr "tweak585.pl[0].cp[0]" "leg_L0_crvShape.twl"; -connectAttr "mgear_curveCns437GroupId.id" "leg_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns437Set.mwc" "leg_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId8739.id" "leg_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet585.mwc" "leg_L0_crvShape.iog.og[1].gco"; -connectAttr "leg_R0_root_st_profile.o" "leg_R0_root.st_profile"; -connectAttr "leg_R0_root_sq_profile.o" "leg_R0_root.sq_profile"; -connectAttr "mgear_curveCns441.og[0]" "foot_R0_crvShape.cr"; -connectAttr "tweak589.pl[0].cp[0]" "foot_R0_crvShape.twl"; -connectAttr "mgear_curveCns441GroupId.id" "foot_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns441Set.mwc" "foot_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8747.id" "foot_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet589.mwc" "foot_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns442.og[0]" "foot_R0_Shape1.cr"; -connectAttr "tweak590.pl[0].cp[0]" "foot_R0_Shape1.twl"; -connectAttr "mgear_curveCns442GroupId.id" "foot_R0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns442Set.mwc" "foot_R0_Shape1.iog.og[0].gco"; -connectAttr "groupId8749.id" "foot_R0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet590.mwc" "foot_R0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns440.og[0]" "leg_R0_crvShape.cr"; -connectAttr "tweak588.pl[0].cp[0]" "leg_R0_crvShape.twl"; -connectAttr "mgear_curveCns440GroupId.id" "leg_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns440Set.mwc" "leg_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId8745.id" "leg_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet588.mwc" "leg_R0_crvShape.iog.og[1].gco"; +connectAttr "finger_R3_blade_pointConstraint2.ctx" "finger_R3_blade.tx" -l on; +connectAttr "finger_R3_blade_pointConstraint2.cty" "finger_R3_blade.ty" -l on; +connectAttr "finger_R3_blade_pointConstraint2.ctz" "finger_R3_blade.tz" -l on; +connectAttr "finger_R3_blade_aimConstraint2.crx" "finger_R3_blade.rx" -l on; +connectAttr "finger_R3_blade_aimConstraint2.cry" "finger_R3_blade.ry" -l on; +connectAttr "finger_R3_blade_aimConstraint2.crz" "finger_R3_blade.rz" -l on; +connectAttr "finger_R3_blade.pim" "finger_R3_blade_aimConstraint2.cpim"; +connectAttr "finger_R3_blade.t" "finger_R3_blade_aimConstraint2.ct"; +connectAttr "finger_R3_blade.rp" "finger_R3_blade_aimConstraint2.crp"; +connectAttr "finger_R3_blade.rpt" "finger_R3_blade_aimConstraint2.crt"; +connectAttr "finger_R3_blade.ro" "finger_R3_blade_aimConstraint2.cro"; +connectAttr "finger_R3_0_loc.t" "finger_R3_blade_aimConstraint2.tg[0].tt"; +connectAttr "finger_R3_0_loc.rp" "finger_R3_blade_aimConstraint2.tg[0].trp"; +connectAttr "finger_R3_0_loc.rpt" "finger_R3_blade_aimConstraint2.tg[0].trt"; +connectAttr "finger_R3_0_loc.pm" "finger_R3_blade_aimConstraint2.tg[0].tpm"; +connectAttr "finger_R3_blade_aimConstraint2.w0" "finger_R3_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "finger_R3_root.wm" "finger_R3_blade_aimConstraint2.wum"; +connectAttr "unitConversion160.o" "finger_R3_blade_aimConstraint2.ox"; +connectAttr "finger_R3_blade.pim" "finger_R3_blade_pointConstraint2.cpim"; +connectAttr "finger_R3_blade.rp" "finger_R3_blade_pointConstraint2.crp"; +connectAttr "finger_R3_blade.rpt" "finger_R3_blade_pointConstraint2.crt"; +connectAttr "finger_R3_root.t" "finger_R3_blade_pointConstraint2.tg[0].tt"; +connectAttr "finger_R3_root.rp" "finger_R3_blade_pointConstraint2.tg[0].trp"; +connectAttr "finger_R3_root.rpt" "finger_R3_blade_pointConstraint2.tg[0].trt"; +connectAttr "finger_R3_root.pm" "finger_R3_blade_pointConstraint2.tg[0].tpm"; +connectAttr "finger_R3_blade_pointConstraint2.w0" "finger_R3_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns472.og[0]" "finger_R3_crvShape.cr"; +connectAttr "tweak620.pl[0].cp[0]" "finger_R3_crvShape.twl"; +connectAttr "mgear_curveCns472GroupId.id" "finger_R3_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns472Set.mwc" "finger_R3_crvShape.iog.og[0].gco"; +connectAttr "groupId8809.id" "finger_R3_crvShape.iog.og[1].gid"; +connectAttr "tweakSet620.mwc" "finger_R3_crvShape.iog.og[1].gco"; +connectAttr "finger_R2_blade_pointConstraint2.ctx" "finger_R2_blade.tx" -l on; +connectAttr "finger_R2_blade_pointConstraint2.cty" "finger_R2_blade.ty" -l on; +connectAttr "finger_R2_blade_pointConstraint2.ctz" "finger_R2_blade.tz" -l on; +connectAttr "finger_R2_blade_aimConstraint2.crx" "finger_R2_blade.rx" -l on; +connectAttr "finger_R2_blade_aimConstraint2.cry" "finger_R2_blade.ry" -l on; +connectAttr "finger_R2_blade_aimConstraint2.crz" "finger_R2_blade.rz" -l on; +connectAttr "finger_R2_blade.pim" "finger_R2_blade_aimConstraint2.cpim"; +connectAttr "finger_R2_blade.t" "finger_R2_blade_aimConstraint2.ct"; +connectAttr "finger_R2_blade.rp" "finger_R2_blade_aimConstraint2.crp"; +connectAttr "finger_R2_blade.rpt" "finger_R2_blade_aimConstraint2.crt"; +connectAttr "finger_R2_blade.ro" "finger_R2_blade_aimConstraint2.cro"; +connectAttr "finger_R2_0_loc.t" "finger_R2_blade_aimConstraint2.tg[0].tt"; +connectAttr "finger_R2_0_loc.rp" "finger_R2_blade_aimConstraint2.tg[0].trp"; +connectAttr "finger_R2_0_loc.rpt" "finger_R2_blade_aimConstraint2.tg[0].trt"; +connectAttr "finger_R2_0_loc.pm" "finger_R2_blade_aimConstraint2.tg[0].tpm"; +connectAttr "finger_R2_blade_aimConstraint2.w0" "finger_R2_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "finger_R2_root.wm" "finger_R2_blade_aimConstraint2.wum"; +connectAttr "unitConversion161.o" "finger_R2_blade_aimConstraint2.ox"; +connectAttr "finger_R2_blade.pim" "finger_R2_blade_pointConstraint2.cpim"; +connectAttr "finger_R2_blade.rp" "finger_R2_blade_pointConstraint2.crp"; +connectAttr "finger_R2_blade.rpt" "finger_R2_blade_pointConstraint2.crt"; +connectAttr "finger_R2_root.t" "finger_R2_blade_pointConstraint2.tg[0].tt"; +connectAttr "finger_R2_root.rp" "finger_R2_blade_pointConstraint2.tg[0].trp"; +connectAttr "finger_R2_root.rpt" "finger_R2_blade_pointConstraint2.tg[0].trt"; +connectAttr "finger_R2_root.pm" "finger_R2_blade_pointConstraint2.tg[0].tpm"; +connectAttr "finger_R2_blade_pointConstraint2.w0" "finger_R2_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns473.og[0]" "finger_R2_crvShape.cr"; +connectAttr "tweak621.pl[0].cp[0]" "finger_R2_crvShape.twl"; +connectAttr "mgear_curveCns473GroupId.id" "finger_R2_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns473Set.mwc" "finger_R2_crvShape.iog.og[0].gco"; +connectAttr "groupId8811.id" "finger_R2_crvShape.iog.og[1].gid"; +connectAttr "tweakSet621.mwc" "finger_R2_crvShape.iog.og[1].gco"; +connectAttr "finger_R1_blade_pointConstraint2.ctx" "finger_R1_blade.tx" -l on; +connectAttr "finger_R1_blade_pointConstraint2.cty" "finger_R1_blade.ty" -l on; +connectAttr "finger_R1_blade_pointConstraint2.ctz" "finger_R1_blade.tz" -l on; +connectAttr "finger_R1_blade_aimConstraint2.crx" "finger_R1_blade.rx" -l on; +connectAttr "finger_R1_blade_aimConstraint2.cry" "finger_R1_blade.ry" -l on; +connectAttr "finger_R1_blade_aimConstraint2.crz" "finger_R1_blade.rz" -l on; +connectAttr "finger_R1_blade.pim" "finger_R1_blade_aimConstraint2.cpim"; +connectAttr "finger_R1_blade.t" "finger_R1_blade_aimConstraint2.ct"; +connectAttr "finger_R1_blade.rp" "finger_R1_blade_aimConstraint2.crp"; +connectAttr "finger_R1_blade.rpt" "finger_R1_blade_aimConstraint2.crt"; +connectAttr "finger_R1_blade.ro" "finger_R1_blade_aimConstraint2.cro"; +connectAttr "finger_R1_0_loc.t" "finger_R1_blade_aimConstraint2.tg[0].tt"; +connectAttr "finger_R1_0_loc.rp" "finger_R1_blade_aimConstraint2.tg[0].trp"; +connectAttr "finger_R1_0_loc.rpt" "finger_R1_blade_aimConstraint2.tg[0].trt"; +connectAttr "finger_R1_0_loc.pm" "finger_R1_blade_aimConstraint2.tg[0].tpm"; +connectAttr "finger_R1_blade_aimConstraint2.w0" "finger_R1_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "finger_R1_root.wm" "finger_R1_blade_aimConstraint2.wum"; +connectAttr "unitConversion162.o" "finger_R1_blade_aimConstraint2.ox"; +connectAttr "finger_R1_blade.pim" "finger_R1_blade_pointConstraint2.cpim"; +connectAttr "finger_R1_blade.rp" "finger_R1_blade_pointConstraint2.crp"; +connectAttr "finger_R1_blade.rpt" "finger_R1_blade_pointConstraint2.crt"; +connectAttr "finger_R1_root.t" "finger_R1_blade_pointConstraint2.tg[0].tt"; +connectAttr "finger_R1_root.rp" "finger_R1_blade_pointConstraint2.tg[0].trp"; +connectAttr "finger_R1_root.rpt" "finger_R1_blade_pointConstraint2.tg[0].trt"; +connectAttr "finger_R1_root.pm" "finger_R1_blade_pointConstraint2.tg[0].tpm"; +connectAttr "finger_R1_blade_pointConstraint2.w0" "finger_R1_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns474.og[0]" "finger_R1_crvShape.cr"; +connectAttr "tweak622.pl[0].cp[0]" "finger_R1_crvShape.twl"; +connectAttr "mgear_curveCns474GroupId.id" "finger_R1_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns474Set.mwc" "finger_R1_crvShape.iog.og[0].gco"; +connectAttr "groupId8813.id" "finger_R1_crvShape.iog.og[1].gid"; +connectAttr "tweakSet622.mwc" "finger_R1_crvShape.iog.og[1].gco"; +connectAttr "meta_R0_blade_pointConstraint2.ctx" "meta_R0_blade.tx" -l on; +connectAttr "meta_R0_blade_pointConstraint2.cty" "meta_R0_blade.ty" -l on; +connectAttr "meta_R0_blade_pointConstraint2.ctz" "meta_R0_blade.tz" -l on; +connectAttr "meta_R0_blade_aimConstraint2.crx" "meta_R0_blade.rx" -l on; +connectAttr "meta_R0_blade_aimConstraint2.cry" "meta_R0_blade.ry" -l on; +connectAttr "meta_R0_blade_aimConstraint2.crz" "meta_R0_blade.rz" -l on; +connectAttr "meta_R0_blade.pim" "meta_R0_blade_aimConstraint2.cpim"; +connectAttr "meta_R0_blade.t" "meta_R0_blade_aimConstraint2.ct"; +connectAttr "meta_R0_blade.rp" "meta_R0_blade_aimConstraint2.crp"; +connectAttr "meta_R0_blade.rpt" "meta_R0_blade_aimConstraint2.crt"; +connectAttr "meta_R0_blade.ro" "meta_R0_blade_aimConstraint2.cro"; +connectAttr "meta_R0_0_loc.t" "meta_R0_blade_aimConstraint2.tg[0].tt"; +connectAttr "meta_R0_0_loc.rp" "meta_R0_blade_aimConstraint2.tg[0].trp"; +connectAttr "meta_R0_0_loc.rpt" "meta_R0_blade_aimConstraint2.tg[0].trt"; +connectAttr "meta_R0_0_loc.pm" "meta_R0_blade_aimConstraint2.tg[0].tpm"; +connectAttr "meta_R0_blade_aimConstraint2.w0" "meta_R0_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "meta_R0_root.wm" "meta_R0_blade_aimConstraint2.wum"; +connectAttr "unitConversion159.o" "meta_R0_blade_aimConstraint2.ox"; +connectAttr "meta_R0_blade.pim" "meta_R0_blade_pointConstraint2.cpim"; +connectAttr "meta_R0_blade.rp" "meta_R0_blade_pointConstraint2.crp"; +connectAttr "meta_R0_blade.rpt" "meta_R0_blade_pointConstraint2.crt"; +connectAttr "meta_R0_root.t" "meta_R0_blade_pointConstraint2.tg[0].tt"; +connectAttr "meta_R0_root.rp" "meta_R0_blade_pointConstraint2.tg[0].trp"; +connectAttr "meta_R0_root.rpt" "meta_R0_blade_pointConstraint2.tg[0].trt"; +connectAttr "meta_R0_root.pm" "meta_R0_blade_pointConstraint2.tg[0].tpm"; +connectAttr "meta_R0_blade_pointConstraint2.w0" "meta_R0_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns471.og[0]" "meta_R0_crvShape.cr"; +connectAttr "tweak619.pl[0].cp[0]" "meta_R0_crvShape.twl"; +connectAttr "mgear_curveCns471GroupId.id" "meta_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns471Set.mwc" "meta_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8807.id" "meta_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet619.mwc" "meta_R0_crvShape.iog.og[1].gco"; +connectAttr "finger_R0_blade_pointConstraint2.ctx" "finger_R0_blade.tx" -l on; +connectAttr "finger_R0_blade_pointConstraint2.cty" "finger_R0_blade.ty" -l on; +connectAttr "finger_R0_blade_pointConstraint2.ctz" "finger_R0_blade.tz" -l on; +connectAttr "finger_R0_blade_aimConstraint2.crx" "finger_R0_blade.rx" -l on; +connectAttr "finger_R0_blade_aimConstraint2.cry" "finger_R0_blade.ry" -l on; +connectAttr "finger_R0_blade_aimConstraint2.crz" "finger_R0_blade.rz" -l on; +connectAttr "finger_R0_blade.pim" "finger_R0_blade_aimConstraint2.cpim"; +connectAttr "finger_R0_blade.t" "finger_R0_blade_aimConstraint2.ct"; +connectAttr "finger_R0_blade.rp" "finger_R0_blade_aimConstraint2.crp"; +connectAttr "finger_R0_blade.rpt" "finger_R0_blade_aimConstraint2.crt"; +connectAttr "finger_R0_blade.ro" "finger_R0_blade_aimConstraint2.cro"; +connectAttr "finger_R0_0_loc.t" "finger_R0_blade_aimConstraint2.tg[0].tt"; +connectAttr "finger_R0_0_loc.rp" "finger_R0_blade_aimConstraint2.tg[0].trp"; +connectAttr "finger_R0_0_loc.rpt" "finger_R0_blade_aimConstraint2.tg[0].trt"; +connectAttr "finger_R0_0_loc.pm" "finger_R0_blade_aimConstraint2.tg[0].tpm"; +connectAttr "finger_R0_blade_aimConstraint2.w0" "finger_R0_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "finger_R0_root.wm" "finger_R0_blade_aimConstraint2.wum"; +connectAttr "unitConversion163.o" "finger_R0_blade_aimConstraint2.ox"; +connectAttr "finger_R0_blade.pim" "finger_R0_blade_pointConstraint2.cpim"; +connectAttr "finger_R0_blade.rp" "finger_R0_blade_pointConstraint2.crp"; +connectAttr "finger_R0_blade.rpt" "finger_R0_blade_pointConstraint2.crt"; +connectAttr "finger_R0_root.t" "finger_R0_blade_pointConstraint2.tg[0].tt"; +connectAttr "finger_R0_root.rp" "finger_R0_blade_pointConstraint2.tg[0].trp"; +connectAttr "finger_R0_root.rpt" "finger_R0_blade_pointConstraint2.tg[0].trt"; +connectAttr "finger_R0_root.pm" "finger_R0_blade_pointConstraint2.tg[0].tpm"; +connectAttr "finger_R0_blade_pointConstraint2.w0" "finger_R0_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns475.og[0]" "finger_R0_crvShape.cr"; +connectAttr "tweak623.pl[0].cp[0]" "finger_R0_crvShape.twl"; +connectAttr "mgear_curveCns475GroupId.id" "finger_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns475Set.mwc" "finger_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8815.id" "finger_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet623.mwc" "finger_R0_crvShape.iog.og[1].gco"; +connectAttr "thumb_R0_blade_pointConstraint2.ctx" "thumb_R0_blade.tx" -l on; +connectAttr "thumb_R0_blade_pointConstraint2.cty" "thumb_R0_blade.ty" -l on; +connectAttr "thumb_R0_blade_pointConstraint2.ctz" "thumb_R0_blade.tz" -l on; +connectAttr "thumb_R0_blade_aimConstraint2.crx" "thumb_R0_blade.rx" -l on; +connectAttr "thumb_R0_blade_aimConstraint2.cry" "thumb_R0_blade.ry" -l on; +connectAttr "thumb_R0_blade_aimConstraint2.crz" "thumb_R0_blade.rz" -l on; +connectAttr "thumb_R0_blade.pim" "thumb_R0_blade_aimConstraint2.cpim"; +connectAttr "thumb_R0_blade.t" "thumb_R0_blade_aimConstraint2.ct"; +connectAttr "thumb_R0_blade.rp" "thumb_R0_blade_aimConstraint2.crp"; +connectAttr "thumb_R0_blade.rpt" "thumb_R0_blade_aimConstraint2.crt"; +connectAttr "thumb_R0_blade.ro" "thumb_R0_blade_aimConstraint2.cro"; +connectAttr "thumb_R0_0_loc.t" "thumb_R0_blade_aimConstraint2.tg[0].tt"; +connectAttr "thumb_R0_0_loc.rp" "thumb_R0_blade_aimConstraint2.tg[0].trp"; +connectAttr "thumb_R0_0_loc.rpt" "thumb_R0_blade_aimConstraint2.tg[0].trt"; +connectAttr "thumb_R0_0_loc.pm" "thumb_R0_blade_aimConstraint2.tg[0].tpm"; +connectAttr "thumb_R0_blade_aimConstraint2.w0" "thumb_R0_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "thumb_R0_root.wm" "thumb_R0_blade_aimConstraint2.wum"; +connectAttr "unitConversion164.o" "thumb_R0_blade_aimConstraint2.ox"; +connectAttr "thumb_R0_blade.pim" "thumb_R0_blade_pointConstraint2.cpim"; +connectAttr "thumb_R0_blade.rp" "thumb_R0_blade_pointConstraint2.crp"; +connectAttr "thumb_R0_blade.rpt" "thumb_R0_blade_pointConstraint2.crt"; +connectAttr "thumb_R0_root.t" "thumb_R0_blade_pointConstraint2.tg[0].tt"; +connectAttr "thumb_R0_root.rp" "thumb_R0_blade_pointConstraint2.tg[0].trp"; +connectAttr "thumb_R0_root.rpt" "thumb_R0_blade_pointConstraint2.tg[0].trt"; +connectAttr "thumb_R0_root.pm" "thumb_R0_blade_pointConstraint2.tg[0].tpm"; +connectAttr "thumb_R0_blade_pointConstraint2.w0" "thumb_R0_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns476.og[0]" "thumb_R0_crvShape.cr"; +connectAttr "tweak624.pl[0].cp[0]" "thumb_R0_crvShape.twl"; +connectAttr "mgear_curveCns476GroupId.id" "thumb_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns476Set.mwc" "thumb_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8817.id" "thumb_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet624.mwc" "thumb_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns470.og[0]" "arm_R0_crvShape.cr"; +connectAttr "tweak618.pl[0].cp[0]" "arm_R0_crvShape.twl"; +connectAttr "mgear_curveCns470GroupId.id" "arm_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns470Set.mwc" "arm_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8805.id" "arm_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet618.mwc" "arm_R0_crvShape.iog.og[1].gco"; +connectAttr "shoulder_R0_blade_pointConstraint2.ctx" "shoulder_R0_blade.tx" -l on + ; +connectAttr "shoulder_R0_blade_pointConstraint2.cty" "shoulder_R0_blade.ty" -l on + ; +connectAttr "shoulder_R0_blade_pointConstraint2.ctz" "shoulder_R0_blade.tz" -l on + ; +connectAttr "shoulder_R0_blade_aimConstraint2.crx" "shoulder_R0_blade.rx" -l on; +connectAttr "shoulder_R0_blade_aimConstraint2.cry" "shoulder_R0_blade.ry" -l on; +connectAttr "shoulder_R0_blade_aimConstraint2.crz" "shoulder_R0_blade.rz" -l on; +connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_aimConstraint2.cpim"; +connectAttr "shoulder_R0_blade.t" "shoulder_R0_blade_aimConstraint2.ct"; +connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_aimConstraint2.crp"; +connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_aimConstraint2.crt"; +connectAttr "shoulder_R0_blade.ro" "shoulder_R0_blade_aimConstraint2.cro"; +connectAttr "shoulder_R0_tip.t" "shoulder_R0_blade_aimConstraint2.tg[0].tt"; +connectAttr "shoulder_R0_tip.rp" "shoulder_R0_blade_aimConstraint2.tg[0].trp"; +connectAttr "shoulder_R0_tip.rpt" "shoulder_R0_blade_aimConstraint2.tg[0].trt"; +connectAttr "shoulder_R0_tip.pm" "shoulder_R0_blade_aimConstraint2.tg[0].tpm"; +connectAttr "shoulder_R0_blade_aimConstraint2.w0" "shoulder_R0_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "shoulder_R0_root.wm" "shoulder_R0_blade_aimConstraint2.wum"; +connectAttr "unitConversion158.o" "shoulder_R0_blade_aimConstraint2.ox"; +connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_pointConstraint2.cpim"; +connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_pointConstraint2.crp"; +connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_pointConstraint2.crt"; +connectAttr "shoulder_R0_root.t" "shoulder_R0_blade_pointConstraint2.tg[0].tt"; +connectAttr "shoulder_R0_root.rp" "shoulder_R0_blade_pointConstraint2.tg[0].trp" + ; +connectAttr "shoulder_R0_root.rpt" "shoulder_R0_blade_pointConstraint2.tg[0].trt" + ; +connectAttr "shoulder_R0_root.pm" "shoulder_R0_blade_pointConstraint2.tg[0].tpm" + ; +connectAttr "shoulder_R0_blade_pointConstraint2.w0" "shoulder_R0_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns469.og[0]" "shoulder_R0_crvShape.cr"; +connectAttr "tweak617.pl[0].cp[0]" "shoulder_R0_crvShape.twl"; +connectAttr "mgear_curveCns469GroupId.id" "shoulder_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns469Set.mwc" "shoulder_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8803.id" "shoulder_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet617.mwc" "shoulder_R0_crvShape.iog.og[1].gco"; +connectAttr "spine_C0_blade_pointConstraint10.ctx" "spine_C0_blade.tx" -l on; +connectAttr "spine_C0_blade_pointConstraint10.cty" "spine_C0_blade.ty" -l on; +connectAttr "spine_C0_blade_pointConstraint10.ctz" "spine_C0_blade.tz" -l on; +connectAttr "spine_C0_blade_aimConstraint10.crx" "spine_C0_blade.rx" -l on; +connectAttr "spine_C0_blade_aimConstraint10.cry" "spine_C0_blade.ry" -l on; +connectAttr "spine_C0_blade_aimConstraint10.crz" "spine_C0_blade.rz" -l on; +connectAttr "spine_C0_blade.pim" "spine_C0_blade_aimConstraint10.cpim"; +connectAttr "spine_C0_blade.t" "spine_C0_blade_aimConstraint10.ct"; +connectAttr "spine_C0_blade.rp" "spine_C0_blade_aimConstraint10.crp"; +connectAttr "spine_C0_blade.rpt" "spine_C0_blade_aimConstraint10.crt"; +connectAttr "spine_C0_blade.ro" "spine_C0_blade_aimConstraint10.cro"; +connectAttr "spine_C0_eff.t" "spine_C0_blade_aimConstraint10.tg[0].tt"; +connectAttr "spine_C0_eff.rp" "spine_C0_blade_aimConstraint10.tg[0].trp"; +connectAttr "spine_C0_eff.rpt" "spine_C0_blade_aimConstraint10.tg[0].trt"; +connectAttr "spine_C0_eff.pm" "spine_C0_blade_aimConstraint10.tg[0].tpm"; +connectAttr "spine_C0_blade_aimConstraint10.w0" "spine_C0_blade_aimConstraint10.tg[0].tw" + ; +connectAttr "spine_C0_root.wm" "spine_C0_blade_aimConstraint10.wum"; +connectAttr "unitConversion148.o" "spine_C0_blade_aimConstraint10.ox"; +connectAttr "spine_C0_blade.pim" "spine_C0_blade_pointConstraint10.cpim"; +connectAttr "spine_C0_blade.rp" "spine_C0_blade_pointConstraint10.crp"; +connectAttr "spine_C0_blade.rpt" "spine_C0_blade_pointConstraint10.crt"; +connectAttr "spine_C0_root.t" "spine_C0_blade_pointConstraint10.tg[0].tt"; +connectAttr "spine_C0_root.rp" "spine_C0_blade_pointConstraint10.tg[0].trp"; +connectAttr "spine_C0_root.rpt" "spine_C0_blade_pointConstraint10.tg[0].trt"; +connectAttr "spine_C0_root.pm" "spine_C0_blade_pointConstraint10.tg[0].tpm"; +connectAttr "spine_C0_blade_pointConstraint10.w0" "spine_C0_blade_pointConstraint10.tg[0].tw" + ; +connectAttr "mgear_curveCns451.og[0]" "spine_C0_crvShape.cr"; +connectAttr "tweak599.pl[0].cp[0]" "spine_C0_crvShape.twl"; +connectAttr "mgear_curveCns451GroupId.id" "spine_C0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns451Set.mwc" "spine_C0_crvShape.iog.og[0].gco"; +connectAttr "groupId8767.id" "spine_C0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet599.mwc" "spine_C0_crvShape.iog.og[1].gco"; +connectAttr "leg_L0_root_st_profile.o" "leg_L0_root.st_profile"; +connectAttr "leg_L0_root_sq_profile.o" "leg_L0_root.sq_profile"; +connectAttr "mgear_curveCns478.og[0]" "foot_L0_crvShape.cr"; +connectAttr "tweak626.pl[0].cp[0]" "foot_L0_crvShape.twl"; +connectAttr "mgear_curveCns478GroupId.id" "foot_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns478Set.mwc" "foot_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8821.id" "foot_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet626.mwc" "foot_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns479.og[0]" "foot_L0_Shape1.cr"; +connectAttr "tweak627.pl[0].cp[0]" "foot_L0_Shape1.twl"; +connectAttr "mgear_curveCns479GroupId.id" "foot_L0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns479Set.mwc" "foot_L0_Shape1.iog.og[0].gco"; +connectAttr "groupId8823.id" "foot_L0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet627.mwc" "foot_L0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns477.og[0]" "leg_L0_crvShape.cr"; +connectAttr "tweak625.pl[0].cp[0]" "leg_L0_crvShape.twl"; +connectAttr "mgear_curveCns477GroupId.id" "leg_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns477Set.mwc" "leg_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId8819.id" "leg_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet625.mwc" "leg_L0_crvShape.iog.og[1].gco"; +connectAttr "leg_R0_root_st_profile1.o" "leg_R0_root.st_profile"; +connectAttr "leg_R0_root_sq_profile1.o" "leg_R0_root.sq_profile"; +connectAttr "mgear_curveCns481.og[0]" "foot_R0_crvShape.cr"; +connectAttr "tweak629.pl[0].cp[0]" "foot_R0_crvShape.twl"; +connectAttr "mgear_curveCns481GroupId.id" "foot_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns481Set.mwc" "foot_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8827.id" "foot_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet629.mwc" "foot_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns482.og[0]" "foot_R0_Shape1.cr"; +connectAttr "tweak630.pl[0].cp[0]" "foot_R0_Shape1.twl"; +connectAttr "mgear_curveCns482GroupId.id" "foot_R0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns482Set.mwc" "foot_R0_Shape1.iog.og[0].gco"; +connectAttr "groupId8829.id" "foot_R0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet630.mwc" "foot_R0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns480.og[0]" "leg_R0_crvShape.cr"; +connectAttr "tweak628.pl[0].cp[0]" "leg_R0_crvShape.twl"; +connectAttr "mgear_curveCns480GroupId.id" "leg_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns480Set.mwc" "leg_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId8825.id" "leg_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet628.mwc" "leg_R0_crvShape.iog.og[1].gco"; relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; connectAttr "layerManager.dli[0]" "defaultLayer.id"; connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; -connectAttr "spine_C0_blade.bladeRollOffset" "unitConversion131.i"; -connectAttr "mgear_curveCns411GroupParts.og" "mgear_curveCns411.ip[0].ig"; -connectAttr "mgear_curveCns411GroupId.id" "mgear_curveCns411.ip[0].gi"; -connectAttr "spine_C0_root.wm" "mgear_curveCns411.inputs[0]"; -connectAttr "spine_C0_eff.wm" "mgear_curveCns411.inputs[1]"; -connectAttr "groupParts1118.og" "tweak559.ip[0].ig"; -connectAttr "groupId8687.id" "tweak559.ip[0].gi"; -connectAttr "mgear_curveCns411GroupId.msg" "mgear_curveCns411Set.gn" -na; -connectAttr "spine_C0_crvShape.iog.og[0]" "mgear_curveCns411Set.dsm" -na; -connectAttr "mgear_curveCns411.msg" "mgear_curveCns411Set.ub[0]"; -connectAttr "tweak559.og[0]" "mgear_curveCns411GroupParts.ig"; -connectAttr "mgear_curveCns411GroupId.id" "mgear_curveCns411GroupParts.gi"; -connectAttr "groupId8687.msg" "tweakSet559.gn" -na; -connectAttr "spine_C0_crvShape.iog.og[1]" "tweakSet559.dsm" -na; -connectAttr "tweak559.msg" "tweakSet559.ub[0]"; -connectAttr "spine_C0_crvShapeOrig.ws" "groupParts1118.ig"; -connectAttr "groupId8687.id" "groupParts1118.gi"; -connectAttr "shoulder_L0_blade.bladeRollOffset" "unitConversion132.i"; -connectAttr "mgear_curveCns412GroupParts.og" "mgear_curveCns412.ip[0].ig"; -connectAttr "mgear_curveCns412GroupId.id" "mgear_curveCns412.ip[0].gi"; -connectAttr "shoulder_L0_root.wm" "mgear_curveCns412.inputs[0]"; -connectAttr "shoulder_L0_tip.wm" "mgear_curveCns412.inputs[1]"; -connectAttr "groupParts1120.og" "tweak560.ip[0].ig"; -connectAttr "groupId8689.id" "tweak560.ip[0].gi"; -connectAttr "mgear_curveCns412GroupId.msg" "mgear_curveCns412Set.gn" -na; -connectAttr "shoulder_L0_crvShape.iog.og[0]" "mgear_curveCns412Set.dsm" -na; -connectAttr "mgear_curveCns412.msg" "mgear_curveCns412Set.ub[0]"; -connectAttr "tweak560.og[0]" "mgear_curveCns412GroupParts.ig"; -connectAttr "mgear_curveCns412GroupId.id" "mgear_curveCns412GroupParts.gi"; -connectAttr "groupId8689.msg" "tweakSet560.gn" -na; -connectAttr "shoulder_L0_crvShape.iog.og[1]" "tweakSet560.dsm" -na; -connectAttr "tweak560.msg" "tweakSet560.ub[0]"; -connectAttr "shoulder_L0_crvShapeOrig.ws" "groupParts1120.ig"; -connectAttr "groupId8689.id" "groupParts1120.gi"; -connectAttr "mgear_curveCns413GroupParts.og" "mgear_curveCns413.ip[0].ig"; -connectAttr "mgear_curveCns413GroupId.id" "mgear_curveCns413.ip[0].gi"; -connectAttr "arm_L0_root.wm" "mgear_curveCns413.inputs[0]"; -connectAttr "arm_L0_elbow.wm" "mgear_curveCns413.inputs[1]"; -connectAttr "arm_L0_wrist.wm" "mgear_curveCns413.inputs[2]"; -connectAttr "arm_L0_eff.wm" "mgear_curveCns413.inputs[3]"; -connectAttr "groupParts1122.og" "tweak561.ip[0].ig"; -connectAttr "groupId8691.id" "tweak561.ip[0].gi"; -connectAttr "mgear_curveCns413GroupId.msg" "mgear_curveCns413Set.gn" -na; -connectAttr "arm_L0_crvShape.iog.og[0]" "mgear_curveCns413Set.dsm" -na; -connectAttr "mgear_curveCns413.msg" "mgear_curveCns413Set.ub[0]"; -connectAttr "tweak561.og[0]" "mgear_curveCns413GroupParts.ig"; -connectAttr "mgear_curveCns413GroupId.id" "mgear_curveCns413GroupParts.gi"; -connectAttr "groupId8691.msg" "tweakSet561.gn" -na; -connectAttr "arm_L0_crvShape.iog.og[1]" "tweakSet561.dsm" -na; -connectAttr "tweak561.msg" "tweakSet561.ub[0]"; -connectAttr "arm_L0_crvShapeOrig.ws" "groupParts1122.ig"; -connectAttr "groupId8691.id" "groupParts1122.gi"; -connectAttr "meta_L0_blade.bladeRollOffset" "unitConversion133.i"; -connectAttr "mgear_curveCns414GroupParts.og" "mgear_curveCns414.ip[0].ig"; -connectAttr "mgear_curveCns414GroupId.id" "mgear_curveCns414.ip[0].gi"; -connectAttr "meta_L0_root.wm" "mgear_curveCns414.inputs[0]"; -connectAttr "meta_L0_0_loc.wm" "mgear_curveCns414.inputs[1]"; -connectAttr "meta_L0_1_loc.wm" "mgear_curveCns414.inputs[2]"; -connectAttr "meta_L0_2_loc.wm" "mgear_curveCns414.inputs[3]"; -connectAttr "groupParts1124.og" "tweak562.ip[0].ig"; -connectAttr "groupId8693.id" "tweak562.ip[0].gi"; -connectAttr "mgear_curveCns414GroupId.msg" "mgear_curveCns414Set.gn" -na; -connectAttr "meta_L0_crvShape.iog.og[0]" "mgear_curveCns414Set.dsm" -na; -connectAttr "mgear_curveCns414.msg" "mgear_curveCns414Set.ub[0]"; -connectAttr "tweak562.og[0]" "mgear_curveCns414GroupParts.ig"; -connectAttr "mgear_curveCns414GroupId.id" "mgear_curveCns414GroupParts.gi"; -connectAttr "groupId8693.msg" "tweakSet562.gn" -na; -connectAttr "meta_L0_crvShape.iog.og[1]" "tweakSet562.dsm" -na; -connectAttr "tweak562.msg" "tweakSet562.ub[0]"; -connectAttr "meta_L0_crvShapeOrig.ws" "groupParts1124.ig"; -connectAttr "groupId8693.id" "groupParts1124.gi"; -connectAttr "finger_L3_blade.bladeRollOffset" "unitConversion134.i"; -connectAttr "mgear_curveCns415GroupParts.og" "mgear_curveCns415.ip[0].ig"; -connectAttr "mgear_curveCns415GroupId.id" "mgear_curveCns415.ip[0].gi"; -connectAttr "finger_L3_root.wm" "mgear_curveCns415.inputs[0]"; -connectAttr "finger_L3_0_loc.wm" "mgear_curveCns415.inputs[1]"; -connectAttr "finger_L3_1_loc.wm" "mgear_curveCns415.inputs[2]"; -connectAttr "finger_L3_2_loc.wm" "mgear_curveCns415.inputs[3]"; -connectAttr "groupParts1126.og" "tweak563.ip[0].ig"; -connectAttr "groupId8695.id" "tweak563.ip[0].gi"; -connectAttr "mgear_curveCns415GroupId.msg" "mgear_curveCns415Set.gn" -na; -connectAttr "finger_L3_crvShape.iog.og[0]" "mgear_curveCns415Set.dsm" -na; -connectAttr "mgear_curveCns415.msg" "mgear_curveCns415Set.ub[0]"; -connectAttr "tweak563.og[0]" "mgear_curveCns415GroupParts.ig"; -connectAttr "mgear_curveCns415GroupId.id" "mgear_curveCns415GroupParts.gi"; -connectAttr "groupId8695.msg" "tweakSet563.gn" -na; -connectAttr "finger_L3_crvShape.iog.og[1]" "tweakSet563.dsm" -na; -connectAttr "tweak563.msg" "tweakSet563.ub[0]"; -connectAttr "finger_L3_crvShapeOrig.ws" "groupParts1126.ig"; -connectAttr "groupId8695.id" "groupParts1126.gi"; -connectAttr "finger_L2_blade.bladeRollOffset" "unitConversion135.i"; -connectAttr "mgear_curveCns416GroupParts.og" "mgear_curveCns416.ip[0].ig"; -connectAttr "mgear_curveCns416GroupId.id" "mgear_curveCns416.ip[0].gi"; -connectAttr "finger_L2_root.wm" "mgear_curveCns416.inputs[0]"; -connectAttr "finger_L2_0_loc.wm" "mgear_curveCns416.inputs[1]"; -connectAttr "finger_L2_1_loc.wm" "mgear_curveCns416.inputs[2]"; -connectAttr "finger_L2_2_loc.wm" "mgear_curveCns416.inputs[3]"; -connectAttr "groupParts1128.og" "tweak564.ip[0].ig"; -connectAttr "groupId8697.id" "tweak564.ip[0].gi"; -connectAttr "mgear_curveCns416GroupId.msg" "mgear_curveCns416Set.gn" -na; -connectAttr "finger_L2_crvShape.iog.og[0]" "mgear_curveCns416Set.dsm" -na; -connectAttr "mgear_curveCns416.msg" "mgear_curveCns416Set.ub[0]"; -connectAttr "tweak564.og[0]" "mgear_curveCns416GroupParts.ig"; -connectAttr "mgear_curveCns416GroupId.id" "mgear_curveCns416GroupParts.gi"; -connectAttr "groupId8697.msg" "tweakSet564.gn" -na; -connectAttr "finger_L2_crvShape.iog.og[1]" "tweakSet564.dsm" -na; -connectAttr "tweak564.msg" "tweakSet564.ub[0]"; -connectAttr "finger_L2_crvShapeOrig.ws" "groupParts1128.ig"; -connectAttr "groupId8697.id" "groupParts1128.gi"; -connectAttr "finger_L1_blade.bladeRollOffset" "unitConversion136.i"; -connectAttr "mgear_curveCns417GroupParts.og" "mgear_curveCns417.ip[0].ig"; -connectAttr "mgear_curveCns417GroupId.id" "mgear_curveCns417.ip[0].gi"; -connectAttr "finger_L1_root.wm" "mgear_curveCns417.inputs[0]"; -connectAttr "finger_L1_0_loc.wm" "mgear_curveCns417.inputs[1]"; -connectAttr "finger_L1_1_loc.wm" "mgear_curveCns417.inputs[2]"; -connectAttr "finger_L1_2_loc.wm" "mgear_curveCns417.inputs[3]"; -connectAttr "groupParts1130.og" "tweak565.ip[0].ig"; -connectAttr "groupId8699.id" "tweak565.ip[0].gi"; -connectAttr "mgear_curveCns417GroupId.msg" "mgear_curveCns417Set.gn" -na; -connectAttr "finger_L1_crvShape.iog.og[0]" "mgear_curveCns417Set.dsm" -na; -connectAttr "mgear_curveCns417.msg" "mgear_curveCns417Set.ub[0]"; -connectAttr "tweak565.og[0]" "mgear_curveCns417GroupParts.ig"; -connectAttr "mgear_curveCns417GroupId.id" "mgear_curveCns417GroupParts.gi"; -connectAttr "groupId8699.msg" "tweakSet565.gn" -na; -connectAttr "finger_L1_crvShape.iog.og[1]" "tweakSet565.dsm" -na; -connectAttr "tweak565.msg" "tweakSet565.ub[0]"; -connectAttr "finger_L1_crvShapeOrig.ws" "groupParts1130.ig"; -connectAttr "groupId8699.id" "groupParts1130.gi"; -connectAttr "finger_L0_blade.bladeRollOffset" "unitConversion137.i"; -connectAttr "mgear_curveCns418GroupParts.og" "mgear_curveCns418.ip[0].ig"; -connectAttr "mgear_curveCns418GroupId.id" "mgear_curveCns418.ip[0].gi"; -connectAttr "finger_L0_root.wm" "mgear_curveCns418.inputs[0]"; -connectAttr "finger_L0_0_loc.wm" "mgear_curveCns418.inputs[1]"; -connectAttr "finger_L0_1_loc.wm" "mgear_curveCns418.inputs[2]"; -connectAttr "finger_L0_2_loc.wm" "mgear_curveCns418.inputs[3]"; -connectAttr "groupParts1132.og" "tweak566.ip[0].ig"; -connectAttr "groupId8701.id" "tweak566.ip[0].gi"; -connectAttr "mgear_curveCns418GroupId.msg" "mgear_curveCns418Set.gn" -na; -connectAttr "finger_L0_crvShape.iog.og[0]" "mgear_curveCns418Set.dsm" -na; -connectAttr "mgear_curveCns418.msg" "mgear_curveCns418Set.ub[0]"; -connectAttr "tweak566.og[0]" "mgear_curveCns418GroupParts.ig"; -connectAttr "mgear_curveCns418GroupId.id" "mgear_curveCns418GroupParts.gi"; -connectAttr "groupId8701.msg" "tweakSet566.gn" -na; -connectAttr "finger_L0_crvShape.iog.og[1]" "tweakSet566.dsm" -na; -connectAttr "tweak566.msg" "tweakSet566.ub[0]"; -connectAttr "finger_L0_crvShapeOrig.ws" "groupParts1132.ig"; -connectAttr "groupId8701.id" "groupParts1132.gi"; -connectAttr "thumb_L0_blade.bladeRollOffset" "unitConversion138.i"; -connectAttr "mgear_curveCns419GroupParts.og" "mgear_curveCns419.ip[0].ig"; -connectAttr "mgear_curveCns419GroupId.id" "mgear_curveCns419.ip[0].gi"; -connectAttr "thumb_L0_root.wm" "mgear_curveCns419.inputs[0]"; -connectAttr "thumb_L0_0_loc.wm" "mgear_curveCns419.inputs[1]"; -connectAttr "thumb_L0_1_loc.wm" "mgear_curveCns419.inputs[2]"; -connectAttr "thumb_L0_2_loc.wm" "mgear_curveCns419.inputs[3]"; -connectAttr "groupParts1134.og" "tweak567.ip[0].ig"; -connectAttr "groupId8703.id" "tweak567.ip[0].gi"; -connectAttr "mgear_curveCns419GroupId.msg" "mgear_curveCns419Set.gn" -na; -connectAttr "thumb_L0_crvShape.iog.og[0]" "mgear_curveCns419Set.dsm" -na; -connectAttr "mgear_curveCns419.msg" "mgear_curveCns419Set.ub[0]"; -connectAttr "tweak567.og[0]" "mgear_curveCns419GroupParts.ig"; -connectAttr "mgear_curveCns419GroupId.id" "mgear_curveCns419GroupParts.gi"; -connectAttr "groupId8703.msg" "tweakSet567.gn" -na; -connectAttr "thumb_L0_crvShape.iog.og[1]" "tweakSet567.dsm" -na; -connectAttr "tweak567.msg" "tweakSet567.ub[0]"; -connectAttr "thumb_L0_crvShapeOrig.ws" "groupParts1134.ig"; -connectAttr "groupId8703.id" "groupParts1134.gi"; -connectAttr "neck_C0_blade.bladeRollOffset" "unitConversion139.i"; -connectAttr "mgear_curveCns420GroupParts.og" "mgear_curveCns420.ip[0].ig"; -connectAttr "mgear_curveCns420GroupId.id" "mgear_curveCns420.ip[0].gi"; -connectAttr "neck_C0_root.wm" "mgear_curveCns420.inputs[0]"; -connectAttr "neck_C0_tan0.wm" "mgear_curveCns420.inputs[1]"; -connectAttr "neck_C0_tan1.wm" "mgear_curveCns420.inputs[2]"; -connectAttr "neck_C0_neck.wm" "mgear_curveCns420.inputs[3]"; -connectAttr "groupParts1136.og" "tweak568.ip[0].ig"; -connectAttr "groupId8705.id" "tweak568.ip[0].gi"; -connectAttr "mgear_curveCns420GroupId.msg" "mgear_curveCns420Set.gn" -na; -connectAttr "neck_C0_neck_crvShape.iog.og[0]" "mgear_curveCns420Set.dsm" -na; -connectAttr "mgear_curveCns420.msg" "mgear_curveCns420Set.ub[0]"; -connectAttr "tweak568.og[0]" "mgear_curveCns420GroupParts.ig"; -connectAttr "mgear_curveCns420GroupId.id" "mgear_curveCns420GroupParts.gi"; -connectAttr "groupId8705.msg" "tweakSet568.gn" -na; -connectAttr "neck_C0_neck_crvShape.iog.og[1]" "tweakSet568.dsm" -na; -connectAttr "tweak568.msg" "tweakSet568.ub[0]"; -connectAttr "neck_C0_neck_crvShapeOrig.ws" "groupParts1136.ig"; -connectAttr "groupId8705.id" "groupParts1136.gi"; -connectAttr "mgear_curveCns421GroupParts.og" "mgear_curveCns421.ip[0].ig"; -connectAttr "mgear_curveCns421GroupId.id" "mgear_curveCns421.ip[0].gi"; -connectAttr "neck_C0_neck.wm" "mgear_curveCns421.inputs[0]"; -connectAttr "neck_C0_head.wm" "mgear_curveCns421.inputs[1]"; -connectAttr "neck_C0_eff.wm" "mgear_curveCns421.inputs[2]"; -connectAttr "groupParts1138.og" "tweak569.ip[0].ig"; -connectAttr "groupId8707.id" "tweak569.ip[0].gi"; -connectAttr "mgear_curveCns421GroupId.msg" "mgear_curveCns421Set.gn" -na; -connectAttr "neck_C0_head_crvShape.iog.og[0]" "mgear_curveCns421Set.dsm" -na; -connectAttr "mgear_curveCns421.msg" "mgear_curveCns421Set.ub[0]"; -connectAttr "tweak569.og[0]" "mgear_curveCns421GroupParts.ig"; -connectAttr "mgear_curveCns421GroupId.id" "mgear_curveCns421GroupParts.gi"; -connectAttr "groupId8707.msg" "tweakSet569.gn" -na; -connectAttr "neck_C0_head_crvShape.iog.og[1]" "tweakSet569.dsm" -na; -connectAttr "tweak569.msg" "tweakSet569.ub[0]"; -connectAttr "neck_C0_head_crvShapeOrig.ws" "groupParts1138.ig"; -connectAttr "groupId8707.id" "groupParts1138.gi"; -connectAttr "mgear_curveCns422GroupParts.og" "mgear_curveCns422.ip[0].ig"; -connectAttr "mgear_curveCns422GroupId.id" "mgear_curveCns422.ip[0].gi"; -connectAttr "mouth_C0_root.wm" "mgear_curveCns422.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns422.inputs[1]"; -connectAttr "groupParts1140.og" "tweak570.ip[0].ig"; -connectAttr "groupId8709.id" "tweak570.ip[0].gi"; -connectAttr "mgear_curveCns422GroupId.msg" "mgear_curveCns422Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns422Set.dsm" +connectAttr "spine_C0_blade.bladeRollOffset" "unitConversion148.i"; +connectAttr "mgear_curveCns451GroupParts.og" "mgear_curveCns451.ip[0].ig"; +connectAttr "mgear_curveCns451GroupId.id" "mgear_curveCns451.ip[0].gi"; +connectAttr "spine_C0_root.wm" "mgear_curveCns451.inputs[0]"; +connectAttr "spine_C0_eff.wm" "mgear_curveCns451.inputs[1]"; +connectAttr "groupParts1198.og" "tweak599.ip[0].ig"; +connectAttr "groupId8767.id" "tweak599.ip[0].gi"; +connectAttr "mgear_curveCns451GroupId.msg" "mgear_curveCns451Set.gn" -na; +connectAttr "spine_C0_crvShape.iog.og[0]" "mgear_curveCns451Set.dsm" -na; +connectAttr "mgear_curveCns451.msg" "mgear_curveCns451Set.ub[0]"; +connectAttr "tweak599.og[0]" "mgear_curveCns451GroupParts.ig"; +connectAttr "mgear_curveCns451GroupId.id" "mgear_curveCns451GroupParts.gi"; +connectAttr "groupId8767.msg" "tweakSet599.gn" -na; +connectAttr "spine_C0_crvShape.iog.og[1]" "tweakSet599.dsm" -na; +connectAttr "tweak599.msg" "tweakSet599.ub[0]"; +connectAttr "spine_C0_crvShapeOrig.ws" "groupParts1198.ig"; +connectAttr "groupId8767.id" "groupParts1198.gi"; +connectAttr "shoulder_L0_blade.bladeRollOffset" "unitConversion149.i"; +connectAttr "mgear_curveCns452GroupParts.og" "mgear_curveCns452.ip[0].ig"; +connectAttr "mgear_curveCns452GroupId.id" "mgear_curveCns452.ip[0].gi"; +connectAttr "shoulder_L0_root.wm" "mgear_curveCns452.inputs[0]"; +connectAttr "shoulder_L0_tip.wm" "mgear_curveCns452.inputs[1]"; +connectAttr "groupParts1200.og" "tweak600.ip[0].ig"; +connectAttr "groupId8769.id" "tweak600.ip[0].gi"; +connectAttr "mgear_curveCns452GroupId.msg" "mgear_curveCns452Set.gn" -na; +connectAttr "shoulder_L0_crvShape.iog.og[0]" "mgear_curveCns452Set.dsm" -na; +connectAttr "mgear_curveCns452.msg" "mgear_curveCns452Set.ub[0]"; +connectAttr "tweak600.og[0]" "mgear_curveCns452GroupParts.ig"; +connectAttr "mgear_curveCns452GroupId.id" "mgear_curveCns452GroupParts.gi"; +connectAttr "groupId8769.msg" "tweakSet600.gn" -na; +connectAttr "shoulder_L0_crvShape.iog.og[1]" "tweakSet600.dsm" -na; +connectAttr "tweak600.msg" "tweakSet600.ub[0]"; +connectAttr "shoulder_L0_crvShapeOrig.ws" "groupParts1200.ig"; +connectAttr "groupId8769.id" "groupParts1200.gi"; +connectAttr "mgear_curveCns453GroupParts.og" "mgear_curveCns453.ip[0].ig"; +connectAttr "mgear_curveCns453GroupId.id" "mgear_curveCns453.ip[0].gi"; +connectAttr "arm_L0_root.wm" "mgear_curveCns453.inputs[0]"; +connectAttr "arm_L0_elbow.wm" "mgear_curveCns453.inputs[1]"; +connectAttr "arm_L0_wrist.wm" "mgear_curveCns453.inputs[2]"; +connectAttr "arm_L0_eff.wm" "mgear_curveCns453.inputs[3]"; +connectAttr "groupParts1202.og" "tweak601.ip[0].ig"; +connectAttr "groupId8771.id" "tweak601.ip[0].gi"; +connectAttr "mgear_curveCns453GroupId.msg" "mgear_curveCns453Set.gn" -na; +connectAttr "arm_L0_crvShape.iog.og[0]" "mgear_curveCns453Set.dsm" -na; +connectAttr "mgear_curveCns453.msg" "mgear_curveCns453Set.ub[0]"; +connectAttr "tweak601.og[0]" "mgear_curveCns453GroupParts.ig"; +connectAttr "mgear_curveCns453GroupId.id" "mgear_curveCns453GroupParts.gi"; +connectAttr "groupId8771.msg" "tweakSet601.gn" -na; +connectAttr "arm_L0_crvShape.iog.og[1]" "tweakSet601.dsm" -na; +connectAttr "tweak601.msg" "tweakSet601.ub[0]"; +connectAttr "arm_L0_crvShapeOrig.ws" "groupParts1202.ig"; +connectAttr "groupId8771.id" "groupParts1202.gi"; +connectAttr "meta_L0_blade.bladeRollOffset" "unitConversion150.i"; +connectAttr "mgear_curveCns454GroupParts.og" "mgear_curveCns454.ip[0].ig"; +connectAttr "mgear_curveCns454GroupId.id" "mgear_curveCns454.ip[0].gi"; +connectAttr "meta_L0_root.wm" "mgear_curveCns454.inputs[0]"; +connectAttr "meta_L0_0_loc.wm" "mgear_curveCns454.inputs[1]"; +connectAttr "meta_L0_1_loc.wm" "mgear_curveCns454.inputs[2]"; +connectAttr "meta_L0_2_loc.wm" "mgear_curveCns454.inputs[3]"; +connectAttr "groupParts1204.og" "tweak602.ip[0].ig"; +connectAttr "groupId8773.id" "tweak602.ip[0].gi"; +connectAttr "mgear_curveCns454GroupId.msg" "mgear_curveCns454Set.gn" -na; +connectAttr "meta_L0_crvShape.iog.og[0]" "mgear_curveCns454Set.dsm" -na; +connectAttr "mgear_curveCns454.msg" "mgear_curveCns454Set.ub[0]"; +connectAttr "tweak602.og[0]" "mgear_curveCns454GroupParts.ig"; +connectAttr "mgear_curveCns454GroupId.id" "mgear_curveCns454GroupParts.gi"; +connectAttr "groupId8773.msg" "tweakSet602.gn" -na; +connectAttr "meta_L0_crvShape.iog.og[1]" "tweakSet602.dsm" -na; +connectAttr "tweak602.msg" "tweakSet602.ub[0]"; +connectAttr "meta_L0_crvShapeOrig.ws" "groupParts1204.ig"; +connectAttr "groupId8773.id" "groupParts1204.gi"; +connectAttr "finger_L3_blade.bladeRollOffset" "unitConversion151.i"; +connectAttr "mgear_curveCns455GroupParts.og" "mgear_curveCns455.ip[0].ig"; +connectAttr "mgear_curveCns455GroupId.id" "mgear_curveCns455.ip[0].gi"; +connectAttr "finger_L3_root.wm" "mgear_curveCns455.inputs[0]"; +connectAttr "finger_L3_0_loc.wm" "mgear_curveCns455.inputs[1]"; +connectAttr "finger_L3_1_loc.wm" "mgear_curveCns455.inputs[2]"; +connectAttr "finger_L3_2_loc.wm" "mgear_curveCns455.inputs[3]"; +connectAttr "groupParts1206.og" "tweak603.ip[0].ig"; +connectAttr "groupId8775.id" "tweak603.ip[0].gi"; +connectAttr "mgear_curveCns455GroupId.msg" "mgear_curveCns455Set.gn" -na; +connectAttr "finger_L3_crvShape.iog.og[0]" "mgear_curveCns455Set.dsm" -na; +connectAttr "mgear_curveCns455.msg" "mgear_curveCns455Set.ub[0]"; +connectAttr "tweak603.og[0]" "mgear_curveCns455GroupParts.ig"; +connectAttr "mgear_curveCns455GroupId.id" "mgear_curveCns455GroupParts.gi"; +connectAttr "groupId8775.msg" "tweakSet603.gn" -na; +connectAttr "finger_L3_crvShape.iog.og[1]" "tweakSet603.dsm" -na; +connectAttr "tweak603.msg" "tweakSet603.ub[0]"; +connectAttr "finger_L3_crvShapeOrig.ws" "groupParts1206.ig"; +connectAttr "groupId8775.id" "groupParts1206.gi"; +connectAttr "finger_L2_blade.bladeRollOffset" "unitConversion152.i"; +connectAttr "mgear_curveCns456GroupParts.og" "mgear_curveCns456.ip[0].ig"; +connectAttr "mgear_curveCns456GroupId.id" "mgear_curveCns456.ip[0].gi"; +connectAttr "finger_L2_root.wm" "mgear_curveCns456.inputs[0]"; +connectAttr "finger_L2_0_loc.wm" "mgear_curveCns456.inputs[1]"; +connectAttr "finger_L2_1_loc.wm" "mgear_curveCns456.inputs[2]"; +connectAttr "finger_L2_2_loc.wm" "mgear_curveCns456.inputs[3]"; +connectAttr "groupParts1208.og" "tweak604.ip[0].ig"; +connectAttr "groupId8777.id" "tweak604.ip[0].gi"; +connectAttr "mgear_curveCns456GroupId.msg" "mgear_curveCns456Set.gn" -na; +connectAttr "finger_L2_crvShape.iog.og[0]" "mgear_curveCns456Set.dsm" -na; +connectAttr "mgear_curveCns456.msg" "mgear_curveCns456Set.ub[0]"; +connectAttr "tweak604.og[0]" "mgear_curveCns456GroupParts.ig"; +connectAttr "mgear_curveCns456GroupId.id" "mgear_curveCns456GroupParts.gi"; +connectAttr "groupId8777.msg" "tweakSet604.gn" -na; +connectAttr "finger_L2_crvShape.iog.og[1]" "tweakSet604.dsm" -na; +connectAttr "tweak604.msg" "tweakSet604.ub[0]"; +connectAttr "finger_L2_crvShapeOrig.ws" "groupParts1208.ig"; +connectAttr "groupId8777.id" "groupParts1208.gi"; +connectAttr "finger_L1_blade.bladeRollOffset" "unitConversion153.i"; +connectAttr "mgear_curveCns457GroupParts.og" "mgear_curveCns457.ip[0].ig"; +connectAttr "mgear_curveCns457GroupId.id" "mgear_curveCns457.ip[0].gi"; +connectAttr "finger_L1_root.wm" "mgear_curveCns457.inputs[0]"; +connectAttr "finger_L1_0_loc.wm" "mgear_curveCns457.inputs[1]"; +connectAttr "finger_L1_1_loc.wm" "mgear_curveCns457.inputs[2]"; +connectAttr "finger_L1_2_loc.wm" "mgear_curveCns457.inputs[3]"; +connectAttr "groupParts1210.og" "tweak605.ip[0].ig"; +connectAttr "groupId8779.id" "tweak605.ip[0].gi"; +connectAttr "mgear_curveCns457GroupId.msg" "mgear_curveCns457Set.gn" -na; +connectAttr "finger_L1_crvShape.iog.og[0]" "mgear_curveCns457Set.dsm" -na; +connectAttr "mgear_curveCns457.msg" "mgear_curveCns457Set.ub[0]"; +connectAttr "tweak605.og[0]" "mgear_curveCns457GroupParts.ig"; +connectAttr "mgear_curveCns457GroupId.id" "mgear_curveCns457GroupParts.gi"; +connectAttr "groupId8779.msg" "tweakSet605.gn" -na; +connectAttr "finger_L1_crvShape.iog.og[1]" "tweakSet605.dsm" -na; +connectAttr "tweak605.msg" "tweakSet605.ub[0]"; +connectAttr "finger_L1_crvShapeOrig.ws" "groupParts1210.ig"; +connectAttr "groupId8779.id" "groupParts1210.gi"; +connectAttr "finger_L0_blade.bladeRollOffset" "unitConversion154.i"; +connectAttr "mgear_curveCns458GroupParts.og" "mgear_curveCns458.ip[0].ig"; +connectAttr "mgear_curveCns458GroupId.id" "mgear_curveCns458.ip[0].gi"; +connectAttr "finger_L0_root.wm" "mgear_curveCns458.inputs[0]"; +connectAttr "finger_L0_0_loc.wm" "mgear_curveCns458.inputs[1]"; +connectAttr "finger_L0_1_loc.wm" "mgear_curveCns458.inputs[2]"; +connectAttr "finger_L0_2_loc.wm" "mgear_curveCns458.inputs[3]"; +connectAttr "groupParts1212.og" "tweak606.ip[0].ig"; +connectAttr "groupId8781.id" "tweak606.ip[0].gi"; +connectAttr "mgear_curveCns458GroupId.msg" "mgear_curveCns458Set.gn" -na; +connectAttr "finger_L0_crvShape.iog.og[0]" "mgear_curveCns458Set.dsm" -na; +connectAttr "mgear_curveCns458.msg" "mgear_curveCns458Set.ub[0]"; +connectAttr "tweak606.og[0]" "mgear_curveCns458GroupParts.ig"; +connectAttr "mgear_curveCns458GroupId.id" "mgear_curveCns458GroupParts.gi"; +connectAttr "groupId8781.msg" "tweakSet606.gn" -na; +connectAttr "finger_L0_crvShape.iog.og[1]" "tweakSet606.dsm" -na; +connectAttr "tweak606.msg" "tweakSet606.ub[0]"; +connectAttr "finger_L0_crvShapeOrig.ws" "groupParts1212.ig"; +connectAttr "groupId8781.id" "groupParts1212.gi"; +connectAttr "thumb_L0_blade.bladeRollOffset" "unitConversion155.i"; +connectAttr "mgear_curveCns459GroupParts.og" "mgear_curveCns459.ip[0].ig"; +connectAttr "mgear_curveCns459GroupId.id" "mgear_curveCns459.ip[0].gi"; +connectAttr "thumb_L0_root.wm" "mgear_curveCns459.inputs[0]"; +connectAttr "thumb_L0_0_loc.wm" "mgear_curveCns459.inputs[1]"; +connectAttr "thumb_L0_1_loc.wm" "mgear_curveCns459.inputs[2]"; +connectAttr "thumb_L0_2_loc.wm" "mgear_curveCns459.inputs[3]"; +connectAttr "groupParts1214.og" "tweak607.ip[0].ig"; +connectAttr "groupId8783.id" "tweak607.ip[0].gi"; +connectAttr "mgear_curveCns459GroupId.msg" "mgear_curveCns459Set.gn" -na; +connectAttr "thumb_L0_crvShape.iog.og[0]" "mgear_curveCns459Set.dsm" -na; +connectAttr "mgear_curveCns459.msg" "mgear_curveCns459Set.ub[0]"; +connectAttr "tweak607.og[0]" "mgear_curveCns459GroupParts.ig"; +connectAttr "mgear_curveCns459GroupId.id" "mgear_curveCns459GroupParts.gi"; +connectAttr "groupId8783.msg" "tweakSet607.gn" -na; +connectAttr "thumb_L0_crvShape.iog.og[1]" "tweakSet607.dsm" -na; +connectAttr "tweak607.msg" "tweakSet607.ub[0]"; +connectAttr "thumb_L0_crvShapeOrig.ws" "groupParts1214.ig"; +connectAttr "groupId8783.id" "groupParts1214.gi"; +connectAttr "neck_C0_blade.bladeRollOffset" "unitConversion156.i"; +connectAttr "mgear_curveCns460GroupParts.og" "mgear_curveCns460.ip[0].ig"; +connectAttr "mgear_curveCns460GroupId.id" "mgear_curveCns460.ip[0].gi"; +connectAttr "neck_C0_root.wm" "mgear_curveCns460.inputs[0]"; +connectAttr "neck_C0_tan0.wm" "mgear_curveCns460.inputs[1]"; +connectAttr "neck_C0_tan1.wm" "mgear_curveCns460.inputs[2]"; +connectAttr "neck_C0_neck.wm" "mgear_curveCns460.inputs[3]"; +connectAttr "groupParts1216.og" "tweak608.ip[0].ig"; +connectAttr "groupId8785.id" "tweak608.ip[0].gi"; +connectAttr "mgear_curveCns460GroupId.msg" "mgear_curveCns460Set.gn" -na; +connectAttr "neck_C0_neck_crvShape.iog.og[0]" "mgear_curveCns460Set.dsm" -na; +connectAttr "mgear_curveCns460.msg" "mgear_curveCns460Set.ub[0]"; +connectAttr "tweak608.og[0]" "mgear_curveCns460GroupParts.ig"; +connectAttr "mgear_curveCns460GroupId.id" "mgear_curveCns460GroupParts.gi"; +connectAttr "groupId8785.msg" "tweakSet608.gn" -na; +connectAttr "neck_C0_neck_crvShape.iog.og[1]" "tweakSet608.dsm" -na; +connectAttr "tweak608.msg" "tweakSet608.ub[0]"; +connectAttr "neck_C0_neck_crvShapeOrig.ws" "groupParts1216.ig"; +connectAttr "groupId8785.id" "groupParts1216.gi"; +connectAttr "mgear_curveCns461GroupParts.og" "mgear_curveCns461.ip[0].ig"; +connectAttr "mgear_curveCns461GroupId.id" "mgear_curveCns461.ip[0].gi"; +connectAttr "neck_C0_neck.wm" "mgear_curveCns461.inputs[0]"; +connectAttr "neck_C0_head.wm" "mgear_curveCns461.inputs[1]"; +connectAttr "neck_C0_eff.wm" "mgear_curveCns461.inputs[2]"; +connectAttr "groupParts1218.og" "tweak609.ip[0].ig"; +connectAttr "groupId8787.id" "tweak609.ip[0].gi"; +connectAttr "mgear_curveCns461GroupId.msg" "mgear_curveCns461Set.gn" -na; +connectAttr "neck_C0_head_crvShape.iog.og[0]" "mgear_curveCns461Set.dsm" -na; +connectAttr "mgear_curveCns461.msg" "mgear_curveCns461Set.ub[0]"; +connectAttr "tweak609.og[0]" "mgear_curveCns461GroupParts.ig"; +connectAttr "mgear_curveCns461GroupId.id" "mgear_curveCns461GroupParts.gi"; +connectAttr "groupId8787.msg" "tweakSet609.gn" -na; +connectAttr "neck_C0_head_crvShape.iog.og[1]" "tweakSet609.dsm" -na; +connectAttr "tweak609.msg" "tweakSet609.ub[0]"; +connectAttr "neck_C0_head_crvShapeOrig.ws" "groupParts1218.ig"; +connectAttr "groupId8787.id" "groupParts1218.gi"; +connectAttr "mgear_curveCns462GroupParts.og" "mgear_curveCns462.ip[0].ig"; +connectAttr "mgear_curveCns462GroupId.id" "mgear_curveCns462.ip[0].gi"; +connectAttr "mouth_C0_root.wm" "mgear_curveCns462.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns462.inputs[1]"; +connectAttr "groupParts1220.og" "tweak610.ip[0].ig"; +connectAttr "groupId8789.id" "tweak610.ip[0].gi"; +connectAttr "mgear_curveCns462GroupId.msg" "mgear_curveCns462Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns462Set.dsm" -na; -connectAttr "mgear_curveCns422.msg" "mgear_curveCns422Set.ub[0]"; -connectAttr "tweak570.og[0]" "mgear_curveCns422GroupParts.ig"; -connectAttr "mgear_curveCns422GroupId.id" "mgear_curveCns422GroupParts.gi"; -connectAttr "groupId8709.msg" "tweakSet570.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet570.dsm" +connectAttr "mgear_curveCns462.msg" "mgear_curveCns462Set.ub[0]"; +connectAttr "tweak610.og[0]" "mgear_curveCns462GroupParts.ig"; +connectAttr "mgear_curveCns462GroupId.id" "mgear_curveCns462GroupParts.gi"; +connectAttr "groupId8789.msg" "tweakSet610.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet610.dsm" -na; -connectAttr "tweak570.msg" "tweakSet570.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1140.ig" - ; -connectAttr "groupId8709.id" "groupParts1140.gi"; -connectAttr "mgear_curveCns423GroupParts.og" "mgear_curveCns423.ip[0].ig"; -connectAttr "mgear_curveCns423GroupId.id" "mgear_curveCns423.ip[0].gi"; -connectAttr "mouth_C0_lipup.wm" "mgear_curveCns423.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns423.inputs[1]"; -connectAttr "groupParts1142.og" "tweak571.ip[0].ig"; -connectAttr "groupId8711.id" "tweak571.ip[0].gi"; -connectAttr "mgear_curveCns423GroupId.msg" "mgear_curveCns423Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns423Set.dsm" +connectAttr "tweak610.msg" "tweakSet610.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1220.ig" + ; +connectAttr "groupId8789.id" "groupParts1220.gi"; +connectAttr "mgear_curveCns463GroupParts.og" "mgear_curveCns463.ip[0].ig"; +connectAttr "mgear_curveCns463GroupId.id" "mgear_curveCns463.ip[0].gi"; +connectAttr "mouth_C0_lipup.wm" "mgear_curveCns463.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns463.inputs[1]"; +connectAttr "groupParts1222.og" "tweak611.ip[0].ig"; +connectAttr "groupId8791.id" "tweak611.ip[0].gi"; +connectAttr "mgear_curveCns463GroupId.msg" "mgear_curveCns463Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns463Set.dsm" -na; -connectAttr "mgear_curveCns423.msg" "mgear_curveCns423Set.ub[0]"; -connectAttr "tweak571.og[0]" "mgear_curveCns423GroupParts.ig"; -connectAttr "mgear_curveCns423GroupId.id" "mgear_curveCns423GroupParts.gi"; -connectAttr "groupId8711.msg" "tweakSet571.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet571.dsm" +connectAttr "mgear_curveCns463.msg" "mgear_curveCns463Set.ub[0]"; +connectAttr "tweak611.og[0]" "mgear_curveCns463GroupParts.ig"; +connectAttr "mgear_curveCns463GroupId.id" "mgear_curveCns463GroupParts.gi"; +connectAttr "groupId8791.msg" "tweakSet611.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet611.dsm" -na; -connectAttr "tweak571.msg" "tweakSet571.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1142.ig" - ; -connectAttr "groupId8711.id" "groupParts1142.gi"; -connectAttr "mgear_curveCns424GroupParts.og" "mgear_curveCns424.ip[0].ig"; -connectAttr "mgear_curveCns424GroupId.id" "mgear_curveCns424.ip[0].gi"; -connectAttr "mouth_C0_liplow.wm" "mgear_curveCns424.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns424.inputs[1]"; -connectAttr "groupParts1144.og" "tweak572.ip[0].ig"; -connectAttr "groupId8713.id" "tweak572.ip[0].gi"; -connectAttr "mgear_curveCns424GroupId.msg" "mgear_curveCns424Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns424Set.dsm" +connectAttr "tweak611.msg" "tweakSet611.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1222.ig" + ; +connectAttr "groupId8791.id" "groupParts1222.gi"; +connectAttr "mgear_curveCns464GroupParts.og" "mgear_curveCns464.ip[0].ig"; +connectAttr "mgear_curveCns464GroupId.id" "mgear_curveCns464.ip[0].gi"; +connectAttr "mouth_C0_liplow.wm" "mgear_curveCns464.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns464.inputs[1]"; +connectAttr "groupParts1224.og" "tweak612.ip[0].ig"; +connectAttr "groupId8793.id" "tweak612.ip[0].gi"; +connectAttr "mgear_curveCns464GroupId.msg" "mgear_curveCns464Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns464Set.dsm" -na; -connectAttr "mgear_curveCns424.msg" "mgear_curveCns424Set.ub[0]"; -connectAttr "tweak572.og[0]" "mgear_curveCns424GroupParts.ig"; -connectAttr "mgear_curveCns424GroupId.id" "mgear_curveCns424GroupParts.gi"; -connectAttr "groupId8713.msg" "tweakSet572.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet572.dsm" +connectAttr "mgear_curveCns464.msg" "mgear_curveCns464Set.ub[0]"; +connectAttr "tweak612.og[0]" "mgear_curveCns464GroupParts.ig"; +connectAttr "mgear_curveCns464GroupId.id" "mgear_curveCns464GroupParts.gi"; +connectAttr "groupId8793.msg" "tweakSet612.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet612.dsm" -na; -connectAttr "tweak572.msg" "tweakSet572.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1144.ig" - ; -connectAttr "groupId8713.id" "groupParts1144.gi"; -connectAttr "mgear_curveCns425GroupParts.og" "mgear_curveCns425.ip[0].ig"; -connectAttr "mgear_curveCns425GroupId.id" "mgear_curveCns425.ip[0].gi"; -connectAttr "mouth_C0_root.wm" "mgear_curveCns425.inputs[0]"; -connectAttr "mouth_C0_jaw.wm" "mgear_curveCns425.inputs[1]"; -connectAttr "groupParts1146.og" "tweak573.ip[0].ig"; -connectAttr "groupId8715.id" "tweak573.ip[0].gi"; -connectAttr "mgear_curveCns425GroupId.msg" "mgear_curveCns425Set.gn" -na; -connectAttr "mouth_C0_crv9Shape.iog.og[0]" "mgear_curveCns425Set.dsm" -na; -connectAttr "mgear_curveCns425.msg" "mgear_curveCns425Set.ub[0]"; -connectAttr "tweak573.og[0]" "mgear_curveCns425GroupParts.ig"; -connectAttr "mgear_curveCns425GroupId.id" "mgear_curveCns425GroupParts.gi"; -connectAttr "groupId8715.msg" "tweakSet573.gn" -na; -connectAttr "mouth_C0_crv9Shape.iog.og[1]" "tweakSet573.dsm" -na; -connectAttr "tweak573.msg" "tweakSet573.ub[0]"; -connectAttr "mouth_C0_crv9ShapeOrig.ws" "groupParts1146.ig"; -connectAttr "groupId8715.id" "groupParts1146.gi"; -connectAttr "tongue_C0_blade.bladeRollOffset" "unitConversion140.i"; -connectAttr "mgear_curveCns426GroupParts.og" "mgear_curveCns426.ip[0].ig"; -connectAttr "mgear_curveCns426GroupId.id" "mgear_curveCns426.ip[0].gi"; -connectAttr "tongue_C0_root.wm" "mgear_curveCns426.inputs[0]"; -connectAttr "tongue_C0_0_loc.wm" "mgear_curveCns426.inputs[1]"; -connectAttr "tongue_C0_1_loc.wm" "mgear_curveCns426.inputs[2]"; -connectAttr "tongue_C0_2_loc.wm" "mgear_curveCns426.inputs[3]"; -connectAttr "tongue_C0_3_loc.wm" "mgear_curveCns426.inputs[4]"; -connectAttr "groupParts1148.og" "tweak574.ip[0].ig"; -connectAttr "groupId8717.id" "tweak574.ip[0].gi"; -connectAttr "mgear_curveCns426GroupId.msg" "mgear_curveCns426Set.gn" -na; -connectAttr "tongue_C0_crvShape.iog.og[0]" "mgear_curveCns426Set.dsm" -na; -connectAttr "mgear_curveCns426.msg" "mgear_curveCns426Set.ub[0]"; -connectAttr "tweak574.og[0]" "mgear_curveCns426GroupParts.ig"; -connectAttr "mgear_curveCns426GroupId.id" "mgear_curveCns426GroupParts.gi"; -connectAttr "groupId8717.msg" "tweakSet574.gn" -na; -connectAttr "tongue_C0_crvShape.iog.og[1]" "tweakSet574.dsm" -na; -connectAttr "tweak574.msg" "tweakSet574.ub[0]"; -connectAttr "tongue_C0_crvShapeOrig.ws" "groupParts1148.ig"; -connectAttr "groupId8717.id" "groupParts1148.gi"; -connectAttr "mgear_curveCns427GroupParts.og" "mgear_curveCns427.ip[0].ig"; -connectAttr "mgear_curveCns427GroupId.id" "mgear_curveCns427.ip[0].gi"; -connectAttr "eye_R0_root.wm" "mgear_curveCns427.inputs[0]"; -connectAttr "eye_R0_look.wm" "mgear_curveCns427.inputs[1]"; -connectAttr "groupParts1150.og" "tweak575.ip[0].ig"; -connectAttr "groupId8719.id" "tweak575.ip[0].gi"; -connectAttr "mgear_curveCns427GroupId.msg" "mgear_curveCns427Set.gn" -na; -connectAttr "eye_R0_crvShape.iog.og[0]" "mgear_curveCns427Set.dsm" -na; -connectAttr "mgear_curveCns427.msg" "mgear_curveCns427Set.ub[0]"; -connectAttr "tweak575.og[0]" "mgear_curveCns427GroupParts.ig"; -connectAttr "mgear_curveCns427GroupId.id" "mgear_curveCns427GroupParts.gi"; -connectAttr "groupId8719.msg" "tweakSet575.gn" -na; -connectAttr "eye_R0_crvShape.iog.og[1]" "tweakSet575.dsm" -na; -connectAttr "tweak575.msg" "tweakSet575.ub[0]"; -connectAttr "eye_R0_crvShapeOrig.ws" "groupParts1150.ig"; -connectAttr "groupId8719.id" "groupParts1150.gi"; -connectAttr "mgear_curveCns428GroupParts.og" "mgear_curveCns428.ip[0].ig"; -connectAttr "mgear_curveCns428GroupId.id" "mgear_curveCns428.ip[0].gi"; -connectAttr "eye_L0_root.wm" "mgear_curveCns428.inputs[0]"; -connectAttr "eye_L0_look.wm" "mgear_curveCns428.inputs[1]"; -connectAttr "groupParts1152.og" "tweak576.ip[0].ig"; -connectAttr "groupId8721.id" "tweak576.ip[0].gi"; -connectAttr "mgear_curveCns428GroupId.msg" "mgear_curveCns428Set.gn" -na; -connectAttr "eye_L0_crvShape.iog.og[0]" "mgear_curveCns428Set.dsm" -na; -connectAttr "mgear_curveCns428.msg" "mgear_curveCns428Set.ub[0]"; -connectAttr "tweak576.og[0]" "mgear_curveCns428GroupParts.ig"; -connectAttr "mgear_curveCns428GroupId.id" "mgear_curveCns428GroupParts.gi"; -connectAttr "groupId8721.msg" "tweakSet576.gn" -na; -connectAttr "eye_L0_crvShape.iog.og[1]" "tweakSet576.dsm" -na; -connectAttr "tweak576.msg" "tweakSet576.ub[0]"; -connectAttr "eye_L0_crvShapeOrig.ws" "groupParts1152.ig"; -connectAttr "groupId8721.id" "groupParts1152.gi"; -connectAttr "shoulder_R0_blade.bladeRollOffset" "unitConversion141.i"; -connectAttr "mgear_curveCns429GroupParts.og" "mgear_curveCns429.ip[0].ig"; -connectAttr "mgear_curveCns429GroupId.id" "mgear_curveCns429.ip[0].gi"; -connectAttr "shoulder_R0_root.wm" "mgear_curveCns429.inputs[0]"; -connectAttr "shoulder_R0_tip.wm" "mgear_curveCns429.inputs[1]"; -connectAttr "groupParts1154.og" "tweak577.ip[0].ig"; -connectAttr "groupId8723.id" "tweak577.ip[0].gi"; -connectAttr "mgear_curveCns429GroupId.msg" "mgear_curveCns429Set.gn" -na; -connectAttr "shoulder_R0_crvShape.iog.og[0]" "mgear_curveCns429Set.dsm" -na; -connectAttr "mgear_curveCns429.msg" "mgear_curveCns429Set.ub[0]"; -connectAttr "tweak577.og[0]" "mgear_curveCns429GroupParts.ig"; -connectAttr "mgear_curveCns429GroupId.id" "mgear_curveCns429GroupParts.gi"; -connectAttr "groupId8723.msg" "tweakSet577.gn" -na; -connectAttr "shoulder_R0_crvShape.iog.og[1]" "tweakSet577.dsm" -na; -connectAttr "tweak577.msg" "tweakSet577.ub[0]"; -connectAttr "shoulder_R0_crvShapeOrig.ws" "groupParts1154.ig"; -connectAttr "groupId8723.id" "groupParts1154.gi"; -connectAttr "mgear_curveCns430GroupParts.og" "mgear_curveCns430.ip[0].ig"; -connectAttr "mgear_curveCns430GroupId.id" "mgear_curveCns430.ip[0].gi"; -connectAttr "arm_R0_root.wm" "mgear_curveCns430.inputs[0]"; -connectAttr "arm_R0_elbow.wm" "mgear_curveCns430.inputs[1]"; -connectAttr "arm_R0_wrist.wm" "mgear_curveCns430.inputs[2]"; -connectAttr "arm_R0_eff.wm" "mgear_curveCns430.inputs[3]"; -connectAttr "groupParts1156.og" "tweak578.ip[0].ig"; -connectAttr "groupId8725.id" "tweak578.ip[0].gi"; -connectAttr "mgear_curveCns430GroupId.msg" "mgear_curveCns430Set.gn" -na; -connectAttr "arm_R0_crvShape.iog.og[0]" "mgear_curveCns430Set.dsm" -na; -connectAttr "mgear_curveCns430.msg" "mgear_curveCns430Set.ub[0]"; -connectAttr "tweak578.og[0]" "mgear_curveCns430GroupParts.ig"; -connectAttr "mgear_curveCns430GroupId.id" "mgear_curveCns430GroupParts.gi"; -connectAttr "groupId8725.msg" "tweakSet578.gn" -na; -connectAttr "arm_R0_crvShape.iog.og[1]" "tweakSet578.dsm" -na; -connectAttr "tweak578.msg" "tweakSet578.ub[0]"; -connectAttr "arm_R0_crvShapeOrig.ws" "groupParts1156.ig"; -connectAttr "groupId8725.id" "groupParts1156.gi"; -connectAttr "meta_R0_blade.bladeRollOffset" "unitConversion142.i"; -connectAttr "mgear_curveCns431GroupParts.og" "mgear_curveCns431.ip[0].ig"; -connectAttr "mgear_curveCns431GroupId.id" "mgear_curveCns431.ip[0].gi"; -connectAttr "meta_R0_root.wm" "mgear_curveCns431.inputs[0]"; -connectAttr "meta_R0_0_loc.wm" "mgear_curveCns431.inputs[1]"; -connectAttr "meta_R0_1_loc.wm" "mgear_curveCns431.inputs[2]"; -connectAttr "meta_R0_2_loc.wm" "mgear_curveCns431.inputs[3]"; -connectAttr "groupParts1158.og" "tweak579.ip[0].ig"; -connectAttr "groupId8727.id" "tweak579.ip[0].gi"; -connectAttr "mgear_curveCns431GroupId.msg" "mgear_curveCns431Set.gn" -na; -connectAttr "meta_R0_crvShape.iog.og[0]" "mgear_curveCns431Set.dsm" -na; -connectAttr "mgear_curveCns431.msg" "mgear_curveCns431Set.ub[0]"; -connectAttr "tweak579.og[0]" "mgear_curveCns431GroupParts.ig"; -connectAttr "mgear_curveCns431GroupId.id" "mgear_curveCns431GroupParts.gi"; -connectAttr "groupId8727.msg" "tweakSet579.gn" -na; -connectAttr "meta_R0_crvShape.iog.og[1]" "tweakSet579.dsm" -na; -connectAttr "tweak579.msg" "tweakSet579.ub[0]"; -connectAttr "meta_R0_crvShapeOrig.ws" "groupParts1158.ig"; -connectAttr "groupId8727.id" "groupParts1158.gi"; -connectAttr "finger_R3_blade.bladeRollOffset" "unitConversion143.i"; -connectAttr "mgear_curveCns432GroupParts.og" "mgear_curveCns432.ip[0].ig"; -connectAttr "mgear_curveCns432GroupId.id" "mgear_curveCns432.ip[0].gi"; -connectAttr "finger_R3_root.wm" "mgear_curveCns432.inputs[0]"; -connectAttr "finger_R3_0_loc.wm" "mgear_curveCns432.inputs[1]"; -connectAttr "finger_R3_1_loc.wm" "mgear_curveCns432.inputs[2]"; -connectAttr "finger_R3_2_loc.wm" "mgear_curveCns432.inputs[3]"; -connectAttr "groupParts1160.og" "tweak580.ip[0].ig"; -connectAttr "groupId8729.id" "tweak580.ip[0].gi"; -connectAttr "mgear_curveCns432GroupId.msg" "mgear_curveCns432Set.gn" -na; -connectAttr "finger_R3_crvShape.iog.og[0]" "mgear_curveCns432Set.dsm" -na; -connectAttr "mgear_curveCns432.msg" "mgear_curveCns432Set.ub[0]"; -connectAttr "tweak580.og[0]" "mgear_curveCns432GroupParts.ig"; -connectAttr "mgear_curveCns432GroupId.id" "mgear_curveCns432GroupParts.gi"; -connectAttr "groupId8729.msg" "tweakSet580.gn" -na; -connectAttr "finger_R3_crvShape.iog.og[1]" "tweakSet580.dsm" -na; -connectAttr "tweak580.msg" "tweakSet580.ub[0]"; -connectAttr "finger_R3_crvShapeOrig.ws" "groupParts1160.ig"; -connectAttr "groupId8729.id" "groupParts1160.gi"; -connectAttr "finger_R2_blade.bladeRollOffset" "unitConversion144.i"; -connectAttr "mgear_curveCns433GroupParts.og" "mgear_curveCns433.ip[0].ig"; -connectAttr "mgear_curveCns433GroupId.id" "mgear_curveCns433.ip[0].gi"; -connectAttr "finger_R2_root.wm" "mgear_curveCns433.inputs[0]"; -connectAttr "finger_R2_0_loc.wm" "mgear_curveCns433.inputs[1]"; -connectAttr "finger_R2_1_loc.wm" "mgear_curveCns433.inputs[2]"; -connectAttr "finger_R2_2_loc.wm" "mgear_curveCns433.inputs[3]"; -connectAttr "groupParts1162.og" "tweak581.ip[0].ig"; -connectAttr "groupId8731.id" "tweak581.ip[0].gi"; -connectAttr "mgear_curveCns433GroupId.msg" "mgear_curveCns433Set.gn" -na; -connectAttr "finger_R2_crvShape.iog.og[0]" "mgear_curveCns433Set.dsm" -na; -connectAttr "mgear_curveCns433.msg" "mgear_curveCns433Set.ub[0]"; -connectAttr "tweak581.og[0]" "mgear_curveCns433GroupParts.ig"; -connectAttr "mgear_curveCns433GroupId.id" "mgear_curveCns433GroupParts.gi"; -connectAttr "groupId8731.msg" "tweakSet581.gn" -na; -connectAttr "finger_R2_crvShape.iog.og[1]" "tweakSet581.dsm" -na; -connectAttr "tweak581.msg" "tweakSet581.ub[0]"; -connectAttr "finger_R2_crvShapeOrig.ws" "groupParts1162.ig"; -connectAttr "groupId8731.id" "groupParts1162.gi"; -connectAttr "finger_R1_blade.bladeRollOffset" "unitConversion145.i"; -connectAttr "mgear_curveCns434GroupParts.og" "mgear_curveCns434.ip[0].ig"; -connectAttr "mgear_curveCns434GroupId.id" "mgear_curveCns434.ip[0].gi"; -connectAttr "finger_R1_root.wm" "mgear_curveCns434.inputs[0]"; -connectAttr "finger_R1_0_loc.wm" "mgear_curveCns434.inputs[1]"; -connectAttr "finger_R1_1_loc.wm" "mgear_curveCns434.inputs[2]"; -connectAttr "finger_R1_2_loc.wm" "mgear_curveCns434.inputs[3]"; -connectAttr "groupParts1164.og" "tweak582.ip[0].ig"; -connectAttr "groupId8733.id" "tweak582.ip[0].gi"; -connectAttr "mgear_curveCns434GroupId.msg" "mgear_curveCns434Set.gn" -na; -connectAttr "finger_R1_crvShape.iog.og[0]" "mgear_curveCns434Set.dsm" -na; -connectAttr "mgear_curveCns434.msg" "mgear_curveCns434Set.ub[0]"; -connectAttr "tweak582.og[0]" "mgear_curveCns434GroupParts.ig"; -connectAttr "mgear_curveCns434GroupId.id" "mgear_curveCns434GroupParts.gi"; -connectAttr "groupId8733.msg" "tweakSet582.gn" -na; -connectAttr "finger_R1_crvShape.iog.og[1]" "tweakSet582.dsm" -na; -connectAttr "tweak582.msg" "tweakSet582.ub[0]"; -connectAttr "finger_R1_crvShapeOrig.ws" "groupParts1164.ig"; -connectAttr "groupId8733.id" "groupParts1164.gi"; -connectAttr "finger_R0_blade.bladeRollOffset" "unitConversion146.i"; -connectAttr "mgear_curveCns435GroupParts.og" "mgear_curveCns435.ip[0].ig"; -connectAttr "mgear_curveCns435GroupId.id" "mgear_curveCns435.ip[0].gi"; -connectAttr "finger_R0_root.wm" "mgear_curveCns435.inputs[0]"; -connectAttr "finger_R0_0_loc.wm" "mgear_curveCns435.inputs[1]"; -connectAttr "finger_R0_1_loc.wm" "mgear_curveCns435.inputs[2]"; -connectAttr "finger_R0_2_loc.wm" "mgear_curveCns435.inputs[3]"; -connectAttr "groupParts1166.og" "tweak583.ip[0].ig"; -connectAttr "groupId8735.id" "tweak583.ip[0].gi"; -connectAttr "mgear_curveCns435GroupId.msg" "mgear_curveCns435Set.gn" -na; -connectAttr "finger_R0_crvShape.iog.og[0]" "mgear_curveCns435Set.dsm" -na; -connectAttr "mgear_curveCns435.msg" "mgear_curveCns435Set.ub[0]"; -connectAttr "tweak583.og[0]" "mgear_curveCns435GroupParts.ig"; -connectAttr "mgear_curveCns435GroupId.id" "mgear_curveCns435GroupParts.gi"; -connectAttr "groupId8735.msg" "tweakSet583.gn" -na; -connectAttr "finger_R0_crvShape.iog.og[1]" "tweakSet583.dsm" -na; -connectAttr "tweak583.msg" "tweakSet583.ub[0]"; -connectAttr "finger_R0_crvShapeOrig.ws" "groupParts1166.ig"; -connectAttr "groupId8735.id" "groupParts1166.gi"; -connectAttr "thumb_R0_blade.bladeRollOffset" "unitConversion147.i"; -connectAttr "mgear_curveCns436GroupParts.og" "mgear_curveCns436.ip[0].ig"; -connectAttr "mgear_curveCns436GroupId.id" "mgear_curveCns436.ip[0].gi"; -connectAttr "thumb_R0_root.wm" "mgear_curveCns436.inputs[0]"; -connectAttr "thumb_R0_0_loc.wm" "mgear_curveCns436.inputs[1]"; -connectAttr "thumb_R0_1_loc.wm" "mgear_curveCns436.inputs[2]"; -connectAttr "thumb_R0_2_loc.wm" "mgear_curveCns436.inputs[3]"; -connectAttr "groupParts1168.og" "tweak584.ip[0].ig"; -connectAttr "groupId8737.id" "tweak584.ip[0].gi"; -connectAttr "mgear_curveCns436GroupId.msg" "mgear_curveCns436Set.gn" -na; -connectAttr "thumb_R0_crvShape.iog.og[0]" "mgear_curveCns436Set.dsm" -na; -connectAttr "mgear_curveCns436.msg" "mgear_curveCns436Set.ub[0]"; -connectAttr "tweak584.og[0]" "mgear_curveCns436GroupParts.ig"; -connectAttr "mgear_curveCns436GroupId.id" "mgear_curveCns436GroupParts.gi"; -connectAttr "groupId8737.msg" "tweakSet584.gn" -na; -connectAttr "thumb_R0_crvShape.iog.og[1]" "tweakSet584.dsm" -na; -connectAttr "tweak584.msg" "tweakSet584.ub[0]"; -connectAttr "thumb_R0_crvShapeOrig.ws" "groupParts1168.ig"; -connectAttr "groupId8737.id" "groupParts1168.gi"; -connectAttr "mgear_curveCns437GroupParts.og" "mgear_curveCns437.ip[0].ig"; -connectAttr "mgear_curveCns437GroupId.id" "mgear_curveCns437.ip[0].gi"; -connectAttr "leg_L0_root.wm" "mgear_curveCns437.inputs[0]"; -connectAttr "leg_L0_knee.wm" "mgear_curveCns437.inputs[1]"; -connectAttr "leg_L0_ankle.wm" "mgear_curveCns437.inputs[2]"; -connectAttr "leg_L0_eff.wm" "mgear_curveCns437.inputs[3]"; -connectAttr "groupParts1170.og" "tweak585.ip[0].ig"; -connectAttr "groupId8739.id" "tweak585.ip[0].gi"; -connectAttr "mgear_curveCns437GroupId.msg" "mgear_curveCns437Set.gn" -na; -connectAttr "leg_L0_crvShape.iog.og[0]" "mgear_curveCns437Set.dsm" -na; -connectAttr "mgear_curveCns437.msg" "mgear_curveCns437Set.ub[0]"; -connectAttr "tweak585.og[0]" "mgear_curveCns437GroupParts.ig"; -connectAttr "mgear_curveCns437GroupId.id" "mgear_curveCns437GroupParts.gi"; -connectAttr "groupId8739.msg" "tweakSet585.gn" -na; -connectAttr "leg_L0_crvShape.iog.og[1]" "tweakSet585.dsm" -na; -connectAttr "tweak585.msg" "tweakSet585.ub[0]"; -connectAttr "leg_L0_crvShapeOrig.ws" "groupParts1170.ig"; -connectAttr "groupId8739.id" "groupParts1170.gi"; -connectAttr "mgear_curveCns438GroupParts.og" "mgear_curveCns438.ip[0].ig"; -connectAttr "mgear_curveCns438GroupId.id" "mgear_curveCns438.ip[0].gi"; -connectAttr "foot_L0_root.wm" "mgear_curveCns438.inputs[0]"; -connectAttr "foot_L0_0_loc.wm" "mgear_curveCns438.inputs[1]"; -connectAttr "foot_L0_1_loc.wm" "mgear_curveCns438.inputs[2]"; -connectAttr "foot_L0_2_loc.wm" "mgear_curveCns438.inputs[3]"; -connectAttr "groupParts1172.og" "tweak586.ip[0].ig"; -connectAttr "groupId8741.id" "tweak586.ip[0].gi"; -connectAttr "mgear_curveCns438GroupId.msg" "mgear_curveCns438Set.gn" -na; -connectAttr "foot_L0_crvShape.iog.og[0]" "mgear_curveCns438Set.dsm" -na; -connectAttr "mgear_curveCns438.msg" "mgear_curveCns438Set.ub[0]"; -connectAttr "tweak586.og[0]" "mgear_curveCns438GroupParts.ig"; -connectAttr "mgear_curveCns438GroupId.id" "mgear_curveCns438GroupParts.gi"; -connectAttr "groupId8741.msg" "tweakSet586.gn" -na; -connectAttr "foot_L0_crvShape.iog.og[1]" "tweakSet586.dsm" -na; -connectAttr "tweak586.msg" "tweakSet586.ub[0]"; -connectAttr "foot_L0_crvShapeOrig.ws" "groupParts1172.ig"; -connectAttr "groupId8741.id" "groupParts1172.gi"; -connectAttr "mgear_curveCns439GroupParts.og" "mgear_curveCns439.ip[0].ig"; -connectAttr "mgear_curveCns439GroupId.id" "mgear_curveCns439.ip[0].gi"; -connectAttr "foot_L0_root.wm" "mgear_curveCns439.inputs[0]"; -connectAttr "foot_L0_heel.wm" "mgear_curveCns439.inputs[1]"; -connectAttr "foot_L0_outpivot.wm" "mgear_curveCns439.inputs[2]"; -connectAttr "foot_L0_heel.wm" "mgear_curveCns439.inputs[3]"; -connectAttr "foot_L0_inpivot.wm" "mgear_curveCns439.inputs[4]"; -connectAttr "groupParts1174.og" "tweak587.ip[0].ig"; -connectAttr "groupId8743.id" "tweak587.ip[0].gi"; -connectAttr "mgear_curveCns439GroupId.msg" "mgear_curveCns439Set.gn" -na; -connectAttr "foot_L0_Shape1.iog.og[0]" "mgear_curveCns439Set.dsm" -na; -connectAttr "mgear_curveCns439.msg" "mgear_curveCns439Set.ub[0]"; -connectAttr "tweak587.og[0]" "mgear_curveCns439GroupParts.ig"; -connectAttr "mgear_curveCns439GroupId.id" "mgear_curveCns439GroupParts.gi"; -connectAttr "groupId8743.msg" "tweakSet587.gn" -na; -connectAttr "foot_L0_Shape1.iog.og[1]" "tweakSet587.dsm" -na; -connectAttr "tweak587.msg" "tweakSet587.ub[0]"; -connectAttr "foot_L0_Shape1Orig.ws" "groupParts1174.ig"; -connectAttr "groupId8743.id" "groupParts1174.gi"; -connectAttr "mgear_curveCns440GroupParts.og" "mgear_curveCns440.ip[0].ig"; -connectAttr "mgear_curveCns440GroupId.id" "mgear_curveCns440.ip[0].gi"; -connectAttr "leg_R0_root.wm" "mgear_curveCns440.inputs[0]"; -connectAttr "leg_R0_knee.wm" "mgear_curveCns440.inputs[1]"; -connectAttr "leg_R0_ankle.wm" "mgear_curveCns440.inputs[2]"; -connectAttr "leg_R0_eff.wm" "mgear_curveCns440.inputs[3]"; -connectAttr "groupParts1176.og" "tweak588.ip[0].ig"; -connectAttr "groupId8745.id" "tweak588.ip[0].gi"; -connectAttr "mgear_curveCns440GroupId.msg" "mgear_curveCns440Set.gn" -na; -connectAttr "leg_R0_crvShape.iog.og[0]" "mgear_curveCns440Set.dsm" -na; -connectAttr "mgear_curveCns440.msg" "mgear_curveCns440Set.ub[0]"; -connectAttr "tweak588.og[0]" "mgear_curveCns440GroupParts.ig"; -connectAttr "mgear_curveCns440GroupId.id" "mgear_curveCns440GroupParts.gi"; -connectAttr "groupId8745.msg" "tweakSet588.gn" -na; -connectAttr "leg_R0_crvShape.iog.og[1]" "tweakSet588.dsm" -na; -connectAttr "tweak588.msg" "tweakSet588.ub[0]"; -connectAttr "leg_R0_crvShapeOrig.ws" "groupParts1176.ig"; -connectAttr "groupId8745.id" "groupParts1176.gi"; -connectAttr "mgear_curveCns441GroupParts.og" "mgear_curveCns441.ip[0].ig"; -connectAttr "mgear_curveCns441GroupId.id" "mgear_curveCns441.ip[0].gi"; -connectAttr "foot_R0_root.wm" "mgear_curveCns441.inputs[0]"; -connectAttr "foot_R0_0_loc.wm" "mgear_curveCns441.inputs[1]"; -connectAttr "foot_R0_1_loc.wm" "mgear_curveCns441.inputs[2]"; -connectAttr "foot_R0_2_loc.wm" "mgear_curveCns441.inputs[3]"; -connectAttr "groupParts1178.og" "tweak589.ip[0].ig"; -connectAttr "groupId8747.id" "tweak589.ip[0].gi"; -connectAttr "mgear_curveCns441GroupId.msg" "mgear_curveCns441Set.gn" -na; -connectAttr "foot_R0_crvShape.iog.og[0]" "mgear_curveCns441Set.dsm" -na; -connectAttr "mgear_curveCns441.msg" "mgear_curveCns441Set.ub[0]"; -connectAttr "tweak589.og[0]" "mgear_curveCns441GroupParts.ig"; -connectAttr "mgear_curveCns441GroupId.id" "mgear_curveCns441GroupParts.gi"; -connectAttr "groupId8747.msg" "tweakSet589.gn" -na; -connectAttr "foot_R0_crvShape.iog.og[1]" "tweakSet589.dsm" -na; -connectAttr "tweak589.msg" "tweakSet589.ub[0]"; -connectAttr "foot_R0_crvShapeOrig.ws" "groupParts1178.ig"; -connectAttr "groupId8747.id" "groupParts1178.gi"; -connectAttr "mgear_curveCns442GroupParts.og" "mgear_curveCns442.ip[0].ig"; -connectAttr "mgear_curveCns442GroupId.id" "mgear_curveCns442.ip[0].gi"; -connectAttr "foot_R0_root.wm" "mgear_curveCns442.inputs[0]"; -connectAttr "foot_R0_heel.wm" "mgear_curveCns442.inputs[1]"; -connectAttr "foot_R0_outpivot.wm" "mgear_curveCns442.inputs[2]"; -connectAttr "foot_R0_heel.wm" "mgear_curveCns442.inputs[3]"; -connectAttr "foot_R0_inpivot.wm" "mgear_curveCns442.inputs[4]"; -connectAttr "groupParts1180.og" "tweak590.ip[0].ig"; -connectAttr "groupId8749.id" "tweak590.ip[0].gi"; -connectAttr "mgear_curveCns442GroupId.msg" "mgear_curveCns442Set.gn" -na; -connectAttr "foot_R0_Shape1.iog.og[0]" "mgear_curveCns442Set.dsm" -na; -connectAttr "mgear_curveCns442.msg" "mgear_curveCns442Set.ub[0]"; -connectAttr "tweak590.og[0]" "mgear_curveCns442GroupParts.ig"; -connectAttr "mgear_curveCns442GroupId.id" "mgear_curveCns442GroupParts.gi"; -connectAttr "groupId8749.msg" "tweakSet590.gn" -na; -connectAttr "foot_R0_Shape1.iog.og[1]" "tweakSet590.dsm" -na; -connectAttr "tweak590.msg" "tweakSet590.ub[0]"; -connectAttr "foot_R0_Shape1Orig.ws" "groupParts1180.ig"; -connectAttr "groupId8749.id" "groupParts1180.gi"; +connectAttr "tweak612.msg" "tweakSet612.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts1224.ig" + ; +connectAttr "groupId8793.id" "groupParts1224.gi"; +connectAttr "mgear_curveCns465GroupParts.og" "mgear_curveCns465.ip[0].ig"; +connectAttr "mgear_curveCns465GroupId.id" "mgear_curveCns465.ip[0].gi"; +connectAttr "mouth_C0_root.wm" "mgear_curveCns465.inputs[0]"; +connectAttr "mouth_C0_jaw.wm" "mgear_curveCns465.inputs[1]"; +connectAttr "groupParts1226.og" "tweak613.ip[0].ig"; +connectAttr "groupId8795.id" "tweak613.ip[0].gi"; +connectAttr "mgear_curveCns465GroupId.msg" "mgear_curveCns465Set.gn" -na; +connectAttr "mouth_C0_crv10Shape.iog.og[0]" "mgear_curveCns465Set.dsm" -na; +connectAttr "mgear_curveCns465.msg" "mgear_curveCns465Set.ub[0]"; +connectAttr "tweak613.og[0]" "mgear_curveCns465GroupParts.ig"; +connectAttr "mgear_curveCns465GroupId.id" "mgear_curveCns465GroupParts.gi"; +connectAttr "groupId8795.msg" "tweakSet613.gn" -na; +connectAttr "mouth_C0_crv10Shape.iog.og[1]" "tweakSet613.dsm" -na; +connectAttr "tweak613.msg" "tweakSet613.ub[0]"; +connectAttr "mouth_C0_crv10ShapeOrig.ws" "groupParts1226.ig"; +connectAttr "groupId8795.id" "groupParts1226.gi"; +connectAttr "tongue_C0_blade.bladeRollOffset" "unitConversion157.i"; +connectAttr "mgear_curveCns466GroupParts.og" "mgear_curveCns466.ip[0].ig"; +connectAttr "mgear_curveCns466GroupId.id" "mgear_curveCns466.ip[0].gi"; +connectAttr "tongue_C0_root.wm" "mgear_curveCns466.inputs[0]"; +connectAttr "tongue_C0_0_loc.wm" "mgear_curveCns466.inputs[1]"; +connectAttr "tongue_C0_1_loc.wm" "mgear_curveCns466.inputs[2]"; +connectAttr "tongue_C0_2_loc.wm" "mgear_curveCns466.inputs[3]"; +connectAttr "tongue_C0_3_loc.wm" "mgear_curveCns466.inputs[4]"; +connectAttr "groupParts1228.og" "tweak614.ip[0].ig"; +connectAttr "groupId8797.id" "tweak614.ip[0].gi"; +connectAttr "mgear_curveCns466GroupId.msg" "mgear_curveCns466Set.gn" -na; +connectAttr "tongue_C0_crvShape.iog.og[0]" "mgear_curveCns466Set.dsm" -na; +connectAttr "mgear_curveCns466.msg" "mgear_curveCns466Set.ub[0]"; +connectAttr "tweak614.og[0]" "mgear_curveCns466GroupParts.ig"; +connectAttr "mgear_curveCns466GroupId.id" "mgear_curveCns466GroupParts.gi"; +connectAttr "groupId8797.msg" "tweakSet614.gn" -na; +connectAttr "tongue_C0_crvShape.iog.og[1]" "tweakSet614.dsm" -na; +connectAttr "tweak614.msg" "tweakSet614.ub[0]"; +connectAttr "tongue_C0_crvShapeOrig.ws" "groupParts1228.ig"; +connectAttr "groupId8797.id" "groupParts1228.gi"; +connectAttr "mgear_curveCns467GroupParts.og" "mgear_curveCns467.ip[0].ig"; +connectAttr "mgear_curveCns467GroupId.id" "mgear_curveCns467.ip[0].gi"; +connectAttr "eye_R0_root.wm" "mgear_curveCns467.inputs[0]"; +connectAttr "eye_R0_look.wm" "mgear_curveCns467.inputs[1]"; +connectAttr "groupParts1230.og" "tweak615.ip[0].ig"; +connectAttr "groupId8799.id" "tweak615.ip[0].gi"; +connectAttr "mgear_curveCns467GroupId.msg" "mgear_curveCns467Set.gn" -na; +connectAttr "eye_R0_crvShape.iog.og[0]" "mgear_curveCns467Set.dsm" -na; +connectAttr "mgear_curveCns467.msg" "mgear_curveCns467Set.ub[0]"; +connectAttr "tweak615.og[0]" "mgear_curveCns467GroupParts.ig"; +connectAttr "mgear_curveCns467GroupId.id" "mgear_curveCns467GroupParts.gi"; +connectAttr "groupId8799.msg" "tweakSet615.gn" -na; +connectAttr "eye_R0_crvShape.iog.og[1]" "tweakSet615.dsm" -na; +connectAttr "tweak615.msg" "tweakSet615.ub[0]"; +connectAttr "eye_R0_crvShapeOrig.ws" "groupParts1230.ig"; +connectAttr "groupId8799.id" "groupParts1230.gi"; +connectAttr "mgear_curveCns468GroupParts.og" "mgear_curveCns468.ip[0].ig"; +connectAttr "mgear_curveCns468GroupId.id" "mgear_curveCns468.ip[0].gi"; +connectAttr "eye_L0_root.wm" "mgear_curveCns468.inputs[0]"; +connectAttr "eye_L0_look.wm" "mgear_curveCns468.inputs[1]"; +connectAttr "groupParts1232.og" "tweak616.ip[0].ig"; +connectAttr "groupId8801.id" "tweak616.ip[0].gi"; +connectAttr "mgear_curveCns468GroupId.msg" "mgear_curveCns468Set.gn" -na; +connectAttr "eye_L0_crvShape.iog.og[0]" "mgear_curveCns468Set.dsm" -na; +connectAttr "mgear_curveCns468.msg" "mgear_curveCns468Set.ub[0]"; +connectAttr "tweak616.og[0]" "mgear_curveCns468GroupParts.ig"; +connectAttr "mgear_curveCns468GroupId.id" "mgear_curveCns468GroupParts.gi"; +connectAttr "groupId8801.msg" "tweakSet616.gn" -na; +connectAttr "eye_L0_crvShape.iog.og[1]" "tweakSet616.dsm" -na; +connectAttr "tweak616.msg" "tweakSet616.ub[0]"; +connectAttr "eye_L0_crvShapeOrig.ws" "groupParts1232.ig"; +connectAttr "groupId8801.id" "groupParts1232.gi"; +connectAttr "shoulder_R0_blade.bladeRollOffset" "unitConversion158.i"; +connectAttr "mgear_curveCns469GroupParts.og" "mgear_curveCns469.ip[0].ig"; +connectAttr "mgear_curveCns469GroupId.id" "mgear_curveCns469.ip[0].gi"; +connectAttr "shoulder_R0_root.wm" "mgear_curveCns469.inputs[0]"; +connectAttr "shoulder_R0_tip.wm" "mgear_curveCns469.inputs[1]"; +connectAttr "groupParts1234.og" "tweak617.ip[0].ig"; +connectAttr "groupId8803.id" "tweak617.ip[0].gi"; +connectAttr "mgear_curveCns469GroupId.msg" "mgear_curveCns469Set.gn" -na; +connectAttr "shoulder_R0_crvShape.iog.og[0]" "mgear_curveCns469Set.dsm" -na; +connectAttr "mgear_curveCns469.msg" "mgear_curveCns469Set.ub[0]"; +connectAttr "tweak617.og[0]" "mgear_curveCns469GroupParts.ig"; +connectAttr "mgear_curveCns469GroupId.id" "mgear_curveCns469GroupParts.gi"; +connectAttr "groupId8803.msg" "tweakSet617.gn" -na; +connectAttr "shoulder_R0_crvShape.iog.og[1]" "tweakSet617.dsm" -na; +connectAttr "tweak617.msg" "tweakSet617.ub[0]"; +connectAttr "shoulder_R0_crvShapeOrig.ws" "groupParts1234.ig"; +connectAttr "groupId8803.id" "groupParts1234.gi"; +connectAttr "mgear_curveCns470GroupParts.og" "mgear_curveCns470.ip[0].ig"; +connectAttr "mgear_curveCns470GroupId.id" "mgear_curveCns470.ip[0].gi"; +connectAttr "arm_R0_root.wm" "mgear_curveCns470.inputs[0]"; +connectAttr "arm_R0_elbow.wm" "mgear_curveCns470.inputs[1]"; +connectAttr "arm_R0_wrist.wm" "mgear_curveCns470.inputs[2]"; +connectAttr "arm_R0_eff.wm" "mgear_curveCns470.inputs[3]"; +connectAttr "groupParts1236.og" "tweak618.ip[0].ig"; +connectAttr "groupId8805.id" "tweak618.ip[0].gi"; +connectAttr "mgear_curveCns470GroupId.msg" "mgear_curveCns470Set.gn" -na; +connectAttr "arm_R0_crvShape.iog.og[0]" "mgear_curveCns470Set.dsm" -na; +connectAttr "mgear_curveCns470.msg" "mgear_curveCns470Set.ub[0]"; +connectAttr "tweak618.og[0]" "mgear_curveCns470GroupParts.ig"; +connectAttr "mgear_curveCns470GroupId.id" "mgear_curveCns470GroupParts.gi"; +connectAttr "groupId8805.msg" "tweakSet618.gn" -na; +connectAttr "arm_R0_crvShape.iog.og[1]" "tweakSet618.dsm" -na; +connectAttr "tweak618.msg" "tweakSet618.ub[0]"; +connectAttr "arm_R0_crvShapeOrig.ws" "groupParts1236.ig"; +connectAttr "groupId8805.id" "groupParts1236.gi"; +connectAttr "meta_R0_blade.bladeRollOffset" "unitConversion159.i"; +connectAttr "mgear_curveCns471GroupParts.og" "mgear_curveCns471.ip[0].ig"; +connectAttr "mgear_curveCns471GroupId.id" "mgear_curveCns471.ip[0].gi"; +connectAttr "meta_R0_root.wm" "mgear_curveCns471.inputs[0]"; +connectAttr "meta_R0_0_loc.wm" "mgear_curveCns471.inputs[1]"; +connectAttr "meta_R0_1_loc.wm" "mgear_curveCns471.inputs[2]"; +connectAttr "meta_R0_2_loc.wm" "mgear_curveCns471.inputs[3]"; +connectAttr "groupParts1238.og" "tweak619.ip[0].ig"; +connectAttr "groupId8807.id" "tweak619.ip[0].gi"; +connectAttr "mgear_curveCns471GroupId.msg" "mgear_curveCns471Set.gn" -na; +connectAttr "meta_R0_crvShape.iog.og[0]" "mgear_curveCns471Set.dsm" -na; +connectAttr "mgear_curveCns471.msg" "mgear_curveCns471Set.ub[0]"; +connectAttr "tweak619.og[0]" "mgear_curveCns471GroupParts.ig"; +connectAttr "mgear_curveCns471GroupId.id" "mgear_curveCns471GroupParts.gi"; +connectAttr "groupId8807.msg" "tweakSet619.gn" -na; +connectAttr "meta_R0_crvShape.iog.og[1]" "tweakSet619.dsm" -na; +connectAttr "tweak619.msg" "tweakSet619.ub[0]"; +connectAttr "meta_R0_crvShapeOrig.ws" "groupParts1238.ig"; +connectAttr "groupId8807.id" "groupParts1238.gi"; +connectAttr "finger_R3_blade.bladeRollOffset" "unitConversion160.i"; +connectAttr "mgear_curveCns472GroupParts.og" "mgear_curveCns472.ip[0].ig"; +connectAttr "mgear_curveCns472GroupId.id" "mgear_curveCns472.ip[0].gi"; +connectAttr "finger_R3_root.wm" "mgear_curveCns472.inputs[0]"; +connectAttr "finger_R3_0_loc.wm" "mgear_curveCns472.inputs[1]"; +connectAttr "finger_R3_1_loc.wm" "mgear_curveCns472.inputs[2]"; +connectAttr "finger_R3_2_loc.wm" "mgear_curveCns472.inputs[3]"; +connectAttr "groupParts1240.og" "tweak620.ip[0].ig"; +connectAttr "groupId8809.id" "tweak620.ip[0].gi"; +connectAttr "mgear_curveCns472GroupId.msg" "mgear_curveCns472Set.gn" -na; +connectAttr "finger_R3_crvShape.iog.og[0]" "mgear_curveCns472Set.dsm" -na; +connectAttr "mgear_curveCns472.msg" "mgear_curveCns472Set.ub[0]"; +connectAttr "tweak620.og[0]" "mgear_curveCns472GroupParts.ig"; +connectAttr "mgear_curveCns472GroupId.id" "mgear_curveCns472GroupParts.gi"; +connectAttr "groupId8809.msg" "tweakSet620.gn" -na; +connectAttr "finger_R3_crvShape.iog.og[1]" "tweakSet620.dsm" -na; +connectAttr "tweak620.msg" "tweakSet620.ub[0]"; +connectAttr "finger_R3_crvShapeOrig.ws" "groupParts1240.ig"; +connectAttr "groupId8809.id" "groupParts1240.gi"; +connectAttr "finger_R2_blade.bladeRollOffset" "unitConversion161.i"; +connectAttr "mgear_curveCns473GroupParts.og" "mgear_curveCns473.ip[0].ig"; +connectAttr "mgear_curveCns473GroupId.id" "mgear_curveCns473.ip[0].gi"; +connectAttr "finger_R2_root.wm" "mgear_curveCns473.inputs[0]"; +connectAttr "finger_R2_0_loc.wm" "mgear_curveCns473.inputs[1]"; +connectAttr "finger_R2_1_loc.wm" "mgear_curveCns473.inputs[2]"; +connectAttr "finger_R2_2_loc.wm" "mgear_curveCns473.inputs[3]"; +connectAttr "groupParts1242.og" "tweak621.ip[0].ig"; +connectAttr "groupId8811.id" "tweak621.ip[0].gi"; +connectAttr "mgear_curveCns473GroupId.msg" "mgear_curveCns473Set.gn" -na; +connectAttr "finger_R2_crvShape.iog.og[0]" "mgear_curveCns473Set.dsm" -na; +connectAttr "mgear_curveCns473.msg" "mgear_curveCns473Set.ub[0]"; +connectAttr "tweak621.og[0]" "mgear_curveCns473GroupParts.ig"; +connectAttr "mgear_curveCns473GroupId.id" "mgear_curveCns473GroupParts.gi"; +connectAttr "groupId8811.msg" "tweakSet621.gn" -na; +connectAttr "finger_R2_crvShape.iog.og[1]" "tweakSet621.dsm" -na; +connectAttr "tweak621.msg" "tweakSet621.ub[0]"; +connectAttr "finger_R2_crvShapeOrig.ws" "groupParts1242.ig"; +connectAttr "groupId8811.id" "groupParts1242.gi"; +connectAttr "finger_R1_blade.bladeRollOffset" "unitConversion162.i"; +connectAttr "mgear_curveCns474GroupParts.og" "mgear_curveCns474.ip[0].ig"; +connectAttr "mgear_curveCns474GroupId.id" "mgear_curveCns474.ip[0].gi"; +connectAttr "finger_R1_root.wm" "mgear_curveCns474.inputs[0]"; +connectAttr "finger_R1_0_loc.wm" "mgear_curveCns474.inputs[1]"; +connectAttr "finger_R1_1_loc.wm" "mgear_curveCns474.inputs[2]"; +connectAttr "finger_R1_2_loc.wm" "mgear_curveCns474.inputs[3]"; +connectAttr "groupParts1244.og" "tweak622.ip[0].ig"; +connectAttr "groupId8813.id" "tweak622.ip[0].gi"; +connectAttr "mgear_curveCns474GroupId.msg" "mgear_curveCns474Set.gn" -na; +connectAttr "finger_R1_crvShape.iog.og[0]" "mgear_curveCns474Set.dsm" -na; +connectAttr "mgear_curveCns474.msg" "mgear_curveCns474Set.ub[0]"; +connectAttr "tweak622.og[0]" "mgear_curveCns474GroupParts.ig"; +connectAttr "mgear_curveCns474GroupId.id" "mgear_curveCns474GroupParts.gi"; +connectAttr "groupId8813.msg" "tweakSet622.gn" -na; +connectAttr "finger_R1_crvShape.iog.og[1]" "tweakSet622.dsm" -na; +connectAttr "tweak622.msg" "tweakSet622.ub[0]"; +connectAttr "finger_R1_crvShapeOrig.ws" "groupParts1244.ig"; +connectAttr "groupId8813.id" "groupParts1244.gi"; +connectAttr "finger_R0_blade.bladeRollOffset" "unitConversion163.i"; +connectAttr "mgear_curveCns475GroupParts.og" "mgear_curveCns475.ip[0].ig"; +connectAttr "mgear_curveCns475GroupId.id" "mgear_curveCns475.ip[0].gi"; +connectAttr "finger_R0_root.wm" "mgear_curveCns475.inputs[0]"; +connectAttr "finger_R0_0_loc.wm" "mgear_curveCns475.inputs[1]"; +connectAttr "finger_R0_1_loc.wm" "mgear_curveCns475.inputs[2]"; +connectAttr "finger_R0_2_loc.wm" "mgear_curveCns475.inputs[3]"; +connectAttr "groupParts1246.og" "tweak623.ip[0].ig"; +connectAttr "groupId8815.id" "tweak623.ip[0].gi"; +connectAttr "mgear_curveCns475GroupId.msg" "mgear_curveCns475Set.gn" -na; +connectAttr "finger_R0_crvShape.iog.og[0]" "mgear_curveCns475Set.dsm" -na; +connectAttr "mgear_curveCns475.msg" "mgear_curveCns475Set.ub[0]"; +connectAttr "tweak623.og[0]" "mgear_curveCns475GroupParts.ig"; +connectAttr "mgear_curveCns475GroupId.id" "mgear_curveCns475GroupParts.gi"; +connectAttr "groupId8815.msg" "tweakSet623.gn" -na; +connectAttr "finger_R0_crvShape.iog.og[1]" "tweakSet623.dsm" -na; +connectAttr "tweak623.msg" "tweakSet623.ub[0]"; +connectAttr "finger_R0_crvShapeOrig.ws" "groupParts1246.ig"; +connectAttr "groupId8815.id" "groupParts1246.gi"; +connectAttr "thumb_R0_blade.bladeRollOffset" "unitConversion164.i"; +connectAttr "mgear_curveCns476GroupParts.og" "mgear_curveCns476.ip[0].ig"; +connectAttr "mgear_curveCns476GroupId.id" "mgear_curveCns476.ip[0].gi"; +connectAttr "thumb_R0_root.wm" "mgear_curveCns476.inputs[0]"; +connectAttr "thumb_R0_0_loc.wm" "mgear_curveCns476.inputs[1]"; +connectAttr "thumb_R0_1_loc.wm" "mgear_curveCns476.inputs[2]"; +connectAttr "thumb_R0_2_loc.wm" "mgear_curveCns476.inputs[3]"; +connectAttr "groupParts1248.og" "tweak624.ip[0].ig"; +connectAttr "groupId8817.id" "tweak624.ip[0].gi"; +connectAttr "mgear_curveCns476GroupId.msg" "mgear_curveCns476Set.gn" -na; +connectAttr "thumb_R0_crvShape.iog.og[0]" "mgear_curveCns476Set.dsm" -na; +connectAttr "mgear_curveCns476.msg" "mgear_curveCns476Set.ub[0]"; +connectAttr "tweak624.og[0]" "mgear_curveCns476GroupParts.ig"; +connectAttr "mgear_curveCns476GroupId.id" "mgear_curveCns476GroupParts.gi"; +connectAttr "groupId8817.msg" "tweakSet624.gn" -na; +connectAttr "thumb_R0_crvShape.iog.og[1]" "tweakSet624.dsm" -na; +connectAttr "tweak624.msg" "tweakSet624.ub[0]"; +connectAttr "thumb_R0_crvShapeOrig.ws" "groupParts1248.ig"; +connectAttr "groupId8817.id" "groupParts1248.gi"; +connectAttr "mgear_curveCns477GroupParts.og" "mgear_curveCns477.ip[0].ig"; +connectAttr "mgear_curveCns477GroupId.id" "mgear_curveCns477.ip[0].gi"; +connectAttr "leg_L0_root.wm" "mgear_curveCns477.inputs[0]"; +connectAttr "leg_L0_knee.wm" "mgear_curveCns477.inputs[1]"; +connectAttr "leg_L0_ankle.wm" "mgear_curveCns477.inputs[2]"; +connectAttr "leg_L0_eff.wm" "mgear_curveCns477.inputs[3]"; +connectAttr "groupParts1250.og" "tweak625.ip[0].ig"; +connectAttr "groupId8819.id" "tweak625.ip[0].gi"; +connectAttr "mgear_curveCns477GroupId.msg" "mgear_curveCns477Set.gn" -na; +connectAttr "leg_L0_crvShape.iog.og[0]" "mgear_curveCns477Set.dsm" -na; +connectAttr "mgear_curveCns477.msg" "mgear_curveCns477Set.ub[0]"; +connectAttr "tweak625.og[0]" "mgear_curveCns477GroupParts.ig"; +connectAttr "mgear_curveCns477GroupId.id" "mgear_curveCns477GroupParts.gi"; +connectAttr "groupId8819.msg" "tweakSet625.gn" -na; +connectAttr "leg_L0_crvShape.iog.og[1]" "tweakSet625.dsm" -na; +connectAttr "tweak625.msg" "tweakSet625.ub[0]"; +connectAttr "leg_L0_crvShapeOrig.ws" "groupParts1250.ig"; +connectAttr "groupId8819.id" "groupParts1250.gi"; +connectAttr "mgear_curveCns478GroupParts.og" "mgear_curveCns478.ip[0].ig"; +connectAttr "mgear_curveCns478GroupId.id" "mgear_curveCns478.ip[0].gi"; +connectAttr "foot_L0_root.wm" "mgear_curveCns478.inputs[0]"; +connectAttr "foot_L0_0_loc.wm" "mgear_curveCns478.inputs[1]"; +connectAttr "foot_L0_1_loc.wm" "mgear_curveCns478.inputs[2]"; +connectAttr "foot_L0_2_loc.wm" "mgear_curveCns478.inputs[3]"; +connectAttr "groupParts1252.og" "tweak626.ip[0].ig"; +connectAttr "groupId8821.id" "tweak626.ip[0].gi"; +connectAttr "mgear_curveCns478GroupId.msg" "mgear_curveCns478Set.gn" -na; +connectAttr "foot_L0_crvShape.iog.og[0]" "mgear_curveCns478Set.dsm" -na; +connectAttr "mgear_curveCns478.msg" "mgear_curveCns478Set.ub[0]"; +connectAttr "tweak626.og[0]" "mgear_curveCns478GroupParts.ig"; +connectAttr "mgear_curveCns478GroupId.id" "mgear_curveCns478GroupParts.gi"; +connectAttr "groupId8821.msg" "tweakSet626.gn" -na; +connectAttr "foot_L0_crvShape.iog.og[1]" "tweakSet626.dsm" -na; +connectAttr "tweak626.msg" "tweakSet626.ub[0]"; +connectAttr "foot_L0_crvShapeOrig.ws" "groupParts1252.ig"; +connectAttr "groupId8821.id" "groupParts1252.gi"; +connectAttr "mgear_curveCns479GroupParts.og" "mgear_curveCns479.ip[0].ig"; +connectAttr "mgear_curveCns479GroupId.id" "mgear_curveCns479.ip[0].gi"; +connectAttr "foot_L0_root.wm" "mgear_curveCns479.inputs[0]"; +connectAttr "foot_L0_heel.wm" "mgear_curveCns479.inputs[1]"; +connectAttr "foot_L0_outpivot.wm" "mgear_curveCns479.inputs[2]"; +connectAttr "foot_L0_heel.wm" "mgear_curveCns479.inputs[3]"; +connectAttr "foot_L0_inpivot.wm" "mgear_curveCns479.inputs[4]"; +connectAttr "groupParts1254.og" "tweak627.ip[0].ig"; +connectAttr "groupId8823.id" "tweak627.ip[0].gi"; +connectAttr "mgear_curveCns479GroupId.msg" "mgear_curveCns479Set.gn" -na; +connectAttr "foot_L0_Shape1.iog.og[0]" "mgear_curveCns479Set.dsm" -na; +connectAttr "mgear_curveCns479.msg" "mgear_curveCns479Set.ub[0]"; +connectAttr "tweak627.og[0]" "mgear_curveCns479GroupParts.ig"; +connectAttr "mgear_curveCns479GroupId.id" "mgear_curveCns479GroupParts.gi"; +connectAttr "groupId8823.msg" "tweakSet627.gn" -na; +connectAttr "foot_L0_Shape1.iog.og[1]" "tweakSet627.dsm" -na; +connectAttr "tweak627.msg" "tweakSet627.ub[0]"; +connectAttr "foot_L0_Shape1Orig.ws" "groupParts1254.ig"; +connectAttr "groupId8823.id" "groupParts1254.gi"; +connectAttr "mgear_curveCns480GroupParts.og" "mgear_curveCns480.ip[0].ig"; +connectAttr "mgear_curveCns480GroupId.id" "mgear_curveCns480.ip[0].gi"; +connectAttr "leg_R0_root.wm" "mgear_curveCns480.inputs[0]"; +connectAttr "leg_R0_knee.wm" "mgear_curveCns480.inputs[1]"; +connectAttr "leg_R0_ankle.wm" "mgear_curveCns480.inputs[2]"; +connectAttr "leg_R0_eff.wm" "mgear_curveCns480.inputs[3]"; +connectAttr "groupParts1256.og" "tweak628.ip[0].ig"; +connectAttr "groupId8825.id" "tweak628.ip[0].gi"; +connectAttr "mgear_curveCns480GroupId.msg" "mgear_curveCns480Set.gn" -na; +connectAttr "leg_R0_crvShape.iog.og[0]" "mgear_curveCns480Set.dsm" -na; +connectAttr "mgear_curveCns480.msg" "mgear_curveCns480Set.ub[0]"; +connectAttr "tweak628.og[0]" "mgear_curveCns480GroupParts.ig"; +connectAttr "mgear_curveCns480GroupId.id" "mgear_curveCns480GroupParts.gi"; +connectAttr "groupId8825.msg" "tweakSet628.gn" -na; +connectAttr "leg_R0_crvShape.iog.og[1]" "tweakSet628.dsm" -na; +connectAttr "tweak628.msg" "tweakSet628.ub[0]"; +connectAttr "leg_R0_crvShapeOrig.ws" "groupParts1256.ig"; +connectAttr "groupId8825.id" "groupParts1256.gi"; +connectAttr "mgear_curveCns481GroupParts.og" "mgear_curveCns481.ip[0].ig"; +connectAttr "mgear_curveCns481GroupId.id" "mgear_curveCns481.ip[0].gi"; +connectAttr "foot_R0_root.wm" "mgear_curveCns481.inputs[0]"; +connectAttr "foot_R0_0_loc.wm" "mgear_curveCns481.inputs[1]"; +connectAttr "foot_R0_1_loc.wm" "mgear_curveCns481.inputs[2]"; +connectAttr "foot_R0_2_loc.wm" "mgear_curveCns481.inputs[3]"; +connectAttr "groupParts1258.og" "tweak629.ip[0].ig"; +connectAttr "groupId8827.id" "tweak629.ip[0].gi"; +connectAttr "mgear_curveCns481GroupId.msg" "mgear_curveCns481Set.gn" -na; +connectAttr "foot_R0_crvShape.iog.og[0]" "mgear_curveCns481Set.dsm" -na; +connectAttr "mgear_curveCns481.msg" "mgear_curveCns481Set.ub[0]"; +connectAttr "tweak629.og[0]" "mgear_curveCns481GroupParts.ig"; +connectAttr "mgear_curveCns481GroupId.id" "mgear_curveCns481GroupParts.gi"; +connectAttr "groupId8827.msg" "tweakSet629.gn" -na; +connectAttr "foot_R0_crvShape.iog.og[1]" "tweakSet629.dsm" -na; +connectAttr "tweak629.msg" "tweakSet629.ub[0]"; +connectAttr "foot_R0_crvShapeOrig.ws" "groupParts1258.ig"; +connectAttr "groupId8827.id" "groupParts1258.gi"; +connectAttr "mgear_curveCns482GroupParts.og" "mgear_curveCns482.ip[0].ig"; +connectAttr "mgear_curveCns482GroupId.id" "mgear_curveCns482.ip[0].gi"; +connectAttr "foot_R0_root.wm" "mgear_curveCns482.inputs[0]"; +connectAttr "foot_R0_heel.wm" "mgear_curveCns482.inputs[1]"; +connectAttr "foot_R0_outpivot.wm" "mgear_curveCns482.inputs[2]"; +connectAttr "foot_R0_heel.wm" "mgear_curveCns482.inputs[3]"; +connectAttr "foot_R0_inpivot.wm" "mgear_curveCns482.inputs[4]"; +connectAttr "groupParts1260.og" "tweak630.ip[0].ig"; +connectAttr "groupId8829.id" "tweak630.ip[0].gi"; +connectAttr "mgear_curveCns482GroupId.msg" "mgear_curveCns482Set.gn" -na; +connectAttr "foot_R0_Shape1.iog.og[0]" "mgear_curveCns482Set.dsm" -na; +connectAttr "mgear_curveCns482.msg" "mgear_curveCns482Set.ub[0]"; +connectAttr "tweak630.og[0]" "mgear_curveCns482GroupParts.ig"; +connectAttr "mgear_curveCns482GroupId.id" "mgear_curveCns482GroupParts.gi"; +connectAttr "groupId8829.msg" "tweakSet630.gn" -na; +connectAttr "foot_R0_Shape1.iog.og[1]" "tweakSet630.dsm" -na; +connectAttr "tweak630.msg" "tweakSet630.ub[0]"; +connectAttr "foot_R0_Shape1Orig.ws" "groupParts1260.ig"; +connectAttr "groupId8829.id" "groupParts1260.gi"; connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; // End of biped_guide.ma diff --git a/scripts/mgear/maya/shifter/component/_templates/quadruped.ma b/scripts/mgear/maya/shifter/component/_templates/quadruped.ma index 526007d..aea5e89 100644 --- a/scripts/mgear/maya/shifter/component/_templates/quadruped.ma +++ b/scripts/mgear/maya/shifter/component/_templates/quadruped.ma @@ -1,6 +1,6 @@ //Maya ASCII 2016R2 scene //Name: quadruped.ma -//Last modified: Thu, Aug 31, 2017 05:01:40 PM +//Last modified: Wed, Dec 06, 2017 11:03:26 AM //Codeset: 932 requires maya "2016R2"; requires -nodeType "mgear_curveCns" "mgear_solvers" "2.1.0"; @@ -12,26 +12,26 @@ fileInfo "version" "2016 Extension 2 SP2"; fileInfo "cutIdentifier" "201608220310-1001477-2"; fileInfo "osv" "Microsoft Windows 8 Business Edition, 64-bit (Build 9200)\n"; createNode transform -s -n "persp"; - rename -uid "9EB04C39-4CA5-A2D4-E719-90A4EFF56BEA"; + rename -uid "6F6D51A8-412B-335E-00CF-37AF07174608"; setAttr ".v" no; - setAttr ".t" -type "double3" 23.273298183925821 16.065928680063944 24.269170946091947 ; - setAttr ".r" -type "double3" -25.538352729602433 43.800000000000004 -4.4066638166574991e-015 ; + setAttr ".t" -type "double3" 6.393497340196264 4.7951230051471763 6.3934973401962445 ; + setAttr ".r" -type "double3" -27.938352729602379 44.999999999999972 -5.172681101354183e-014 ; createNode camera -s -n "perspShape" -p "persp"; - rename -uid "83D02861-4A39-4322-8F70-F2A64414C93B"; + rename -uid "DB01A37C-402E-FE3C-AED8-B2B423E678B4"; setAttr -k off ".v" no; setAttr ".fl" 34.999999999999993; - setAttr ".coi" 37.265978198907575; + setAttr ".coi" 10.234589445243257; setAttr ".imn" -type "string" "persp"; setAttr ".den" -type "string" "persp_depth"; setAttr ".man" -type "string" "persp_mask"; setAttr ".hc" -type "string" "viewSet -p %camera"; createNode transform -s -n "top"; - rename -uid "006C2ED0-40E2-1C15-780C-C3B9B43810BA"; + rename -uid "CE1051E7-406B-1C9A-FBD0-4B9A57293A4F"; setAttr ".v" no; setAttr ".t" -type "double3" 0 1000.1 0 ; setAttr ".r" -type "double3" -89.999999999999986 0 0 ; createNode camera -s -n "topShape" -p "top"; - rename -uid "F17352EE-4569-AAB5-0AE9-498CD07B6BD8"; + rename -uid "BB93CD62-469E-69F3-108B-E08EC9DEC48A"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -42,11 +42,11 @@ createNode camera -s -n "topShape" -p "top"; setAttr ".hc" -type "string" "viewSet -t %camera"; setAttr ".o" yes; createNode transform -s -n "front"; - rename -uid "29391A99-4929-5870-CA84-0CADD3CBD195"; + rename -uid "19B7E283-4BF5-67A5-5A34-889F4F94222B"; setAttr ".v" no; setAttr ".t" -type "double3" 0 0 1000.1 ; createNode camera -s -n "frontShape" -p "front"; - rename -uid "1F4ED48C-4259-1EB1-3823-61B5A6822927"; + rename -uid "FBE5ED9B-4103-602C-107A-F2BDDBEAA276"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -57,12 +57,12 @@ createNode camera -s -n "frontShape" -p "front"; setAttr ".hc" -type "string" "viewSet -f %camera"; setAttr ".o" yes; createNode transform -s -n "side"; - rename -uid "1DE1D1C0-42F6-6E42-873E-FA940FFC53EF"; + rename -uid "3FF600CD-41A1-5926-0545-6F89E84E794B"; setAttr ".v" no; setAttr ".t" -type "double3" 1000.1 0 0 ; setAttr ".r" -type "double3" 0 89.999999999999986 0 ; createNode camera -s -n "sideShape" -p "side"; - rename -uid "06DC7C10-42CC-8374-76C1-B09119D731F1"; + rename -uid "F67540FE-417E-719B-DBB5-8FB23E5C080A"; setAttr -k off ".v" no; setAttr ".rnd" no; setAttr ".coi" 1000.1; @@ -73,24 +73,25 @@ createNode camera -s -n "sideShape" -p "side"; setAttr ".hc" -type "string" "viewSet -s %camera"; setAttr ".o" yes; createNode transform -n "guide"; - rename -uid "516C4948-4112-FE22-6EE7-1496C50AAB03"; + rename -uid "EA964024-4563-ACF7-31AD-0AAF5F11A2D4"; addAttr -ci true -sn "rig_name" -ln "rig_name" -dt "string"; addAttr -ci true -k true -sn "mode" -ln "mode" -min 0 -max 1 -en "Final:WIP" -at "enum"; addAttr -ci true -k true -sn "step" -ln "step" -min 0 -max 6 -en "All Steps:Objects:Properties:Operators:Connect:Joints:Finalize" -at "enum"; - addAttr -ci true -sn "ismodel" -ln "ismodel" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ismodel" -ln "ismodel" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "classicChannelNames" -ln "classicChannelNames" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "proxyChannels" -ln "proxyChannels" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "proxyChannels" -ln "proxyChannels" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "worldCtl" -ln "worldCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "importSkin" -ln "importSkin" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "skin" -ln "skin" -dt "string"; - addAttr -ci true -sn "L_color_fk" -ln "L_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "L_color_ik" -ln "L_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "R_color_fk" -ln "R_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "R_color_ik" -ln "R_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "C_color_fk" -ln "C_color_fk" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "C_color_ik" -ln "C_color_ik" -min 0 -max 31 -at "long"; - addAttr -ci true -sn "joint_rig" -ln "joint_rig" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "L_color_fk" -ln "L_color_fk" -dv 6 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "L_color_ik" -ln "L_color_ik" -dv 18 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "R_color_fk" -ln "R_color_fk" -dv 23 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "R_color_ik" -ln "R_color_ik" -dv 14 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "C_color_fk" -ln "C_color_fk" -dv 13 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "C_color_ik" -ln "C_color_ik" -dv 17 -min 0 -max 31 -at "long"; + addAttr -ci true -sn "joint_rig" -ln "joint_rig" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "synoptic" -ln "synoptic" -dt "string"; addAttr -ci true -sn "doPreCustomStep" -ln "doPreCustomStep" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "doPostCustomStep" -ln "doPostCustomStep" -min 0 -max 1 -at "bool"; @@ -103,16 +104,7 @@ createNode transform -n "guide"; addAttr -ci true -sn "gear_version" -ln "gear_version" -dt "string"; setAttr ".rig_name" -type "string" "rig"; setAttr -k on ".step" 6; - setAttr ".ismodel" yes; - setAttr ".proxyChannels" yes; setAttr ".skin" -type "string" ""; - setAttr ".L_color_fk" 6; - setAttr ".L_color_ik" 18; - setAttr ".R_color_fk" 23; - setAttr ".R_color_ik" 14; - setAttr ".C_color_fk" 13; - setAttr ".C_color_ik" 17; - setAttr ".joint_rig" yes; setAttr ".synoptic" -type "string" "quadruped"; setAttr ".preCustomStep" -type "string" ""; setAttr ".postCustomStep" -type "string" ""; @@ -122,10 +114,10 @@ createNode transform -n "guide"; setAttr ".maya_version" -type "string" "2016.0"; setAttr ".gear_version" -type "string" "2.2.4"; createNode transform -n "controllers_org" -p "guide"; - rename -uid "20FB1EF1-438C-18DB-79F6-B5AF8B315CF6"; + rename -uid "CBDC45CE-4F83-DF55-84F8-268B4BD1DAFC"; setAttr ".v" no; -createNode transform -n "local_C0_root" -p "guide"; - rename -uid "098261EF-4ED0-4B03-274F-2FAA61E8488C"; +createNode transform -n "global_C0_root" -p "guide"; + rename -uid "660091ED-4E91-D8D4-70E2-3EBC7D4E9F2A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -137,22 +129,155 @@ createNode transform -n "local_C0_root" -p "guide"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 6 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; + setAttr -k off -cb on ".v"; + setAttr -k off -cb on ".tx"; + setAttr -k off -cb on ".ty"; + setAttr -k off -cb on ".tz"; + setAttr -k off -cb on ".rx"; + setAttr -k off -cb on ".ry"; + setAttr -k off -cb on ".rz"; + setAttr -cb on ".ro"; + setAttr -k off -cb on ".sx"; + setAttr -k off -cb on ".sy"; + setAttr -k off -cb on ".sz"; + setAttr ".comp_type" -type "string" "control_01"; + setAttr ".comp_name" -type "string" "global"; + setAttr ".comp_side" -type "string" "C"; + setAttr ".connector" -type "string" "standard"; + setAttr ".ui_host" -type "string" ""; + setAttr ".ctlGrp" -type "string" ""; + setAttr ".icon" -type "string" "square"; + setAttr ".ikrefarray" -type "string" ""; +createNode nurbsCurve -n "global_C0_rootShape" -p "global_C0_root"; + rename -uid "C8B82674-47E4-327C-FB18-A7B80B7C8342"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0.25 0 0 + -0.25 0 0 + ; +createNode nurbsCurve -n "global_C0_root4Shape" -p "global_C0_root"; + rename -uid "6759D4BB-4FE3-1D97-62A0-2A862E260705"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0 0.25 0 + 0 -0.25 0 + ; +createNode nurbsCurve -n "global_C0_root5Shape" -p "global_C0_root"; + rename -uid "92A4D1B4-4FE8-9AC6-88FA-B68C14313E3D"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 1 0 no 3 + 2 0 1 + 2 + 0 0 0.25 + 0 0 -0.25 + ; +createNode nurbsCurve -n "global_C0_root6Shape" -p "global_C0_root"; + rename -uid "2D94F61E-4959-B85A-D6D1-2F86F4579F72"; + setAttr ".ihi" 0; + setAttr -k off ".v"; + setAttr ".ove" yes; + setAttr ".ovc" 13; + setAttr ".cc" -type "nurbsCurve" + 1 15 0 no 3 + 16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 + 0.125 0.125 0.125 + 0.125 0.125 -0.125 + -0.125 0.125 -0.125 + -0.125 -0.125 -0.125 + -0.125 -0.125 0.125 + -0.125 0.125 0.125 + -0.125 0.125 -0.125 + -0.125 0.125 0.125 + 0.125 0.125 0.125 + 0.125 -0.125 0.125 + -0.125 -0.125 0.125 + 0.125 -0.125 0.125 + 0.125 -0.125 -0.125 + 0.125 0.125 -0.125 + 0.125 -0.125 -0.125 + -0.125 -0.125 -0.125 + ; +createNode transform -n "global_C0_sizeRef" -p "global_C0_root"; + rename -uid "40A2BD95-4561-DC27-859E-5A903CC80CB1"; + addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; + setAttr -k off -cb on ".v"; + setAttr ".t" -type "double3" 0 0 1 ; + setAttr -k off -cb on ".tx"; + setAttr -k off -cb on ".ty"; + setAttr -k off -cb on ".tz"; + setAttr -k off -cb on ".rx"; + setAttr -k off -cb on ".ry"; + setAttr -k off -cb on ".rz"; + setAttr -cb on ".ro"; + setAttr -k off -cb on ".sx"; + setAttr -k off -cb on ".sy"; + setAttr -k off -cb on ".sz"; +createNode transform -n "local_C0_root" -p "global_C0_root"; + rename -uid "599BEF03-4C7D-AD94-05B1-6C9A5CA0A5D1"; + addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; + addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; + addAttr -ci true -sn "comp_side" -ln "comp_side" -dt "string"; + addAttr -ci true -sn "comp_index" -ln "comp_index" -min 0 -at "long"; + addAttr -ci true -sn "connector" -ln "connector" -dt "string"; + addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; + addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; + addAttr -ci true -sn "icon" -ln "icon" -dt "string"; + addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; + addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 5 -at "double"; + addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -172,22 +297,8 @@ createNode transform -n "local_C0_root" -p "guide"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "local_C0_rootShape" -p "local_C0_root"; - rename -uid "25CAF1CC-4DC5-065E-BA56-44B821EE967D"; + rename -uid "A9542A6F-45D7-D924-A443-8F951F13F878"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -199,8 +310,8 @@ createNode nurbsCurve -n "local_C0_rootShape" -p "local_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "local_C0_root19Shape" -p "local_C0_root"; - rename -uid "2967813C-454B-46EE-273B-A089F7702061"; +createNode nurbsCurve -n "local_C0_root22Shape" -p "local_C0_root"; + rename -uid "FEBB4DEE-452E-59FD-E866-009EBD77D54D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -212,8 +323,8 @@ createNode nurbsCurve -n "local_C0_root19Shape" -p "local_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "local_C0_root20Shape" -p "local_C0_root"; - rename -uid "DF64F88D-4990-274A-F081-DD91D896BA06"; +createNode nurbsCurve -n "local_C0_root23Shape" -p "local_C0_root"; + rename -uid "2D083F6D-4158-460D-6468-D38F5A1A5781"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -225,8 +336,8 @@ createNode nurbsCurve -n "local_C0_root20Shape" -p "local_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "local_C0_root21Shape" -p "local_C0_root"; - rename -uid "112CE2F8-4A36-CB82-1ED6-97BCD005C248"; +createNode nurbsCurve -n "local_C0_root24Shape" -p "local_C0_root"; + rename -uid "0CD4D46B-408E-3B9C-321A-DA8D629B6925"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -253,7 +364,7 @@ createNode nurbsCurve -n "local_C0_root21Shape" -p "local_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "local_C0_sizeRef" -p "local_C0_root"; - rename -uid "563C660D-4F7C-A37E-A02D-BF9BD0520473"; + rename -uid "E9B66B5F-4952-DD59-6417-35910705511D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 0 0 1 ; @@ -268,7 +379,7 @@ createNode transform -n "local_C0_sizeRef" -p "local_C0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "body_C0_root" -p "local_C0_root"; - rename -uid "25F08E71-4127-CE9F-83BF-89894C683FB6"; + rename -uid "2CCC3379-4ED2-1CC5-CCA8-AA9E86F5D710"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -280,22 +391,24 @@ createNode transform -n "body_C0_root" -p "local_C0_root"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 0 2.4202715014858764 -1.2332282831689589 ; setAttr -k off -cb on ".tx"; @@ -316,22 +429,8 @@ createNode transform -n "body_C0_root" -p "local_C0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "body_C0_rootShape" -p "body_C0_root"; - rename -uid "7F2583ED-43B5-7DAE-1E91-9FBDCF9561E1"; + rename -uid "9718C0F9-43BE-5173-F6AA-8C97C95CBDBD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -343,8 +442,8 @@ createNode nurbsCurve -n "body_C0_rootShape" -p "body_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "body_C0_root19Shape" -p "body_C0_root"; - rename -uid "1E21B3FC-4651-43ED-ADD0-6D97AB009545"; +createNode nurbsCurve -n "body_C0_root22Shape" -p "body_C0_root"; + rename -uid "9E78CF7E-474D-C8BB-81DD-E398E0C2E72D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -356,8 +455,8 @@ createNode nurbsCurve -n "body_C0_root19Shape" -p "body_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "body_C0_root20Shape" -p "body_C0_root"; - rename -uid "258CCFB1-47A6-3F52-4BB0-1789EC850ADC"; +createNode nurbsCurve -n "body_C0_root23Shape" -p "body_C0_root"; + rename -uid "E869FFB8-4D5C-6806-0FAA-BBB46AC6AC38"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -369,8 +468,8 @@ createNode nurbsCurve -n "body_C0_root20Shape" -p "body_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "body_C0_root21Shape" -p "body_C0_root"; - rename -uid "8D9CF2D1-4DD3-56B6-89A6-A49DA6419984"; +createNode nurbsCurve -n "body_C0_root24Shape" -p "body_C0_root"; + rename -uid "D8DA2DC4-4376-E4D0-2497-F29AEB981C29"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -397,7 +496,7 @@ createNode nurbsCurve -n "body_C0_root21Shape" -p "body_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "body_C0_sizeRef" -p "body_C0_root"; - rename -uid "0363DEC1-498F-8BA3-BBEB-49B043E3D527"; + rename -uid "07E64100-4B30-4A3B-5397-45AA50575235"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 0 0 1 ; @@ -412,7 +511,7 @@ createNode transform -n "body_C0_sizeRef" -p "body_C0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "spine_C0_root" -p "body_C0_root"; - rename -uid "E1261AA7-4AAE-F1F2-51A9-DD942952DE90"; + rename -uid "8854EBB0-484B-7F77-F745-B591CFD6F05B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -422,17 +521,17 @@ createNode transform -n "spine_C0_root" -p "body_C0_root"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "position" -ln "position" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "maxsquash" -ln "maxsquash" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "maxsquash" -ln "maxsquash" -dv 0.5 -min 0 -max 1 -at "double"; addAttr -ci true -sn "softness" -ln "softness" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "lock_ori" -ln "lock_ori" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "division" -ln "division" -dv 3 -min 3 -at "long"; + addAttr -ci true -sn "lock_ori" -ln "lock_ori" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "division" -ln "division" -dv 5 -min 3 -at "long"; addAttr -ci true -sn "autoBend" -ln "autoBend" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "centralTangent" -ln "centralTangent" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "centralTangent" -ln "centralTangent" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -452,16 +551,10 @@ createNode transform -n "spine_C0_root" -p "body_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "spineUI_C0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".maxstretch" 1.5; - setAttr ".maxsquash" 0.5; - setAttr ".lock_ori" 1; - setAttr ".division" 5; - setAttr ".centralTangent" yes; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "spine_C0_rootShape" -p "spine_C0_root"; - rename -uid "860DE25A-42A1-B59B-D036-95A38BE98695"; + rename -uid "1DA1289E-48DD-01BB-58AF-31B909E52D39"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -473,8 +566,8 @@ createNode nurbsCurve -n "spine_C0_rootShape" -p "spine_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spine_C0_root19Shape" -p "spine_C0_root"; - rename -uid "AD77C0AD-4589-D56E-AFD3-AB92F15E91D7"; +createNode nurbsCurve -n "spine_C0_root22Shape" -p "spine_C0_root"; + rename -uid "2516BC6F-4DFF-3F5A-E4AB-1F855CB43CF8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -486,8 +579,8 @@ createNode nurbsCurve -n "spine_C0_root19Shape" -p "spine_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spine_C0_root20Shape" -p "spine_C0_root"; - rename -uid "3B79BEE4-4B8E-3C00-20A2-E9BB276332DC"; +createNode nurbsCurve -n "spine_C0_root23Shape" -p "spine_C0_root"; + rename -uid "EAF18990-43DB-11A7-D48D-CFB2573F6A45"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -499,8 +592,8 @@ createNode nurbsCurve -n "spine_C0_root20Shape" -p "spine_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spine_C0_root21Shape" -p "spine_C0_root"; - rename -uid "9BAA6F9D-43FF-0567-0246-70B67EB9E7E7"; +createNode nurbsCurve -n "spine_C0_root24Shape" -p "spine_C0_root"; + rename -uid "23039AAE-4915-4A85-0E2F-6094C8FA395E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -527,10 +620,10 @@ createNode nurbsCurve -n "spine_C0_root21Shape" -p "spine_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "spine_C0_eff" -p "spine_C0_root"; - rename -uid "91866F13-4BDC-5D02-CAD4-7ABFDE625B05"; + rename -uid "30D8C3C0-49BB-DE7C-4AEF-56AEC3AE2D51"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0 6.6115768831256645 -2.9361299538902146e-015 ; + setAttr ".t" -type "double3" 0 6.6115768831256645 -2.9361299538902142e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -542,7 +635,7 @@ createNode transform -n "spine_C0_eff" -p "spine_C0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "spine_C0_effShape" -p "spine_C0_eff"; - rename -uid "CA63296A-4844-D995-39D8-C580EB17B822"; + rename -uid "A4DAA3B3-46D9-93EF-6328-79BFB7B0E4C9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -554,8 +647,8 @@ createNode nurbsCurve -n "spine_C0_effShape" -p "spine_C0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spine_C0_eff19Shape" -p "spine_C0_eff"; - rename -uid "D3110FDB-45D5-4B63-99A9-89B124E8F4E5"; +createNode nurbsCurve -n "spine_C0_eff22Shape" -p "spine_C0_eff"; + rename -uid "CFE7D3C1-4997-8DB1-A450-2A92972257D2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -567,8 +660,8 @@ createNode nurbsCurve -n "spine_C0_eff19Shape" -p "spine_C0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spine_C0_eff20Shape" -p "spine_C0_eff"; - rename -uid "2BA01F0D-49D1-E9F7-CE9A-7E8366D7A70F"; +createNode nurbsCurve -n "spine_C0_eff23Shape" -p "spine_C0_eff"; + rename -uid "9A465314-4470-7599-A12D-D4BAB2A0D356"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -580,8 +673,8 @@ createNode nurbsCurve -n "spine_C0_eff20Shape" -p "spine_C0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spine_C0_eff21Shape" -p "spine_C0_eff"; - rename -uid "100FC6F9-4273-BC49-1C1A-83A0B9E70A00"; +createNode nurbsCurve -n "spine_C0_eff24Shape" -p "spine_C0_eff"; + rename -uid "981FF206-47A9-B58F-D080-96BB60FA2C15"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -598,8 +691,8 @@ createNode nurbsCurve -n "spine_C0_eff21Shape" -p "spine_C0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "spine_C0_eff21_0crvShape" -p "spine_C0_eff"; - rename -uid "F6C6E365-439F-C395-8805-26B8DDD2D4C4"; +createNode nurbsCurve -n "spine_C0_eff24_0crvShape" -p "spine_C0_eff"; + rename -uid "858AC638-4A1F-E93D-A4CF-078C8F8AA721"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -616,8 +709,8 @@ createNode nurbsCurve -n "spine_C0_eff21_0crvShape" -p "spine_C0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "spine_C0_eff21_1crvShape" -p "spine_C0_eff"; - rename -uid "17998A01-4BB8-59D3-0994-1BAC7E6AE64C"; +createNode nurbsCurve -n "spine_C0_eff24_1crvShape" -p "spine_C0_eff"; + rename -uid "0682D80E-4A27-0C7B-6860-EEAF0FD5EBDE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -635,7 +728,7 @@ createNode nurbsCurve -n "spine_C0_eff21_1crvShape" -p "spine_C0_eff"; 0 0 -0.1875 ; createNode transform -n "neck_C0_root" -p "spine_C0_eff"; - rename -uid "FFE74659-4156-2D51-FE27-56950129F616"; + rename -uid "47B90BAA-4EFA-A524-AF63-FA95BA7B9E5C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -646,17 +739,18 @@ createNode transform -n "neck_C0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "headrefarray" -ln "headrefarray" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; - addAttr -ci true -sn "maxsquash" -ln "maxsquash" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; + addAttr -ci true -sn "maxsquash" -ln "maxsquash" -dv 0.5 -min 0 -max 1 -at "double"; addAttr -ci true -sn "softness" -ln "softness" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "division" -ln "division" -dv 3 -min 3 -at "long"; - addAttr -ci true -sn "tangentControls" -ln "tangentControls" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "division" -ln "division" -dv 5 -min 3 -at "long"; + addAttr -ci true -sn "tangentControls" -ln "tangentControls" -dv 1 -min 0 -max 1 + -at "bool"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.11164111249562403 0.36062523614417152 -1.1057116273629473e-016 ; + setAttr ".t" -type "double3" -0.11164111249562403 0.36062523614417152 -1.1057116273629454e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -677,15 +771,10 @@ createNode transform -n "neck_C0_root" -p "spine_C0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".headrefarray" -type "string" ""; setAttr ".ikrefarray" -type "string" ""; - setAttr ".maxstretch" 1.5; - setAttr ".maxsquash" 0.5; - setAttr ".division" 5; - setAttr ".tangentControls" yes; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "neck_C0_rootShape" -p "neck_C0_root"; - rename -uid "1183D53B-454B-9565-F055-BAA91D45BBE9"; + rename -uid "553A31FF-42CA-F40E-8C9D-84A00506DBD6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -697,8 +786,8 @@ createNode nurbsCurve -n "neck_C0_rootShape" -p "neck_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_root19Shape" -p "neck_C0_root"; - rename -uid "98CFA199-4C98-12BC-3B41-6987B34BEED7"; +createNode nurbsCurve -n "neck_C0_root22Shape" -p "neck_C0_root"; + rename -uid "1F0EF364-47E3-9901-82B2-0792BBE0B189"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -710,8 +799,8 @@ createNode nurbsCurve -n "neck_C0_root19Shape" -p "neck_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_root20Shape" -p "neck_C0_root"; - rename -uid "A300B3EA-427D-35CB-9B06-98B97DC2C0AE"; +createNode nurbsCurve -n "neck_C0_root23Shape" -p "neck_C0_root"; + rename -uid "18A05ED3-45CB-BF15-7E71-998C4CB5F4FC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -723,8 +812,8 @@ createNode nurbsCurve -n "neck_C0_root20Shape" -p "neck_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_root21Shape" -p "neck_C0_root"; - rename -uid "97D9C524-4728-4278-37C9-79AFD67238DD"; +createNode nurbsCurve -n "neck_C0_root24Shape" -p "neck_C0_root"; + rename -uid "30500D70-4939-2AEE-C22D-66B55480CE35"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -751,10 +840,10 @@ createNode nurbsCurve -n "neck_C0_root21Shape" -p "neck_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "neck_C0_neck" -p "neck_C0_root"; - rename -uid "A351EFC0-4327-4B4B-1E70-AFBF86333D48"; + rename -uid "0D356E1B-47A8-8717-83B4-CFBF635A7672"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.24124837670655674 3.6642870257638149 -8.7131531609605358e-016 ; + setAttr ".t" -type "double3" -0.24124837670655674 3.6642870257638149 -8.7131531609605555e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -762,12 +851,12 @@ createNode transform -n "neck_C0_neck" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 1 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000011 1 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_neckShape" -p "neck_C0_neck"; - rename -uid "96476E6E-4A09-FBD8-8028-F3B737EB913F"; + rename -uid "C020E8D5-4F7D-6B29-0DA0-D685A00A9CFD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -779,8 +868,8 @@ createNode nurbsCurve -n "neck_C0_neckShape" -p "neck_C0_neck"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_neck19Shape" -p "neck_C0_neck"; - rename -uid "CE3970AA-4278-C8D0-B4DB-9BBDE906E305"; +createNode nurbsCurve -n "neck_C0_neck22Shape" -p "neck_C0_neck"; + rename -uid "2A47CEA9-4CEB-D58A-009D-BC8C89B4EDD1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -792,8 +881,8 @@ createNode nurbsCurve -n "neck_C0_neck19Shape" -p "neck_C0_neck"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_neck20Shape" -p "neck_C0_neck"; - rename -uid "41C8D2CF-4973-D6A2-F765-6B9B2B917D10"; +createNode nurbsCurve -n "neck_C0_neck23Shape" -p "neck_C0_neck"; + rename -uid "24FAC434-43F8-5B6E-EC54-93AE826E4CF5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -805,8 +894,8 @@ createNode nurbsCurve -n "neck_C0_neck20Shape" -p "neck_C0_neck"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_neck21Shape" -p "neck_C0_neck"; - rename -uid "08EF9A6D-40A2-749C-3333-BB8EFF2C2952"; +createNode nurbsCurve -n "neck_C0_neck24Shape" -p "neck_C0_neck"; + rename -uid "63CB5148-4B79-DD92-AD2C-E1986F7D14BB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -823,8 +912,8 @@ createNode nurbsCurve -n "neck_C0_neck21Shape" -p "neck_C0_neck"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_neck21_0crvShape" -p "neck_C0_neck"; - rename -uid "12F1FA3C-4E09-9005-D420-E5AB194F4116"; +createNode nurbsCurve -n "neck_C0_neck24_0crvShape" -p "neck_C0_neck"; + rename -uid "D7228223-4D14-1AA3-A085-AFA73C82210D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -841,8 +930,8 @@ createNode nurbsCurve -n "neck_C0_neck21_0crvShape" -p "neck_C0_neck"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_neck21_1crvShape" -p "neck_C0_neck"; - rename -uid "C03CDAD3-4C61-C055-D625-27ACC00F46A0"; +createNode nurbsCurve -n "neck_C0_neck24_1crvShape" -p "neck_C0_neck"; + rename -uid "B4C3BA46-415D-3BD1-E6AB-3E85565A645A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -860,10 +949,10 @@ createNode nurbsCurve -n "neck_C0_neck21_1crvShape" -p "neck_C0_neck"; 0 0 -0.1875 ; createNode transform -n "neck_C0_head" -p "neck_C0_neck"; - rename -uid "57A1D09F-4AC8-CA64-1B00-9AAB7CD963FD"; + rename -uid "9BA8DCA9-4B5B-9D4F-2F5E-BA86B627BBD9"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.6645352591003757e-015 -7.1054273576010019e-015 3.7470892997998061e-030 ; + setAttr ".t" -type "double3" 3.5527136788005009e-015 -7.1054273576010019e-015 5.4727225299707694e-030 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -872,12 +961,12 @@ createNode transform -n "neck_C0_head" -p "neck_C0_neck"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999933 0.999999999999999 0.99999999999999978 ; + setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999878 0.99999999999999933 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_headShape" -p "neck_C0_head"; - rename -uid "1FC8DAA2-4EF2-222C-6C8A-A389DFEBA4FA"; + rename -uid "1397A51B-4BF5-AE11-7318-72A65DDAAAE0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -889,8 +978,8 @@ createNode nurbsCurve -n "neck_C0_headShape" -p "neck_C0_head"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_head19Shape" -p "neck_C0_head"; - rename -uid "7B74EF89-456A-AB4F-9345-739D55E44F8C"; +createNode nurbsCurve -n "neck_C0_head22Shape" -p "neck_C0_head"; + rename -uid "13E98317-4326-BB9C-906D-E585C55AC7A5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -902,8 +991,8 @@ createNode nurbsCurve -n "neck_C0_head19Shape" -p "neck_C0_head"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_head20Shape" -p "neck_C0_head"; - rename -uid "61D6359C-4E4F-60F9-0451-09891327C900"; +createNode nurbsCurve -n "neck_C0_head23Shape" -p "neck_C0_head"; + rename -uid "5E1C78A0-4071-CDF1-87D5-6F9921068C78"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -915,8 +1004,8 @@ createNode nurbsCurve -n "neck_C0_head20Shape" -p "neck_C0_head"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_head21Shape" -p "neck_C0_head"; - rename -uid "7A441075-4716-B1B0-B7ED-71B2D7A5D791"; +createNode nurbsCurve -n "neck_C0_head24Shape" -p "neck_C0_head"; + rename -uid "0D692FD8-483C-50ED-F6F3-A3AF9CB022A2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -933,8 +1022,8 @@ createNode nurbsCurve -n "neck_C0_head21Shape" -p "neck_C0_head"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_head21_0crvShape" -p "neck_C0_head"; - rename -uid "9732F673-4957-FF96-43DE-5BBA670DD088"; +createNode nurbsCurve -n "neck_C0_head24_0crvShape" -p "neck_C0_head"; + rename -uid "7CFCC455-467C-DF28-B238-F998AC9A9D2A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -951,8 +1040,8 @@ createNode nurbsCurve -n "neck_C0_head21_0crvShape" -p "neck_C0_head"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_head21_1crvShape" -p "neck_C0_head"; - rename -uid "8637BF61-46D3-4096-D334-DB93B5D168D0"; +createNode nurbsCurve -n "neck_C0_head24_1crvShape" -p "neck_C0_head"; + rename -uid "FE6F196A-4743-3F5F-F4AA-57A5A76750CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -970,10 +1059,10 @@ createNode nurbsCurve -n "neck_C0_head21_1crvShape" -p "neck_C0_head"; 0 0 -0.1875 ; createNode transform -n "neck_C0_eff" -p "neck_C0_head"; - rename -uid "BA78CFE6-4FB0-EEAE-40CA-D4B764B8C489"; + rename -uid "D17DB9AA-41AE-6F82-5CFA-3C83598B1989"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.028362147187278808 2.6770463465994707 4.5418821062020015e-015 ; + setAttr ".t" -type "double3" 0.028362147187275255 2.6770463465994698 4.541882106202e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -981,12 +1070,12 @@ createNode transform -n "neck_C0_eff" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000007 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000004 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_effShape" -p "neck_C0_eff"; - rename -uid "A6777EFE-4AC3-F0FB-375A-DB82F27E0B14"; + rename -uid "FCD08A25-462B-5828-F504-F386D8B9A61B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -998,8 +1087,8 @@ createNode nurbsCurve -n "neck_C0_effShape" -p "neck_C0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_eff19Shape" -p "neck_C0_eff"; - rename -uid "D9390EC9-4232-1D1F-D35F-4D8406412391"; +createNode nurbsCurve -n "neck_C0_eff22Shape" -p "neck_C0_eff"; + rename -uid "A15E8346-4F3F-3613-324E-F995A32888F0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1011,8 +1100,8 @@ createNode nurbsCurve -n "neck_C0_eff19Shape" -p "neck_C0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_eff20Shape" -p "neck_C0_eff"; - rename -uid "F43D0005-44B3-FE70-C79B-54BD4228E93B"; +createNode nurbsCurve -n "neck_C0_eff23Shape" -p "neck_C0_eff"; + rename -uid "197F5289-4651-D3BA-336B-A89FE8855D5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1024,8 +1113,8 @@ createNode nurbsCurve -n "neck_C0_eff20Shape" -p "neck_C0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_eff21Shape" -p "neck_C0_eff"; - rename -uid "34512E59-4027-B0AE-094C-99925AE80EAD"; +createNode nurbsCurve -n "neck_C0_eff24Shape" -p "neck_C0_eff"; + rename -uid "C54F5E1C-48E7-F359-41F3-048B6371AE30"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1042,8 +1131,8 @@ createNode nurbsCurve -n "neck_C0_eff21Shape" -p "neck_C0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_eff21_0crvShape" -p "neck_C0_eff"; - rename -uid "7B20B3C3-4D29-9D2B-0D6A-CDB7D41FD785"; +createNode nurbsCurve -n "neck_C0_eff24_0crvShape" -p "neck_C0_eff"; + rename -uid "1ABDBFDF-492D-88E2-8888-65A36EC57FAF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1060,8 +1149,8 @@ createNode nurbsCurve -n "neck_C0_eff21_0crvShape" -p "neck_C0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_eff21_1crvShape" -p "neck_C0_eff"; - rename -uid "32552CB1-4BE3-1145-6D05-BF8EE5E7F4F3"; +createNode nurbsCurve -n "neck_C0_eff24_1crvShape" -p "neck_C0_eff"; + rename -uid "E394A3F4-48C0-C686-6763-05ABB047015E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1079,7 +1168,7 @@ createNode nurbsCurve -n "neck_C0_eff21_1crvShape" -p "neck_C0_eff"; 0 0 -0.1875 ; createNode transform -n "spineUI_C0_root" -p "neck_C0_eff"; - rename -uid "C3949E80-4351-9311-62F5-DA82F526D055"; + rename -uid "59586D3F-437D-B95A-E7B3-32BF16139C76"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1091,7 +1180,7 @@ createNode transform -n "spineUI_C0_root" -p "neck_C0_eff"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -1103,21 +1192,23 @@ createNode transform -n "spineUI_C0_root" -p "neck_C0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -3.2992211017816819 -0.74362823191861871 -4.3347348183670675 ; + setAttr ".t" -type "double3" -3.2992211017816793 -0.74362823191861693 -4.3347348183670693 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0.038224192844409803 89.999999999999957 0 ; + setAttr ".r" -type "double3" 0.038224192844406001 89.999999999999957 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 2.3915882794427561 2.3915882794427552 2.3915882794427579 ; + setAttr ".s" -type "double3" 2.391588279442757 2.3915882794427556 2.3915882794427583 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -1129,12 +1220,8 @@ createNode transform -n "spineUI_C0_root" -p "neck_C0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "spineUI_C0_rootShape" -p "spineUI_C0_root"; - rename -uid "C7BFD03A-4E18-891F-0A85-B4B56B543613"; + rename -uid "B66352C3-4D24-B286-0E70-D693328FA173"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1146,8 +1233,8 @@ createNode nurbsCurve -n "spineUI_C0_rootShape" -p "spineUI_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "spineUI_C0_root19Shape" -p "spineUI_C0_root"; - rename -uid "3250339C-47FC-D5C9-5314-B0B84F27412D"; +createNode nurbsCurve -n "spineUI_C0_root22Shape" -p "spineUI_C0_root"; + rename -uid "BF1B2478-4AE2-3294-71DA-699AC21CAE7A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1159,8 +1246,8 @@ createNode nurbsCurve -n "spineUI_C0_root19Shape" -p "spineUI_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "spineUI_C0_root20Shape" -p "spineUI_C0_root"; - rename -uid "C6C57DF0-41A9-98AE-7719-928F940DA24E"; +createNode nurbsCurve -n "spineUI_C0_root23Shape" -p "spineUI_C0_root"; + rename -uid "87A3AFD8-4645-28A5-C095-E3AC5F67D1EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1172,8 +1259,8 @@ createNode nurbsCurve -n "spineUI_C0_root20Shape" -p "spineUI_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "spineUI_C0_root21Shape" -p "spineUI_C0_root"; - rename -uid "43178BBA-4761-CA73-7BA8-9BBD7AC4D443"; +createNode nurbsCurve -n "spineUI_C0_root24Shape" -p "spineUI_C0_root"; + rename -uid "6A8BF3CB-4190-9446-824D-66B48993D309"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1200,10 +1287,10 @@ createNode nurbsCurve -n "spineUI_C0_root21Shape" -p "spineUI_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "spineUI_C0_sizeRef" -p "spineUI_C0_root"; - rename -uid "C02F48C0-4402-55CC-DED8-A99188CB20E8"; + rename -uid "47EF90FE-4F8B-2AE6-09D9-D28A93A76794"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.8817841970012523e-016 0 1 ; + setAttr ".t" -type "double3" 0 -8.8817841970012523e-016 0.99999999999999956 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1211,12 +1298,12 @@ createNode transform -n "spineUI_C0_sizeRef" -p "spineUI_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000002 0.99999999999999967 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 0.99999999999999933 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "headUI_C0_root" -p "neck_C0_eff"; - rename -uid "B0AA035E-447A-7A2A-FF1D-7499C4FE70A5"; + rename -uid "634F1E41-4BA1-FA7F-B8B9-16A55D24F436"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1228,7 +1315,7 @@ createNode transform -n "headUI_C0_root" -p "neck_C0_eff"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -1240,12 +1327,14 @@ createNode transform -n "headUI_C0_root" -p "neck_C0_eff"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.5 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 7.1054273576010019e-015 2.9303186274198669 6.1165723857933474e-016 ; + setAttr ".t" -type "double3" 1.0658141036401503e-014 2.9303186274198687 6.1165723857933553e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1253,7 +1342,7 @@ createNode transform -n "headUI_C0_root" -p "neck_C0_eff"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999978 0.99999999999999967 ; + setAttr ".s" -type "double3" 1.0000000000000002 1 0.99999999999999989 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -1265,12 +1354,8 @@ createNode transform -n "headUI_C0_root" -p "neck_C0_eff"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 0.5; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "headUI_C0_rootShape" -p "headUI_C0_root"; - rename -uid "DDDC3BA8-4106-CAFB-FE8E-27976F46ACC6"; + rename -uid "B6C1E8C5-4009-6C3E-AA4D-5895C2E19275"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1282,8 +1367,8 @@ createNode nurbsCurve -n "headUI_C0_rootShape" -p "headUI_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "headUI_C0_root10Shape" -p "headUI_C0_root"; - rename -uid "DA430C66-437A-EFDA-0E0F-E4A01C0AFB47"; +createNode nurbsCurve -n "headUI_C0_root13Shape" -p "headUI_C0_root"; + rename -uid "849D66D3-40FC-78E0-8E9A-86887103CE4E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1295,8 +1380,8 @@ createNode nurbsCurve -n "headUI_C0_root10Shape" -p "headUI_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "headUI_C0_root11Shape" -p "headUI_C0_root"; - rename -uid "47649688-4B65-0948-A773-399DB17214D9"; +createNode nurbsCurve -n "headUI_C0_root14Shape" -p "headUI_C0_root"; + rename -uid "245EEB45-43D7-EA6A-800E-6FBF3585078D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1308,8 +1393,8 @@ createNode nurbsCurve -n "headUI_C0_root11Shape" -p "headUI_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "headUI_C0_root12Shape" -p "headUI_C0_root"; - rename -uid "9CA43DDD-4F7B-B116-D7A3-F798EDD37FE3"; +createNode nurbsCurve -n "headUI_C0_root15Shape" -p "headUI_C0_root"; + rename -uid "F06AF8B8-4622-7BC8-21B3-9C868D7CA982"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1336,24 +1421,24 @@ createNode nurbsCurve -n "headUI_C0_root12Shape" -p "headUI_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "headUI_C0_sizeRef" -p "headUI_C0_root"; - rename -uid "E736EBD7-40D1-6BFC-4CB8-7690EB334D87"; + rename -uid "977C0EA2-41DF-E0C9-712A-50A694BB47FD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.3915877472269305 -0.0015955193487808828 -1.0620785493044065e-015 ; + setAttr ".t" -type "double3" 2.3915877472269269 -0.0015955193487791064 -1.0620785493044065e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0.038224192844409817 89.999999999999957 0 ; + setAttr ".r" -type "double3" 0.038224192844406014 89.999999999999957 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 2.3915882794427574 2.3915882794427561 2.391588279442757 ; + setAttr ".s" -type "double3" 2.3915882794427565 2.3915882794427561 2.3915882794427561 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "mouth_C0_root" -p "neck_C0_head"; - rename -uid "D841AAF3-47DE-97A5-AE7E-FD995C00DE83"; + rename -uid "91557551-43A4-8822-B550-4BA0F8077897"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1363,18 +1448,18 @@ createNode transform -n "mouth_C0_root" -p "neck_C0_head"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.69584514547310761 0.71792767893744003 1.4003887623375056e-015 ; + setAttr ".t" -type "double3" 0.69584514547310405 0.71792767893743914 1.4003887623375046e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0.038224192844409824 89.999999999999957 0 ; + setAttr ".r" -type "double3" 0.038224192844406014 89.999999999999957 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.5373820334294297 0.53738203342942958 0.53738203342943014 ; + setAttr ".s" -type "double3" 0.53738203342942958 0.53738203342942947 0.53738203342943014 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -1384,9 +1469,8 @@ createNode transform -n "mouth_C0_root" -p "neck_C0_head"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "headUI_C0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "mouth_C0_rootShape" -p "mouth_C0_root"; - rename -uid "36191686-4714-E199-A4D3-BD9AD1637C4F"; + rename -uid "CA270A76-4FE2-E556-814C-35B320D1A5F6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1398,8 +1482,8 @@ createNode nurbsCurve -n "mouth_C0_rootShape" -p "mouth_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_root19Shape" -p "mouth_C0_root"; - rename -uid "277CC323-492D-F29E-BFDB-12905103EA5E"; +createNode nurbsCurve -n "mouth_C0_root22Shape" -p "mouth_C0_root"; + rename -uid "AB7A675A-42EC-E84D-4FE8-288BFE7C2F48"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1411,8 +1495,8 @@ createNode nurbsCurve -n "mouth_C0_root19Shape" -p "mouth_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_root20Shape" -p "mouth_C0_root"; - rename -uid "3DCD461A-4ADD-8363-049F-E98230C73134"; +createNode nurbsCurve -n "mouth_C0_root23Shape" -p "mouth_C0_root"; + rename -uid "3683E301-41D8-0DAA-ABC3-B78624C29CF4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1424,8 +1508,8 @@ createNode nurbsCurve -n "mouth_C0_root20Shape" -p "mouth_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_root21Shape" -p "mouth_C0_root"; - rename -uid "56564634-4483-A6DF-F637-E397C2953D73"; +createNode nurbsCurve -n "mouth_C0_root24Shape" -p "mouth_C0_root"; + rename -uid "4669D13F-4E4C-2E13-4094-499ACA6B91D4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1452,10 +1536,10 @@ createNode nurbsCurve -n "mouth_C0_root21Shape" -p "mouth_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "mouth_C0_rotcenter" -p "mouth_C0_root"; - rename -uid "8703B666-4DB2-B6EA-EB01-5DBDAC852A4C"; + rename -uid "D9EA27ED-4561-7ABE-9371-F186F061298A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.9976714398398449e-029 -3.5527136788005009e-015 2.1316282072803006e-014 ; + setAttr ".t" -type "double3" 3.3132158019282496e-029 -3.5527136788005009e-015 2.4868995751603507e-014 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1463,12 +1547,12 @@ createNode transform -n "mouth_C0_rotcenter" -p "mouth_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999833 0.99999999999999845 ; + setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999833 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_rotcenterShape" -p "mouth_C0_rotcenter"; - rename -uid "10B04249-4F0B-A56C-8B36-AD9DF2B248F0"; + rename -uid "F756D1D8-405D-BF37-DEAC-E2A7AD30CA66"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1480,8 +1564,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenterShape" -p "mouth_C0_rotcenter"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter19Shape" -p "mouth_C0_rotcenter"; - rename -uid "BC946AE7-4534-29BF-D727-E29FF496D2B3"; +createNode nurbsCurve -n "mouth_C0_rotcenter22Shape" -p "mouth_C0_rotcenter"; + rename -uid "5BDA84D5-40C3-211D-AF7A-E48FDAF4DB5B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1493,8 +1577,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter19Shape" -p "mouth_C0_rotcenter"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter20Shape" -p "mouth_C0_rotcenter"; - rename -uid "2B7C6618-4270-E01B-4BA8-66B45C7E59D0"; +createNode nurbsCurve -n "mouth_C0_rotcenter23Shape" -p "mouth_C0_rotcenter"; + rename -uid "C8A34795-448D-72D2-7060-508DB7F2AFE0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1506,8 +1590,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter20Shape" -p "mouth_C0_rotcenter"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_rotcenter21Shape" -p "mouth_C0_rotcenter"; - rename -uid "6AF38691-449B-C056-6C37-8897F63B7123"; +createNode nurbsCurve -n "mouth_C0_rotcenter24Shape" -p "mouth_C0_rotcenter"; + rename -uid "72991C91-45D8-80CF-80E6-60A837E3FBF1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1524,8 +1608,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter21Shape" -p "mouth_C0_rotcenter"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter21_0crvShape" -p "mouth_C0_rotcenter"; - rename -uid "F3E45F69-4BC7-B863-BE31-549E8CD949A9"; +createNode nurbsCurve -n "mouth_C0_rotcenter24_0crvShape" -p "mouth_C0_rotcenter"; + rename -uid "86A4FCED-478C-8CDE-3E03-4CB9672D4A38"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1542,8 +1626,8 @@ createNode nurbsCurve -n "mouth_C0_rotcenter21_0crvShape" -p "mouth_C0_rotcenter 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_rotcenter21_1crvShape" -p "mouth_C0_rotcenter"; - rename -uid "349C8520-4BB0-6251-2BF4-6A9ABE7E1049"; +createNode nurbsCurve -n "mouth_C0_rotcenter24_1crvShape" -p "mouth_C0_rotcenter"; + rename -uid "A936D7FE-4BC8-C383-8F22-65A49571EA12"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1561,10 +1645,10 @@ createNode nurbsCurve -n "mouth_C0_rotcenter21_1crvShape" -p "mouth_C0_rotcenter 0 0 -0.1875 ; createNode transform -n "mouth_C0_lipup" -p "mouth_C0_rotcenter"; - rename -uid "8208F79C-44FF-5F79-D955-46B5D3864E8A"; + rename -uid "126AE641-44CD-780D-6F44-A4A0200F8764"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 4.2971167579553764e-015 -0.83057537847144047 2.6485854255406984 ; + setAttr ".t" -type "double3" 4.2971167579553779e-015 -0.83057537847144047 2.6485854255406984 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1572,12 +1656,12 @@ createNode transform -n "mouth_C0_lipup" -p "mouth_C0_rotcenter"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999944 0.99999999999999978 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999944 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_lipupShape" -p "mouth_C0_lipup"; - rename -uid "2277C8E1-43CC-D24D-55AE-3FBFC37EABDB"; + rename -uid "5EA25A74-4862-8E12-5382-848F892F0FE4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1589,8 +1673,8 @@ createNode nurbsCurve -n "mouth_C0_lipupShape" -p "mouth_C0_lipup"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup19Shape" -p "mouth_C0_lipup"; - rename -uid "99781C56-4FF4-FB53-E25E-6B986D367380"; +createNode nurbsCurve -n "mouth_C0_lipup22Shape" -p "mouth_C0_lipup"; + rename -uid "C33AEF3B-43A2-3099-4774-6096A8E5D386"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1602,8 +1686,8 @@ createNode nurbsCurve -n "mouth_C0_lipup19Shape" -p "mouth_C0_lipup"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_lipup20Shape" -p "mouth_C0_lipup"; - rename -uid "83396BF8-4974-19B6-CCB5-B78B24A71C9B"; +createNode nurbsCurve -n "mouth_C0_lipup23Shape" -p "mouth_C0_lipup"; + rename -uid "A0697985-446D-0FCE-2FE4-B9B58A8D949E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1615,8 +1699,8 @@ createNode nurbsCurve -n "mouth_C0_lipup20Shape" -p "mouth_C0_lipup"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_lipup21Shape" -p "mouth_C0_lipup"; - rename -uid "5EDD7F60-40C6-51B6-0DE9-DF8FA700D334"; +createNode nurbsCurve -n "mouth_C0_lipup24Shape" -p "mouth_C0_lipup"; + rename -uid "39BAF601-4C34-6B7A-BCB1-F39EA65B1A96"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1633,8 +1717,8 @@ createNode nurbsCurve -n "mouth_C0_lipup21Shape" -p "mouth_C0_lipup"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup21_0crvShape" -p "mouth_C0_lipup"; - rename -uid "5AD34162-407E-8797-5825-398B29EAAA7B"; +createNode nurbsCurve -n "mouth_C0_lipup24_0crvShape" -p "mouth_C0_lipup"; + rename -uid "F68A408F-41C0-D7AF-781B-30A1723CE72E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1651,8 +1735,8 @@ createNode nurbsCurve -n "mouth_C0_lipup21_0crvShape" -p "mouth_C0_lipup"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_lipup21_1crvShape" -p "mouth_C0_lipup"; - rename -uid "0980A657-436E-AA99-5BF7-26A872965A7B"; +createNode nurbsCurve -n "mouth_C0_lipup24_1crvShape" -p "mouth_C0_lipup"; + rename -uid "DC2919AC-4000-8CD1-BF71-E8979C937275"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1670,18 +1754,18 @@ createNode nurbsCurve -n "mouth_C0_lipup21_1crvShape" -p "mouth_C0_lipup"; 0 0 -0.1875 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_lipup"; - rename -uid "890BADFA-4F57-8B66-06C0-41831BA901E0"; + rename -uid "2C70D9F8-4D19-B1E8-A9B9-05BDE026293D"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -1.3722175990868861e-014 -14.161367226604183 -19.457469484456148 ; - setAttr ".s" -type "double3" 4.4504433171691238 4.4504433171691282 4.4504433171691229 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; - rename -uid "8EE8E809-48A1-F189-0A30-0E849F1AC185"; + setAttr ".t" -type "double3" -1.3722175990868867e-014 -14.161367226604185 -19.457469484456155 ; + setAttr ".s" -type "double3" 4.4504433171691247 4.4504433171691282 4.4504433171691247 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; + rename -uid "ADFCE0AB-4357-21CF-3670-E29EF0B07320"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; - rename -uid "FA350108-41D1-95C9-2B51-0496DB6FDF2A"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv"; + rename -uid "34A597C5-497C-3343-39D6-218A10893D07"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -1692,7 +1776,7 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 ; createNode transform -n "mouth_C0_liplow" -p "mouth_C0_rotcenter"; - rename -uid "ABB95FF0-4336-2D2C-5005-6C81D5668CC9"; + rename -uid "2D5FCAD8-4150-5287-F6D0-C58EC53433D0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 3.7198567879251422e-015 -1.1237321151316078 2.4565606483465565 ; @@ -1703,12 +1787,12 @@ createNode transform -n "mouth_C0_liplow" -p "mouth_C0_rotcenter"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999944 0.99999999999999978 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999944 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_liplowShape" -p "mouth_C0_liplow"; - rename -uid "D3160EF2-4075-35A6-1BFD-37B5EB76E942"; + rename -uid "FF865A74-48F3-B435-4C2B-37BF2E3F58BD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1720,8 +1804,8 @@ createNode nurbsCurve -n "mouth_C0_liplowShape" -p "mouth_C0_liplow"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow19Shape" -p "mouth_C0_liplow"; - rename -uid "165042A1-43B5-82CF-C748-428242E882EA"; +createNode nurbsCurve -n "mouth_C0_liplow22Shape" -p "mouth_C0_liplow"; + rename -uid "D6A8940B-40FD-A869-B094-719BFAA44D0F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1733,8 +1817,8 @@ createNode nurbsCurve -n "mouth_C0_liplow19Shape" -p "mouth_C0_liplow"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_liplow20Shape" -p "mouth_C0_liplow"; - rename -uid "48F28A05-434A-5558-CB04-1AA233A27B8F"; +createNode nurbsCurve -n "mouth_C0_liplow23Shape" -p "mouth_C0_liplow"; + rename -uid "265362F5-4FBC-2E68-FFE9-B9A42B4BD986"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1746,8 +1830,8 @@ createNode nurbsCurve -n "mouth_C0_liplow20Shape" -p "mouth_C0_liplow"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_liplow21Shape" -p "mouth_C0_liplow"; - rename -uid "DBB55BB7-4743-FC4A-A528-54A664F49E46"; +createNode nurbsCurve -n "mouth_C0_liplow24Shape" -p "mouth_C0_liplow"; + rename -uid "EA5C51F1-4323-1F6C-F8EC-52B85E0AB193"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1764,8 +1848,8 @@ createNode nurbsCurve -n "mouth_C0_liplow21Shape" -p "mouth_C0_liplow"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow21_0crvShape" -p "mouth_C0_liplow"; - rename -uid "943FC26D-4AA9-54B8-EB89-0CB8CF9DF96F"; +createNode nurbsCurve -n "mouth_C0_liplow24_0crvShape" -p "mouth_C0_liplow"; + rename -uid "6F42407B-4C10-15C4-E571-C8A73457E2B4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1782,8 +1866,8 @@ createNode nurbsCurve -n "mouth_C0_liplow21_0crvShape" -p "mouth_C0_liplow"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_liplow21_1crvShape" -p "mouth_C0_liplow"; - rename -uid "7A8254CE-4D66-E25E-EA9D-159D9F746A52"; +createNode nurbsCurve -n "mouth_C0_liplow24_1crvShape" -p "mouth_C0_liplow"; + rename -uid "42B9409E-4AD5-94F3-A1E4-4B89B66FA4EE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1801,18 +1885,18 @@ createNode nurbsCurve -n "mouth_C0_liplow21_1crvShape" -p "mouth_C0_liplow"; 0 0 -0.1875 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_liplow"; - rename -uid "0BD27BC7-492D-3CF1-063A-F68EFB8D34E9"; + rename -uid "6CFE16BA-4C68-30A9-15F0-7BBCD2915ECF"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -1.3144916020838624e-014 -13.868210489944016 -19.265444707262002 ; - setAttr ".s" -type "double3" 4.4504433171691238 4.4504433171691282 4.4504433171691229 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; - rename -uid "8D1DD79C-4910-4A62-5B96-3CB03FED0EFF"; + setAttr ".t" -type "double3" -1.3144916020838627e-014 -13.868210489944017 -19.265444707262013 ; + setAttr ".s" -type "double3" 4.4504433171691247 4.4504433171691282 4.4504433171691247 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; + rename -uid "0682BD75-4BD0-3805-35A9-129CD4488A30"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; - rename -uid "B7C78B89-4940-D07C-ADD6-D0A8CFEE3509"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv"; + rename -uid "6C8B95A9-49BA-CC2A-F942-BE85C7EF5796"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -1823,10 +1907,10 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 ; createNode transform -n "mouth_C0_jaw" -p "mouth_C0_root"; - rename -uid "B265A8EE-4757-0D91-DFFC-C890E595AECC"; + rename -uid "83E6C5BB-4C0A-0AE7-19B9-D08203689BE1"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.3132158019282496e-029 -1.9431960625636933 2.006989566316264 ; + setAttr ".t" -type "double3" 3.4709879829724519e-029 -1.9431960625636933 2.0069895663162676 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -1834,12 +1918,12 @@ createNode transform -n "mouth_C0_jaw" -p "mouth_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.999999999999999 0.99999999999999833 0.99999999999999845 ; + setAttr ".s" -type "double3" 0.99999999999999911 0.99999999999999833 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "mouth_C0_jawShape" -p "mouth_C0_jaw"; - rename -uid "CB88587D-40AE-144E-F095-728D516E3FF3"; + rename -uid "09CF5534-4420-EAF3-635F-AA9BC3F760D9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1851,8 +1935,8 @@ createNode nurbsCurve -n "mouth_C0_jawShape" -p "mouth_C0_jaw"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw19Shape" -p "mouth_C0_jaw"; - rename -uid "A8352041-4E4D-0A90-E64F-8C822FF1855F"; +createNode nurbsCurve -n "mouth_C0_jaw22Shape" -p "mouth_C0_jaw"; + rename -uid "B09F3321-49B9-B553-3E69-2583771E91EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1864,8 +1948,8 @@ createNode nurbsCurve -n "mouth_C0_jaw19Shape" -p "mouth_C0_jaw"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "mouth_C0_jaw20Shape" -p "mouth_C0_jaw"; - rename -uid "F2192253-4EFE-568B-D342-6B8CB4769E3B"; +createNode nurbsCurve -n "mouth_C0_jaw23Shape" -p "mouth_C0_jaw"; + rename -uid "B8BCB540-45FA-9079-3B28-378EF6253843"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1877,8 +1961,8 @@ createNode nurbsCurve -n "mouth_C0_jaw20Shape" -p "mouth_C0_jaw"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "mouth_C0_jaw21Shape" -p "mouth_C0_jaw"; - rename -uid "E9EA10EB-41CB-D38D-EF84-26BC097A3E72"; +createNode nurbsCurve -n "mouth_C0_jaw24Shape" -p "mouth_C0_jaw"; + rename -uid "D8827A0A-4C80-B4E0-A9A3-248DEB8CC338"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1895,8 +1979,8 @@ createNode nurbsCurve -n "mouth_C0_jaw21Shape" -p "mouth_C0_jaw"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw21_0crvShape" -p "mouth_C0_jaw"; - rename -uid "516CAF7A-4B04-4CFE-1317-B8BD8D5F29F7"; +createNode nurbsCurve -n "mouth_C0_jaw24_0crvShape" -p "mouth_C0_jaw"; + rename -uid "FE1F758B-48FA-5531-E514-3387E6ADCF52"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1913,8 +1997,8 @@ createNode nurbsCurve -n "mouth_C0_jaw21_0crvShape" -p "mouth_C0_jaw"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "mouth_C0_jaw21_1crvShape" -p "mouth_C0_jaw"; - rename -uid "91A4CAEA-4B96-8020-6BC7-CB93A6EE73D4"; +createNode nurbsCurve -n "mouth_C0_jaw24_1crvShape" -p "mouth_C0_jaw"; + rename -uid "E19D81C4-440B-CAED-1B95-37A1C433E3DE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -1932,18 +2016,18 @@ createNode nurbsCurve -n "mouth_C0_jaw21_1crvShape" -p "mouth_C0_jaw"; 0 0 -0.1875 ; createNode transform -n "mouth_C0_crv" -p "mouth_C0_root"; - rename -uid "F41D9D3A-46FC-6C8F-239C-E2A1BB88E633"; + rename -uid "F66898FA-4111-FB81-BF5F-E18B61B60381"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -9.4250592329134309e-015 -14.991942605075595 -16.808884058915393 ; - setAttr ".s" -type "double3" 4.4504433171691176 4.4504433171691185 4.4504433171691149 ; -createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; - rename -uid "728B1211-48F4-B070-96B5-8980058A8F11"; + setAttr ".t" -type "double3" -9.4250592329134356e-015 -14.991942605075595 -16.808884058915393 ; + setAttr ".s" -type "double3" 4.4504433171691185 4.4504433171691185 4.4504433171691149 ; +createNode nurbsCurve -n "mouth_C0_crvShape" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; + rename -uid "E4DEC7B0-4A58-1C15-B794-00B93F924B97"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; - rename -uid "6C9A0FAA-4D66-4D63-B56B-39A83F0897C0"; +createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv"; + rename -uid "7D2D681A-4DAB-EA2E-10C0-6AB8A48C4AA8"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -1953,19 +2037,19 @@ createNode nurbsCurve -n "mouth_C0_crvShapeOrig" -p "|guide|local_C0_root|body_C 0 0 0 0 0 0 ; -createNode transform -n "mouth_C0_crv7" -p "mouth_C0_root"; - rename -uid "A4F2FE17-442A-CA5D-0523-01860C0942C4"; +createNode transform -n "mouth_C0_crv8" -p "mouth_C0_root"; + rename -uid "94AA9D3F-44E8-9E75-A59C-7BAEAD7FE93C"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -9.4250592329134309e-015 -14.991942605075595 -16.808884058915393 ; - setAttr ".s" -type "double3" 4.4504433171691176 4.4504433171691185 4.4504433171691149 ; -createNode nurbsCurve -n "mouth_C0_crv7Shape" -p "mouth_C0_crv7"; - rename -uid "2E63BEAD-4852-8230-2E2F-6696C9EDDF32"; + setAttr ".t" -type "double3" -9.4250592329134356e-015 -14.991942605075595 -16.808884058915393 ; + setAttr ".s" -type "double3" 4.4504433171691185 4.4504433171691185 4.4504433171691149 ; +createNode nurbsCurve -n "mouth_C0_crv8Shape" -p "mouth_C0_crv8"; + rename -uid "A3FA8B5B-4CAE-3DDB-C78B-D093627B0825"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; -createNode nurbsCurve -n "mouth_C0_crv7ShapeOrig" -p "mouth_C0_crv7"; - rename -uid "B459A6BF-4CCD-CCC3-2B98-2B8024586BBB"; +createNode nurbsCurve -n "mouth_C0_crv8ShapeOrig" -p "mouth_C0_crv8"; + rename -uid "3F7AF5F8-44FA-B891-894B-E4ADFE510EB3"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -1976,7 +2060,7 @@ createNode nurbsCurve -n "mouth_C0_crv7ShapeOrig" -p "mouth_C0_crv7"; 0 0 0 ; createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; - rename -uid "9AF4105A-4DAF-41AD-4E50-F68E444C1188"; + rename -uid "4ECDE7D0-4380-A002-245A-CB8FD817BE9F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -1988,33 +2072,35 @@ createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ro" -ln "k_ro" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rx" -ln "k_rx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_ry" -ln "k_ry" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_rz" -ln "k_rz" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sx" -ln "k_sx" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tx" -ln "k_tx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ty" -ln "k_ty" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_tz" -ln "k_tz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ro" -ln "k_ro" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rx" -ln "k_rx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_ry" -ln "k_ry" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_rz" -ln "k_rz" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sx" -ln "k_sx" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sy" -ln "k_sy" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "k_sz" -ln "k_sz" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 1 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 4.9771436298332112 1.022199806296153 -1.7545700686211258e-015 ; + setAttr ".t" -type "double3" 4.9771436298332059 1.0221998062961521 -1.7545700686211268e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0.038224192844409817 89.999999999999957 0 ; + setAttr ".r" -type "double3" 0.038224192844406028 89.999999999999957 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 2.3915882794427579 2.3915882794427579 2.391588279442757 ; + setAttr ".s" -type "double3" 2.3915882794427574 2.3915882794427574 2.3915882794427561 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -2026,22 +2112,8 @@ createNode transform -n "eyeslook_C0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "square"; setAttr ".ikrefarray" -type "string" "neck_C0_eff,COG_C0_root,local_C0_root"; - setAttr ".uniScale" yes; - setAttr ".k_tx" yes; - setAttr ".k_ty" yes; - setAttr ".k_tz" yes; - setAttr ".k_ro" yes; - setAttr ".k_rx" yes; - setAttr ".k_ry" yes; - setAttr ".k_rz" yes; - setAttr ".k_sx" yes; - setAttr ".k_sy" yes; - setAttr ".k_sz" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 1; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eyeslook_C0_rootShape" -p "eyeslook_C0_root"; - rename -uid "F302D617-448E-5D1A-97FE-189DA7E3A55F"; + rename -uid "2EA818C9-4DE0-5958-AE2D-ED83D4956A9D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2053,8 +2125,8 @@ createNode nurbsCurve -n "eyeslook_C0_rootShape" -p "eyeslook_C0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eyeslook_C0_root19Shape" -p "eyeslook_C0_root"; - rename -uid "91B7DE14-45A0-93A9-827A-00AFB6F25B69"; +createNode nurbsCurve -n "eyeslook_C0_root22Shape" -p "eyeslook_C0_root"; + rename -uid "C1424482-4290-112E-358D-BD9E6EAA2286"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2066,8 +2138,8 @@ createNode nurbsCurve -n "eyeslook_C0_root19Shape" -p "eyeslook_C0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eyeslook_C0_root20Shape" -p "eyeslook_C0_root"; - rename -uid "0D7DA6E9-490B-C2F5-F173-C084A41ED275"; +createNode nurbsCurve -n "eyeslook_C0_root23Shape" -p "eyeslook_C0_root"; + rename -uid "ADAE8539-47A1-F160-57DC-38B70B44686E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2079,8 +2151,8 @@ createNode nurbsCurve -n "eyeslook_C0_root20Shape" -p "eyeslook_C0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eyeslook_C0_root21Shape" -p "eyeslook_C0_root"; - rename -uid "2172155B-41DF-C2CA-349E-CF853A737EDC"; +createNode nurbsCurve -n "eyeslook_C0_root24Shape" -p "eyeslook_C0_root"; + rename -uid "92D6B96A-4847-6391-4EE7-E1BD148F4296"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2107,10 +2179,10 @@ createNode nurbsCurve -n "eyeslook_C0_root21Shape" -p "eyeslook_C0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eyeslook_C0_sizeRef" -p "eyeslook_C0_root"; - rename -uid "52110D1B-4704-3447-59F9-E88C35F1096E"; + rename -uid "3C9D753E-4251-7929-FAD0-62BC044D2A28"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1102230246251558e-015 0 1 ; + setAttr ".t" -type "double3" 1.1102230246251565e-015 0 1.0000000000000036 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2118,12 +2190,12 @@ createNode transform -n "eyeslook_C0_sizeRef" -p "eyeslook_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999956 1.0000000000000004 ; + setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999978 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "eye_L0_root" -p "neck_C0_head"; - rename -uid "359EFD96-40E1-93CB-9060-7CBC8AD3F975"; + rename -uid "7926DD38-4DF6-BA50-C87E-41A35CDEDD50"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -2136,9 +2208,9 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; -max 2 -en "X:Y:Z" -at "enum"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.25733245506886071 1.0267893607782357 -0.42107730061382631 ; + setAttr ".t" -type "double3" 0.25733245506885538 1.0267893607782348 -0.42107730061382626 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2147,7 +2219,7 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 2.3915882794427543 2.3915882794427614 2.391588279442753 ; + setAttr ".s" -type "double3" 2.391588279442753 2.391588279442761 2.3915882794427525 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -2159,9 +2231,8 @@ createNode transform -n "eye_L0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr -k on ".upVectorDirection" 1; setAttr ".ikrefarray" -type "string" "eyesAim_C0_root"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eye_L0_rootShape" -p "eye_L0_root"; - rename -uid "EBA79DF1-45B3-5463-6CF1-31A4738A6946"; + rename -uid "F83BAD8D-4C02-7A3F-02C8-719383DC5E45"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2173,8 +2244,8 @@ createNode nurbsCurve -n "eye_L0_rootShape" -p "eye_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_L0_root19Shape" -p "eye_L0_root"; - rename -uid "CA1FD827-4BEC-12A5-182F-DD8671B59E0F"; +createNode nurbsCurve -n "eye_L0_root22Shape" -p "eye_L0_root"; + rename -uid "7EC1AFA0-4096-0093-E1B0-24BEC09586EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2186,8 +2257,8 @@ createNode nurbsCurve -n "eye_L0_root19Shape" -p "eye_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_L0_root20Shape" -p "eye_L0_root"; - rename -uid "F64315D3-4EC3-C2E8-5C6E-AF87E5434CEB"; +createNode nurbsCurve -n "eye_L0_root23Shape" -p "eye_L0_root"; + rename -uid "1CC223AF-422F-2975-3D45-E1B88EAFA4E8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2199,8 +2270,8 @@ createNode nurbsCurve -n "eye_L0_root20Shape" -p "eye_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_L0_root21Shape" -p "eye_L0_root"; - rename -uid "A8A78025-40E6-73B1-4840-6B80187CD37B"; +createNode nurbsCurve -n "eye_L0_root24Shape" -p "eye_L0_root"; + rename -uid "8967C660-4DBF-8246-E0F0-1A935A820C63"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2227,10 +2298,10 @@ createNode nurbsCurve -n "eye_L0_root21Shape" -p "eye_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eye_L0_look" -p "eye_L0_root"; - rename -uid "4C63385C-4C16-702E-63B7-21B9BF1DE3B1"; + rename -uid "042A68A9-4419-D9DC-1EFA-ACB03B55BC50"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -5.5511151231257827e-016 7.9936057773011271e-015 2.0321341905376475 ; + setAttr ".t" -type "double3" -8.8817841970012523e-016 9.7699626167013776e-015 2.0321341905376498 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2238,12 +2309,12 @@ createNode transform -n "eye_L0_look" -p "eye_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 0.99999999999999811 1.0000000000000016 ; + setAttr ".s" -type "double3" 1.0000000000000013 0.99999999999999811 1.0000000000000018 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "eye_L0_lookShape" -p "eye_L0_look"; - rename -uid "04045B00-4930-117F-73C6-8BA856954B31"; + rename -uid "ABC4A518-4366-BFBD-6F48-6B8B401EFBF2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2255,8 +2326,8 @@ createNode nurbsCurve -n "eye_L0_lookShape" -p "eye_L0_look"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_L0_look19Shape" -p "eye_L0_look"; - rename -uid "20EF492C-4D69-B33C-AD4A-2B81C8586F06"; +createNode nurbsCurve -n "eye_L0_look22Shape" -p "eye_L0_look"; + rename -uid "095DAA0E-4B70-D84B-A3C2-9482C89438CD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2268,8 +2339,8 @@ createNode nurbsCurve -n "eye_L0_look19Shape" -p "eye_L0_look"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_L0_look20Shape" -p "eye_L0_look"; - rename -uid "7FB79EDE-47A8-19EA-E4F6-439E5FEC6547"; +createNode nurbsCurve -n "eye_L0_look23Shape" -p "eye_L0_look"; + rename -uid "4471EA98-44F2-7479-05DA-4884653E7E0E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2281,8 +2352,8 @@ createNode nurbsCurve -n "eye_L0_look20Shape" -p "eye_L0_look"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_L0_look21Shape" -p "eye_L0_look"; - rename -uid "B98DBC9B-4554-246A-150F-9EA2317DD2A3"; +createNode nurbsCurve -n "eye_L0_look24Shape" -p "eye_L0_look"; + rename -uid "7916437E-4EA3-4B24-7A7A-B4AD0C2201FA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2299,8 +2370,8 @@ createNode nurbsCurve -n "eye_L0_look21Shape" -p "eye_L0_look"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_L0_look21_0crvShape" -p "eye_L0_look"; - rename -uid "558860D3-409F-FFD9-6394-BAA26B967E0A"; +createNode nurbsCurve -n "eye_L0_look24_0crvShape" -p "eye_L0_look"; + rename -uid "0F98BD4C-4CD4-AF36-5565-53AF995EA861"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2317,8 +2388,8 @@ createNode nurbsCurve -n "eye_L0_look21_0crvShape" -p "eye_L0_look"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_L0_look21_1crvShape" -p "eye_L0_look"; - rename -uid "F2264568-45D4-5AEE-6225-9B98C40F3A8F"; +createNode nurbsCurve -n "eye_L0_look24_1crvShape" -p "eye_L0_look"; + rename -uid "3793F46D-49DE-758B-AE5B-74A5C9B840EB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2336,19 +2407,19 @@ createNode nurbsCurve -n "eye_L0_look21_1crvShape" -p "eye_L0_look"; 0 0 -0.1875 ; createNode transform -n "eye_L0_crv" -p "eye_L0_root"; - rename -uid "11A5D0D3-48CB-CC82-F136-E0A82F6F191F"; + rename -uid "8D3542CE-499D-61E4-EC58-578370679043"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.69889742974753399 -3.4976629291575771 -3.5292331821335634 ; - setAttr ".r" -type "double3" 0 -14.006447505262578 0 ; - setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999811 1.000000000000002 ; + setAttr ".t" -type "double3" 0.6988974297475341 -3.4976629291575771 -3.529233182133563 ; + setAttr ".r" -type "double3" 0 -14.006447505262575 0 ; + setAttr ".s" -type "double3" 1.0000000000000018 0.99999999999999822 1.0000000000000022 ; createNode nurbsCurve -n "eye_L0_crvShape" -p "eye_L0_crv"; - rename -uid "E324F924-44A1-370D-C5B7-35A55A600909"; + rename -uid "B8D76070-45EF-8A59-C87B-E4B63CB9E9CA"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "eye_L0_crvShapeOrig" -p "eye_L0_crv"; - rename -uid "0FED39C0-4C22-D444-A572-22A58A715360"; + rename -uid "52246594-4AD9-431B-292E-479C23FFFDDB"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -2359,7 +2430,7 @@ createNode nurbsCurve -n "eye_L0_crvShapeOrig" -p "eye_L0_crv"; 0 0 0 ; createNode transform -n "eye_R0_root" -p "neck_C0_head"; - rename -uid "A7D65803-4EE9-BDF9-9BCC-3E896ADA1038"; + rename -uid "322E4D85-4458-99B7-12C3-51BD64EC9736"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -2372,9 +2443,9 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; -max 2 -en "X:Y:Z" -at "enum"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.25733245506886426 1.0267893607782321 0.42107730061382803 ; + setAttr ".t" -type "double3" 0.25733245506885893 1.0267893607782295 0.42107730061382798 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2383,7 +2454,7 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 2.3915882794427552 2.3915882794427614 -2.3915882794427548 ; + setAttr ".s" -type "double3" 2.3915882794427543 2.391588279442761 -2.3915882794427543 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -2395,9 +2466,8 @@ createNode transform -n "eye_R0_root" -p "neck_C0_head"; setAttr ".ctlGrp" -type "string" ""; setAttr -k on ".upVectorDirection" 1; setAttr ".ikrefarray" -type "string" "eyesAim_C0_root"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "eye_R0_rootShape" -p "eye_R0_root"; - rename -uid "C9F48B07-4F67-1DF0-81DD-D5B99639DBF6"; + rename -uid "0EEF49A8-4D3A-A94F-19D1-02A1D3E4C33C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2409,8 +2479,8 @@ createNode nurbsCurve -n "eye_R0_rootShape" -p "eye_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_R0_root10Shape" -p "eye_R0_root"; - rename -uid "CD320243-40B3-A928-5436-629E9000B1D2"; +createNode nurbsCurve -n "eye_R0_root13Shape" -p "eye_R0_root"; + rename -uid "A8EF0677-4018-8CD8-B32A-2A9B017060FB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2422,8 +2492,8 @@ createNode nurbsCurve -n "eye_R0_root10Shape" -p "eye_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_R0_root11Shape" -p "eye_R0_root"; - rename -uid "809AF5C7-4AD2-B992-47ED-E89B1F5A0827"; +createNode nurbsCurve -n "eye_R0_root14Shape" -p "eye_R0_root"; + rename -uid "0935F170-4BE3-D70E-BB79-11BFC1B82124"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2435,8 +2505,8 @@ createNode nurbsCurve -n "eye_R0_root11Shape" -p "eye_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_R0_root12Shape" -p "eye_R0_root"; - rename -uid "4786CEBE-4F2B-462F-B106-C8A6C85BC43F"; +createNode nurbsCurve -n "eye_R0_root15Shape" -p "eye_R0_root"; + rename -uid "FE32CD01-41B9-3AEA-B100-D0BC8F141BB9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2463,10 +2533,10 @@ createNode nurbsCurve -n "eye_R0_root12Shape" -p "eye_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "eye_R0_look" -p "eye_R0_root"; - rename -uid "CA80CF76-4E8C-F5AC-4C84-F580E35E6DEC"; + rename -uid "74F94454-4ADB-D567-0133-D1953BEBD75A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -3.3306690738754696e-016 7.9936057773011271e-015 2.0321341905376418 ; + setAttr ".t" -type "double3" -5.5511151231257827e-016 7.9936057773011271e-015 2.0321341905376422 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2474,12 +2544,12 @@ createNode transform -n "eye_R0_look" -p "eye_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999778 1.0000000000000007 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999778 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "eye_R0_lookShape" -p "eye_R0_look"; - rename -uid "36562C7D-48FC-701D-86F0-EAADA26EB2AD"; + rename -uid "E6D27AF4-465A-ECF7-58BC-C9A4EC8643C3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2491,8 +2561,8 @@ createNode nurbsCurve -n "eye_R0_lookShape" -p "eye_R0_look"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "eye_R0_look10Shape" -p "eye_R0_look"; - rename -uid "942484D5-4CF0-062F-0C28-29AEE28B77A6"; +createNode nurbsCurve -n "eye_R0_look13Shape" -p "eye_R0_look"; + rename -uid "13C3F2E0-4FFE-CB3A-03A1-25B4BE34092F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2504,8 +2574,8 @@ createNode nurbsCurve -n "eye_R0_look10Shape" -p "eye_R0_look"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "eye_R0_look11Shape" -p "eye_R0_look"; - rename -uid "37482EC7-46B8-BCBF-1E8B-51B1A1BA9B67"; +createNode nurbsCurve -n "eye_R0_look14Shape" -p "eye_R0_look"; + rename -uid "45CCED2A-481B-1C0D-886F-BD94585B9C90"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2517,8 +2587,8 @@ createNode nurbsCurve -n "eye_R0_look11Shape" -p "eye_R0_look"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "eye_R0_look12Shape" -p "eye_R0_look"; - rename -uid "16F9AB3C-4E81-4581-9664-F4ABAC28A4CA"; +createNode nurbsCurve -n "eye_R0_look15Shape" -p "eye_R0_look"; + rename -uid "AC31E9DB-4AF8-E3EC-990C-ECA9DAD61CE4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2535,8 +2605,8 @@ createNode nurbsCurve -n "eye_R0_look12Shape" -p "eye_R0_look"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_R0_look12_0crvShape" -p "eye_R0_look"; - rename -uid "6C777E2F-4693-E1E4-DA21-1BA0370B02D5"; +createNode nurbsCurve -n "eye_R0_look15_0crvShape" -p "eye_R0_look"; + rename -uid "3945BD19-4600-0530-19F3-87AD88BB9ABD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2553,8 +2623,8 @@ createNode nurbsCurve -n "eye_R0_look12_0crvShape" -p "eye_R0_look"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "eye_R0_look12_1crvShape" -p "eye_R0_look"; - rename -uid "AF498102-4259-7626-4776-968C7377F396"; +createNode nurbsCurve -n "eye_R0_look15_1crvShape" -p "eye_R0_look"; + rename -uid "680F0AAE-415C-96DD-EFAA-89AD50AE6080"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2572,19 +2642,19 @@ createNode nurbsCurve -n "eye_R0_look12_1crvShape" -p "eye_R0_look"; 0 0 -0.1875 ; createNode transform -n "eye_R0_crv" -p "eye_R0_root"; - rename -uid "8CB50376-4218-05C6-58F0-CCBC150E8B06"; + rename -uid "229ECC66-4661-E5DD-1895-BDB580A9418D"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 0.69889742974753455 -3.4976629291575767 -3.5292331821335621 ; + setAttr ".t" -type "double3" 0.69889742974753422 -3.4976629291575758 -3.5292331821335599 ; setAttr ".r" -type "double3" 0 165.99355249473743 0 ; - setAttr ".s" -type "double3" 1.0000000000000009 0.99999999999999822 -1.0000000000000011 ; + setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999822 -1.0000000000000011 ; createNode nurbsCurve -n "eye_R0_crvShape" -p "eye_R0_crv"; - rename -uid "976B5B40-485C-52C2-01B8-419E722F188D"; + rename -uid "8180A9B2-427F-1A29-A5BA-308E2487A55D"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "eye_R0_crvShapeOrig" -p "eye_R0_crv"; - rename -uid "D59D13B5-42E8-8DAF-AC6A-749787C78C3B"; + rename -uid "DE1D7E74-4D09-FD4A-7ADA-55994D09C3A6"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -2595,10 +2665,10 @@ createNode nurbsCurve -n "eye_R0_crvShapeOrig" -p "eye_R0_crv"; 0 0 0 ; createNode transform -n "neck_C0_tan1" -p "neck_C0_neck"; - rename -uid "C97E4194-4DFA-1437-3236-0EA7C3E3C0D6"; + rename -uid "8D584FF0-4238-6773-FA51-CDB3174DB3C8"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.094534318000986772 -0.76996010281298766 1.5833033991300372e-016 ; + setAttr ".t" -type "double3" 0.094534318000986772 -0.76996010281298766 1.5833033991300544e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2606,12 +2676,12 @@ createNode transform -n "neck_C0_tan1" -p "neck_C0_neck"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999978 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999978 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_tanShape1" -p "neck_C0_tan1"; - rename -uid "C712ACAF-4CFD-6A50-1A7E-919D3E1F716D"; + rename -uid "4302B38A-4AB0-851C-CB26-91A266D3F260"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2623,8 +2693,8 @@ createNode nurbsCurve -n "neck_C0_tanShape1" -p "neck_C0_tan1"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_tanShape14" -p "neck_C0_tan1"; - rename -uid "6D21397D-419C-6D6F-C04E-56A428439A95"; +createNode nurbsCurve -n "neck_C0_tanShape16" -p "neck_C0_tan1"; + rename -uid "AA0FF60A-4552-799F-2BCC-C885FA0384EA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2636,8 +2706,8 @@ createNode nurbsCurve -n "neck_C0_tanShape14" -p "neck_C0_tan1"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_tanShape15" -p "neck_C0_tan1"; - rename -uid "582746AD-4BBA-1452-0A20-2BBC05FFFB4E"; +createNode nurbsCurve -n "neck_C0_tanShape17" -p "neck_C0_tan1"; + rename -uid "36B8F2EB-4FDA-A75D-9AC8-E592FF7C2A1B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2649,8 +2719,8 @@ createNode nurbsCurve -n "neck_C0_tanShape15" -p "neck_C0_tan1"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_tanShape16" -p "neck_C0_tan1"; - rename -uid "108EFCDD-441B-9BAA-4570-B7824BB33F6B"; +createNode nurbsCurve -n "neck_C0_tanShape18" -p "neck_C0_tan1"; + rename -uid "0E2CD5EC-4D04-C9C2-A84C-BEA4E0EF6C18"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2667,8 +2737,8 @@ createNode nurbsCurve -n "neck_C0_tanShape16" -p "neck_C0_tan1"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan14_0crvShape" -p "neck_C0_tan1"; - rename -uid "D28DE1E2-41FA-0325-37C9-55BC1E01502F"; +createNode nurbsCurve -n "neck_C0_tan16_0crvShape" -p "neck_C0_tan1"; + rename -uid "7A1ACEE7-40F6-75F5-0369-C79D085670EF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2685,8 +2755,8 @@ createNode nurbsCurve -n "neck_C0_tan14_0crvShape" -p "neck_C0_tan1"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan14_1crvShape" -p "neck_C0_tan1"; - rename -uid "1DF5D472-49B2-A63F-E333-63A25C3F31D0"; +createNode nurbsCurve -n "neck_C0_tan16_1crvShape" -p "neck_C0_tan1"; + rename -uid "4C653053-4770-018F-0387-D4A27E593CB9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2704,19 +2774,19 @@ createNode nurbsCurve -n "neck_C0_tan14_1crvShape" -p "neck_C0_tan1"; 0 0 -0.1875 ; createNode transform -n "neck_C0_head_crv" -p "neck_C0_neck"; - rename -uid "1420B166-4435-9480-7DE9-3CB4A9907112"; + rename -uid "7491A25F-4687-A9D9-F3C0-92B38EA7595F"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 4.2174105108550703 -10.274847894363646 4.4383048488342812e-016 ; - setAttr ".r" -type "double3" -70.964236232861765 89.999999999999943 0 ; - setAttr ".s" -type "double3" 2.3915882794427565 2.3915882794427543 2.3915882794427561 ; + setAttr ".t" -type "double3" 4.2174105108550712 -10.274847894363644 4.4383048488342945e-016 ; + setAttr ".r" -type "double3" -70.964236232861779 89.999999999999957 0 ; + setAttr ".s" -type "double3" 2.3915882794427552 2.3915882794427539 2.3915882794427556 ; createNode nurbsCurve -n "neck_C0_head_crvShape" -p "neck_C0_head_crv"; - rename -uid "53197311-49B5-9294-DA7D-6A81F3C72E39"; + rename -uid "6B4680FE-49A0-1E15-1E59-B8B61CBC2126"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "neck_C0_head_crvShapeOrig" -p "neck_C0_head_crv"; - rename -uid "E388E532-44C8-6F23-5966-B595F8EEB514"; + rename -uid "61F91F51-4F38-A26F-5FE3-329981F4D053"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -2728,10 +2798,10 @@ createNode nurbsCurve -n "neck_C0_head_crvShapeOrig" -p "neck_C0_head_crv"; 0 0 0 ; createNode transform -n "neck_C0_tan0" -p "neck_C0_root"; - rename -uid "DC70A3F7-4E6F-9FAB-900D-468FB1CB0EB3"; + rename -uid "10B44329-47A4-4F6F-7279-DBA16CE72ACD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.016734587625118369 0.81123959492320008 -2.1361002026221281e-016 ; + setAttr ".t" -type "double3" -0.016734587625119257 0.81123959492320008 -2.1361002026221389e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2739,12 +2809,12 @@ createNode transform -n "neck_C0_tan0" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000009 1 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000011 1 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "neck_C0_tanShape0" -p "neck_C0_tan0"; - rename -uid "73E80A61-43F5-1198-71CE-CC929CC6C570"; + rename -uid "B823142C-4F43-3ACA-DBDA-9785816EFA2B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2756,8 +2826,8 @@ createNode nurbsCurve -n "neck_C0_tanShape0" -p "neck_C0_tan0"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "neck_C0_tanShape13" -p "neck_C0_tan0"; - rename -uid "5B9E0013-463A-7AEE-5CD8-3683A76C0429"; +createNode nurbsCurve -n "neck_C0_tanShape15" -p "neck_C0_tan0"; + rename -uid "8FC43EF0-4F52-3A10-152D-E2AAC895EFDD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2769,8 +2839,8 @@ createNode nurbsCurve -n "neck_C0_tanShape13" -p "neck_C0_tan0"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "neck_C0_tanShape14" -p "neck_C0_tan0"; - rename -uid "C370CD32-461C-79CB-27C3-89BAA82F2295"; +createNode nurbsCurve -n "neck_C0_tanShape16" -p "neck_C0_tan0"; + rename -uid "2549FD33-490D-B493-5E0F-4EA59FE531D2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2782,8 +2852,8 @@ createNode nurbsCurve -n "neck_C0_tanShape14" -p "neck_C0_tan0"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "neck_C0_tanShape15" -p "neck_C0_tan0"; - rename -uid "0FA7556F-4D05-DD56-5BDA-27A16FD8CC25"; +createNode nurbsCurve -n "neck_C0_tanShape17" -p "neck_C0_tan0"; + rename -uid "E51298BD-47B8-7362-CB2E-5FB7D52737D9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2800,8 +2870,8 @@ createNode nurbsCurve -n "neck_C0_tanShape15" -p "neck_C0_tan0"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan13_0crvShape" -p "neck_C0_tan0"; - rename -uid "EF8085FE-4F1A-24B3-A8D3-C1B0CDC5B395"; +createNode nurbsCurve -n "neck_C0_tan15_0crvShape" -p "neck_C0_tan0"; + rename -uid "3B3E0FCE-4D90-D634-A060-4E86501B9728"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2818,8 +2888,8 @@ createNode nurbsCurve -n "neck_C0_tan13_0crvShape" -p "neck_C0_tan0"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "neck_C0_tan13_1crvShape" -p "neck_C0_tan0"; - rename -uid "9B639553-4A2C-6A0F-9514-AE97D4B13FCE"; +createNode nurbsCurve -n "neck_C0_tan15_1crvShape" -p "neck_C0_tan0"; + rename -uid "EC87E280-4C77-88D5-AD9B-FDB3BF68B94E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2837,8 +2907,8 @@ createNode nurbsCurve -n "neck_C0_tan13_1crvShape" -p "neck_C0_tan0"; 0 0 -0.1875 ; createNode transform -n "neck_C0_blade" -p "neck_C0_root"; - rename -uid "124F8325-4ACB-AE4B-0C7A-0B818BB308AA"; - addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; + rename -uid "857AA687-4CED-1192-B7B6-5D8D962C7367"; + addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -dv -360 -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; @@ -2847,13 +2917,13 @@ createNode transform -n "neck_C0_blade" -p "neck_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1.0000000000000007 0.99999999999999967 ; + setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000009 0.99999999999999967 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; - setAttr -k on ".bladeRollOffset" -360; + setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "neck_C0_bladeShape" -p "neck_C0_blade"; - rename -uid "539FD8A5-4EF0-1809-CBD1-91BDD0DDCFBA"; + rename -uid "59FD673B-4816-3769-EC90-26991C9739D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2867,8 +2937,8 @@ createNode nurbsCurve -n "neck_C0_bladeShape" -p "neck_C0_blade"; 0 0.1764761597555182 0 0 0 0 ; -createNode aimConstraint -n "neck_C0_blade_aimConstraint7" -p "neck_C0_blade"; - rename -uid "C9B12D72-44D6-E9C7-A7DD-31915BA2107D"; +createNode aimConstraint -n "neck_C0_blade_aimConstraint8" -p "neck_C0_blade"; + rename -uid "D85D1303-4168-E125-8770-6A9472BEAD46"; addAttr -dcb 0 -ci true -sn "w0" -ln "neck_C0_tan0W0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -2884,10 +2954,10 @@ createNode aimConstraint -n "neck_C0_blade_aimConstraint7" -p "neck_C0_blade"; setAttr ".erp" yes; setAttr ".wut" 2; setAttr ".o" -type "double3" -360 0 360 ; - setAttr ".rsrr" -type "double3" -540 -2.8249000307521022e-030 451.18175355423011 ; + setAttr ".rsrr" -type "double3" -540 -1.4124500153760508e-030 451.18175355423011 ; setAttr -k on ".w0"; -createNode pointConstraint -n "neck_C0_blade_pointConstraint7" -p "neck_C0_blade"; - rename -uid "544DA690-4484-2409-A78D-E49A9E94C8C5"; +createNode pointConstraint -n "neck_C0_blade_pointConstraint8" -p "neck_C0_blade"; + rename -uid "B00A9F16-48F5-F271-2883-CE8BCCBD5CAB"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "neck_C0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -2902,22 +2972,22 @@ createNode pointConstraint -n "neck_C0_blade_pointConstraint7" -p "neck_C0_blade setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".rst" -type "double3" -1.3322676295501878e-015 8.8817841970012523e-016 - -6.4094948549207209e-031 ; + -5.4234187233944562e-031 ; setAttr -k on ".w0"; createNode transform -n "neck_C0_neck_crv" -p "neck_C0_root"; - rename -uid "281BCA50-4F2D-7D3B-D4DF-948CEF74ED25"; + rename -uid "46B7BFC9-48AC-9AB7-1206-CCAC7A8DE96E"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" 3.976162134148518 -6.6105608685998307 -4.274848312126261e-016 ; + setAttr ".t" -type "double3" 3.976162134148518 -6.6105608685998307 -4.2748483121262679e-016 ; setAttr ".r" -type "double3" -70.964236232861779 89.999999999999957 0 ; setAttr ".s" -type "double3" 2.391588279442757 2.3915882794427565 2.3915882794427565 ; createNode nurbsCurve -n "neck_C0_neck_crvShape" -p "neck_C0_neck_crv"; - rename -uid "A32E6F01-439A-89FE-C535-62817FD49C9B"; + rename -uid "0B3400FF-4E83-F4C6-87C1-83A1D2BE0335"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "neck_C0_neck_crvShapeOrig" -p "neck_C0_neck_crv"; - rename -uid "E3F2ED72-4D18-B7C3-319E-E38B36705EE7"; + rename -uid "69DA851F-46E4-CF32-3E81-E0B5138FB3D2"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -2930,7 +3000,7 @@ createNode nurbsCurve -n "neck_C0_neck_crvShapeOrig" -p "neck_C0_neck_crv"; 0 0 0 ; createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; - rename -uid "D880E8E4-4B8D-E511-EDEE-478152521CE0"; + rename -uid "B3912BDB-41C2-F9B3-2638-5DAA1B95D3C5"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -2940,13 +3010,13 @@ createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.23232496368006927 0.19745119313991832 -0.20082401790608242 ; + setAttr ".t" -type "double3" -0.23232496368006927 0.19745119313991832 -0.20082401790608245 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -2965,12 +3035,9 @@ createNode transform -n "shoulder_L0_root" -p "spine_C0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "frontLegUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "shoulder_L0_rootShape" -p "shoulder_L0_root"; - rename -uid "398D3B69-491F-3F6C-19EC-EDA836CE294B"; + rename -uid "1CA84D8A-473D-3624-E123-009C46956678"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2982,8 +3049,8 @@ createNode nurbsCurve -n "shoulder_L0_rootShape" -p "shoulder_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_L0_root19Shape" -p "shoulder_L0_root"; - rename -uid "99BD728C-43A9-B332-16C8-0CA821CFA6F7"; +createNode nurbsCurve -n "shoulder_L0_root22Shape" -p "shoulder_L0_root"; + rename -uid "46C07D5F-406E-0654-CFD6-9289D395EAEC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -2995,8 +3062,8 @@ createNode nurbsCurve -n "shoulder_L0_root19Shape" -p "shoulder_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_L0_root20Shape" -p "shoulder_L0_root"; - rename -uid "368A5487-488B-8C8C-66AB-D29381AF6BA5"; +createNode nurbsCurve -n "shoulder_L0_root23Shape" -p "shoulder_L0_root"; + rename -uid "316FB429-42DF-5990-203A-A886C51072CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3008,8 +3075,8 @@ createNode nurbsCurve -n "shoulder_L0_root20Shape" -p "shoulder_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_L0_root21Shape" -p "shoulder_L0_root"; - rename -uid "EA0AC171-4240-1E59-0BD9-A588DAE50406"; +createNode nurbsCurve -n "shoulder_L0_root24Shape" -p "shoulder_L0_root"; + rename -uid "53D3EED3-4A52-9271-F55A-B9A2609D4EB7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3036,10 +3103,10 @@ createNode nurbsCurve -n "shoulder_L0_root21Shape" -p "shoulder_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "shoulder_L0_0_loc" -p "shoulder_L0_root"; - rename -uid "761A6FC6-4628-FFF6-5411-7897EB4E82B2"; + rename -uid "A32B308D-4710-F594-290C-8881868C1B81"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.83252561455724661 -0.20882616370654938 0.20663608494886754 ; + setAttr ".t" -type "double3" 0.83252561455724661 -0.20882616370654894 0.20663608494886754 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3052,7 +3119,7 @@ createNode transform -n "shoulder_L0_0_loc" -p "shoulder_L0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "shoulder_L0_0_locShape" -p "shoulder_L0_0_loc"; - rename -uid "F0CDDC5C-414B-7EA6-1349-288D472DC977"; + rename -uid "AD847ADD-469C-E7F9-ADA0-FD93E2B7A007"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3064,8 +3131,8 @@ createNode nurbsCurve -n "shoulder_L0_0_locShape" -p "shoulder_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_L0_0_loc19Shape" -p "shoulder_L0_0_loc"; - rename -uid "F5C777C0-4DC1-7A4E-0705-0394B9B1FBAF"; +createNode nurbsCurve -n "shoulder_L0_0_loc22Shape" -p "shoulder_L0_0_loc"; + rename -uid "E2D6EE9D-4EEF-AB5E-A858-D592CBA52A4E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3077,8 +3144,8 @@ createNode nurbsCurve -n "shoulder_L0_0_loc19Shape" -p "shoulder_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_L0_0_loc20Shape" -p "shoulder_L0_0_loc"; - rename -uid "33962063-4896-479A-4D3A-C99978F43C93"; +createNode nurbsCurve -n "shoulder_L0_0_loc23Shape" -p "shoulder_L0_0_loc"; + rename -uid "12EBB428-4DBF-F205-8E0F-53BC3B0DBD00"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3090,8 +3157,8 @@ createNode nurbsCurve -n "shoulder_L0_0_loc20Shape" -p "shoulder_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_L0_0_loc21Shape" -p "shoulder_L0_0_loc"; - rename -uid "7E823A09-4131-AD38-3797-C687AC9E337C"; +createNode nurbsCurve -n "shoulder_L0_0_loc24Shape" -p "shoulder_L0_0_loc"; + rename -uid "467EDF38-4A8E-B1AA-6D1B-8EA7361880E1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3108,8 +3175,8 @@ createNode nurbsCurve -n "shoulder_L0_0_loc21Shape" -p "shoulder_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_L0_0_loc21_0crvShape" -p "shoulder_L0_0_loc"; - rename -uid "EFDBE27E-4BA3-704C-BFE0-9E89469E5B91"; +createNode nurbsCurve -n "shoulder_L0_0_loc24_0crvShape" -p "shoulder_L0_0_loc"; + rename -uid "B40B679D-4AAB-2A52-111A-48B7EB8D97ED"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3126,8 +3193,8 @@ createNode nurbsCurve -n "shoulder_L0_0_loc21_0crvShape" -p "shoulder_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_L0_0_loc21_1crvShape" -p "shoulder_L0_0_loc"; - rename -uid "89FA6657-4C28-7E68-A7A9-0D8DA866FA83"; +createNode nurbsCurve -n "shoulder_L0_0_loc24_1crvShape" -p "shoulder_L0_0_loc"; + rename -uid "8ACB199D-4B79-C4AC-C412-67A069C7D52B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3145,7 +3212,7 @@ createNode nurbsCurve -n "shoulder_L0_0_loc21_1crvShape" -p "shoulder_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "legFront_L0_root" -p "shoulder_L0_0_loc"; - rename -uid "3D36F3B2-42BC-76D0-A708-F099C9FF465A"; + rename -uid "C4E57082-4386-422E-97C7-A99B6EAC28BA"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -3154,23 +3221,23 @@ createNode transform -n "legFront_L0_root" -p "shoulder_L0_0_loc"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -k true -sn "ikSolver" -ln "ikSolver" -min 0 -max 1 -en "IK Spring:IK Rotation Plane" -at "enum"; - addAttr -ci true -sn "ikOri" -ln "ikOri" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div2" -ln "div2" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "ikOri" -ln "ikOri" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div2" -ln "div2" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.1102230246251565e-015 -3.5527136788005009e-015 -4.4408920985006262e-016 ; + setAttr ".t" -type "double3" -1.2212453270876722e-015 -3.9968028886505635e-015 -4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3178,7 +3245,7 @@ createNode transform -n "legFront_L0_root" -p "shoulder_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.39967062595950276 0.3996706259595032 0.39967062595950281 ; + setAttr ".s" -type "double3" 0.39967062595950276 0.39967062595950326 0.39967062595950281 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -3188,21 +3255,13 @@ createNode transform -n "legFront_L0_root" -p "shoulder_L0_0_loc"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "frontLegUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".full3BonesIK" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".maxstretch" 1.5; + setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; setAttr -k on ".ikSolver" 1; - setAttr ".ikOri" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; - setAttr ".div2" 2; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legFront_L0_rootShape" -p "legFront_L0_root"; - rename -uid "31E29A5D-49F9-2C3E-9222-20855B929577"; + rename -uid "623B1E4A-451A-6F06-8493-31B96FACEA2B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3214,8 +3273,8 @@ createNode nurbsCurve -n "legFront_L0_rootShape" -p "legFront_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_L0_root19Shape" -p "legFront_L0_root"; - rename -uid "DC250096-4092-0588-FE80-CCAA3B4ED571"; +createNode nurbsCurve -n "legFront_L0_root22Shape" -p "legFront_L0_root"; + rename -uid "F6091BC4-44AF-87A0-20C7-D9889ECCBE19"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3227,8 +3286,8 @@ createNode nurbsCurve -n "legFront_L0_root19Shape" -p "legFront_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_L0_root20Shape" -p "legFront_L0_root"; - rename -uid "47BD2EB6-4D06-A18A-DA20-BFA6C57A4C15"; +createNode nurbsCurve -n "legFront_L0_root23Shape" -p "legFront_L0_root"; + rename -uid "91DF8B77-4C60-CEAA-2E6E-A2A7B98DB06B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3240,8 +3299,8 @@ createNode nurbsCurve -n "legFront_L0_root20Shape" -p "legFront_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_L0_root21Shape" -p "legFront_L0_root"; - rename -uid "D0B5EA86-4BE6-EE36-186C-EDAA73226356"; +createNode nurbsCurve -n "legFront_L0_root24Shape" -p "legFront_L0_root"; + rename -uid "C824F064-4AD7-E8F4-A957-048F9DBF14F9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3268,10 +3327,10 @@ createNode nurbsCurve -n "legFront_L0_root21Shape" -p "legFront_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legFront_L0_knee" -p "legFront_L0_root"; - rename -uid "2AEFDCD7-4F90-C5D9-4300-6685595C6F0F"; + rename -uid "C135654D-474B-F30B-98E7-869FBFF19EAA"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.1086244689504383e-015 -2.1240863021370493 -0.48633856256837404 ; + setAttr ".t" -type "double3" 3.1086244689504383e-015 -2.1240863021370493 -0.48633856256837493 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3279,12 +3338,12 @@ createNode transform -n "legFront_L0_knee" -p "legFront_L0_root"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999933 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999889 1.0000000000000002 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_L0_kneeShape" -p "legFront_L0_knee"; - rename -uid "5779439B-4B02-2BF6-D020-D2ABC2353172"; + rename -uid "E6EC6441-437D-8127-7462-658E8C043B22"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3296,8 +3355,8 @@ createNode nurbsCurve -n "legFront_L0_kneeShape" -p "legFront_L0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_L0_knee19Shape" -p "legFront_L0_knee"; - rename -uid "DA7889A2-419C-20BA-F87A-01AE9956BCD9"; +createNode nurbsCurve -n "legFront_L0_knee22Shape" -p "legFront_L0_knee"; + rename -uid "E928B499-42B8-2813-4555-D183E84C4646"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3309,8 +3368,8 @@ createNode nurbsCurve -n "legFront_L0_knee19Shape" -p "legFront_L0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_L0_knee20Shape" -p "legFront_L0_knee"; - rename -uid "F34E82BB-4C72-D04C-2B21-CCAD28230B35"; +createNode nurbsCurve -n "legFront_L0_knee23Shape" -p "legFront_L0_knee"; + rename -uid "0FBB48F2-46C9-EF95-8895-849AFBFEED46"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3322,8 +3381,8 @@ createNode nurbsCurve -n "legFront_L0_knee20Shape" -p "legFront_L0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_L0_knee21Shape" -p "legFront_L0_knee"; - rename -uid "E0EA6959-49FD-25ED-61BE-09AE77B5716E"; +createNode nurbsCurve -n "legFront_L0_knee24Shape" -p "legFront_L0_knee"; + rename -uid "00DF5E02-4A43-4DC5-07B3-8988ECE677A7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3340,8 +3399,8 @@ createNode nurbsCurve -n "legFront_L0_knee21Shape" -p "legFront_L0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_knee21_0crvShape" -p "legFront_L0_knee"; - rename -uid "8C49884A-49A4-0FCF-51AD-2CAA5775C164"; +createNode nurbsCurve -n "legFront_L0_knee24_0crvShape" -p "legFront_L0_knee"; + rename -uid "50E1EFC3-4353-9D63-271C-C8950DA2BAA9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3358,8 +3417,8 @@ createNode nurbsCurve -n "legFront_L0_knee21_0crvShape" -p "legFront_L0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_knee21_1crvShape" -p "legFront_L0_knee"; - rename -uid "8A6467DE-4DE9-E828-249E-7692A4BB9678"; +createNode nurbsCurve -n "legFront_L0_knee24_1crvShape" -p "legFront_L0_knee"; + rename -uid "7DA45A1B-4929-7A86-466A-9F9236A53A5D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3377,7 +3436,7 @@ createNode nurbsCurve -n "legFront_L0_knee21_1crvShape" -p "legFront_L0_knee"; 0 0 -0.1875 ; createNode transform -n "legFront_L0_ankle" -p "legFront_L0_knee"; - rename -uid "66225303-4062-7BB6-523C-FF81F6E32F9A"; + rename -uid "52304CDA-4A0A-004F-C197-D5B27D719B4B"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 5.773159728050814e-015 -2.3651516407059168 0.073902270404610171 ; @@ -3388,12 +3447,12 @@ createNode transform -n "legFront_L0_ankle" -p "legFront_L0_knee"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999978 0.99999999999999978 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999989 0.99999999999999978 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_L0_ankleShape" -p "legFront_L0_ankle"; - rename -uid "0781A4AA-4ECE-6970-8B4B-D8B838BBFCBE"; + rename -uid "26B8CE30-4869-91E1-4E96-71BD57437DF1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3405,8 +3464,8 @@ createNode nurbsCurve -n "legFront_L0_ankleShape" -p "legFront_L0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_L0_ankle19Shape" -p "legFront_L0_ankle"; - rename -uid "DAE891CF-4E45-F03D-68CC-46A1BB391014"; +createNode nurbsCurve -n "legFront_L0_ankle22Shape" -p "legFront_L0_ankle"; + rename -uid "ADB1A2A8-4EBA-BDCF-86D0-9BA9653F4C01"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3418,8 +3477,8 @@ createNode nurbsCurve -n "legFront_L0_ankle19Shape" -p "legFront_L0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_L0_ankle20Shape" -p "legFront_L0_ankle"; - rename -uid "90F9F0B2-4E7E-C4FD-BF90-BFA6F0005690"; +createNode nurbsCurve -n "legFront_L0_ankle23Shape" -p "legFront_L0_ankle"; + rename -uid "59E653FF-4008-1324-C4B8-5080A0E88DEA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3431,8 +3490,8 @@ createNode nurbsCurve -n "legFront_L0_ankle20Shape" -p "legFront_L0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_L0_ankle21Shape" -p "legFront_L0_ankle"; - rename -uid "0294A94F-4587-96FE-4D1C-AE999D8BECDF"; +createNode nurbsCurve -n "legFront_L0_ankle24Shape" -p "legFront_L0_ankle"; + rename -uid "0F648F40-4515-5E02-25C4-A69072FBEBBB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3449,8 +3508,8 @@ createNode nurbsCurve -n "legFront_L0_ankle21Shape" -p "legFront_L0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_ankle21_0crvShape" -p "legFront_L0_ankle"; - rename -uid "AEA0DED4-4D87-E3A0-4EF8-62AD51BEC5C8"; +createNode nurbsCurve -n "legFront_L0_ankle24_0crvShape" -p "legFront_L0_ankle"; + rename -uid "B08D7641-4CE2-49F0-9C11-64A252AD84F5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3467,8 +3526,8 @@ createNode nurbsCurve -n "legFront_L0_ankle21_0crvShape" -p "legFront_L0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_ankle21_1crvShape" -p "legFront_L0_ankle"; - rename -uid "C27A562B-4A3F-3810-29D7-628D5BDF163D"; +createNode nurbsCurve -n "legFront_L0_ankle24_1crvShape" -p "legFront_L0_ankle"; + rename -uid "FE1603E8-4D00-7507-DB90-538449CBA231"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3486,10 +3545,10 @@ createNode nurbsCurve -n "legFront_L0_ankle21_1crvShape" -p "legFront_L0_ankle"; 0 0 -0.1875 ; createNode transform -n "legFront_L0_foot" -p "legFront_L0_ankle"; - rename -uid "3D7E94E4-4BDC-A452-55A2-34B5D7599131"; + rename -uid "428345C2-480C-6A0D-DDB3-6294C2A683EF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.7763568394002505e-015 -1.1294425054275508 0.023148533894220336 ; + setAttr ".t" -type "double3" 1.3322676295501878e-015 -1.1294425054275514 0.023148533894218559 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3502,7 +3561,7 @@ createNode transform -n "legFront_L0_foot" -p "legFront_L0_ankle"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_L0_footShape" -p "legFront_L0_foot"; - rename -uid "DD382AA8-4101-E59C-1DFD-D8BE2C1FF1D0"; + rename -uid "801211EE-46A5-7C74-EEA6-CEAFD9959D20"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3514,8 +3573,8 @@ createNode nurbsCurve -n "legFront_L0_footShape" -p "legFront_L0_foot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_L0_foot19Shape" -p "legFront_L0_foot"; - rename -uid "151DCA58-409A-22FA-9AFB-419F99C77AE1"; +createNode nurbsCurve -n "legFront_L0_foot22Shape" -p "legFront_L0_foot"; + rename -uid "B9412E2E-4070-0DCB-A1C4-F1A53E00CC20"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3527,8 +3586,8 @@ createNode nurbsCurve -n "legFront_L0_foot19Shape" -p "legFront_L0_foot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_L0_foot20Shape" -p "legFront_L0_foot"; - rename -uid "E2DC5392-4F23-34C4-6CAA-B4A673A3B16B"; +createNode nurbsCurve -n "legFront_L0_foot23Shape" -p "legFront_L0_foot"; + rename -uid "695DACEE-43C0-2CBD-83CE-6E8AB698514C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3540,8 +3599,8 @@ createNode nurbsCurve -n "legFront_L0_foot20Shape" -p "legFront_L0_foot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_L0_foot21Shape" -p "legFront_L0_foot"; - rename -uid "6E8D036C-420F-4898-6CC1-778538F32906"; +createNode nurbsCurve -n "legFront_L0_foot24Shape" -p "legFront_L0_foot"; + rename -uid "388CB80D-42CF-C9DA-E8F7-8AA859F54BDF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3558,8 +3617,8 @@ createNode nurbsCurve -n "legFront_L0_foot21Shape" -p "legFront_L0_foot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_foot21_0crvShape" -p "legFront_L0_foot"; - rename -uid "71E05959-4D0F-B787-17D3-25886C09B3AD"; +createNode nurbsCurve -n "legFront_L0_foot24_0crvShape" -p "legFront_L0_foot"; + rename -uid "3432E38C-44EC-671A-9F2B-AC9FDD1565EB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3576,8 +3635,8 @@ createNode nurbsCurve -n "legFront_L0_foot21_0crvShape" -p "legFront_L0_foot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_foot21_1crvShape" -p "legFront_L0_foot"; - rename -uid "C3392648-4A46-D0F8-1BB2-79ACA7DB4227"; +createNode nurbsCurve -n "legFront_L0_foot24_1crvShape" -p "legFront_L0_foot"; + rename -uid "620411CC-4295-38C4-043A-AFADE90A0A82"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3595,10 +3654,10 @@ createNode nurbsCurve -n "legFront_L0_foot21_1crvShape" -p "legFront_L0_foot"; 0 0 -0.1875 ; createNode transform -n "legFront_L0_eff" -p "legFront_L0_foot"; - rename -uid "FCE8A8EE-4F5C-928E-0B1D-45AC2A74ABE0"; + rename -uid "D3D7EE7D-4A5A-D0A8-A2A0-89965D032F62"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.1086244689504383e-015 8.8817841970012523e-016 0.5965779785192078 ; + setAttr ".t" -type "double3" 3.9968028886505635e-015 9.1593399531575415e-016 0.59657797851920957 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3606,12 +3665,12 @@ createNode transform -n "legFront_L0_eff" -p "legFront_L0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999922 0.99999999999999867 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999922 0.99999999999999878 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_L0_effShape" -p "legFront_L0_eff"; - rename -uid "807C4461-4ED3-4E3C-2954-55BCBE707D2D"; + rename -uid "B6988F5B-4808-1CFE-316E-FFA1F76EE1BF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3623,8 +3682,8 @@ createNode nurbsCurve -n "legFront_L0_effShape" -p "legFront_L0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_L0_eff19Shape" -p "legFront_L0_eff"; - rename -uid "A310817E-4FDD-468A-4341-1CA2713C026B"; +createNode nurbsCurve -n "legFront_L0_eff22Shape" -p "legFront_L0_eff"; + rename -uid "75320078-48C7-7AEA-4D8B-2691336BB3A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3636,8 +3695,8 @@ createNode nurbsCurve -n "legFront_L0_eff19Shape" -p "legFront_L0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_L0_eff20Shape" -p "legFront_L0_eff"; - rename -uid "D102970F-4873-0D93-CE6E-28A688C7CA3D"; +createNode nurbsCurve -n "legFront_L0_eff23Shape" -p "legFront_L0_eff"; + rename -uid "0A0A8CFE-497A-A379-49B4-1789A1AA7E61"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3649,8 +3708,8 @@ createNode nurbsCurve -n "legFront_L0_eff20Shape" -p "legFront_L0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_L0_eff21Shape" -p "legFront_L0_eff"; - rename -uid "3DD429D4-400D-B6C8-060D-C29C5F2706DF"; +createNode nurbsCurve -n "legFront_L0_eff24Shape" -p "legFront_L0_eff"; + rename -uid "E467A6C6-4737-AA45-6782-E9B34452B735"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3667,8 +3726,8 @@ createNode nurbsCurve -n "legFront_L0_eff21Shape" -p "legFront_L0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_eff21_0crvShape" -p "legFront_L0_eff"; - rename -uid "D3D1129E-433E-1AE7-8CAB-AFB73D470E61"; +createNode nurbsCurve -n "legFront_L0_eff24_0crvShape" -p "legFront_L0_eff"; + rename -uid "ABAF383D-467B-7422-E698-E3BEDB5A9B2F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3685,8 +3744,8 @@ createNode nurbsCurve -n "legFront_L0_eff21_0crvShape" -p "legFront_L0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_L0_eff21_1crvShape" -p "legFront_L0_eff"; - rename -uid "A2AFF24A-4B7A-65D4-3F37-EFB6D3E0506B"; +createNode nurbsCurve -n "legFront_L0_eff24_1crvShape" -p "legFront_L0_eff"; + rename -uid "B999E0AD-4533-A0E3-9417-60A037137228"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3704,7 +3763,7 @@ createNode nurbsCurve -n "legFront_L0_eff21_1crvShape" -p "legFront_L0_eff"; 0 0 -0.1875 ; createNode transform -n "footFront_L0_root" -p "legFront_L0_foot"; - rename -uid "982CEBC3-4C1F-B446-C204-06AFA9AA209D"; + rename -uid "B159BA42-4217-6493-BE4A-F197505ED214"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -3713,11 +3772,11 @@ createNode transform -n "footFront_L0_root" -p "legFront_L0_foot"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.6645352591003757e-015 7.4940054162198066e-016 -3.5527136788005009e-015 ; + setAttr ".t" -type "double3" 3.5527136788005009e-015 7.7715611723760958e-016 -1.7763568394002505e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3725,7 +3784,7 @@ createNode transform -n "footFront_L0_root" -p "legFront_L0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.31499517602514093 0.31499517602514088 0.31499517602514071 ; + setAttr ".s" -type "double3" 0.31499517602514093 0.31499517602514093 0.31499517602514082 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -3735,10 +3794,8 @@ createNode transform -n "footFront_L0_root" -p "legFront_L0_foot"; setAttr ".connector" -type "string" "leg_3jnt_01"; setAttr ".ui_host" -type "string" "frontLegUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "footFront_L0_rootShape" -p "footFront_L0_root"; - rename -uid "20085FE0-4415-3DBD-91DA-C8916DB45564"; + rename -uid "BDA25D8F-49A3-1071-052B-71A487F96241"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3750,8 +3807,8 @@ createNode nurbsCurve -n "footFront_L0_rootShape" -p "footFront_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_root19Shape" -p "footFront_L0_root"; - rename -uid "C6C75C14-4D24-EE27-9EAC-F9A7E7430ED2"; +createNode nurbsCurve -n "footFront_L0_root22Shape" -p "footFront_L0_root"; + rename -uid "5816E7DD-4A63-E471-9AA7-9E9633748A1F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3763,8 +3820,8 @@ createNode nurbsCurve -n "footFront_L0_root19Shape" -p "footFront_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_root20Shape" -p "footFront_L0_root"; - rename -uid "C51F64BF-4459-B92D-E333-C685A0DC6AD0"; +createNode nurbsCurve -n "footFront_L0_root23Shape" -p "footFront_L0_root"; + rename -uid "5A25ED8E-4AA3-C3D6-656E-1395C0E86149"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3776,8 +3833,8 @@ createNode nurbsCurve -n "footFront_L0_root20Shape" -p "footFront_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_root21Shape" -p "footFront_L0_root"; - rename -uid "3BA64BFF-4602-9AC7-E43D-97B54E1364E8"; +createNode nurbsCurve -n "footFront_L0_root24Shape" -p "footFront_L0_root"; + rename -uid "6C2D0442-4A1F-C516-65E7-928A7C61E794"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3804,10 +3861,10 @@ createNode nurbsCurve -n "footFront_L0_root21Shape" -p "footFront_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "footFront_L0_0_loc" -p "footFront_L0_root"; - rename -uid "16B8A87E-446B-C3EB-D907-8BAB425C96D5"; + rename -uid "CFD79D57-4D6E-0232-D8F3-3AB96E83A202"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 5.3290705182007514e-015 8.8817841970012523e-016 0.75996190873517477 ; + setAttr ".t" -type "double3" 5.3290705182007514e-015 1.1102230246251565e-015 0.75996190873517833 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3815,12 +3872,12 @@ createNode transform -n "footFront_L0_0_loc" -p "footFront_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000007 ; + setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_L0_0_locShape" -p "footFront_L0_0_loc"; - rename -uid "D67FAAF5-4131-8BCB-9121-39B5434422F4"; + rename -uid "1440C918-4929-209F-AB69-B4B413B66730"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3832,8 +3889,8 @@ createNode nurbsCurve -n "footFront_L0_0_locShape" -p "footFront_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_0_loc19Shape" -p "footFront_L0_0_loc"; - rename -uid "D7F994A2-4D8F-877E-B668-C6912F0E5A32"; +createNode nurbsCurve -n "footFront_L0_0_loc22Shape" -p "footFront_L0_0_loc"; + rename -uid "491B739E-405B-8E60-EC51-B1B69EE93823"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3845,8 +3902,8 @@ createNode nurbsCurve -n "footFront_L0_0_loc19Shape" -p "footFront_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_0_loc20Shape" -p "footFront_L0_0_loc"; - rename -uid "C3F86907-4377-0672-2D70-B58DF53AF107"; +createNode nurbsCurve -n "footFront_L0_0_loc23Shape" -p "footFront_L0_0_loc"; + rename -uid "4FB21F22-49A6-B06F-4AEA-FFB21DA8FA58"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3858,8 +3915,8 @@ createNode nurbsCurve -n "footFront_L0_0_loc20Shape" -p "footFront_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_0_loc21Shape" -p "footFront_L0_0_loc"; - rename -uid "FCD1F3E0-4401-57C9-B213-E4A1BFCE5ACD"; +createNode nurbsCurve -n "footFront_L0_0_loc24Shape" -p "footFront_L0_0_loc"; + rename -uid "828BC471-4DDD-A9B4-1D4B-6BB4B91AD8C3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3876,8 +3933,8 @@ createNode nurbsCurve -n "footFront_L0_0_loc21Shape" -p "footFront_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_0_loc21_0crvShape" -p "footFront_L0_0_loc"; - rename -uid "5D19FCC9-4AC0-4EC9-4967-FC98E112AFF3"; +createNode nurbsCurve -n "footFront_L0_0_loc24_0crvShape" -p "footFront_L0_0_loc"; + rename -uid "5FA2F6A0-479C-07B1-A434-758AF4B41C8B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3894,8 +3951,8 @@ createNode nurbsCurve -n "footFront_L0_0_loc21_0crvShape" -p "footFront_L0_0_loc 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_0_loc21_1crvShape" -p "footFront_L0_0_loc"; - rename -uid "17E5C158-4942-361C-C702-FC959A4BF51A"; +createNode nurbsCurve -n "footFront_L0_0_loc24_1crvShape" -p "footFront_L0_0_loc"; + rename -uid "9C9E3B1A-470A-EC65-447E-95B13F8B21BE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3913,10 +3970,10 @@ createNode nurbsCurve -n "footFront_L0_0_loc21_1crvShape" -p "footFront_L0_0_loc 0 0 -0.1875 ; createNode transform -n "footFront_L0_1_loc" -p "footFront_L0_0_loc"; - rename -uid "F3B203DF-4C0E-1AD2-2881-86926C7A9219"; + rename -uid "033F73D3-4D37-1404-9A51-8880DCA9F286"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -2.6645352591003757e-015 -0.31771180755405098 0.73937999249395148 ; + setAttr ".t" -type "double3" -3.5527136788005009e-015 -0.31771180755405121 0.73937999249394792 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -3924,12 +3981,12 @@ createNode transform -n "footFront_L0_1_loc" -p "footFront_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000002 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999989 1 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_L0_1_locShape" -p "footFront_L0_1_loc"; - rename -uid "521D893C-4B72-613C-3FC7-92B86A62ABD0"; + rename -uid "11B7CED5-466E-9BEC-E1C5-38817BA47330"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3941,8 +3998,8 @@ createNode nurbsCurve -n "footFront_L0_1_locShape" -p "footFront_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_1_loc19Shape" -p "footFront_L0_1_loc"; - rename -uid "0689B6EC-42BE-ED3C-4CC2-9D885E14E797"; +createNode nurbsCurve -n "footFront_L0_1_loc22Shape" -p "footFront_L0_1_loc"; + rename -uid "76041E72-454A-226C-53AC-A1B28C697ACE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3954,8 +4011,8 @@ createNode nurbsCurve -n "footFront_L0_1_loc19Shape" -p "footFront_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_1_loc20Shape" -p "footFront_L0_1_loc"; - rename -uid "CE522339-4F9D-02BD-F2E9-A787D8FC6563"; +createNode nurbsCurve -n "footFront_L0_1_loc23Shape" -p "footFront_L0_1_loc"; + rename -uid "4ACA6E18-45F0-20F9-3486-BEA8F747A020"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3967,8 +4024,8 @@ createNode nurbsCurve -n "footFront_L0_1_loc20Shape" -p "footFront_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_1_loc21Shape" -p "footFront_L0_1_loc"; - rename -uid "6291940A-4E78-F402-4A2F-54907B5E9318"; +createNode nurbsCurve -n "footFront_L0_1_loc24Shape" -p "footFront_L0_1_loc"; + rename -uid "69137D6E-48B8-3124-141D-EFB7194A884C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -3985,8 +4042,8 @@ createNode nurbsCurve -n "footFront_L0_1_loc21Shape" -p "footFront_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_1_loc21_0crvShape" -p "footFront_L0_1_loc"; - rename -uid "41D78CF3-4BCE-4E99-7256-9DB238CAF84A"; +createNode nurbsCurve -n "footFront_L0_1_loc24_0crvShape" -p "footFront_L0_1_loc"; + rename -uid "6B31A5BE-4929-2CCC-A31E-5A8BE944710E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4003,8 +4060,8 @@ createNode nurbsCurve -n "footFront_L0_1_loc21_0crvShape" -p "footFront_L0_1_loc 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_1_loc21_1crvShape" -p "footFront_L0_1_loc"; - rename -uid "BB65AFE8-48EB-BE50-342B-94A2A3987126"; +createNode nurbsCurve -n "footFront_L0_1_loc24_1crvShape" -p "footFront_L0_1_loc"; + rename -uid "D7D4415B-4231-D957-34EB-8BB1465D2137"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4022,18 +4079,18 @@ createNode nurbsCurve -n "footFront_L0_1_loc21_1crvShape" -p "footFront_L0_1_loc 0 0 -0.1875 ; createNode transform -n "footFront_L0_crv" -p "footFront_L0_root"; - rename -uid "CC103ACA-4103-D40F-17FA-14B2D3E48986"; + rename -uid "DBB9D436-4E3C-648D-848F-2BBB6FD9A673"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -7.3687973355373595 -0.60300743522685729 -16.239037496288901 ; - setAttr ".s" -type "double3" 7.9431701648148092 7.9431701648148092 7.943170164814811 ; + setAttr ".t" -type "double3" -7.3687973355373586 -0.60300743522685718 -16.239037496288894 ; + setAttr ".s" -type "double3" 7.9431701648148074 7.9431701648148074 7.9431701648148074 ; createNode nurbsCurve -n "footFront_L0_crvShape" -p "footFront_L0_crv"; - rename -uid "0DDADE6A-4910-18DC-B027-31A5C77420AC"; + rename -uid "00A7061D-4244-7491-4374-0584FE37C2AB"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footFront_L0_crvShapeOrig" -p "footFront_L0_crv"; - rename -uid "2A62288C-4337-AEF9-7B23-8F81F15735E6"; + rename -uid "7C12557E-466E-505B-7732-5CA224ED7A56"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4045,10 +4102,10 @@ createNode nurbsCurve -n "footFront_L0_crvShapeOrig" -p "footFront_L0_crv"; 0 0 0 ; createNode transform -n "footFront_L0_heel" -p "footFront_L0_root"; - rename -uid "5E670701-4911-A8CF-7D60-B5AD3944E001"; + rename -uid "B37C978C-4D83-2A1F-FF34-07B5F833CEAD"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.0658141036401503e-014 -0.3177118075540506 -0.067899908672082177 ; + setAttr ".t" -type "double3" 1.1546319456101628e-014 -0.31771180755405048 -0.067899908672078624 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4056,12 +4113,12 @@ createNode transform -n "footFront_L0_heel" -p "footFront_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000007 ; + setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_L0_heelShape" -p "footFront_L0_heel"; - rename -uid "D5D2AC95-41D0-788F-AEAF-26973AFFFECC"; + rename -uid "65270125-452A-9DFB-A737-D2A7E394890A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4073,8 +4130,8 @@ createNode nurbsCurve -n "footFront_L0_heelShape" -p "footFront_L0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_heel19Shape" -p "footFront_L0_heel"; - rename -uid "267AC7A0-438D-FA86-149A-818ACB5ACEEE"; +createNode nurbsCurve -n "footFront_L0_heel22Shape" -p "footFront_L0_heel"; + rename -uid "4E069AA6-42C7-5559-E191-DF9AAF8F740E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4086,8 +4143,8 @@ createNode nurbsCurve -n "footFront_L0_heel19Shape" -p "footFront_L0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_heel20Shape" -p "footFront_L0_heel"; - rename -uid "B9DCCAB3-4E32-69F1-C050-EE8A4F7666C5"; +createNode nurbsCurve -n "footFront_L0_heel23Shape" -p "footFront_L0_heel"; + rename -uid "1FC102F7-46C0-CAA9-D877-A99EDF27E1EC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4099,8 +4156,8 @@ createNode nurbsCurve -n "footFront_L0_heel20Shape" -p "footFront_L0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_heel21Shape" -p "footFront_L0_heel"; - rename -uid "13663EA2-41A9-9329-EC51-3F8F2311CC05"; +createNode nurbsCurve -n "footFront_L0_heel24Shape" -p "footFront_L0_heel"; + rename -uid "3F8DB8A1-41B0-3578-065C-54B17FD88213"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4117,8 +4174,8 @@ createNode nurbsCurve -n "footFront_L0_heel21Shape" -p "footFront_L0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_heel21_0crvShape" -p "footFront_L0_heel"; - rename -uid "CEB316FF-49DD-A98D-CD65-04B9A5966038"; +createNode nurbsCurve -n "footFront_L0_heel24_0crvShape" -p "footFront_L0_heel"; + rename -uid "1CBAB902-49EA-C8B6-10BD-32A7E8EB85D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4135,8 +4192,8 @@ createNode nurbsCurve -n "footFront_L0_heel21_0crvShape" -p "footFront_L0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_heel21_1crvShape" -p "footFront_L0_heel"; - rename -uid "392D2864-4593-A36B-395E-988BFB229E8F"; +createNode nurbsCurve -n "footFront_L0_heel24_1crvShape" -p "footFront_L0_heel"; + rename -uid "07A904A8-40D8-B0F1-6430-72B142BE6706"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4154,10 +4211,10 @@ createNode nurbsCurve -n "footFront_L0_heel21_1crvShape" -p "footFront_L0_heel"; 0 0 -0.1875 ; createNode transform -n "footFront_L0_outpivot" -p "footFront_L0_root"; - rename -uid "BCC036DE-4D8B-A543-F9F5-E99CB158CEAC"; + rename -uid "408C28F4-433E-A324-3C97-2FBC0F4F3312"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1000376131120619 -0.31771180755404888 0.69157185350466577 ; + setAttr ".t" -type "double3" 1.1000376131120611 -0.31771180755404871 0.69157185350466932 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4165,12 +4222,12 @@ createNode transform -n "footFront_L0_outpivot" -p "footFront_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000007 ; + setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_L0_outpivotShape" -p "footFront_L0_outpivot"; - rename -uid "F12FF8D8-4273-1712-3A66-2EA272D692ED"; + rename -uid "31C3FE73-4399-00DF-53C7-B5BA62076C42"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4182,8 +4239,8 @@ createNode nurbsCurve -n "footFront_L0_outpivotShape" -p "footFront_L0_outpivot" 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_outpivot19Shape" -p "footFront_L0_outpivot"; - rename -uid "1274B9EE-4C9D-8A7B-F7C3-FDA32F6C6A97"; +createNode nurbsCurve -n "footFront_L0_outpivot22Shape" -p "footFront_L0_outpivot"; + rename -uid "32E7427F-40BC-843A-F660-A7A0BA53CD1D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4195,8 +4252,8 @@ createNode nurbsCurve -n "footFront_L0_outpivot19Shape" -p "footFront_L0_outpivo 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_outpivot20Shape" -p "footFront_L0_outpivot"; - rename -uid "B870E74A-45DD-71F7-99A0-F5BF1C792657"; +createNode nurbsCurve -n "footFront_L0_outpivot23Shape" -p "footFront_L0_outpivot"; + rename -uid "C57F0FE3-42AB-506C-745C-C6B20BB3C454"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4208,8 +4265,8 @@ createNode nurbsCurve -n "footFront_L0_outpivot20Shape" -p "footFront_L0_outpivo 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_outpivot21Shape" -p "footFront_L0_outpivot"; - rename -uid "A097E9CE-47C7-1E56-6FD2-C98EB7198193"; +createNode nurbsCurve -n "footFront_L0_outpivot24Shape" -p "footFront_L0_outpivot"; + rename -uid "8440270B-46DE-773F-09AC-158A25ABB6F0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4226,8 +4283,8 @@ createNode nurbsCurve -n "footFront_L0_outpivot21Shape" -p "footFront_L0_outpivo 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_outpivot21_0crvShape" -p "footFront_L0_outpivot"; - rename -uid "0726373A-45B6-186B-3154-ADB8DE13E64B"; +createNode nurbsCurve -n "footFront_L0_outpivot24_0crvShape" -p "footFront_L0_outpivot"; + rename -uid "6E367C33-46BA-8E46-49DB-24A7B4714363"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4244,8 +4301,8 @@ createNode nurbsCurve -n "footFront_L0_outpivot21_0crvShape" -p "footFront_L0_ou 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_outpivot21_1crvShape" -p "footFront_L0_outpivot"; - rename -uid "91153EC6-4286-D4E4-C1AA-A6BFE6E542A4"; +createNode nurbsCurve -n "footFront_L0_outpivot24_1crvShape" -p "footFront_L0_outpivot"; + rename -uid "419F18A8-41C9-1989-6C7D-E3A8A66AEA33"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4263,10 +4320,10 @@ createNode nurbsCurve -n "footFront_L0_outpivot21_1crvShape" -p "footFront_L0_ou 0 0 -0.1875 ; createNode transform -n "footFront_L0_inpivot" -p "footFront_L0_root"; - rename -uid "9D1A2D1C-462E-FD0E-27C9-2FBD4690D6D9"; + rename -uid "8F029F05-41CC-54E0-5A07-59902DE78502"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.0162439288722931 -0.31771180755405115 0.86340011285664531 ; + setAttr ".t" -type "double3" -1.0162439288722922 -0.31771180755405098 0.86340011285664886 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4274,12 +4331,12 @@ createNode transform -n "footFront_L0_inpivot" -p "footFront_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000007 ; + setAttr ".s" -type "double3" 1 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_L0_inpivotShape" -p "footFront_L0_inpivot"; - rename -uid "A349E77E-449A-5EA0-8549-12A24CEB0020"; + rename -uid "FF5B4748-47DE-1439-2EBC-8F830168BD47"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4291,8 +4348,8 @@ createNode nurbsCurve -n "footFront_L0_inpivotShape" -p "footFront_L0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_L0_inpivot19Shape" -p "footFront_L0_inpivot"; - rename -uid "052BE28E-4005-159D-4C00-19849909BFA6"; +createNode nurbsCurve -n "footFront_L0_inpivot22Shape" -p "footFront_L0_inpivot"; + rename -uid "B2CF3B62-48A3-EDAF-BAD5-11973EB55CAD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4304,8 +4361,8 @@ createNode nurbsCurve -n "footFront_L0_inpivot19Shape" -p "footFront_L0_inpivot" 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_L0_inpivot20Shape" -p "footFront_L0_inpivot"; - rename -uid "7EB7D408-425C-959A-E4F0-789EEAE126C0"; +createNode nurbsCurve -n "footFront_L0_inpivot23Shape" -p "footFront_L0_inpivot"; + rename -uid "0303A1FD-42A9-AA8D-1283-19B32C3FC95B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4317,8 +4374,8 @@ createNode nurbsCurve -n "footFront_L0_inpivot20Shape" -p "footFront_L0_inpivot" 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_L0_inpivot21Shape" -p "footFront_L0_inpivot"; - rename -uid "0FF409A6-46BB-3A04-0563-CDA6CADB2D3E"; +createNode nurbsCurve -n "footFront_L0_inpivot24Shape" -p "footFront_L0_inpivot"; + rename -uid "6DDB9C4E-4257-6E01-40E4-3490BB6917B9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4335,8 +4392,8 @@ createNode nurbsCurve -n "footFront_L0_inpivot21Shape" -p "footFront_L0_inpivot" 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_inpivot21_0crvShape" -p "footFront_L0_inpivot"; - rename -uid "1110AE93-4906-D423-2091-4F9748697D1F"; +createNode nurbsCurve -n "footFront_L0_inpivot24_0crvShape" -p "footFront_L0_inpivot"; + rename -uid "A388EE25-48F3-9131-20E7-66B10755AD7D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4353,8 +4410,8 @@ createNode nurbsCurve -n "footFront_L0_inpivot21_0crvShape" -p "footFront_L0_inp 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_L0_inpivot21_1crvShape" -p "footFront_L0_inpivot"; - rename -uid "D7D3ABBF-43DD-1C48-A2B8-70B80419AE10"; +createNode nurbsCurve -n "footFront_L0_inpivot24_1crvShape" -p "footFront_L0_inpivot"; + rename -uid "F299B667-4597-094A-53F0-C7854727322A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4372,18 +4429,18 @@ createNode nurbsCurve -n "footFront_L0_inpivot21_1crvShape" -p "footFront_L0_inp 0 0 -0.1875 ; createNode transform -n "footFront_L0_1" -p "footFront_L0_root"; - rename -uid "BFC73865-4A35-81FA-077B-E3AEEC399C3C"; + rename -uid "2EC11645-478B-16B6-87A9-099C1DB3D91E"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -7.3687973355373595 -0.60300743522685729 -16.239037496288901 ; - setAttr ".s" -type "double3" 7.9431701648148092 7.9431701648148092 7.943170164814811 ; + setAttr ".t" -type "double3" -7.3687973355373586 -0.60300743522685718 -16.239037496288894 ; + setAttr ".s" -type "double3" 7.9431701648148074 7.9431701648148074 7.9431701648148074 ; createNode nurbsCurve -n "footFront_L0_Shape1" -p "footFront_L0_1"; - rename -uid "606288B4-4534-DC14-F56C-08AABBC72994"; + rename -uid "33623A7A-4BAC-096F-C552-1C9DA05B626E"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footFront_L0_Shape1Orig" -p "footFront_L0_1"; - rename -uid "07D0094F-4031-0033-5206-7095B067F158"; + rename -uid "488F26C1-4360-5BC3-2BEC-058DE8D1C320"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4397,7 +4454,7 @@ createNode nurbsCurve -n "footFront_L0_Shape1Orig" -p "footFront_L0_1"; 0 0 0 ; createNode transform -n "frontLegUI_L0_root" -p "footFront_L0_root"; - rename -uid "E11EAD9A-4D98-3698-B460-2A926DB6A820"; + rename -uid "20BD61D7-46B4-41B4-DA2E-55AFF317097C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4409,7 +4466,7 @@ createNode transform -n "frontLegUI_L0_root" -p "footFront_L0_root"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -4421,12 +4478,14 @@ createNode transform -n "frontLegUI_L0_root" -p "footFront_L0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.5 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 10.017876024668173 5.4248605945583259 2.5678955088138053 ; + setAttr ".t" -type "double3" 10.017876024668169 5.4248605945583259 2.5678955088138089 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4434,7 +4493,7 @@ createNode transform -n "frontLegUI_L0_root" -p "footFront_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 7.943170164814811 7.943170164814811 7.9431701648148163 ; + setAttr ".s" -type "double3" 7.943170164814811 7.943170164814811 7.9431701648148145 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -4446,12 +4505,8 @@ createNode transform -n "frontLegUI_L0_root" -p "footFront_L0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 0.5; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "frontLegUI_L0_rootShape" -p "frontLegUI_L0_root"; - rename -uid "5C479F60-4029-911F-5D88-3B8BF732F6B7"; + rename -uid "1882EA62-4034-DF92-C7D4-83B99F11EE5E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4463,8 +4518,8 @@ createNode nurbsCurve -n "frontLegUI_L0_rootShape" -p "frontLegUI_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "frontLegUI_L0_root19Shape" -p "frontLegUI_L0_root"; - rename -uid "6753FD21-47B1-AFF5-5384-10BDACA8920C"; +createNode nurbsCurve -n "frontLegUI_L0_root22Shape" -p "frontLegUI_L0_root"; + rename -uid "793A3855-40C6-04C7-60A4-929129BFDDD0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4476,8 +4531,8 @@ createNode nurbsCurve -n "frontLegUI_L0_root19Shape" -p "frontLegUI_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "frontLegUI_L0_root20Shape" -p "frontLegUI_L0_root"; - rename -uid "6D8D8E4E-4588-3E0B-2B64-02B9AFC59C7D"; +createNode nurbsCurve -n "frontLegUI_L0_root23Shape" -p "frontLegUI_L0_root"; + rename -uid "A6CBC522-4861-6F81-32AB-3FBEDF62A913"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4489,8 +4544,8 @@ createNode nurbsCurve -n "frontLegUI_L0_root20Shape" -p "frontLegUI_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "frontLegUI_L0_root21Shape" -p "frontLegUI_L0_root"; - rename -uid "F8862D03-48FA-33E8-FFE6-92AA4EB84CED"; +createNode nurbsCurve -n "frontLegUI_L0_root24Shape" -p "frontLegUI_L0_root"; + rename -uid "5E05E57E-4C77-7466-03FA-EFBA5D53F2AB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4517,10 +4572,10 @@ createNode nurbsCurve -n "frontLegUI_L0_root21Shape" -p "frontLegUI_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "frontLegUI_L0_sizeRef" -p "frontLegUI_L0_root"; - rename -uid "9233C775-4FFB-0E39-EB70-329D696176B4"; + rename -uid "8D60DC3B-4B8E-46A0-5D91-ECAECA0ABCC0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.8817841970012523e-016 3.3306690738754696e-016 0.99999999999999911 ; + setAttr ".t" -type "double3" 1.3322676295501878e-015 3.3306690738754696e-016 0.99999999999999867 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4533,18 +4588,18 @@ createNode transform -n "frontLegUI_L0_sizeRef" -p "frontLegUI_L0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "legFront_L0_crv1" -p "legFront_L0_root"; - rename -uid "1B4C520E-40B6-7470-07D4-8AA377906E05"; + rename -uid "01E3E57A-41FA-34F4-051B-C793F47CFBA3"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -2.3211356138011676 -5.8086248814742651 -5.5045062328919334 ; - setAttr ".s" -type "double3" 2.5020602842634889 2.5020602842634863 2.5020602842634885 ; + setAttr ".t" -type "double3" -2.3211356138011672 -5.8086248814742643 -5.5045062328919334 ; + setAttr ".s" -type "double3" 2.5020602842634885 2.5020602842634854 2.502060284263488 ; createNode nurbsCurve -n "legFront_L0_crvShape1" -p "legFront_L0_crv1"; - rename -uid "84EADDA7-4001-5CC7-149E-3EB2E4F3B3A2"; + rename -uid "A6C4662A-4F5D-BB9C-412B-07B4F70F06FA"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "legFront_L0_crvShape1Orig" -p "legFront_L0_crv1"; - rename -uid "E29C8A67-426E-205A-FE52-60ACDC14487A"; + rename -uid "BA6F9E41-4667-D3F8-0C7C-7B8951A59991"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4558,7 +4613,7 @@ createNode nurbsCurve -n "legFront_L0_crvShape1Orig" -p "legFront_L0_crv1"; 0 0 0 ; createNode transform -n "shoulder_L0_blade" -p "shoulder_L0_root"; - rename -uid "B5B4DE8C-4FE0-B228-4AE8-97B2577E2BB6"; + rename -uid "ADADFF55-47DF-D9F5-2D92-BA84AE546225"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -4568,13 +4623,13 @@ createNode transform -n "shoulder_L0_blade" -p "shoulder_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999911 0.99999999999999922 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.999999999999999 0.99999999999999911 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "shoulder_L0_bladeShape" -p "shoulder_L0_blade"; - rename -uid "DDD8DCB0-46AC-A658-4DD1-D9877503DFAE"; + rename -uid "74332985-4D5A-E967-AEEE-008BBED22C8A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4588,8 +4643,8 @@ createNode nurbsCurve -n "shoulder_L0_bladeShape" -p "shoulder_L0_blade"; 0 0.42205831527236448 0 0 0 0 ; -createNode aimConstraint -n "shoulder_L0_blade_aimConstraint7" -p "shoulder_L0_blade"; - rename -uid "C46CAB94-46D8-3393-8351-969A47EA827E"; +createNode aimConstraint -n "shoulder_L0_blade_aimConstraint8" -p "shoulder_L0_blade"; + rename -uid "A4F08224-4766-EA43-9ED9-3191CF5EE1ED"; addAttr -dcb 0 -ci true -sn "w0" -ln "shoulder_L0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -4604,10 +4659,10 @@ createNode aimConstraint -n "shoulder_L0_blade_aimConstraint7" -p "shoulder_L0_b setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" 3.359975138206766 -13.536129435773097 -14.081236533000178 ; + setAttr ".rsrr" -type "double3" 3.3599751382069831 -13.536129435773113 -14.081236533000165 ; setAttr -k on ".w0"; -createNode pointConstraint -n "shoulder_L0_blade_pointConstraint7" -p "shoulder_L0_blade"; - rename -uid "5DC01363-4CA9-C806-A317-E899C3502B64"; +createNode pointConstraint -n "shoulder_L0_blade_pointConstraint8" -p "shoulder_L0_blade"; + rename -uid "675CD841-4200-C27E-1C57-C39DD4F07A95"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "shoulder_L0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; @@ -4624,18 +4679,18 @@ createNode pointConstraint -n "shoulder_L0_blade_pointConstraint7" -p "shoulder_ setAttr ".erp" yes; setAttr -k on ".w0"; createNode transform -n "shoulder_L0_crv" -p "shoulder_L0_root"; - rename -uid "173997AE-47AF-C969-8CB9-7A9A8B831B63"; + rename -uid "8A0C6A40-4125-7689-77EA-2F87F5580CEB"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -0.09516410914756232 -2.5303629060493171 -1.9933533667490368 ; + setAttr ".t" -type "double3" -0.095164109147562334 -2.5303629060493171 -1.9933533667490368 ; setAttr ".s" -type "double3" 1.0000000000000007 1 1 ; createNode nurbsCurve -n "shoulder_L0_crvShape" -p "shoulder_L0_crv"; - rename -uid "B2338669-4C2F-2E37-E6D5-54B6153F5A19"; + rename -uid "FEBF6777-4294-8B99-C180-82B97AC073D9"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "shoulder_L0_crvShapeOrig" -p "shoulder_L0_crv"; - rename -uid "9012A895-40B4-7C0B-CAEC-60BE454F644A"; + rename -uid "AC4D2D2E-40B9-925A-2A3D-ED8CB7AF1A15"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -4646,7 +4701,7 @@ createNode nurbsCurve -n "shoulder_L0_crvShapeOrig" -p "shoulder_L0_crv"; 0 0 0 ; createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; - rename -uid "E01C0505-4E01-50DA-5B1B-1D9F9804BEF4"; + rename -uid "C9749823-40D9-1856-0293-CA8714AA1EA2"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4656,13 +4711,13 @@ createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; addAttr -ci true -sn "mode" -ln "mode" -min 0 -at "long"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "neutralpose" -ln "neutralpose" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "neutralpose" -ln "neutralpose" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -0.23232496368006927 0.19745119313991832 0.20082401790608281 ; + setAttr ".t" -type "double3" -0.23232496368006927 0.19745119313991832 0.20082401790608295 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4681,12 +4736,9 @@ createNode transform -n "shoulder_R0_root" -p "spine_C0_eff"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "frontLegUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".neutralpose" yes; setAttr ".ikrefarray" -type "string" ""; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "shoulder_R0_rootShape" -p "shoulder_R0_root"; - rename -uid "7E62FAFE-4803-C52C-2A62-4C90FC14CE1F"; + rename -uid "CF462632-4283-A5AC-ED6D-BA9A6A6912F3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4698,8 +4750,8 @@ createNode nurbsCurve -n "shoulder_R0_rootShape" -p "shoulder_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_R0_root10Shape" -p "shoulder_R0_root"; - rename -uid "C90ADE2A-455D-D943-AC0C-6088A5865435"; +createNode nurbsCurve -n "shoulder_R0_root4Shape" -p "shoulder_R0_root"; + rename -uid "1A63C5FA-42F4-AF1E-B955-05BCA8173EB9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4711,8 +4763,8 @@ createNode nurbsCurve -n "shoulder_R0_root10Shape" -p "shoulder_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_R0_root11Shape" -p "shoulder_R0_root"; - rename -uid "4B07530C-4BEB-52F6-5953-3C85D24C1FD5"; +createNode nurbsCurve -n "shoulder_R0_root5Shape" -p "shoulder_R0_root"; + rename -uid "4E7008A8-46B7-1598-91EE-03AAA713FAB2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4724,8 +4776,8 @@ createNode nurbsCurve -n "shoulder_R0_root11Shape" -p "shoulder_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_R0_root12Shape" -p "shoulder_R0_root"; - rename -uid "9C013EA6-4BCF-6567-72C7-FF895705133A"; +createNode nurbsCurve -n "shoulder_R0_root6Shape" -p "shoulder_R0_root"; + rename -uid "A45304BA-42FB-741D-C524-E0BCEB34446D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4752,10 +4804,10 @@ createNode nurbsCurve -n "shoulder_R0_root12Shape" -p "shoulder_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "shoulder_R0_0_loc" -p "shoulder_R0_root"; - rename -uid "6B61DFC4-4C06-8E57-5AEE-E1BC26621681"; + rename -uid "0033C476-4AC1-1DF5-CEE5-43B7B2A66860"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.83252561455724616 -0.20882616370655338 0.2066360849488682 ; + setAttr ".t" -type "double3" 0.83252561455724627 -0.20882616370655116 0.2066360849488682 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4763,12 +4815,12 @@ createNode transform -n "shoulder_R0_0_loc" -p "shoulder_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999956 1 ; + setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999978 1 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "shoulder_R0_0_locShape" -p "shoulder_R0_0_loc"; - rename -uid "D8092B6B-472A-5F52-B94F-919E5DDFD4FD"; + rename -uid "73617647-4603-15B1-C9AC-3393710C56B0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4780,8 +4832,8 @@ createNode nurbsCurve -n "shoulder_R0_0_locShape" -p "shoulder_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "shoulder_R0_0_loc10Shape" -p "shoulder_R0_0_loc"; - rename -uid "DD789668-4EA1-2786-A9E6-5AA7CBCBD6F5"; +createNode nurbsCurve -n "shoulder_R0_0_loc4Shape" -p "shoulder_R0_0_loc"; + rename -uid "F54FC6EB-4BAA-2935-B7A6-DDB44F2C5E1F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4793,8 +4845,8 @@ createNode nurbsCurve -n "shoulder_R0_0_loc10Shape" -p "shoulder_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "shoulder_R0_0_loc11Shape" -p "shoulder_R0_0_loc"; - rename -uid "A366567C-424F-75DA-A56A-C1A1AA986CAE"; +createNode nurbsCurve -n "shoulder_R0_0_loc5Shape" -p "shoulder_R0_0_loc"; + rename -uid "BEA8A0A8-405E-3934-2E43-2ABAD19D3F41"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4806,8 +4858,8 @@ createNode nurbsCurve -n "shoulder_R0_0_loc11Shape" -p "shoulder_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "shoulder_R0_0_loc12Shape" -p "shoulder_R0_0_loc"; - rename -uid "E47BCEE0-40D2-DDFD-55CC-3DA2EAD312B0"; +createNode nurbsCurve -n "shoulder_R0_0_loc6Shape" -p "shoulder_R0_0_loc"; + rename -uid "3D5F9059-430E-C67B-9A04-65B10E4E4956"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4824,8 +4876,8 @@ createNode nurbsCurve -n "shoulder_R0_0_loc12Shape" -p "shoulder_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_R0_0_loc12_0crvShape" -p "shoulder_R0_0_loc"; - rename -uid "D4538F47-4941-E754-2946-88B0C498B40C"; +createNode nurbsCurve -n "shoulder_R0_0_loc6_0crvShape" -p "shoulder_R0_0_loc"; + rename -uid "7FBA1FCA-469A-D36A-DBF2-CC80196CB741"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4842,8 +4894,8 @@ createNode nurbsCurve -n "shoulder_R0_0_loc12_0crvShape" -p "shoulder_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "shoulder_R0_0_loc12_1crvShape" -p "shoulder_R0_0_loc"; - rename -uid "C22C1501-48DE-6248-ED17-DE87732A31D7"; +createNode nurbsCurve -n "shoulder_R0_0_loc6_1crvShape" -p "shoulder_R0_0_loc"; + rename -uid "705D864D-4D67-F3AF-6210-879B940C7B93"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4861,7 +4913,7 @@ createNode nurbsCurve -n "shoulder_R0_0_loc12_1crvShape" -p "shoulder_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "legFront_R0_root" -p "shoulder_R0_0_loc"; - rename -uid "FFFEAEA1-44AF-FB87-3A7A-D89351BF2B97"; + rename -uid "34DE18E7-44AB-6F8B-A50E-2FA05782ABBF"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -4870,23 +4922,23 @@ createNode transform -n "legFront_R0_root" -p "shoulder_R0_0_loc"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -k true -sn "ikSolver" -ln "ikSolver" -min 0 -max 1 -en "IK Spring:IK Rotation Plane" -at "enum"; - addAttr -ci true -sn "ikOri" -ln "ikOri" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div2" -ln "div2" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "ikOri" -ln "ikOri" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div2" -ln "div2" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -7.7715611723760958e-016 -4.4408920985006262e-016 -8.8817841970012523e-016 ; + setAttr ".t" -type "double3" -1.1102230246251565e-015 -2.6645352591003757e-015 -4.4408920985006262e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4894,7 +4946,7 @@ createNode transform -n "legFront_R0_root" -p "shoulder_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.39967062595950276 0.39967062595950326 0.39967062595950281 ; + setAttr ".s" -type "double3" 0.39967062595950276 0.3996706259595032 0.39967062595950281 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -4904,21 +4956,13 @@ createNode transform -n "legFront_R0_root" -p "shoulder_R0_0_loc"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "frontLegUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".full3BonesIK" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".maxstretch" 1.5; + setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; setAttr -k on ".ikSolver" 1; - setAttr ".ikOri" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; - setAttr ".div2" 2; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legFront_R0_rootShape" -p "legFront_R0_root"; - rename -uid "07655FE8-4BB5-3BE3-777D-C59960232BA9"; + rename -uid "739D7CB4-4BF6-0821-1BCF-6984F5D14CDD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4930,8 +4974,8 @@ createNode nurbsCurve -n "legFront_R0_rootShape" -p "legFront_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_R0_root10Shape" -p "legFront_R0_root"; - rename -uid "88B4B2E8-4F24-DA5B-9A32-2881BB14F10F"; +createNode nurbsCurve -n "legFront_R0_root4Shape" -p "legFront_R0_root"; + rename -uid "B193E9CB-40F6-9289-AE25-A0AC76777913"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4943,8 +4987,8 @@ createNode nurbsCurve -n "legFront_R0_root10Shape" -p "legFront_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_R0_root11Shape" -p "legFront_R0_root"; - rename -uid "ECD3CEFD-49C7-9AA5-192E-8BB8D24BB91A"; +createNode nurbsCurve -n "legFront_R0_root5Shape" -p "legFront_R0_root"; + rename -uid "14D05DE1-4A74-7283-C36C-9B8F156FE3BB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4956,8 +5000,8 @@ createNode nurbsCurve -n "legFront_R0_root11Shape" -p "legFront_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_R0_root12Shape" -p "legFront_R0_root"; - rename -uid "79FD85C4-4300-8564-2B2E-56B8874049D1"; +createNode nurbsCurve -n "legFront_R0_root6Shape" -p "legFront_R0_root"; + rename -uid "46337DDA-4D44-F3E9-7B21-CD87212B360C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -4984,10 +5028,10 @@ createNode nurbsCurve -n "legFront_R0_root12Shape" -p "legFront_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legFront_R0_knee" -p "legFront_R0_root"; - rename -uid "C89A64C7-48D5-3BAE-808F-1AADF7F80562"; + rename -uid "0B5462FA-4C50-8C1C-BF0C-13B639357721"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.7763568394002505e-015 -2.124086302137048 -0.48633856256837049 ; + setAttr ".t" -type "double3" 1.3322676295501878e-015 -2.1240863021370475 -0.48633856256837316 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -4995,12 +5039,12 @@ createNode transform -n "legFront_R0_knee" -p "legFront_R0_root"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 1 1.0000000000000007 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999978 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_R0_kneeShape" -p "legFront_R0_knee"; - rename -uid "7E494F76-49F0-0FF7-280C-3BBCCD709EE5"; + rename -uid "34D0EDB8-434B-539B-B34F-798F0403385A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5012,8 +5056,8 @@ createNode nurbsCurve -n "legFront_R0_kneeShape" -p "legFront_R0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_R0_knee10Shape" -p "legFront_R0_knee"; - rename -uid "CFDDEDF3-4E70-C762-DBBC-5D88EBB903EC"; +createNode nurbsCurve -n "legFront_R0_knee4Shape" -p "legFront_R0_knee"; + rename -uid "2AF5F2DE-4D9F-3BB8-D1D3-96A51E814FDB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5025,8 +5069,8 @@ createNode nurbsCurve -n "legFront_R0_knee10Shape" -p "legFront_R0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_R0_knee11Shape" -p "legFront_R0_knee"; - rename -uid "634FA4BE-4D51-8663-E979-709D85CF833F"; +createNode nurbsCurve -n "legFront_R0_knee5Shape" -p "legFront_R0_knee"; + rename -uid "B769211B-4B90-222B-CECA-679765B27E7C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5038,8 +5082,8 @@ createNode nurbsCurve -n "legFront_R0_knee11Shape" -p "legFront_R0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_R0_knee12Shape" -p "legFront_R0_knee"; - rename -uid "26078915-4EB2-7ED3-420E-C89555584938"; +createNode nurbsCurve -n "legFront_R0_knee6Shape" -p "legFront_R0_knee"; + rename -uid "3EBBDC36-4CB8-F18B-2EC2-5DBDB54434B9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5056,8 +5100,8 @@ createNode nurbsCurve -n "legFront_R0_knee12Shape" -p "legFront_R0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_knee12_0crvShape" -p "legFront_R0_knee"; - rename -uid "6E78269A-4DF5-6268-343B-17805214D08A"; +createNode nurbsCurve -n "legFront_R0_knee6_0crvShape" -p "legFront_R0_knee"; + rename -uid "B78DBDA1-4931-70B8-C7CB-5995E8EE80D6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5074,8 +5118,8 @@ createNode nurbsCurve -n "legFront_R0_knee12_0crvShape" -p "legFront_R0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_knee12_1crvShape" -p "legFront_R0_knee"; - rename -uid "0D15373A-437E-7EAC-06EA-7C83AFB1C412"; +createNode nurbsCurve -n "legFront_R0_knee6_1crvShape" -p "legFront_R0_knee"; + rename -uid "4D34D482-4B83-371B-9B04-0D87232711D3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5093,10 +5137,10 @@ createNode nurbsCurve -n "legFront_R0_knee12_1crvShape" -p "legFront_R0_knee"; 0 0 -0.1875 ; createNode transform -n "legFront_R0_ankle" -p "legFront_R0_knee"; - rename -uid "F3766919-4580-9EC0-4916-869C2FBE014C"; + rename -uid "6B8BE426-43D7-882B-52E4-499B57E02607"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3322676295501878e-015 -2.3651516407059203 0.073902270404604842 ; + setAttr ".t" -type "double3" 2.6645352591003757e-015 -2.365151640705919 0.073902270404608394 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5104,12 +5148,12 @@ createNode transform -n "legFront_R0_ankle" -p "legFront_R0_knee"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999933 0.99999999999999978 0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999978 0.99999999999999944 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_R0_ankleShape" -p "legFront_R0_ankle"; - rename -uid "ED1EED79-47EA-B69C-660B-59BD714BF38A"; + rename -uid "BD7CC5C7-47D9-9949-E9A7-448DB8A519E0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5121,8 +5165,8 @@ createNode nurbsCurve -n "legFront_R0_ankleShape" -p "legFront_R0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_R0_ankle10Shape" -p "legFront_R0_ankle"; - rename -uid "7617FD41-4BFE-AD2E-E55A-729B1AD96E2C"; +createNode nurbsCurve -n "legFront_R0_ankle4Shape" -p "legFront_R0_ankle"; + rename -uid "946B40F1-40E6-B2E5-3AD1-5BBE158443B3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5134,8 +5178,8 @@ createNode nurbsCurve -n "legFront_R0_ankle10Shape" -p "legFront_R0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_R0_ankle11Shape" -p "legFront_R0_ankle"; - rename -uid "B3CEC763-4460-3D56-84D6-BFB4B2DC88F0"; +createNode nurbsCurve -n "legFront_R0_ankle5Shape" -p "legFront_R0_ankle"; + rename -uid "840AC465-4901-0D6B-0431-9FB713C2F6A2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5147,8 +5191,8 @@ createNode nurbsCurve -n "legFront_R0_ankle11Shape" -p "legFront_R0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_R0_ankle12Shape" -p "legFront_R0_ankle"; - rename -uid "B4834EFD-4D57-ED01-6766-D58CBD4776D6"; +createNode nurbsCurve -n "legFront_R0_ankle6Shape" -p "legFront_R0_ankle"; + rename -uid "88E954D7-469A-9CF8-3E4A-DD8AA219B0FF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5165,8 +5209,8 @@ createNode nurbsCurve -n "legFront_R0_ankle12Shape" -p "legFront_R0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_ankle12_0crvShape" -p "legFront_R0_ankle"; - rename -uid "EE05D62B-4216-E40A-2459-6299610853E1"; +createNode nurbsCurve -n "legFront_R0_ankle6_0crvShape" -p "legFront_R0_ankle"; + rename -uid "0A693D11-4FAC-751D-3C86-D9BBBB6BBACB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5183,8 +5227,8 @@ createNode nurbsCurve -n "legFront_R0_ankle12_0crvShape" -p "legFront_R0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_ankle12_1crvShape" -p "legFront_R0_ankle"; - rename -uid "E2D38D59-445F-0AF5-9FB4-B2879BE87F5F"; +createNode nurbsCurve -n "legFront_R0_ankle6_1crvShape" -p "legFront_R0_ankle"; + rename -uid "FC3E3A2D-47D8-A553-43E9-FB95BC07D286"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5202,10 +5246,10 @@ createNode nurbsCurve -n "legFront_R0_ankle12_1crvShape" -p "legFront_R0_ankle"; 0 0 -0.1875 ; createNode transform -n "legFront_R0_foot" -p "legFront_R0_ankle"; - rename -uid "383584B1-4BB1-6BE0-1D44-CABAFE177676"; + rename -uid "18A02A7E-43F1-6A6F-D1D4-7F815A2349C1"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.3322676295501878e-015 -1.1294425054275468 0.023148533894220336 ; + setAttr ".t" -type "double3" -4.4408920985006262e-016 -1.1294425054275496 0.023148533894220336 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5213,12 +5257,12 @@ createNode transform -n "legFront_R0_foot" -p "legFront_R0_ankle"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999967 1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999978 1 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_R0_footShape" -p "legFront_R0_foot"; - rename -uid "14C39B7F-4D89-9051-9DC4-BA9C280A111D"; + rename -uid "99FFA4F9-4B93-6C51-33A8-E5AA3E029D2D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5230,8 +5274,8 @@ createNode nurbsCurve -n "legFront_R0_footShape" -p "legFront_R0_foot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_R0_foot10Shape" -p "legFront_R0_foot"; - rename -uid "A047CF0E-4535-FEAD-38CF-88B3386E42F5"; +createNode nurbsCurve -n "legFront_R0_foot4Shape" -p "legFront_R0_foot"; + rename -uid "60D9F634-4D45-9DD9-9363-EAADC88425A7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5243,8 +5287,8 @@ createNode nurbsCurve -n "legFront_R0_foot10Shape" -p "legFront_R0_foot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_R0_foot11Shape" -p "legFront_R0_foot"; - rename -uid "21F60BB3-48E4-1AF5-9B8F-EC80038050E2"; +createNode nurbsCurve -n "legFront_R0_foot5Shape" -p "legFront_R0_foot"; + rename -uid "B956C9C3-46E7-D1F9-4E39-F986F8FB3343"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5256,8 +5300,8 @@ createNode nurbsCurve -n "legFront_R0_foot11Shape" -p "legFront_R0_foot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_R0_foot12Shape" -p "legFront_R0_foot"; - rename -uid "40E13276-43EB-D3A7-8E56-8C96EF7C8790"; +createNode nurbsCurve -n "legFront_R0_foot6Shape" -p "legFront_R0_foot"; + rename -uid "9937917E-4396-8816-0088-3AAA986A448F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5274,8 +5318,8 @@ createNode nurbsCurve -n "legFront_R0_foot12Shape" -p "legFront_R0_foot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_foot12_0crvShape" -p "legFront_R0_foot"; - rename -uid "EB027F52-42C0-A10C-D0CB-F888F6A94C74"; +createNode nurbsCurve -n "legFront_R0_foot6_0crvShape" -p "legFront_R0_foot"; + rename -uid "615F96E1-4493-62B8-8F5B-78AE51DBE99E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5292,8 +5336,8 @@ createNode nurbsCurve -n "legFront_R0_foot12_0crvShape" -p "legFront_R0_foot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_foot12_1crvShape" -p "legFront_R0_foot"; - rename -uid "EEB1E42D-4309-A74B-3E06-D28EFC34021B"; +createNode nurbsCurve -n "legFront_R0_foot6_1crvShape" -p "legFront_R0_foot"; + rename -uid "455D8F99-4458-9B5A-D2B7-AC869CE6564F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5311,10 +5355,10 @@ createNode nurbsCurve -n "legFront_R0_foot12_1crvShape" -p "legFront_R0_foot"; 0 0 -0.1875 ; createNode transform -n "legFront_R0_eff" -p "legFront_R0_foot"; - rename -uid "01F4DC4C-4E97-0353-225B-8B9CA9F3DCBF"; + rename -uid "7E6360B5-40AA-4441-5D39-2EBD6885B61C"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 8.8817841970012523e-016 6.9388939039072284e-016 0.59657797851921224 ; + setAttr ".t" -type "double3" 3.1086244689504383e-015 8.6042284408449632e-016 0.59657797851920868 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5322,12 +5366,12 @@ createNode transform -n "legFront_R0_eff" -p "legFront_R0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 0.99999999999999967 0.999999999999999 ; + setAttr ".s" -type "double3" 0.99999999999999967 0.99999999999999922 0.99999999999999867 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legFront_R0_effShape" -p "legFront_R0_eff"; - rename -uid "0F29FD14-4E61-92A1-C1CD-67863FD0C51B"; + rename -uid "34347F68-4B4C-0918-6D4F-7087FCB206CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5339,8 +5383,8 @@ createNode nurbsCurve -n "legFront_R0_effShape" -p "legFront_R0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legFront_R0_eff10Shape" -p "legFront_R0_eff"; - rename -uid "0D3F04CB-4982-A0B5-0EFF-17B1F6CFBF6E"; +createNode nurbsCurve -n "legFront_R0_eff4Shape" -p "legFront_R0_eff"; + rename -uid "61B4025F-42BD-1D6C-AB3F-F3BCF4CD690A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5352,8 +5396,8 @@ createNode nurbsCurve -n "legFront_R0_eff10Shape" -p "legFront_R0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legFront_R0_eff11Shape" -p "legFront_R0_eff"; - rename -uid "15DBBA13-4324-231F-6877-008A3CB7F000"; +createNode nurbsCurve -n "legFront_R0_eff5Shape" -p "legFront_R0_eff"; + rename -uid "99338A14-4C51-F3A2-EF9E-65A2DECCE72E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5365,8 +5409,8 @@ createNode nurbsCurve -n "legFront_R0_eff11Shape" -p "legFront_R0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legFront_R0_eff12Shape" -p "legFront_R0_eff"; - rename -uid "C42F0425-4D8F-05FE-9F08-968EFD30AC4C"; +createNode nurbsCurve -n "legFront_R0_eff6Shape" -p "legFront_R0_eff"; + rename -uid "2862B3B4-4F8D-E8B0-35E1-B1A7F8FF6E8A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5383,8 +5427,8 @@ createNode nurbsCurve -n "legFront_R0_eff12Shape" -p "legFront_R0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_eff12_0crvShape" -p "legFront_R0_eff"; - rename -uid "99A21E1D-4A99-7D41-66BF-27A8EAB508E6"; +createNode nurbsCurve -n "legFront_R0_eff6_0crvShape" -p "legFront_R0_eff"; + rename -uid "172959DC-414E-197B-9304-08882059DEDB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5401,8 +5445,8 @@ createNode nurbsCurve -n "legFront_R0_eff12_0crvShape" -p "legFront_R0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legFront_R0_eff12_1crvShape" -p "legFront_R0_eff"; - rename -uid "FF9E6EDC-4A15-8DF5-FF5D-0399360002BD"; +createNode nurbsCurve -n "legFront_R0_eff6_1crvShape" -p "legFront_R0_eff"; + rename -uid "58C2E2BB-4C40-5DAF-5AC4-0E8EE5D70EA6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5420,7 +5464,7 @@ createNode nurbsCurve -n "legFront_R0_eff12_1crvShape" -p "legFront_R0_eff"; 0 0 -0.1875 ; createNode transform -n "footFront_R0_root" -p "legFront_R0_foot"; - rename -uid "B8DA80C7-4C85-5D23-690D-58BE487AA35F"; + rename -uid "702E0129-442E-2981-86BF-5DB1E4F7FEF9"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -5429,11 +5473,11 @@ createNode transform -n "footFront_R0_root" -p "legFront_R0_foot"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.7763568394002505e-015 7.2164496600635175e-016 8.8817841970012523e-016 ; + setAttr ".t" -type "double3" 3.1086244689504383e-015 9.1593399531575415e-016 -1.7763568394002505e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5441,7 +5485,7 @@ createNode transform -n "footFront_R0_root" -p "legFront_R0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.31499517602514093 0.31499517602514099 0.31499517602514077 ; + setAttr ".s" -type "double3" 0.31499517602514099 0.31499517602514093 0.31499517602514077 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -5451,10 +5495,8 @@ createNode transform -n "footFront_R0_root" -p "legFront_R0_foot"; setAttr ".connector" -type "string" "leg_3jnt_01"; setAttr ".ui_host" -type "string" "frontLegUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "footFront_R0_rootShape" -p "footFront_R0_root"; - rename -uid "EAB50775-43B8-C4A9-557C-89912C787DEB"; + rename -uid "8855F3FA-4916-E179-C56E-9EB3D214162B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5466,8 +5508,8 @@ createNode nurbsCurve -n "footFront_R0_rootShape" -p "footFront_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_root10Shape" -p "footFront_R0_root"; - rename -uid "9CBD4C8C-4600-281E-4173-D5A863970C31"; +createNode nurbsCurve -n "footFront_R0_root4Shape" -p "footFront_R0_root"; + rename -uid "E5FD2780-426F-CEFD-B585-F5841228D1F3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5479,8 +5521,8 @@ createNode nurbsCurve -n "footFront_R0_root10Shape" -p "footFront_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_root11Shape" -p "footFront_R0_root"; - rename -uid "EB7FAB82-4583-301B-9EF1-F893A65EB747"; +createNode nurbsCurve -n "footFront_R0_root5Shape" -p "footFront_R0_root"; + rename -uid "CD799EFA-46DC-E08A-794C-B9B712D3ACEA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5492,8 +5534,8 @@ createNode nurbsCurve -n "footFront_R0_root11Shape" -p "footFront_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_root12Shape" -p "footFront_R0_root"; - rename -uid "E5D3BF68-4389-24DA-65E5-3184F001B1C6"; +createNode nurbsCurve -n "footFront_R0_root6Shape" -p "footFront_R0_root"; + rename -uid "7084AA59-4C77-A960-8FC0-0D9B6A08E2B8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5520,10 +5562,10 @@ createNode nurbsCurve -n "footFront_R0_root12Shape" -p "footFront_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "footFront_R0_0_loc" -p "footFront_R0_root"; - rename -uid "0FA9C238-4E9D-F0B5-3D6B-249180F98EB4"; + rename -uid "FBFC1FE2-42DE-9F84-6CEB-468E507AC5EC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -3.5527136788005009e-015 6.6613381477509392e-016 0.75996190873515701 ; + setAttr ".t" -type "double3" 6.2172489379008766e-015 5.5511151231257827e-016 0.75996190873517833 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5531,12 +5573,12 @@ createNode transform -n "footFront_R0_0_loc" -p "footFront_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999956 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_R0_0_locShape" -p "footFront_R0_0_loc"; - rename -uid "5D0C9C67-46EF-1AD3-1576-B3934B82CCE0"; + rename -uid "3F7167B3-4BE8-F8B5-4F2E-C2AC27BA0690"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5548,8 +5590,8 @@ createNode nurbsCurve -n "footFront_R0_0_locShape" -p "footFront_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_0_loc10Shape" -p "footFront_R0_0_loc"; - rename -uid "5CEA8544-4DF4-D925-9AF5-0BA06A619920"; +createNode nurbsCurve -n "footFront_R0_0_loc4Shape" -p "footFront_R0_0_loc"; + rename -uid "82046614-4A9F-F8BE-98D2-16A13692E082"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5561,8 +5603,8 @@ createNode nurbsCurve -n "footFront_R0_0_loc10Shape" -p "footFront_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_0_loc11Shape" -p "footFront_R0_0_loc"; - rename -uid "73C46E51-4538-21DD-7E5F-33A8C37594C0"; +createNode nurbsCurve -n "footFront_R0_0_loc5Shape" -p "footFront_R0_0_loc"; + rename -uid "A16357B5-49AC-0FC0-762D-5BBF7133D76F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5574,8 +5616,8 @@ createNode nurbsCurve -n "footFront_R0_0_loc11Shape" -p "footFront_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_0_loc12Shape" -p "footFront_R0_0_loc"; - rename -uid "ABD8EB98-4414-7ABF-7619-518BDD1D5E0B"; +createNode nurbsCurve -n "footFront_R0_0_loc6Shape" -p "footFront_R0_0_loc"; + rename -uid "D6A7BB8A-413E-ED25-B1EF-55B781FA9F74"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5592,8 +5634,8 @@ createNode nurbsCurve -n "footFront_R0_0_loc12Shape" -p "footFront_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_0_loc12_0crvShape" -p "footFront_R0_0_loc"; - rename -uid "95D17BE1-4DBE-4924-0520-5D944950E6CC"; +createNode nurbsCurve -n "footFront_R0_0_loc6_0crvShape" -p "footFront_R0_0_loc"; + rename -uid "CEA05339-45C4-ADDF-55A7-4884D42F5FD4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5610,8 +5652,8 @@ createNode nurbsCurve -n "footFront_R0_0_loc12_0crvShape" -p "footFront_R0_0_loc 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_0_loc12_1crvShape" -p "footFront_R0_0_loc"; - rename -uid "1D78C470-48E7-703D-429E-2BA76EDE9EEF"; +createNode nurbsCurve -n "footFront_R0_0_loc6_1crvShape" -p "footFront_R0_0_loc"; + rename -uid "2DC51BC2-4D92-7425-AA72-4D99A7658839"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5629,10 +5671,10 @@ createNode nurbsCurve -n "footFront_R0_0_loc12_1crvShape" -p "footFront_R0_0_loc 0 0 -0.1875 ; createNode transform -n "footFront_R0_1_loc" -p "footFront_R0_0_loc"; - rename -uid "5C344468-443B-8124-50B1-24B3AF188AB3"; + rename -uid "D6759845-47D0-67C5-3BBD-FB84934ACD02"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 6.2172489379008766e-015 -0.31771180755405148 0.73937999249395858 ; + setAttr ".t" -type "double3" -3.5527136788005009e-015 -0.31771180755405087 0.73937999249394437 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5640,12 +5682,12 @@ createNode transform -n "footFront_R0_1_loc" -p "footFront_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000011 1.0000000000000009 1.0000000000000018 ; + setAttr ".s" -type "double3" 1 1.0000000000000002 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_R0_1_locShape" -p "footFront_R0_1_loc"; - rename -uid "D38DE9CA-4A9C-5228-51F4-3584431E5348"; + rename -uid "624D2066-4611-0E8E-82D2-539403CBCD21"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5657,8 +5699,8 @@ createNode nurbsCurve -n "footFront_R0_1_locShape" -p "footFront_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_1_loc10Shape" -p "footFront_R0_1_loc"; - rename -uid "2C72425B-42A4-5D66-781E-72BCCB6480FA"; +createNode nurbsCurve -n "footFront_R0_1_loc4Shape" -p "footFront_R0_1_loc"; + rename -uid "B63437C0-4D5C-4FB4-1F01-5F9F96068D40"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5670,8 +5712,8 @@ createNode nurbsCurve -n "footFront_R0_1_loc10Shape" -p "footFront_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_1_loc11Shape" -p "footFront_R0_1_loc"; - rename -uid "E9108443-4CDE-8440-EA61-69BB3902E20A"; +createNode nurbsCurve -n "footFront_R0_1_loc5Shape" -p "footFront_R0_1_loc"; + rename -uid "A42D5F0B-4C73-8DA1-758E-B993A9D7D753"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5683,8 +5725,8 @@ createNode nurbsCurve -n "footFront_R0_1_loc11Shape" -p "footFront_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_1_loc12Shape" -p "footFront_R0_1_loc"; - rename -uid "EB952584-4FD0-9A82-60A3-48AC4FCC36CA"; +createNode nurbsCurve -n "footFront_R0_1_loc6Shape" -p "footFront_R0_1_loc"; + rename -uid "9EB83CEA-46F2-85BD-97E8-AA8884CAAF7B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5701,8 +5743,8 @@ createNode nurbsCurve -n "footFront_R0_1_loc12Shape" -p "footFront_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_1_loc12_0crvShape" -p "footFront_R0_1_loc"; - rename -uid "C4DD2A3F-459F-ADD0-990E-C29D40A73E8B"; +createNode nurbsCurve -n "footFront_R0_1_loc6_0crvShape" -p "footFront_R0_1_loc"; + rename -uid "FC16B102-4479-824B-D614-71BCB8AD3128"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5719,8 +5761,8 @@ createNode nurbsCurve -n "footFront_R0_1_loc12_0crvShape" -p "footFront_R0_1_loc 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_1_loc12_1crvShape" -p "footFront_R0_1_loc"; - rename -uid "B7BF237E-4F77-05EC-F77F-88B00781B057"; +createNode nurbsCurve -n "footFront_R0_1_loc6_1crvShape" -p "footFront_R0_1_loc"; + rename -uid "69D5962B-4C84-1061-D91E-5E8091631A8A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5738,19 +5780,19 @@ createNode nurbsCurve -n "footFront_R0_1_loc12_1crvShape" -p "footFront_R0_1_loc 0 0 -0.1875 ; createNode transform -n "footFront_R0_crv" -p "footFront_R0_root"; - rename -uid "C65E6299-4190-424B-24A8-C890340510DA"; + rename -uid "B5B99B85-410A-A0AF-6F94-B3986F8821DB"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -7.3687973355373462 -0.60300743522684519 -16.239037496288915 ; + setAttr ".t" -type "double3" -7.3687973355373444 -0.60300743522684541 -16.239037496288905 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; - setAttr ".s" -type "double3" 7.9431701648148065 7.9431701648148056 -7.9431701648148083 ; + setAttr ".s" -type "double3" 7.9431701648148065 7.9431701648148074 -7.9431701648148083 ; createNode nurbsCurve -n "footFront_R0_crvShape" -p "footFront_R0_crv"; - rename -uid "A5086AC3-4369-B884-68D6-79B4905D8BF1"; + rename -uid "88F1AA9D-4915-7D9F-8982-ECA41D306011"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footFront_R0_crvShapeOrig" -p "footFront_R0_crv"; - rename -uid "F48F9699-49FD-9A34-32B2-9895F5DD7FF5"; + rename -uid "430A8DD1-4FCD-EC17-A47F-D593A1E8624B"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -5762,10 +5804,10 @@ createNode nurbsCurve -n "footFront_R0_crvShapeOrig" -p "footFront_R0_crv"; 0 0 0 ; createNode transform -n "footFront_R0_heel" -p "footFront_R0_root"; - rename -uid "DAFA7C1C-4C08-FFE8-1EAA-53B00D2EC81C"; + rename -uid "661D0ED7-44D9-00D7-ED75-368AEB62E9C4"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.6645352591003757e-015 -0.31771180755405065 -0.06789990867209994 ; + setAttr ".t" -type "double3" 1.2434497875801753e-014 -0.31771180755405076 -0.067899908672078624 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5773,12 +5815,12 @@ createNode transform -n "footFront_R0_heel" -p "footFront_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999956 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_R0_heelShape" -p "footFront_R0_heel"; - rename -uid "C1BE6A53-471A-6959-08DA-EC9C3A3E48B1"; + rename -uid "A331B82C-4199-B97C-C352-A4A4E20F8D1E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5790,8 +5832,8 @@ createNode nurbsCurve -n "footFront_R0_heelShape" -p "footFront_R0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_heel10Shape" -p "footFront_R0_heel"; - rename -uid "6F35DF19-46E9-67A4-0DA4-99BF6F1D6F35"; +createNode nurbsCurve -n "footFront_R0_heel4Shape" -p "footFront_R0_heel"; + rename -uid "D3D47616-494C-C79D-FE0B-0BA22BA371EA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5803,8 +5845,8 @@ createNode nurbsCurve -n "footFront_R0_heel10Shape" -p "footFront_R0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_heel11Shape" -p "footFront_R0_heel"; - rename -uid "1D8D355C-4C59-DD8B-F9DE-B1A81CE1D3E0"; +createNode nurbsCurve -n "footFront_R0_heel5Shape" -p "footFront_R0_heel"; + rename -uid "6820DF11-47FE-DF15-D9E6-D7A020C74C96"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5816,8 +5858,8 @@ createNode nurbsCurve -n "footFront_R0_heel11Shape" -p "footFront_R0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_heel12Shape" -p "footFront_R0_heel"; - rename -uid "B782335C-4738-4381-0700-3BA096B712B9"; +createNode nurbsCurve -n "footFront_R0_heel6Shape" -p "footFront_R0_heel"; + rename -uid "6769CAD5-490D-5E2B-B179-B5B2C633B885"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5834,8 +5876,8 @@ createNode nurbsCurve -n "footFront_R0_heel12Shape" -p "footFront_R0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_heel12_0crvShape" -p "footFront_R0_heel"; - rename -uid "5B83E7B9-4F0F-C19B-ADCA-6589514DBD85"; +createNode nurbsCurve -n "footFront_R0_heel6_0crvShape" -p "footFront_R0_heel"; + rename -uid "957C6DC0-4507-2BA9-95AB-26AFC11C5771"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5852,8 +5894,8 @@ createNode nurbsCurve -n "footFront_R0_heel12_0crvShape" -p "footFront_R0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_heel12_1crvShape" -p "footFront_R0_heel"; - rename -uid "90EB0F17-4BB7-1B2C-33F4-28B657C41C28"; +createNode nurbsCurve -n "footFront_R0_heel6_1crvShape" -p "footFront_R0_heel"; + rename -uid "1F60AA1D-4F0B-12B7-536A-2A9C9A404453"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5871,10 +5913,10 @@ createNode nurbsCurve -n "footFront_R0_heel12_1crvShape" -p "footFront_R0_heel"; 0 0 -0.1875 ; createNode transform -n "footFront_R0_outpivot" -p "footFront_R0_root"; - rename -uid "BE36B4A3-4868-B349-FD60-E3AC8E5E8D42"; + rename -uid "7E36FAF5-4976-4020-1B77-42A5ACFA2B26"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1000376131120593 -0.31771180755405043 0.691571853504648 ; + setAttr ".t" -type "double3" 1.1000376131120611 -0.31771180755405032 0.69157185350466932 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5882,12 +5924,12 @@ createNode transform -n "footFront_R0_outpivot" -p "footFront_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999956 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_R0_outpivotShape" -p "footFront_R0_outpivot"; - rename -uid "DCC3B158-4800-3887-BF91-72A64B8B23F7"; + rename -uid "35B9798B-4553-7D19-9EFA-EE8029336FC5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5899,8 +5941,8 @@ createNode nurbsCurve -n "footFront_R0_outpivotShape" -p "footFront_R0_outpivot" 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_outpivot10Shape" -p "footFront_R0_outpivot"; - rename -uid "044FC4D7-46BB-A288-F62E-8D9EA7A7A755"; +createNode nurbsCurve -n "footFront_R0_outpivot4Shape" -p "footFront_R0_outpivot"; + rename -uid "FEF23520-41CD-77D4-2238-77800EC5CDCA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5912,8 +5954,8 @@ createNode nurbsCurve -n "footFront_R0_outpivot10Shape" -p "footFront_R0_outpivo 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_outpivot11Shape" -p "footFront_R0_outpivot"; - rename -uid "94511FBC-4A34-9F4D-A6A0-9D84D11BDC52"; +createNode nurbsCurve -n "footFront_R0_outpivot5Shape" -p "footFront_R0_outpivot"; + rename -uid "A048245F-4ED6-5960-B68C-99BC99532345"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5925,8 +5967,8 @@ createNode nurbsCurve -n "footFront_R0_outpivot11Shape" -p "footFront_R0_outpivo 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_outpivot12Shape" -p "footFront_R0_outpivot"; - rename -uid "682BF1D2-41E2-2D8D-8CD9-668F0229E503"; +createNode nurbsCurve -n "footFront_R0_outpivot6Shape" -p "footFront_R0_outpivot"; + rename -uid "4DF6D918-4978-6B70-185C-E1890E7D589E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5943,8 +5985,8 @@ createNode nurbsCurve -n "footFront_R0_outpivot12Shape" -p "footFront_R0_outpivo 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_outpivot12_0crvShape" -p "footFront_R0_outpivot"; - rename -uid "FAAC3365-414F-F52F-9F05-F680E56670AE"; +createNode nurbsCurve -n "footFront_R0_outpivot6_0crvShape" -p "footFront_R0_outpivot"; + rename -uid "ABD331FD-4135-0B73-CA3E-EBA4411CFFE9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5961,8 +6003,8 @@ createNode nurbsCurve -n "footFront_R0_outpivot12_0crvShape" -p "footFront_R0_ou 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_outpivot12_1crvShape" -p "footFront_R0_outpivot"; - rename -uid "FAEADD12-4C8C-ADDB-6CFA-708A1542AFDA"; +createNode nurbsCurve -n "footFront_R0_outpivot6_1crvShape" -p "footFront_R0_outpivot"; + rename -uid "3A1F448B-413D-5FC2-8A21-0DBDA33A4821"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -5980,10 +6022,10 @@ createNode nurbsCurve -n "footFront_R0_outpivot12_1crvShape" -p "footFront_R0_ou 0 0 -0.1875 ; createNode transform -n "footFront_R0_inpivot" -p "footFront_R0_root"; - rename -uid "59CF860A-412A-06CD-7BC5-43B67BAC02FD"; + rename -uid "09C7854D-4271-6379-78FD-FB8FA490257E"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.016243928872302 -0.31771180755405048 0.86340011285661333 ; + setAttr ".t" -type "double3" -1.0162439288722931 -0.31771180755405054 0.86340011285664531 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -5991,12 +6033,12 @@ createNode transform -n "footFront_R0_inpivot" -p "footFront_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999878 0.99999999999999956 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999989 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footFront_R0_inpivotShape" -p "footFront_R0_inpivot"; - rename -uid "8B2B88DD-4928-C0AE-841D-2CBA04EF9DCA"; + rename -uid "5982959D-480F-A903-FA9B-2E8FF5DAB4B2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6008,8 +6050,8 @@ createNode nurbsCurve -n "footFront_R0_inpivotShape" -p "footFront_R0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footFront_R0_inpivot10Shape" -p "footFront_R0_inpivot"; - rename -uid "B63325B1-4C77-629C-E241-A0BE0BAB0BB5"; +createNode nurbsCurve -n "footFront_R0_inpivot4Shape" -p "footFront_R0_inpivot"; + rename -uid "B2D5A66D-4C31-7BEE-7E3A-B7ACF6D1B6DB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6021,8 +6063,8 @@ createNode nurbsCurve -n "footFront_R0_inpivot10Shape" -p "footFront_R0_inpivot" 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footFront_R0_inpivot11Shape" -p "footFront_R0_inpivot"; - rename -uid "4499581C-47A7-7D92-BAB6-60876CF21E07"; +createNode nurbsCurve -n "footFront_R0_inpivot5Shape" -p "footFront_R0_inpivot"; + rename -uid "03A28E23-4073-0132-AE46-6795028CD56C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6034,8 +6076,8 @@ createNode nurbsCurve -n "footFront_R0_inpivot11Shape" -p "footFront_R0_inpivot" 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footFront_R0_inpivot12Shape" -p "footFront_R0_inpivot"; - rename -uid "3002322E-4D93-099F-6EF7-89B2D1F64255"; +createNode nurbsCurve -n "footFront_R0_inpivot6Shape" -p "footFront_R0_inpivot"; + rename -uid "E9D820AC-4BA7-66F6-ACF2-849D38FCFBC2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6052,8 +6094,8 @@ createNode nurbsCurve -n "footFront_R0_inpivot12Shape" -p "footFront_R0_inpivot" 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_inpivot12_0crvShape" -p "footFront_R0_inpivot"; - rename -uid "D9FE326D-4A3D-036A-317B-96B38795ACAA"; +createNode nurbsCurve -n "footFront_R0_inpivot6_0crvShape" -p "footFront_R0_inpivot"; + rename -uid "B72209C6-486A-74FA-1853-96A250F0478E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6070,8 +6112,8 @@ createNode nurbsCurve -n "footFront_R0_inpivot12_0crvShape" -p "footFront_R0_inp 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footFront_R0_inpivot12_1crvShape" -p "footFront_R0_inpivot"; - rename -uid "3343EF93-4F79-C665-8AE8-78A396334372"; +createNode nurbsCurve -n "footFront_R0_inpivot6_1crvShape" -p "footFront_R0_inpivot"; + rename -uid "171E3CD9-4490-23FB-7320-A6A91DF045D7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6089,19 +6131,19 @@ createNode nurbsCurve -n "footFront_R0_inpivot12_1crvShape" -p "footFront_R0_inp 0 0 -0.1875 ; createNode transform -n "footFront_R0_1" -p "footFront_R0_root"; - rename -uid "518D2CDD-4C4B-53F8-2B77-79A0B0BA57E5"; + rename -uid "95B0821B-462E-A628-2D50-9E8CCE90D7C7"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -7.3687973355373462 -0.60300743522684519 -16.239037496288915 ; + setAttr ".t" -type "double3" -7.3687973355373444 -0.60300743522684541 -16.239037496288905 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; - setAttr ".s" -type "double3" 7.9431701648148065 7.9431701648148056 -7.9431701648148083 ; + setAttr ".s" -type "double3" 7.9431701648148065 7.9431701648148074 -7.9431701648148083 ; createNode nurbsCurve -n "footFront_R0_Shape1" -p "footFront_R0_1"; - rename -uid "D885791C-4E84-7812-B7BD-C29168A10B8A"; + rename -uid "0FE07C2B-4A5B-7595-14F4-A38E77D30A2A"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footFront_R0_Shape1Orig" -p "footFront_R0_1"; - rename -uid "3635DDBF-4F9A-4F65-EC56-9D931B359CAD"; + rename -uid "7634BE0F-4FBA-B891-21E3-03B437A3B16F"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6115,7 +6157,7 @@ createNode nurbsCurve -n "footFront_R0_Shape1Orig" -p "footFront_R0_1"; 0 0 0 ; createNode transform -n "frontLegUI_R0_root" -p "footFront_R0_root"; - rename -uid "BC6566C4-4768-2635-C7E7-549BEDBD3379"; + rename -uid "24E5FD72-4FE1-F591-A5DB-92B7217D0334"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -6127,7 +6169,7 @@ createNode transform -n "frontLegUI_R0_root" -p "footFront_R0_root"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -6139,12 +6181,14 @@ createNode transform -n "frontLegUI_R0_root" -p "footFront_R0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.5 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 10.017876024668174 5.4248605945583073 2.5678955088137805 ; + setAttr ".t" -type "double3" 10.017876024668176 5.4248605945583135 2.5678955088138089 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6152,7 +6196,7 @@ createNode transform -n "frontLegUI_R0_root" -p "footFront_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 7.9431701648148039 7.9431701648148048 7.9431701648148065 ; + setAttr ".s" -type "double3" 7.9431701648148101 7.943170164814811 7.9431701648148154 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -6164,12 +6208,8 @@ createNode transform -n "frontLegUI_R0_root" -p "footFront_R0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 0.5; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "frontLegUI_R0_rootShape" -p "frontLegUI_R0_root"; - rename -uid "1B8419A7-4544-70B7-8FAD-37A21813A135"; + rename -uid "49DD17E8-40AE-9059-7BEA-23954B45944A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6181,8 +6221,8 @@ createNode nurbsCurve -n "frontLegUI_R0_rootShape" -p "frontLegUI_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "frontLegUI_R0_root10Shape" -p "frontLegUI_R0_root"; - rename -uid "43029193-4CB0-E75B-5D7A-5FB7C7FF1AE1"; +createNode nurbsCurve -n "frontLegUI_R0_root4Shape" -p "frontLegUI_R0_root"; + rename -uid "D3564921-4F43-4D4A-4EB9-9DB6AEA53973"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6194,8 +6234,8 @@ createNode nurbsCurve -n "frontLegUI_R0_root10Shape" -p "frontLegUI_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "frontLegUI_R0_root11Shape" -p "frontLegUI_R0_root"; - rename -uid "4449163A-4D77-512A-3410-DB82C6CEEC1B"; +createNode nurbsCurve -n "frontLegUI_R0_root5Shape" -p "frontLegUI_R0_root"; + rename -uid "32B1702F-4977-2BF3-1469-6DA430EFE380"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6207,8 +6247,8 @@ createNode nurbsCurve -n "frontLegUI_R0_root11Shape" -p "frontLegUI_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "frontLegUI_R0_root12Shape" -p "frontLegUI_R0_root"; - rename -uid "A189D3F6-409B-DB8D-444F-168FB5A3D06E"; +createNode nurbsCurve -n "frontLegUI_R0_root6Shape" -p "frontLegUI_R0_root"; + rename -uid "5252F7DA-487A-83A3-8DAE-808A7E70E733"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6235,36 +6275,35 @@ createNode nurbsCurve -n "frontLegUI_R0_root12Shape" -p "frontLegUI_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "frontLegUI_R0_sizeRef" -p "frontLegUI_R0_root"; - rename -uid "CC108105-4C2E-D174-474F-4CBFA2F3532F"; + rename -uid "DADE9129-4083-A594-3B09-3EBAADD2E898"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -4.4408920985006262e-016 3.3306690738754696e-016 1 ; + setAttr ".t" -type "double3" -4.4408920985006262e-016 1.1102230246251565e-016 1.0000000000000004 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 179.99999999999997 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 -1.0000000000000002 ; + setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999956 0.99999999999999911 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "legFront_R0_crv1" -p "legFront_R0_root"; - rename -uid "E9537FE1-458F-ABF1-B02B-F88E85429C84"; + rename -uid "42A978A4-4EEB-9598-1408-748B4539E735"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -2.3211356138011703 -5.8086248814742625 -5.5045062328919352 ; + setAttr ".t" -type "double3" -2.3211356138011698 -5.8086248814742634 -5.5045062328919379 ; setAttr ".r" -type "double3" 0 179.99999999999994 0 ; setAttr ".s" -type "double3" 2.5020602842634889 2.5020602842634871 -2.5020602842634885 ; createNode nurbsCurve -n "legFront_R0_crvShape1" -p "legFront_R0_crv1"; - rename -uid "04523F3F-441D-FB6D-6292-55B997920FA4"; + rename -uid "EE087502-4DBC-B4EB-6ED8-F9A5D657F2CA"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "legFront_R0_crvShape1Orig" -p "legFront_R0_crv1"; - rename -uid "35A45456-4CCB-2191-BA1D-AB81DE25CEEC"; + rename -uid "72C9CE30-4285-6A23-9753-F48DFB63063B"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6278,7 +6317,7 @@ createNode nurbsCurve -n "legFront_R0_crvShape1Orig" -p "legFront_R0_crv1"; 0 0 0 ; createNode transform -n "shoulder_R0_blade" -p "shoulder_R0_root"; - rename -uid "EA15F08A-4881-98A0-AA96-CFA1F309A7BD"; + rename -uid "3A2B04C4-4186-886D-DEAD-48AA75346B2E"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -6288,13 +6327,13 @@ createNode transform -n "shoulder_R0_blade" -p "shoulder_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999833 0.99999999999999911 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999878 0.999999999999999 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "shoulder_R0_bladeShape" -p "shoulder_R0_blade"; - rename -uid "CB14B792-4C76-00EE-C8C4-208012661A30"; + rename -uid "0C637EB6-4C6C-AADC-E8BE-9D926D7A9F46"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6308,8 +6347,8 @@ createNode nurbsCurve -n "shoulder_R0_bladeShape" -p "shoulder_R0_blade"; 0 0.42205831527236448 0 0 0 0 ; -createNode aimConstraint -n "shoulder_R0_blade_aimConstraint4" -p "shoulder_R0_blade"; - rename -uid "B5F265BD-4C2D-64FC-689C-709B82D5B908"; +createNode aimConstraint -n "shoulder_R0_blade_aimConstraint2" -p "shoulder_R0_blade"; + rename -uid "FCF42663-4280-0146-B8D8-9CB96EF040E3"; addAttr -dcb 0 -ci true -sn "w0" -ln "shoulder_R0_0_locW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -6324,10 +6363,10 @@ createNode aimConstraint -n "shoulder_R0_blade_aimConstraint4" -p "shoulder_R0_b setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" 3.3599751382068015 -13.536129435773125 -14.081236533000443 ; + setAttr ".rsrr" -type "double3" 3.3599751382072194 -13.536129435773134 -14.081236533000302 ; setAttr -k on ".w0"; -createNode pointConstraint -n "shoulder_R0_blade_pointConstraint4" -p "shoulder_R0_blade"; - rename -uid "D4AB7003-455C-F9D7-FAD9-EC8AB8748B1C"; +createNode pointConstraint -n "shoulder_R0_blade_pointConstraint2" -p "shoulder_R0_blade"; + rename -uid "32F81504-420E-3149-31BF-EAAB5F0ABA6E"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "shoulder_R0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; @@ -6345,19 +6384,19 @@ createNode pointConstraint -n "shoulder_R0_blade_pointConstraint4" -p "shoulder_ setAttr ".rst" -type "double3" 0 -4.4408920985006262e-016 0 ; setAttr -k on ".w0"; createNode transform -n "shoulder_R0_crv" -p "shoulder_R0_root"; - rename -uid "73EB224E-44A3-881B-5566-2C8E5F61B741"; + rename -uid "2A548B73-47FB-3695-A4FF-548257281EF3"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -0.095164109147563639 -2.5303629060493167 -1.9933533667490371 ; + setAttr ".t" -type "double3" -0.095164109147563708 -2.5303629060493167 -1.9933533667490371 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999989 -1 ; createNode nurbsCurve -n "shoulder_R0_crvShape" -p "shoulder_R0_crv"; - rename -uid "B750A4E2-432D-CAFE-CCC4-86AFC4C54D0C"; + rename -uid "EC24E0D2-4AB3-458B-998C-7F8E59FD79C1"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "shoulder_R0_crvShapeOrig" -p "shoulder_R0_crv"; - rename -uid "E222585F-4243-AD73-702D-408A976A675A"; + rename -uid "9E4F5E85-4472-91BE-FDE2-E0B50BD8C5CD"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6368,7 +6407,7 @@ createNode nurbsCurve -n "shoulder_R0_crvShapeOrig" -p "shoulder_R0_crv"; 0 0 0 ; createNode transform -n "spine_C0_blade" -p "spine_C0_root"; - rename -uid "A4E43FB1-407E-E873-B546-2D8729932EAD"; + rename -uid "27D9D197-4948-9D90-9050-5D9C3EF8AC9A"; addAttr -ci true -k true -sn "bladeRollOffset" -ln "bladeRollOffset" -at "float"; setAttr -l on -k off -cb on ".v"; setAttr -k off -cb on ".tx"; @@ -6378,13 +6417,13 @@ createNode transform -n "spine_C0_blade" -p "spine_C0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000013 1.0000000000000013 1 ; + setAttr ".s" -type "double3" 1.0000000000000016 1.0000000000000016 1 ; setAttr -l on -k off -cb on ".sx"; setAttr -l on -k off -cb on ".sy"; setAttr -l on -k off -cb on ".sz"; setAttr -k on ".bladeRollOffset"; createNode nurbsCurve -n "spine_C0_bladeShape" -p "spine_C0_blade"; - rename -uid "5BFCD162-48BB-28F8-68D1-B58F69A5DD7D"; + rename -uid "5DCA5992-49B2-0D89-C3D5-9E92E3AE5D0B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6398,8 +6437,8 @@ createNode nurbsCurve -n "spine_C0_bladeShape" -p "spine_C0_blade"; 0 0.094773633293273707 0 0 0 0 ; -createNode aimConstraint -n "spine_C0_blade_aimConstraint7" -p "spine_C0_blade"; - rename -uid "D7D08250-40E3-086D-826D-CF854D435EDA"; +createNode aimConstraint -n "spine_C0_blade_aimConstraint8" -p "spine_C0_blade"; + rename -uid "C77946FE-4E4D-EA8A-2084-089296B03A66"; addAttr -dcb 0 -ci true -sn "w0" -ln "spine_C0_effW0" -dv 1 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -6414,11 +6453,11 @@ createNode aimConstraint -n "spine_C0_blade_aimConstraint7" -p "spine_C0_blade"; setAttr -k off ".sz"; setAttr ".erp" yes; setAttr ".wut" 2; - setAttr ".rsrr" -type "double3" 2.5444437451708122e-014 2.5444437451708125e-014 + setAttr ".rsrr" -type "double3" 2.5444437451708115e-014 2.5444437451708118e-014 89.999999999999986 ; setAttr -k on ".w0"; -createNode pointConstraint -n "spine_C0_blade_pointConstraint7" -p "spine_C0_blade"; - rename -uid "27525293-4D60-4FCE-3BA7-B3962CFB34E8"; +createNode pointConstraint -n "spine_C0_blade_pointConstraint8" -p "spine_C0_blade"; + rename -uid "369EB39A-4966-13D3-137E-A0B779AD5EFD"; addAttr -dcb 0 -ci true -k true -sn "w0" -ln "spine_C0_rootW0" -dv 1 -min 0 -at "double"; setAttr -k on ".nds"; setAttr -k off ".v"; @@ -6435,19 +6474,19 @@ createNode pointConstraint -n "spine_C0_blade_pointConstraint7" -p "spine_C0_bla setAttr ".rst" -type "double3" 0 -4.4408920985006262e-016 3.944304526105059e-031 ; setAttr -k on ".w0"; createNode transform -n "spine_C0_crv" -p "spine_C0_root"; - rename -uid "838C192A-4DC9-D1C1-D365-E0B09E2349C2"; + rename -uid "62811439-4938-20B0-66AA-2583F2A81B6F"; setAttr ".ovdt" 1; setAttr ".ove" yes; setAttr ".t" -type "double3" 5.1074785620942285 2.6024712577026077 -3.4239055234572094e-015 ; setAttr ".r" -type "double3" -89.999999999999986 89.999999999999957 0 ; setAttr ".s" -type "double3" 2.1102915763618237 2.1102915763618237 2.1102915763618237 ; createNode nurbsCurve -n "spine_C0_crvShape" -p "spine_C0_crv"; - rename -uid "09ADBA57-4BCF-0159-15F2-2DAAD47D7467"; + rename -uid "EF896225-4E8B-75D8-176A-D094857742AC"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "spine_C0_crvShapeOrig" -p "spine_C0_crv"; - rename -uid "1A27F58B-4862-00BA-17E0-9DA6404A21ED"; + rename -uid "8F22A56A-4145-AB51-94FA-D78A242C2D0F"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -6458,7 +6497,7 @@ createNode nurbsCurve -n "spine_C0_crvShapeOrig" -p "spine_C0_crv"; 0 0 0 ; createNode transform -n "legBack_L0_root" -p "spine_C0_root"; - rename -uid "854BDE46-4693-1151-296D-35B7DF3DB8D2"; + rename -uid "DD2E660A-4823-BABF-4B24-E3A9E51D27B0"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -6467,21 +6506,21 @@ createNode transform -n "legBack_L0_root" -p "spine_C0_root"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -k true -sn "ikSolver" -ln "ikSolver" -min 0 -max 1 -en "IK Spring:IK Rotation Plane" -at "enum"; - addAttr -ci true -sn "ikOri" -ln "ikOri" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div2" -ln "div2" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "ikOri" -ln "ikOri" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div2" -ln "div2" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; setAttr ".t" -type "double3" 0.21090213141047975 -0.097927178047045871 -2.6808811877076879 ; setAttr -k off -cb on ".tx"; @@ -6502,20 +6541,12 @@ createNode transform -n "legBack_L0_root" -p "spine_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "backLegUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".full3BonesIK" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".maxstretch" 1.5; - setAttr ".ikOri" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; - setAttr ".div2" 2; + setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legBack_L0_rootShape" -p "legBack_L0_root"; - rename -uid "EDFBE52A-42B9-8BC2-6D46-9DB12B3F89D9"; + rename -uid "C81F333B-41D1-DB64-B1C7-6DAE44EE110A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6527,8 +6558,8 @@ createNode nurbsCurve -n "legBack_L0_rootShape" -p "legBack_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_L0_root19Shape" -p "legBack_L0_root"; - rename -uid "60C1920F-41B4-2AD9-F650-0BAE7DB7BE3B"; +createNode nurbsCurve -n "legBack_L0_root22Shape" -p "legBack_L0_root"; + rename -uid "2DE918A2-45D5-F9C9-44BD-388D709D42FD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6540,8 +6571,8 @@ createNode nurbsCurve -n "legBack_L0_root19Shape" -p "legBack_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_L0_root20Shape" -p "legBack_L0_root"; - rename -uid "A9DA7C41-4673-9114-B7C9-2BB1C2CF2E06"; +createNode nurbsCurve -n "legBack_L0_root23Shape" -p "legBack_L0_root"; + rename -uid "ED3D07EB-4709-F76C-2EB0-3EB88D87D4F5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6553,8 +6584,8 @@ createNode nurbsCurve -n "legBack_L0_root20Shape" -p "legBack_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_L0_root21Shape" -p "legBack_L0_root"; - rename -uid "B5B90D0B-49DB-60FA-FFAC-7F8807103B17"; +createNode nurbsCurve -n "legBack_L0_root24Shape" -p "legBack_L0_root"; + rename -uid "43FA7A96-48D1-64CD-A7F7-9FAC10215125"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6581,10 +6612,10 @@ createNode nurbsCurve -n "legBack_L0_root21Shape" -p "legBack_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legBack_L0_knee" -p "legBack_L0_root"; - rename -uid "7D2F618C-4AAD-16A1-47D0-4AB02094DB32"; + rename -uid "8F12D725-417A-8B2C-D084-85B06371BE86"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 5.1070259132757201e-015 -1.1559508743798506 0.33714517700502245 ; + setAttr ".t" -type "double3" 5.1070259132757201e-015 -1.1559508743798506 0.33714517700502222 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6597,7 +6628,7 @@ createNode transform -n "legBack_L0_knee" -p "legBack_L0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_L0_kneeShape" -p "legBack_L0_knee"; - rename -uid "969129EF-4F2A-0429-7D98-1A9480AF7DC7"; + rename -uid "84E3EEF7-4012-66B8-D262-32BB4AC3D6B0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6609,8 +6640,8 @@ createNode nurbsCurve -n "legBack_L0_kneeShape" -p "legBack_L0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_L0_knee19Shape" -p "legBack_L0_knee"; - rename -uid "B86CD4C8-4948-D917-FD8B-05B95E4BCE1F"; +createNode nurbsCurve -n "legBack_L0_knee22Shape" -p "legBack_L0_knee"; + rename -uid "99313235-4CB5-6732-B39E-C2B535CA16DC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6622,8 +6653,8 @@ createNode nurbsCurve -n "legBack_L0_knee19Shape" -p "legBack_L0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_L0_knee20Shape" -p "legBack_L0_knee"; - rename -uid "1B266969-428C-62DF-CF0A-9C865261A807"; +createNode nurbsCurve -n "legBack_L0_knee23Shape" -p "legBack_L0_knee"; + rename -uid "42C538DA-4E0E-CC8C-1BD1-4C93CC1A43C5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6635,8 +6666,8 @@ createNode nurbsCurve -n "legBack_L0_knee20Shape" -p "legBack_L0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_L0_knee21Shape" -p "legBack_L0_knee"; - rename -uid "CB9A4CA0-480B-9A8B-0905-1C988D560B8E"; +createNode nurbsCurve -n "legBack_L0_knee24Shape" -p "legBack_L0_knee"; + rename -uid "66ABD77D-4176-BE21-B210-798DD3156B06"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6653,8 +6684,8 @@ createNode nurbsCurve -n "legBack_L0_knee21Shape" -p "legBack_L0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_knee21_0crvShape" -p "legBack_L0_knee"; - rename -uid "2B3876DD-42DA-399D-CDE6-FF8BCB1065B8"; +createNode nurbsCurve -n "legBack_L0_knee24_0crvShape" -p "legBack_L0_knee"; + rename -uid "5E38A0F2-45FD-69BB-3D33-22B99D7E264F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6671,8 +6702,8 @@ createNode nurbsCurve -n "legBack_L0_knee21_0crvShape" -p "legBack_L0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_knee21_1crvShape" -p "legBack_L0_knee"; - rename -uid "757147EF-45E4-1441-A26D-9C871E65E44F"; +createNode nurbsCurve -n "legBack_L0_knee24_1crvShape" -p "legBack_L0_knee"; + rename -uid "90CAC7AE-426A-2EA5-D559-449BF7F7A281"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6690,10 +6721,10 @@ createNode nurbsCurve -n "legBack_L0_knee21_1crvShape" -p "legBack_L0_knee"; 0 0 -0.1875 ; createNode transform -n "legBack_L0_ankle" -p "legBack_L0_knee"; - rename -uid "9BA356FA-4E32-E318-E602-0C89C5464BDB"; + rename -uid "D7CDABAC-49F7-3341-E56F-3EB8ADA519DC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 3.1086244689504383e-015 -1.4950431842245466 -0.57333193410462346 ; + setAttr ".t" -type "double3" 3.1086244689504383e-015 -1.4950431842245464 -0.57333193410462391 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6701,12 +6732,12 @@ createNode transform -n "legBack_L0_ankle" -p "legBack_L0_knee"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000002 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_L0_ankleShape" -p "legBack_L0_ankle"; - rename -uid "B6B969AA-4F82-CEA7-F261-06B82D5660BE"; + rename -uid "9997E525-47B4-7377-5EA6-1782F766C6A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6718,8 +6749,8 @@ createNode nurbsCurve -n "legBack_L0_ankleShape" -p "legBack_L0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_L0_ankle19Shape" -p "legBack_L0_ankle"; - rename -uid "DA9583C7-404C-F38B-7579-DC8461BFFEDE"; +createNode nurbsCurve -n "legBack_L0_ankle22Shape" -p "legBack_L0_ankle"; + rename -uid "51734489-48A9-A80A-A452-CDAFEC5A4280"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6731,8 +6762,8 @@ createNode nurbsCurve -n "legBack_L0_ankle19Shape" -p "legBack_L0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_L0_ankle20Shape" -p "legBack_L0_ankle"; - rename -uid "223B152F-4A51-C012-D632-9B82C853AD67"; +createNode nurbsCurve -n "legBack_L0_ankle23Shape" -p "legBack_L0_ankle"; + rename -uid "43FEC98F-4EA8-386D-A44E-A6A73DC1377B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6744,8 +6775,8 @@ createNode nurbsCurve -n "legBack_L0_ankle20Shape" -p "legBack_L0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_L0_ankle21Shape" -p "legBack_L0_ankle"; - rename -uid "70A8D3F8-469F-0BEA-4E26-8F8078C112F7"; +createNode nurbsCurve -n "legBack_L0_ankle24Shape" -p "legBack_L0_ankle"; + rename -uid "0D5C4EA8-4968-05FF-EA5F-DDB57765AF63"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6762,8 +6793,8 @@ createNode nurbsCurve -n "legBack_L0_ankle21Shape" -p "legBack_L0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_ankle21_0crvShape" -p "legBack_L0_ankle"; - rename -uid "9E131D60-46CD-938C-D251-619C7FE2959F"; +createNode nurbsCurve -n "legBack_L0_ankle24_0crvShape" -p "legBack_L0_ankle"; + rename -uid "348FB0F8-4CF5-CFF0-C1F4-828CD1F68CD0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6780,8 +6811,8 @@ createNode nurbsCurve -n "legBack_L0_ankle21_0crvShape" -p "legBack_L0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_ankle21_1crvShape" -p "legBack_L0_ankle"; - rename -uid "DB30C279-469E-FB3F-A409-B89AB29EC79A"; +createNode nurbsCurve -n "legBack_L0_ankle24_1crvShape" -p "legBack_L0_ankle"; + rename -uid "313967FB-499A-A5FE-6F1D-42A370979EF8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6799,10 +6830,10 @@ createNode nurbsCurve -n "legBack_L0_ankle21_1crvShape" -p "legBack_L0_ankle"; 0 0 -0.1875 ; createNode transform -n "legBack_L0_foot" -p "legBack_L0_ankle"; - rename -uid "A6FA1C45-4178-C2E7-2FD3-16892A317B95"; + rename -uid "521D11EE-4FDB-2007-F635-DC963A692F47"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.5543122344752192e-015 -0.5480558075197921 0.15050522089872964 ; + setAttr ".t" -type "double3" 1.5543122344752192e-015 -0.54805580751979233 0.15050522089872986 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6810,12 +6841,12 @@ createNode transform -n "legBack_L0_foot" -p "legBack_L0_ankle"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999956 1.0000000000000004 1.0000000000000004 ; + setAttr ".s" -type "double3" 0.99999999999999944 1.0000000000000004 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_L0_footShape" -p "legBack_L0_foot"; - rename -uid "F38B4CA4-43B6-E2DA-8C52-5CB51EF90CF2"; + rename -uid "001A12A6-44A3-45AB-0458-F796BE2F2CAC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6827,8 +6858,8 @@ createNode nurbsCurve -n "legBack_L0_footShape" -p "legBack_L0_foot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_L0_foot19Shape" -p "legBack_L0_foot"; - rename -uid "1886A8BC-4BF1-1476-7FBA-B99044CDE3AF"; +createNode nurbsCurve -n "legBack_L0_foot22Shape" -p "legBack_L0_foot"; + rename -uid "BFB2E7D7-447B-3A08-F16B-F6A35488CEA5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6840,8 +6871,8 @@ createNode nurbsCurve -n "legBack_L0_foot19Shape" -p "legBack_L0_foot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_L0_foot20Shape" -p "legBack_L0_foot"; - rename -uid "CAD69A2D-4E4F-DB4B-7020-E5B804C9A5D6"; +createNode nurbsCurve -n "legBack_L0_foot23Shape" -p "legBack_L0_foot"; + rename -uid "56612704-49B2-967D-77AF-0295294D85AF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6853,8 +6884,8 @@ createNode nurbsCurve -n "legBack_L0_foot20Shape" -p "legBack_L0_foot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_L0_foot21Shape" -p "legBack_L0_foot"; - rename -uid "EC14D4F7-4A07-942B-2F10-3999CFA07ADB"; +createNode nurbsCurve -n "legBack_L0_foot24Shape" -p "legBack_L0_foot"; + rename -uid "134626B9-4982-4B1A-33BA-8A9878FC196C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6871,8 +6902,8 @@ createNode nurbsCurve -n "legBack_L0_foot21Shape" -p "legBack_L0_foot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_foot21_0crvShape" -p "legBack_L0_foot"; - rename -uid "30D586DC-4109-522D-A8F0-B6B423E6831C"; +createNode nurbsCurve -n "legBack_L0_foot24_0crvShape" -p "legBack_L0_foot"; + rename -uid "131DE8F0-416A-7CC0-6BBC-30BC7970605E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6889,8 +6920,8 @@ createNode nurbsCurve -n "legBack_L0_foot21_0crvShape" -p "legBack_L0_foot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_foot21_1crvShape" -p "legBack_L0_foot"; - rename -uid "6A264FFA-4DE6-34CF-B4B2-B693F50C4E0E"; +createNode nurbsCurve -n "legBack_L0_foot24_1crvShape" -p "legBack_L0_foot"; + rename -uid "38EF279C-4A0C-901E-91BE-2BB12B68590D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6908,10 +6939,10 @@ createNode nurbsCurve -n "legBack_L0_foot21_1crvShape" -p "legBack_L0_foot"; 0 0 -0.1875 ; createNode transform -n "legBack_L0_eff" -p "legBack_L0_foot"; - rename -uid "3B367956-47FD-1895-1A66-31B21897B0AD"; + rename -uid "57B35BA6-481F-834E-86EE-71A3B79FD9A7"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.6645352591003757e-015 7.4940054162198066e-016 0.28135643819707434 ; + setAttr ".t" -type "double3" 2.6645352591003757e-015 8.4654505627668186e-016 0.2813564381970739 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -6919,12 +6950,12 @@ createNode transform -n "legBack_L0_eff" -p "legBack_L0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999989 0.99999999999999911 0.99999999999999878 ; + setAttr ".s" -type "double3" 0.99999999999999989 0.99999999999999878 0.99999999999999845 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_L0_effShape" -p "legBack_L0_eff"; - rename -uid "31432837-47DE-D006-83E9-9EBFB2D3CDCA"; + rename -uid "0802E2EB-4E53-1358-FFE7-1B941DA57CD0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6936,8 +6967,8 @@ createNode nurbsCurve -n "legBack_L0_effShape" -p "legBack_L0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_L0_eff19Shape" -p "legBack_L0_eff"; - rename -uid "26F3746E-4311-959B-4048-81A370C60425"; +createNode nurbsCurve -n "legBack_L0_eff22Shape" -p "legBack_L0_eff"; + rename -uid "2ADBCFBD-4789-C2FE-E0E0-05AC76675D6B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6949,8 +6980,8 @@ createNode nurbsCurve -n "legBack_L0_eff19Shape" -p "legBack_L0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_L0_eff20Shape" -p "legBack_L0_eff"; - rename -uid "0640291F-478D-FFF6-4B73-7C9B75DDA6AC"; +createNode nurbsCurve -n "legBack_L0_eff23Shape" -p "legBack_L0_eff"; + rename -uid "882AD08E-458A-FB13-5126-038680AD100F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6962,8 +6993,8 @@ createNode nurbsCurve -n "legBack_L0_eff20Shape" -p "legBack_L0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_L0_eff21Shape" -p "legBack_L0_eff"; - rename -uid "2A446466-4956-F88C-3EA6-57BB25C5C70E"; +createNode nurbsCurve -n "legBack_L0_eff24Shape" -p "legBack_L0_eff"; + rename -uid "99A5AE21-4DBA-B59F-FA77-3392B6A88043"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6980,8 +7011,8 @@ createNode nurbsCurve -n "legBack_L0_eff21Shape" -p "legBack_L0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_eff21_0crvShape" -p "legBack_L0_eff"; - rename -uid "6D5A8213-42AD-95E7-5D02-758F048CF300"; +createNode nurbsCurve -n "legBack_L0_eff24_0crvShape" -p "legBack_L0_eff"; + rename -uid "4A878836-408C-9C09-A7A6-9494163D11AA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -6998,8 +7029,8 @@ createNode nurbsCurve -n "legBack_L0_eff21_0crvShape" -p "legBack_L0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_L0_eff21_1crvShape" -p "legBack_L0_eff"; - rename -uid "65F06023-4C0E-C90D-7B36-808D69BB99FD"; +createNode nurbsCurve -n "legBack_L0_eff24_1crvShape" -p "legBack_L0_eff"; + rename -uid "B8BF2770-477B-DED0-2294-3A95E48EDCB1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7017,7 +7048,7 @@ createNode nurbsCurve -n "legBack_L0_eff21_1crvShape" -p "legBack_L0_eff"; 0 0 -0.1875 ; createNode transform -n "footBack_L0_root" -p "legBack_L0_foot"; - rename -uid "57B2D17E-41DB-71B6-EEC0-EAB0520D50DF"; + rename -uid "F4EBA4A9-4985-5416-EDE5-238E202ED7F2"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7026,11 +7057,11 @@ createNode transform -n "footBack_L0_root" -p "legBack_L0_foot"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.5543122344752192e-015 7.9103390504542404e-016 -6.6613381477509392e-016 ; + setAttr ".t" -type "double3" 1.5543122344752192e-015 9.0205620750793969e-016 -1.1102230246251565e-015 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7038,7 +7069,7 @@ createNode transform -n "footBack_L0_root" -p "legBack_L0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.16356254765398098 0.16356254765398087 0.16356254765398079 ; + setAttr ".s" -type "double3" 0.16356254765398098 0.16356254765398082 0.16356254765398076 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -7048,10 +7079,8 @@ createNode transform -n "footBack_L0_root" -p "legBack_L0_foot"; setAttr ".connector" -type "string" "leg_3jnt_01"; setAttr ".ui_host" -type "string" "backLegUI_L0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "footBack_L0_rootShape" -p "footBack_L0_root"; - rename -uid "4DB617DD-4C72-3BBA-9A17-329BAD1C5741"; + rename -uid "0D78688E-4A97-2416-69B3-C19029C8F83F"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7063,8 +7092,8 @@ createNode nurbsCurve -n "footBack_L0_rootShape" -p "footBack_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_root19Shape" -p "footBack_L0_root"; - rename -uid "96FA23F1-46CA-A985-C5FF-D58AE8F33C84"; +createNode nurbsCurve -n "footBack_L0_root22Shape" -p "footBack_L0_root"; + rename -uid "1B2A9923-4789-C1CE-B693-C7A213F13338"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7076,8 +7105,8 @@ createNode nurbsCurve -n "footBack_L0_root19Shape" -p "footBack_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_root20Shape" -p "footBack_L0_root"; - rename -uid "7D9DD3A3-40FB-CCEA-7972-F1AA054A73E0"; +createNode nurbsCurve -n "footBack_L0_root23Shape" -p "footBack_L0_root"; + rename -uid "37C545C5-4941-690C-A14C-C8844EC3F1AF"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7089,8 +7118,8 @@ createNode nurbsCurve -n "footBack_L0_root20Shape" -p "footBack_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_root21Shape" -p "footBack_L0_root"; - rename -uid "A0E680D8-4692-EF9C-750D-29B58C262798"; +createNode nurbsCurve -n "footBack_L0_root24Shape" -p "footBack_L0_root"; + rename -uid "A8DE1004-4B11-610C-742A-2AA65D5F55A2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7117,10 +7146,10 @@ createNode nurbsCurve -n "footBack_L0_root21Shape" -p "footBack_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "footBack_L0_0_loc" -p "footBack_L0_root"; - rename -uid "F89BE2B3-4F9C-F833-64FB-2EA171C96CEB"; + rename -uid "7BA67857-49CC-871D-7930-649EDEFDD360"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.7763568394002505e-014 2.2204460492503131e-016 0.54565565303279762 ; + setAttr ".t" -type "double3" -1.7763568394002505e-014 2.2204460492503131e-016 0.54565565303280117 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7128,12 +7157,12 @@ createNode transform -n "footBack_L0_0_loc" -p "footBack_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000004 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_L0_0_locShape" -p "footBack_L0_0_loc"; - rename -uid "2CD8B7DA-4BE7-0613-6E23-16B9DE864C77"; + rename -uid "0EE7A04E-4DA6-C6AB-3B93-4CB233C38E39"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7145,8 +7174,8 @@ createNode nurbsCurve -n "footBack_L0_0_locShape" -p "footBack_L0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_0_loc19Shape" -p "footBack_L0_0_loc"; - rename -uid "AA33CA2C-4E75-7073-1F2D-A0BFF2C19F36"; +createNode nurbsCurve -n "footBack_L0_0_loc22Shape" -p "footBack_L0_0_loc"; + rename -uid "9C2298A0-4F7B-5607-CA9B-14B4D30E61CA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7158,8 +7187,8 @@ createNode nurbsCurve -n "footBack_L0_0_loc19Shape" -p "footBack_L0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_0_loc20Shape" -p "footBack_L0_0_loc"; - rename -uid "06F0B543-4A94-D78B-F0CE-6EBA08385CD1"; +createNode nurbsCurve -n "footBack_L0_0_loc23Shape" -p "footBack_L0_0_loc"; + rename -uid "B157E95B-4979-9388-ED00-DCA9FDD2C9AE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7171,8 +7200,8 @@ createNode nurbsCurve -n "footBack_L0_0_loc20Shape" -p "footBack_L0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_0_loc21Shape" -p "footBack_L0_0_loc"; - rename -uid "D44E59FB-470F-6986-6AF1-1DAC3A90CA01"; +createNode nurbsCurve -n "footBack_L0_0_loc24Shape" -p "footBack_L0_0_loc"; + rename -uid "DFE16248-4529-F5E0-B7F0-61AFEE6A5416"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7189,8 +7218,8 @@ createNode nurbsCurve -n "footBack_L0_0_loc21Shape" -p "footBack_L0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_0_loc21_0crvShape" -p "footBack_L0_0_loc"; - rename -uid "118AE9CC-42E6-5956-1E8E-48B03F0F07D9"; +createNode nurbsCurve -n "footBack_L0_0_loc24_0crvShape" -p "footBack_L0_0_loc"; + rename -uid "5F9F76A8-43D4-0B12-CB2C-309AA74DCAE6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7207,8 +7236,8 @@ createNode nurbsCurve -n "footBack_L0_0_loc21_0crvShape" -p "footBack_L0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_0_loc21_1crvShape" -p "footBack_L0_0_loc"; - rename -uid "A12BF87E-45C9-6B20-D00B-3D9DA743BD0F"; +createNode nurbsCurve -n "footBack_L0_0_loc24_1crvShape" -p "footBack_L0_0_loc"; + rename -uid "85F03C6C-4173-15ED-0F98-F285081FD48B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7226,10 +7255,10 @@ createNode nurbsCurve -n "footBack_L0_0_loc21_1crvShape" -p "footBack_L0_0_loc"; 0 0 -0.1875 ; createNode transform -n "footBack_L0_1_loc" -p "footBack_L0_0_loc"; - rename -uid "D5F26F2F-4ADF-757A-C864-E088AE5A3680"; + rename -uid "C4552480-462B-359A-85E4-5F8EC30B4A8F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 5.3290705182007514e-015 -0.34547277013915562 0.77046072389792997 ; + setAttr ".t" -type "double3" 1.7763568394002505e-015 -0.34547277013915567 0.77046072389793352 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7237,12 +7266,12 @@ createNode transform -n "footBack_L0_1_loc" -p "footBack_L0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999978 1.0000000000000004 ; + setAttr ".s" -type "double3" 1.0000000000000007 0.99999999999999933 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_L0_1_locShape" -p "footBack_L0_1_loc"; - rename -uid "961CC71C-4A37-C6E0-C668-CCAF28D14386"; + rename -uid "68062AAA-4951-B1BC-B182-72A11D9314A4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7254,8 +7283,8 @@ createNode nurbsCurve -n "footBack_L0_1_locShape" -p "footBack_L0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_1_loc19Shape" -p "footBack_L0_1_loc"; - rename -uid "01461B0A-4934-5C3D-92AC-19AE5A7E4E55"; +createNode nurbsCurve -n "footBack_L0_1_loc22Shape" -p "footBack_L0_1_loc"; + rename -uid "28D5F932-47E2-1967-92EC-CFAF452F0F5D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7267,8 +7296,8 @@ createNode nurbsCurve -n "footBack_L0_1_loc19Shape" -p "footBack_L0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_1_loc20Shape" -p "footBack_L0_1_loc"; - rename -uid "863C51CA-4BE1-691D-FF29-25A27FE4E21B"; +createNode nurbsCurve -n "footBack_L0_1_loc23Shape" -p "footBack_L0_1_loc"; + rename -uid "8CE0D046-44AD-DB93-3186-FD83EF1AA1AB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7280,8 +7309,8 @@ createNode nurbsCurve -n "footBack_L0_1_loc20Shape" -p "footBack_L0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_1_loc21Shape" -p "footBack_L0_1_loc"; - rename -uid "D0EE717C-4E73-96B1-87F6-418CDFC312E1"; +createNode nurbsCurve -n "footBack_L0_1_loc24Shape" -p "footBack_L0_1_loc"; + rename -uid "5EA757F0-495B-00D9-A043-F4B5CFC52607"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7298,8 +7327,8 @@ createNode nurbsCurve -n "footBack_L0_1_loc21Shape" -p "footBack_L0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_1_loc21_0crvShape" -p "footBack_L0_1_loc"; - rename -uid "4ACC4D1B-470F-BBA1-1C98-3683D133D0E2"; +createNode nurbsCurve -n "footBack_L0_1_loc24_0crvShape" -p "footBack_L0_1_loc"; + rename -uid "DA78EACF-4F6B-A5BF-AAC5-E39B4C4A1A67"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7316,8 +7345,8 @@ createNode nurbsCurve -n "footBack_L0_1_loc21_0crvShape" -p "footBack_L0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_1_loc21_1crvShape" -p "footBack_L0_1_loc"; - rename -uid "C2B963C3-4089-55B7-545F-64B89B0A2979"; +createNode nurbsCurve -n "footBack_L0_1_loc24_1crvShape" -p "footBack_L0_1_loc"; + rename -uid "A9528742-4308-2BCA-45A9-DA872DB20715"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7335,18 +7364,18 @@ createNode nurbsCurve -n "footBack_L0_1_loc21_1crvShape" -p "footBack_L0_1_loc"; 0 0 -0.1875 ; createNode transform -n "footBack_L0_crv" -p "footBack_L0_root"; - rename -uid "63ABB344-4ED8-6DA5-0837-E7ABB598C0AF"; + rename -uid "550841A1-4EE3-98F2-1D8D-00A526AB2298"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.980332218718949 -0.49678747209358587 11.584116504196627 ; - setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725757 8.6433157474725792 ; + setAttr ".t" -type "double3" -10.980332218718948 -0.49678747209358604 11.584116504196629 ; + setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725757 8.6433157474725775 ; createNode nurbsCurve -n "footBack_L0_crvShape" -p "footBack_L0_crv"; - rename -uid "1727B23F-48B4-2D53-0BA4-0A8A4D716F82"; + rename -uid "9C866AB6-4B02-9984-D6D5-B2A82478F7DF"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footBack_L0_crvShapeOrig" -p "footBack_L0_crv"; - rename -uid "75FE958F-40EE-10CC-724A-BAA2629E4ACD"; + rename -uid "747A0734-4409-94F3-374A-B585A7B327BC"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7358,10 +7387,10 @@ createNode nurbsCurve -n "footBack_L0_crvShapeOrig" -p "footBack_L0_crv"; 0 0 0 ; createNode transform -n "footBack_L0_heel" -p "footBack_L0_root"; - rename -uid "6A7D6F66-42A9-00EC-FF70-5282A7E9331A"; + rename -uid "07C4781C-4AE4-F396-6438-558999EA583A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.9539925233402755e-014 -0.34547277013915645 -0.37260003933978325 ; + setAttr ".t" -type "double3" -1.9539925233402755e-014 -0.34547277013915656 -0.3726000393397797 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7369,12 +7398,12 @@ createNode transform -n "footBack_L0_heel" -p "footBack_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000004 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_L0_heelShape" -p "footBack_L0_heel"; - rename -uid "D497058E-44A5-C17C-1C96-988A72F4EE99"; + rename -uid "F8ABB6B3-48A4-F66C-57AD-2493C2EF9373"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7386,8 +7415,8 @@ createNode nurbsCurve -n "footBack_L0_heelShape" -p "footBack_L0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_heel19Shape" -p "footBack_L0_heel"; - rename -uid "1A39734D-452B-9055-1CAE-149990C6C9AB"; +createNode nurbsCurve -n "footBack_L0_heel22Shape" -p "footBack_L0_heel"; + rename -uid "91E506B2-42AD-42BF-00F3-369DD0E17D36"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7399,8 +7428,8 @@ createNode nurbsCurve -n "footBack_L0_heel19Shape" -p "footBack_L0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_heel20Shape" -p "footBack_L0_heel"; - rename -uid "78F46460-4EED-372A-6F84-38A83AA4E608"; +createNode nurbsCurve -n "footBack_L0_heel23Shape" -p "footBack_L0_heel"; + rename -uid "3470E01B-4C66-70AA-7AE5-51ADB187EA83"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7412,8 +7441,8 @@ createNode nurbsCurve -n "footBack_L0_heel20Shape" -p "footBack_L0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_heel21Shape" -p "footBack_L0_heel"; - rename -uid "03E11FD8-4749-05A0-7445-8BBFAE59AC16"; +createNode nurbsCurve -n "footBack_L0_heel24Shape" -p "footBack_L0_heel"; + rename -uid "9C524D82-4ED3-30A8-8EE2-119AFAAEC384"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7430,8 +7459,8 @@ createNode nurbsCurve -n "footBack_L0_heel21Shape" -p "footBack_L0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_heel21_0crvShape" -p "footBack_L0_heel"; - rename -uid "5EFAE98F-4374-D5BA-07EF-4290B7D4408D"; +createNode nurbsCurve -n "footBack_L0_heel24_0crvShape" -p "footBack_L0_heel"; + rename -uid "0A1155F6-4EDA-2612-9B1F-12AE2B10494E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7448,8 +7477,8 @@ createNode nurbsCurve -n "footBack_L0_heel21_0crvShape" -p "footBack_L0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_heel21_1crvShape" -p "footBack_L0_heel"; - rename -uid "0F4E1E72-46E7-867A-2939-9696992BA621"; +createNode nurbsCurve -n "footBack_L0_heel24_1crvShape" -p "footBack_L0_heel"; + rename -uid "63A2CE5D-44A4-B315-B1F5-0D92D21458B3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7467,10 +7496,10 @@ createNode nurbsCurve -n "footBack_L0_heel21_1crvShape" -p "footBack_L0_heel"; 0 0 -0.1875 ; createNode transform -n "footBack_L0_outpivot" -p "footBack_L0_root"; - rename -uid "4939D217-41F2-0863-B3CA-AC9A36047787"; + rename -uid "1E845418-4932-9E51-A651-68AC31876889"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.0422206583139726 -0.34547277013915523 0.11497296198779061 ; + setAttr ".t" -type "double3" 1.0422206583139726 -0.34547277013915534 0.11497296198779416 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7478,12 +7507,12 @@ createNode transform -n "footBack_L0_outpivot" -p "footBack_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000004 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_L0_outpivotShape" -p "footBack_L0_outpivot"; - rename -uid "6491462A-4FD3-98C0-59DF-46B7B56BD9BE"; + rename -uid "821CF5B0-4C22-A2DF-92A3-57AF7EF578A0"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7495,8 +7524,8 @@ createNode nurbsCurve -n "footBack_L0_outpivotShape" -p "footBack_L0_outpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_outpivot19Shape" -p "footBack_L0_outpivot"; - rename -uid "ECE926A3-4369-053C-F2BF-54BD16934D05"; +createNode nurbsCurve -n "footBack_L0_outpivot22Shape" -p "footBack_L0_outpivot"; + rename -uid "032B1972-4755-DE9D-3D1D-C5A0280CCF32"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7508,8 +7537,8 @@ createNode nurbsCurve -n "footBack_L0_outpivot19Shape" -p "footBack_L0_outpivot" 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_outpivot20Shape" -p "footBack_L0_outpivot"; - rename -uid "1AD9ABF2-4B86-BA3A-E174-71A1E357AB75"; +createNode nurbsCurve -n "footBack_L0_outpivot23Shape" -p "footBack_L0_outpivot"; + rename -uid "74236917-4AD9-072B-03A1-7EAF03ABDC22"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7521,8 +7550,8 @@ createNode nurbsCurve -n "footBack_L0_outpivot20Shape" -p "footBack_L0_outpivot" 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_outpivot21Shape" -p "footBack_L0_outpivot"; - rename -uid "B3452A3A-4E07-11A4-2504-418B95BC4D23"; +createNode nurbsCurve -n "footBack_L0_outpivot24Shape" -p "footBack_L0_outpivot"; + rename -uid "F075F2EF-495B-490D-E4EB-33A237EEC662"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7539,8 +7568,8 @@ createNode nurbsCurve -n "footBack_L0_outpivot21Shape" -p "footBack_L0_outpivot" 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_outpivot21_0crvShape" -p "footBack_L0_outpivot"; - rename -uid "233BCAB1-4365-8EC1-53C8-E7B2DC96ECE9"; +createNode nurbsCurve -n "footBack_L0_outpivot24_0crvShape" -p "footBack_L0_outpivot"; + rename -uid "0A50A87C-4CD3-A78A-8F1E-7283E0C1805E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7557,8 +7586,8 @@ createNode nurbsCurve -n "footBack_L0_outpivot21_0crvShape" -p "footBack_L0_outp 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_outpivot21_1crvShape" -p "footBack_L0_outpivot"; - rename -uid "FB0F32A2-4DCB-2670-158B-2FB1F443102F"; +createNode nurbsCurve -n "footBack_L0_outpivot24_1crvShape" -p "footBack_L0_outpivot"; + rename -uid "1EFF2A35-4951-92D7-94E8-A0BECD0EA09D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7576,10 +7605,10 @@ createNode nurbsCurve -n "footBack_L0_outpivot21_1crvShape" -p "footBack_L0_outp 0 0 -0.1875 ; createNode transform -n "footBack_L0_inpivot" -p "footBack_L0_root"; - rename -uid "0936F62B-446B-42B9-421C-F3885735F121"; + rename -uid "1E38A98F-4292-985F-124B-9AAA3BC5A6F2"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.1682146826215725 -0.34547277013915723 0.21228136011732168 ; + setAttr ".t" -type "double3" -1.1682146826215742 -0.34547277013915734 0.21228136011732524 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7587,12 +7616,12 @@ createNode transform -n "footBack_L0_inpivot" -p "footBack_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000004 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_L0_inpivotShape" -p "footBack_L0_inpivot"; - rename -uid "70DDA392-4980-3559-EC11-D8976297DE7B"; + rename -uid "8135752A-4A17-0A3B-F189-BD82AA9ACF69"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7604,8 +7633,8 @@ createNode nurbsCurve -n "footBack_L0_inpivotShape" -p "footBack_L0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_L0_inpivot19Shape" -p "footBack_L0_inpivot"; - rename -uid "715EDCE4-44C3-7BAF-02A8-4E9760E9BDB9"; +createNode nurbsCurve -n "footBack_L0_inpivot22Shape" -p "footBack_L0_inpivot"; + rename -uid "E26CC19B-407B-96D1-BCEA-EF92CB941EE5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7617,8 +7646,8 @@ createNode nurbsCurve -n "footBack_L0_inpivot19Shape" -p "footBack_L0_inpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_L0_inpivot20Shape" -p "footBack_L0_inpivot"; - rename -uid "511B19BB-42C2-B859-4FAE-31917D4D5D05"; +createNode nurbsCurve -n "footBack_L0_inpivot23Shape" -p "footBack_L0_inpivot"; + rename -uid "14904978-488B-A94E-C3A1-74874D2A259E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7630,8 +7659,8 @@ createNode nurbsCurve -n "footBack_L0_inpivot20Shape" -p "footBack_L0_inpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_L0_inpivot21Shape" -p "footBack_L0_inpivot"; - rename -uid "66014143-49F7-4498-E118-35A9D5D5CBED"; +createNode nurbsCurve -n "footBack_L0_inpivot24Shape" -p "footBack_L0_inpivot"; + rename -uid "3F599A75-4BE2-FA5E-6456-3FBFF8D95B2C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7648,8 +7677,8 @@ createNode nurbsCurve -n "footBack_L0_inpivot21Shape" -p "footBack_L0_inpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_inpivot21_0crvShape" -p "footBack_L0_inpivot"; - rename -uid "80E5CA0E-4636-6CF6-3545-399E67AEB30F"; +createNode nurbsCurve -n "footBack_L0_inpivot24_0crvShape" -p "footBack_L0_inpivot"; + rename -uid "8C1E2156-44F0-B771-D1AB-038839CEC295"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7666,8 +7695,8 @@ createNode nurbsCurve -n "footBack_L0_inpivot21_0crvShape" -p "footBack_L0_inpiv 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_L0_inpivot21_1crvShape" -p "footBack_L0_inpivot"; - rename -uid "E5317E4E-4A9C-A325-33A4-1B88E7BB2199"; +createNode nurbsCurve -n "footBack_L0_inpivot24_1crvShape" -p "footBack_L0_inpivot"; + rename -uid "DB4CD451-4354-5100-3BD9-50B843AC5402"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7685,18 +7714,18 @@ createNode nurbsCurve -n "footBack_L0_inpivot21_1crvShape" -p "footBack_L0_inpiv 0 0 -0.1875 ; createNode transform -n "footBack_L0_1" -p "footBack_L0_root"; - rename -uid "D56713DC-4375-0C3E-FFEA-B1AEE3D104FB"; + rename -uid "E2463FCF-472C-3D45-32C4-0B8FA08D01FB"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.980332218718949 -0.49678747209358587 11.584116504196627 ; - setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725757 8.6433157474725792 ; + setAttr ".t" -type "double3" -10.980332218718948 -0.49678747209358604 11.584116504196629 ; + setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725757 8.6433157474725775 ; createNode nurbsCurve -n "footBack_L0_Shape1" -p "footBack_L0_1"; - rename -uid "8665E698-4D20-900B-7CCF-C2B4799AF333"; + rename -uid "CECBDBED-4E02-9D69-B572-CCB060CD353E"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footBack_L0_Shape1Orig" -p "footBack_L0_1"; - rename -uid "6D2E4E8E-47BA-65E6-8A16-2ABC9B243782"; + rename -uid "7155103C-4707-F8CF-5C53-F1A0E7B8FE7F"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7710,7 +7739,7 @@ createNode nurbsCurve -n "footBack_L0_Shape1Orig" -p "footBack_L0_1"; 0 0 0 ; createNode transform -n "backLegUI_L0_root" -p "footBack_L0_root"; - rename -uid "FF1A60DF-4575-9038-D4C4-E69B405A2624"; + rename -uid "380D9C8C-4B72-B969-89A5-0A8785D162DC"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7722,7 +7751,7 @@ createNode transform -n "backLegUI_L0_root" -p "footBack_L0_root"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -7734,12 +7763,14 @@ createNode transform -n "backLegUI_L0_root" -p "footBack_L0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.5 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 7.9148715870389701 6.0337539388988626 -0.92016921390297313 ; + setAttr ".t" -type "double3" 7.9148715870389683 6.0337539388988635 -0.92016921390296957 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7747,7 +7778,7 @@ createNode transform -n "backLegUI_L0_root" -p "footBack_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 8.6433157474725739 8.6433157474725792 8.6433157474725828 ; + setAttr ".s" -type "double3" 8.6433157474725739 8.643315747472581 8.643315747472581 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -7759,12 +7790,8 @@ createNode transform -n "backLegUI_L0_root" -p "footBack_L0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 0.5; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "backLegUI_L0_rootShape" -p "backLegUI_L0_root"; - rename -uid "FE6F4329-4473-D499-76A9-319BC8489836"; + rename -uid "B135A542-4318-F4E1-5EA6-3C94265C74EC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7776,8 +7803,8 @@ createNode nurbsCurve -n "backLegUI_L0_rootShape" -p "backLegUI_L0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "backLegUI_L0_root19Shape" -p "backLegUI_L0_root"; - rename -uid "0D757D60-4A62-8047-6326-3F9C98243753"; +createNode nurbsCurve -n "backLegUI_L0_root22Shape" -p "backLegUI_L0_root"; + rename -uid "13E428A0-4E9A-916D-15AE-52A9560FC787"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7789,8 +7816,8 @@ createNode nurbsCurve -n "backLegUI_L0_root19Shape" -p "backLegUI_L0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "backLegUI_L0_root20Shape" -p "backLegUI_L0_root"; - rename -uid "C123B782-4D07-EB78-DEA7-F1B07BB8098D"; +createNode nurbsCurve -n "backLegUI_L0_root23Shape" -p "backLegUI_L0_root"; + rename -uid "6BB7EEE1-405E-B6D0-3E30-58B9C22C58D9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7802,8 +7829,8 @@ createNode nurbsCurve -n "backLegUI_L0_root20Shape" -p "backLegUI_L0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "backLegUI_L0_root21Shape" -p "backLegUI_L0_root"; - rename -uid "3086495F-4148-EA58-1C57-3A85AED4C7E4"; +createNode nurbsCurve -n "backLegUI_L0_root24Shape" -p "backLegUI_L0_root"; + rename -uid "F06B8B07-4B0F-7654-865E-1ABFF181A46D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7830,10 +7857,10 @@ createNode nurbsCurve -n "backLegUI_L0_root21Shape" -p "backLegUI_L0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "backLegUI_L0_sizeRef" -p "backLegUI_L0_root"; - rename -uid "262F5E58-4741-9888-A072-4795AE23BBE3"; + rename -uid "754E3199-4FF7-B2C8-FED1-5E94D8BF0230"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 4.4408920985006262e-016 3.3306690738754696e-016 0.99999999999999956 ; + setAttr ".t" -type "double3" 4.4408920985006262e-016 3.3306690738754696e-016 1 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7841,23 +7868,23 @@ createNode transform -n "backLegUI_L0_sizeRef" -p "backLegUI_L0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999933 0.99999999999999956 ; + setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999911 0.99999999999999956 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "legBack_L0_crv1" -p "legBack_L0_root"; - rename -uid "77F741B5-446C-EE8F-C04B-708DF6D326B1"; + rename -uid "D4F3DA5A-4EB0-63ED-5FA0-8C8994A4F04D"; setAttr ".ovdt" 1; setAttr ".ove" yes; setAttr ".t" -type "double3" -1.7959711117807502 -3.2803056907023973 1.8090460715460559 ; setAttr ".s" -type "double3" 1.4137227438343885 1.4137227438343878 1.4137227438343878 ; createNode nurbsCurve -n "legBack_L0_crvShape1" -p "legBack_L0_crv1"; - rename -uid "250B84CD-4E9A-A0B9-7F54-A0899BBC1692"; + rename -uid "C1958170-4DC7-426E-52A9-B09B27CC062A"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "legBack_L0_crvShape1Orig" -p "legBack_L0_crv1"; - rename -uid "14124FDA-4CC1-FA1A-FEA9-818688E2B65E"; + rename -uid "4E361CFA-4986-2D6E-CCD7-3095FAA3BE90"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -7871,7 +7898,7 @@ createNode nurbsCurve -n "legBack_L0_crvShape1Orig" -p "legBack_L0_crv1"; 0 0 0 ; createNode transform -n "legBack_R0_root" -p "spine_C0_root"; - rename -uid "17B59BF6-4B89-E645-EADA-DFB3F6F14B84"; + rename -uid "D4BAAD52-44AB-B482-22C5-61A633A9359F"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -7880,23 +7907,23 @@ createNode transform -n "legBack_R0_root" -p "spine_C0_root"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "blend" -ln "blend" -min 0 -max 1 -at "double"; - addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -min 0 -max 1 -at "double"; + addAttr -ci true -sn "blend" -ln "blend" -dv 1 -min 0 -max 1 -at "double"; + addAttr -ci true -sn "full3BonesIK" -ln "full3BonesIK" -dv 1 -min 0 -max 1 -at "double"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "upvrefarray" -ln "upvrefarray" -dt "string"; - addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1 -min 1 -at "double"; + addAttr -ci true -sn "maxstretch" -ln "maxstretch" -dv 1.5 -min 1 -at "double"; addAttr -ci true -k true -sn "ikSolver" -ln "ikSolver" -min 0 -max 1 -en "IK Spring:IK Rotation Plane" -at "enum"; - addAttr -ci true -sn "ikOri" -ln "ikOri" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "div0" -ln "div0" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div1" -ln "div1" -dv 1 -min 1 -at "long"; - addAttr -ci true -sn "div2" -ln "div2" -dv 1 -min 1 -at "long"; + addAttr -ci true -sn "ikOri" -ln "ikOri" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "div0" -ln "div0" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div1" -ln "div1" -dv 2 -min 1 -at "long"; + addAttr -ci true -sn "div2" -ln "div2" -dv 2 -min 1 -at "long"; addAttr -ci true -k true -sn "st_profile" -ln "st_profile" -at "double"; addAttr -ci true -k true -sn "sq_profile" -ln "sq_profile" -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 0.21090213141048153 -0.097927178047042762 2.6808811877076875 ; + setAttr ".t" -type "double3" 0.21090213141048153 -0.09792717804704365 2.6808811877076875 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -7915,20 +7942,12 @@ createNode transform -n "legBack_R0_root" -p "spine_C0_root"; setAttr ".connector" -type "string" "standard"; setAttr ".ui_host" -type "string" "backLegUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".blend" 1; - setAttr ".full3BonesIK" 1; - setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root"; - setAttr ".maxstretch" 1.5; - setAttr ".ikOri" yes; - setAttr ".div0" 2; - setAttr ".div1" 2; - setAttr ".div2" 2; + setAttr ".ikrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; + setAttr ".upvrefarray" -type "string" "local_C0_root,spine_C0_root,global_C0_root"; setAttr -k on ".st_profile"; setAttr -k on ".sq_profile"; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "legBack_R0_rootShape" -p "legBack_R0_root"; - rename -uid "2DEE1F1F-4F24-948F-9562-728DDCF162D2"; + rename -uid "709734FF-4810-D3D3-4BAD-E4AFA1995DA5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7940,8 +7959,8 @@ createNode nurbsCurve -n "legBack_R0_rootShape" -p "legBack_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_R0_root10Shape" -p "legBack_R0_root"; - rename -uid "0ACF8406-4B43-539E-13A3-F5A468BBF2B9"; +createNode nurbsCurve -n "legBack_R0_root4Shape" -p "legBack_R0_root"; + rename -uid "AAE230B2-4470-F58A-C9E8-EF9138B8F4D6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7953,8 +7972,8 @@ createNode nurbsCurve -n "legBack_R0_root10Shape" -p "legBack_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_R0_root11Shape" -p "legBack_R0_root"; - rename -uid "1F08688C-428B-42C5-CDB8-ECAAB83ED017"; +createNode nurbsCurve -n "legBack_R0_root5Shape" -p "legBack_R0_root"; + rename -uid "9B8780FA-4388-AC0C-F85F-A1A8803A4FB7"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7966,8 +7985,8 @@ createNode nurbsCurve -n "legBack_R0_root11Shape" -p "legBack_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_R0_root12Shape" -p "legBack_R0_root"; - rename -uid "7DBC7168-4DE7-EDCC-7C7A-C5AAC889BC9B"; +createNode nurbsCurve -n "legBack_R0_root6Shape" -p "legBack_R0_root"; + rename -uid "D949972A-4DE1-EDAC-AA5B-D79C0E02ED60"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -7994,10 +8013,10 @@ createNode nurbsCurve -n "legBack_R0_root12Shape" -p "legBack_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "legBack_R0_knee" -p "legBack_R0_root"; - rename -uid "7797E937-4E89-5F32-AC7E-20B1ED448529"; + rename -uid "B87985BB-461D-407E-5ECD-0DA613DFB201"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.6645352591003757e-015 -1.155950874379851 0.33714517700502311 ; + setAttr ".t" -type "double3" 3.1086244689504383e-015 -1.1559508743798506 0.337145177005022 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8010,7 +8029,7 @@ createNode transform -n "legBack_R0_knee" -p "legBack_R0_root"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_R0_kneeShape" -p "legBack_R0_knee"; - rename -uid "84AA65A4-4E52-DC46-11DA-72B4B878298F"; + rename -uid "7F09D014-49A7-194E-3611-34AD3D164DF4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8022,8 +8041,8 @@ createNode nurbsCurve -n "legBack_R0_kneeShape" -p "legBack_R0_knee"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_R0_knee10Shape" -p "legBack_R0_knee"; - rename -uid "5E904C90-4EEC-5B3C-6147-EC8FCA779A48"; +createNode nurbsCurve -n "legBack_R0_knee4Shape" -p "legBack_R0_knee"; + rename -uid "253B479A-46F1-323C-6B17-F48068A2B39B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8035,8 +8054,8 @@ createNode nurbsCurve -n "legBack_R0_knee10Shape" -p "legBack_R0_knee"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_R0_knee11Shape" -p "legBack_R0_knee"; - rename -uid "7761FFA8-47BF-104B-8CAE-A4812EB6DD80"; +createNode nurbsCurve -n "legBack_R0_knee5Shape" -p "legBack_R0_knee"; + rename -uid "7750FECD-40D9-4BC6-2297-2C859FCC9AF9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8048,8 +8067,8 @@ createNode nurbsCurve -n "legBack_R0_knee11Shape" -p "legBack_R0_knee"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_R0_knee12Shape" -p "legBack_R0_knee"; - rename -uid "9F7D6015-47A6-D044-F21D-63B9E03A745F"; +createNode nurbsCurve -n "legBack_R0_knee6Shape" -p "legBack_R0_knee"; + rename -uid "54E4F0F3-425A-26FB-A95C-399E54134F72"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8066,8 +8085,8 @@ createNode nurbsCurve -n "legBack_R0_knee12Shape" -p "legBack_R0_knee"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_knee12_0crvShape" -p "legBack_R0_knee"; - rename -uid "84001720-423B-0DA1-DCDB-9CB59E700B8B"; +createNode nurbsCurve -n "legBack_R0_knee6_0crvShape" -p "legBack_R0_knee"; + rename -uid "6D24539D-452D-77DD-C598-438CB0445DA3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8084,8 +8103,8 @@ createNode nurbsCurve -n "legBack_R0_knee12_0crvShape" -p "legBack_R0_knee"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_knee12_1crvShape" -p "legBack_R0_knee"; - rename -uid "A3C22943-429E-4ED3-17C5-24B8636044E3"; +createNode nurbsCurve -n "legBack_R0_knee6_1crvShape" -p "legBack_R0_knee"; + rename -uid "1A6AF126-45F5-269B-1142-FD9E637009D1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8103,10 +8122,10 @@ createNode nurbsCurve -n "legBack_R0_knee12_1crvShape" -p "legBack_R0_knee"; 0 0 -0.1875 ; createNode transform -n "legBack_R0_ankle" -p "legBack_R0_knee"; - rename -uid "7B54364E-42A4-F730-8628-6B995B5DE9E0"; + rename -uid "C4A0FEA1-46C7-30B0-4A25-698E9DBE5AF6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 2.2204460492503131e-015 -1.4950431842245462 -0.57333193410462435 ; + setAttr ".t" -type "double3" 2.2204460492503131e-015 -1.4950431842245453 -0.57333193410462324 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8114,12 +8133,12 @@ createNode transform -n "legBack_R0_ankle" -p "legBack_R0_knee"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999944 0.99999999999999878 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999944 1.0000000000000007 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_R0_ankleShape" -p "legBack_R0_ankle"; - rename -uid "5A5F5526-4666-C282-53E1-609C5B3813C8"; + rename -uid "AA2BD92B-4F1E-598E-D7C1-3FBB25F67EA3"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8131,8 +8150,8 @@ createNode nurbsCurve -n "legBack_R0_ankleShape" -p "legBack_R0_ankle"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_R0_ankle10Shape" -p "legBack_R0_ankle"; - rename -uid "74A43E7F-49DF-5FA1-7686-09B814567BCE"; +createNode nurbsCurve -n "legBack_R0_ankle4Shape" -p "legBack_R0_ankle"; + rename -uid "D06DA2A7-4F98-F51B-E3EC-CB9F7D33AADA"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8144,8 +8163,8 @@ createNode nurbsCurve -n "legBack_R0_ankle10Shape" -p "legBack_R0_ankle"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_R0_ankle11Shape" -p "legBack_R0_ankle"; - rename -uid "E28CBBA1-4C80-5348-6771-7DB778617F79"; +createNode nurbsCurve -n "legBack_R0_ankle5Shape" -p "legBack_R0_ankle"; + rename -uid "FB422D33-4C07-0A9E-BAE3-C5A6D6B18C24"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8157,8 +8176,8 @@ createNode nurbsCurve -n "legBack_R0_ankle11Shape" -p "legBack_R0_ankle"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_R0_ankle12Shape" -p "legBack_R0_ankle"; - rename -uid "5E0E7E30-43F2-E8B1-2A21-22983E432142"; +createNode nurbsCurve -n "legBack_R0_ankle6Shape" -p "legBack_R0_ankle"; + rename -uid "FAB98D6B-4068-2CDD-EF6F-C89BDF436059"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8175,8 +8194,8 @@ createNode nurbsCurve -n "legBack_R0_ankle12Shape" -p "legBack_R0_ankle"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_ankle12_0crvShape" -p "legBack_R0_ankle"; - rename -uid "B28C795E-4F54-F1F1-1E0F-57A89FEA774A"; +createNode nurbsCurve -n "legBack_R0_ankle6_0crvShape" -p "legBack_R0_ankle"; + rename -uid "244579BD-47E4-5009-E4F1-7388DCE2F34D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8193,8 +8212,8 @@ createNode nurbsCurve -n "legBack_R0_ankle12_0crvShape" -p "legBack_R0_ankle"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_ankle12_1crvShape" -p "legBack_R0_ankle"; - rename -uid "B99B9EDA-4F8B-F112-C63D-1882B61C1FFF"; +createNode nurbsCurve -n "legBack_R0_ankle6_1crvShape" -p "legBack_R0_ankle"; + rename -uid "D949142E-4F7C-F31F-F755-45833E4F15D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8212,10 +8231,10 @@ createNode nurbsCurve -n "legBack_R0_ankle12_1crvShape" -p "legBack_R0_ankle"; 0 0 -0.1875 ; createNode transform -n "legBack_R0_foot" -p "legBack_R0_ankle"; - rename -uid "24B49B79-429D-D3C5-8109-D5B1028CFABC"; + rename -uid "48514193-4A22-FBEA-2024-3D8D8A611285"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1102230246251565e-015 -0.54805580751979133 0.15050522089872853 ; + setAttr ".t" -type "double3" 1.1102230246251565e-015 -0.54805580751979266 0.15050522089872898 ; setAttr -l on -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8223,12 +8242,12 @@ createNode transform -n "legBack_R0_foot" -p "legBack_R0_ankle"; setAttr -l on -k off -cb on ".ry"; setAttr -l on -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000004 1.0000000000000013 1 ; + setAttr ".s" -type "double3" 0.99999999999999956 1.0000000000000009 0.99999999999999989 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_R0_footShape" -p "legBack_R0_foot"; - rename -uid "27C9D149-40B9-14A2-E42B-BF87D412BBB8"; + rename -uid "3DB28E7C-4FAC-4DDC-458C-739F4115A35E"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8240,8 +8259,8 @@ createNode nurbsCurve -n "legBack_R0_footShape" -p "legBack_R0_foot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_R0_foot10Shape" -p "legBack_R0_foot"; - rename -uid "C1663611-4823-003F-5F93-1B9E5657B062"; +createNode nurbsCurve -n "legBack_R0_foot4Shape" -p "legBack_R0_foot"; + rename -uid "ED5EFD9D-4443-DDCB-3C7D-EAA4C694D157"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8253,8 +8272,8 @@ createNode nurbsCurve -n "legBack_R0_foot10Shape" -p "legBack_R0_foot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_R0_foot11Shape" -p "legBack_R0_foot"; - rename -uid "72A130BF-410A-69E0-882B-6CAF18DED6FB"; +createNode nurbsCurve -n "legBack_R0_foot5Shape" -p "legBack_R0_foot"; + rename -uid "8FB8BD24-47AD-83FA-7C4F-14B45C4D29C9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8266,8 +8285,8 @@ createNode nurbsCurve -n "legBack_R0_foot11Shape" -p "legBack_R0_foot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_R0_foot12Shape" -p "legBack_R0_foot"; - rename -uid "37BF66AD-415C-1DD4-A423-A39CF0E1F1B0"; +createNode nurbsCurve -n "legBack_R0_foot6Shape" -p "legBack_R0_foot"; + rename -uid "93409780-4929-5FC1-6648-3481F3DEBD14"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8284,8 +8303,8 @@ createNode nurbsCurve -n "legBack_R0_foot12Shape" -p "legBack_R0_foot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_foot12_0crvShape" -p "legBack_R0_foot"; - rename -uid "70A4EACD-4115-6547-5F90-74A6F0B5A842"; +createNode nurbsCurve -n "legBack_R0_foot6_0crvShape" -p "legBack_R0_foot"; + rename -uid "390C8D1C-44B6-217D-33B9-FC8CF03EC443"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8302,8 +8321,8 @@ createNode nurbsCurve -n "legBack_R0_foot12_0crvShape" -p "legBack_R0_foot"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_foot12_1crvShape" -p "legBack_R0_foot"; - rename -uid "11350C76-412C-8089-C5D9-68AD47B8E149"; +createNode nurbsCurve -n "legBack_R0_foot6_1crvShape" -p "legBack_R0_foot"; + rename -uid "6AC0ACCB-4B70-A31F-C6C8-C387AD96F1B5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8321,10 +8340,10 @@ createNode nurbsCurve -n "legBack_R0_foot12_1crvShape" -p "legBack_R0_foot"; 0 0 -0.1875 ; createNode transform -n "legBack_R0_eff" -p "legBack_R0_foot"; - rename -uid "BECD8E3D-434C-AAA2-3AB4-519FAA3FF073"; + rename -uid "F99FEB71-4A08-3100-EC86-17BBF050CBF6"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.9984014443252818e-015 1.3877787807814457e-016 0.28135643819707568 ; + setAttr ".t" -type "double3" 1.3322676295501878e-015 6.9388939039072284e-016 0.28135643819707479 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8332,12 +8351,12 @@ createNode transform -n "legBack_R0_eff" -p "legBack_R0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1 0.99999999999999922 0.99999999999999922 ; + setAttr ".s" -type "double3" 0.99999999999999956 0.99999999999999889 0.99999999999999889 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "legBack_R0_effShape" -p "legBack_R0_eff"; - rename -uid "31C5DFF1-4D6D-4DA4-858B-63BB332A79F4"; + rename -uid "63165659-487D-3070-CC1E-E0A3EB006383"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8349,8 +8368,8 @@ createNode nurbsCurve -n "legBack_R0_effShape" -p "legBack_R0_eff"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "legBack_R0_eff10Shape" -p "legBack_R0_eff"; - rename -uid "DBA208E3-4B1D-5FD7-FD62-1993CF1C5A9B"; +createNode nurbsCurve -n "legBack_R0_eff4Shape" -p "legBack_R0_eff"; + rename -uid "47CBFA3F-4D11-641E-8E74-04B6180AC8D6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8362,8 +8381,8 @@ createNode nurbsCurve -n "legBack_R0_eff10Shape" -p "legBack_R0_eff"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "legBack_R0_eff11Shape" -p "legBack_R0_eff"; - rename -uid "FCC505B7-47E6-8823-A55D-259AE21221D6"; +createNode nurbsCurve -n "legBack_R0_eff5Shape" -p "legBack_R0_eff"; + rename -uid "C1D213BF-429D-BDAA-AD8F-6F98C40F5E34"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8375,8 +8394,8 @@ createNode nurbsCurve -n "legBack_R0_eff11Shape" -p "legBack_R0_eff"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "legBack_R0_eff12Shape" -p "legBack_R0_eff"; - rename -uid "EA667694-4A58-73DC-E810-6DB5F1A52603"; +createNode nurbsCurve -n "legBack_R0_eff6Shape" -p "legBack_R0_eff"; + rename -uid "05F9BC79-43D1-FFF2-8E5E-5A9A089667FE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8393,8 +8412,8 @@ createNode nurbsCurve -n "legBack_R0_eff12Shape" -p "legBack_R0_eff"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_eff12_0crvShape" -p "legBack_R0_eff"; - rename -uid "210C8EBC-4F02-6427-BAE3-0CA8036D7DB9"; +createNode nurbsCurve -n "legBack_R0_eff6_0crvShape" -p "legBack_R0_eff"; + rename -uid "EA8A3A6F-45CC-06AA-3D7B-4B921FA606E8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8411,8 +8430,8 @@ createNode nurbsCurve -n "legBack_R0_eff12_0crvShape" -p "legBack_R0_eff"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "legBack_R0_eff12_1crvShape" -p "legBack_R0_eff"; - rename -uid "BA98A755-47A1-487D-1C1B-5CBA0985D8F1"; +createNode nurbsCurve -n "legBack_R0_eff6_1crvShape" -p "legBack_R0_eff"; + rename -uid "9D8E096C-427D-5B43-7207-DDA0FC30F890"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8430,7 +8449,7 @@ createNode nurbsCurve -n "legBack_R0_eff12_1crvShape" -p "legBack_R0_eff"; 0 0 -0.1875 ; createNode transform -n "footBack_R0_root" -p "legBack_R0_foot"; - rename -uid "D54CE142-4698-CF04-82F9-5EB7F1604C0F"; + rename -uid "F285FA53-405F-8783-4104-3C9C9A84DA07"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -8439,11 +8458,11 @@ createNode transform -n "footBack_R0_root" -p "legBack_R0_foot"; addAttr -ci true -sn "connector" -ln "connector" -dt "string"; addAttr -ci true -sn "ui_host" -ln "ui_host" -dt "string"; addAttr -ci true -sn "ctlGrp" -ln "ctlGrp" -dt "string"; - addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "useRollCtl" -ln "useRollCtl" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.1102230246251565e-015 2.6367796834847468e-016 6.6613381477509392e-016 ; + setAttr ".t" -type "double3" 6.6613381477509392e-016 8.1878948066105295e-016 -2.2204460492503131e-016 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8451,7 +8470,7 @@ createNode transform -n "footBack_R0_root" -p "legBack_R0_foot"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.16356254765398101 0.1635625476539809 0.16356254765398087 ; + setAttr ".s" -type "double3" 0.16356254765398093 0.16356254765398084 0.16356254765398082 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -8461,10 +8480,8 @@ createNode transform -n "footBack_R0_root" -p "legBack_R0_foot"; setAttr ".connector" -type "string" "leg_3jnt_01"; setAttr ".ui_host" -type "string" "backLegUI_R0_root"; setAttr ".ctlGrp" -type "string" ""; - setAttr ".useRollCtl" yes; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "footBack_R0_rootShape" -p "footBack_R0_root"; - rename -uid "C23CB136-426D-ACED-71FF-6983D500564C"; + rename -uid "AA947537-4AEB-6315-4A80-3585AF363EA9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8476,8 +8493,8 @@ createNode nurbsCurve -n "footBack_R0_rootShape" -p "footBack_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_root10Shape" -p "footBack_R0_root"; - rename -uid "EDDA460D-4880-9CF6-71E2-01B4F2EC413B"; +createNode nurbsCurve -n "footBack_R0_root4Shape" -p "footBack_R0_root"; + rename -uid "D9951079-4747-8ECD-C4D0-3BB8495040D8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8489,8 +8506,8 @@ createNode nurbsCurve -n "footBack_R0_root10Shape" -p "footBack_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_root11Shape" -p "footBack_R0_root"; - rename -uid "72277CF6-4210-69A1-8F1B-9892EF7F7BA8"; +createNode nurbsCurve -n "footBack_R0_root5Shape" -p "footBack_R0_root"; + rename -uid "47591DAF-4407-294A-E0E2-24ADAB6A78F1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8502,8 +8519,8 @@ createNode nurbsCurve -n "footBack_R0_root11Shape" -p "footBack_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_root12Shape" -p "footBack_R0_root"; - rename -uid "0F796927-472B-691F-A53E-829519A1EF6F"; +createNode nurbsCurve -n "footBack_R0_root6Shape" -p "footBack_R0_root"; + rename -uid "DFD0AABD-4518-C0A9-9AC2-2E8C7DA366DC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8530,10 +8547,10 @@ createNode nurbsCurve -n "footBack_R0_root12Shape" -p "footBack_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "footBack_R0_0_loc" -p "footBack_R0_root"; - rename -uid "670B8ACD-4F72-8E3F-BF44-04B62B6947E5"; + rename -uid "0BB011C3-4A43-1085-4833-A6B2F554A06D"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -8.8817841970012523e-015 3.8857805861880479e-016 0.54565565303279229 ; + setAttr ".t" -type "double3" -1.4210854715202004e-014 -5.5511151231257827e-017 0.54565565303279584 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8541,12 +8558,12 @@ createNode transform -n "footBack_R0_0_loc" -p "footBack_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_R0_0_locShape" -p "footBack_R0_0_loc"; - rename -uid "30FEA945-4247-BFE8-15EE-38B755DEAE50"; + rename -uid "5E40C53A-43CB-0413-64FA-44BC5BC6AD6D"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8558,8 +8575,8 @@ createNode nurbsCurve -n "footBack_R0_0_locShape" -p "footBack_R0_0_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_0_loc10Shape" -p "footBack_R0_0_loc"; - rename -uid "C466BCD9-426C-A745-9DD3-4E84717E37FA"; +createNode nurbsCurve -n "footBack_R0_0_loc4Shape" -p "footBack_R0_0_loc"; + rename -uid "68EF8543-46B8-39F4-BF27-D9950C68F697"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8571,8 +8588,8 @@ createNode nurbsCurve -n "footBack_R0_0_loc10Shape" -p "footBack_R0_0_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_0_loc11Shape" -p "footBack_R0_0_loc"; - rename -uid "F12EBC49-46D5-71E9-EED9-708E95AA8638"; +createNode nurbsCurve -n "footBack_R0_0_loc5Shape" -p "footBack_R0_0_loc"; + rename -uid "981F86E0-4AB5-1C93-6D1E-C8860DD6251A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8584,8 +8601,8 @@ createNode nurbsCurve -n "footBack_R0_0_loc11Shape" -p "footBack_R0_0_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_0_loc12Shape" -p "footBack_R0_0_loc"; - rename -uid "61BD24A4-49F7-6B68-D0E9-77836B966149"; +createNode nurbsCurve -n "footBack_R0_0_loc6Shape" -p "footBack_R0_0_loc"; + rename -uid "7FBC2386-4096-B3F7-38D5-B780763E6C06"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8602,8 +8619,8 @@ createNode nurbsCurve -n "footBack_R0_0_loc12Shape" -p "footBack_R0_0_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_0_loc12_0crvShape" -p "footBack_R0_0_loc"; - rename -uid "4BD4A380-4DE0-87FD-B143-07994B25ADEE"; +createNode nurbsCurve -n "footBack_R0_0_loc6_0crvShape" -p "footBack_R0_0_loc"; + rename -uid "EDA26D41-4595-D3F0-38E8-678CF4C4E1E4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8620,8 +8637,8 @@ createNode nurbsCurve -n "footBack_R0_0_loc12_0crvShape" -p "footBack_R0_0_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_0_loc12_1crvShape" -p "footBack_R0_0_loc"; - rename -uid "9B61CBAF-4497-9503-E5D8-70B8CD6B6698"; +createNode nurbsCurve -n "footBack_R0_0_loc6_1crvShape" -p "footBack_R0_0_loc"; + rename -uid "B4DB6B4A-4F72-9D71-5BB7-B984F1CDC8F4"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8639,10 +8656,10 @@ createNode nurbsCurve -n "footBack_R0_0_loc12_1crvShape" -p "footBack_R0_0_loc"; 0 0 -0.1875 ; createNode transform -n "footBack_R0_1_loc" -p "footBack_R0_0_loc"; - rename -uid "05AB6E20-427A-FE9D-C941-EF88C8D5F495"; + rename -uid "99083FC0-431B-6FCC-20B5-A1B6361E083A"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -3.5527136788005009e-015 -0.34547277013915589 0.77046072389792464 ; + setAttr ".t" -type "double3" 1.7763568394002505e-015 -0.34547277013915595 0.77046072389793352 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8650,12 +8667,12 @@ createNode transform -n "footBack_R0_1_loc" -p "footBack_R0_0_loc"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000007 1.0000000000000002 1.0000000000000002 ; + setAttr ".s" -type "double3" 1.0000000000000011 0.99999999999999978 1.0000000000000004 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_R0_1_locShape" -p "footBack_R0_1_loc"; - rename -uid "F95276E5-42E3-D8D0-DFCE-2B9BEB4525CC"; + rename -uid "CF1272F9-4567-AFE6-FFF3-E8A2A7A1ADAE"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8667,8 +8684,8 @@ createNode nurbsCurve -n "footBack_R0_1_locShape" -p "footBack_R0_1_loc"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_1_loc10Shape" -p "footBack_R0_1_loc"; - rename -uid "800158A9-4B31-C05E-D86F-C2845AA02683"; +createNode nurbsCurve -n "footBack_R0_1_loc4Shape" -p "footBack_R0_1_loc"; + rename -uid "5C87CFAF-473C-E9B2-FF43-6198D68630EB"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8680,8 +8697,8 @@ createNode nurbsCurve -n "footBack_R0_1_loc10Shape" -p "footBack_R0_1_loc"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_1_loc11Shape" -p "footBack_R0_1_loc"; - rename -uid "C68D7C44-47CB-FA8F-A834-26937F5BF81B"; +createNode nurbsCurve -n "footBack_R0_1_loc5Shape" -p "footBack_R0_1_loc"; + rename -uid "140C8FB8-4FDD-2D3D-52A1-FC82C682AB72"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8693,8 +8710,8 @@ createNode nurbsCurve -n "footBack_R0_1_loc11Shape" -p "footBack_R0_1_loc"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_1_loc12Shape" -p "footBack_R0_1_loc"; - rename -uid "FF45DACD-4F93-D126-F929-46BBBF452F23"; +createNode nurbsCurve -n "footBack_R0_1_loc6Shape" -p "footBack_R0_1_loc"; + rename -uid "B510D63C-4AD8-DE27-879B-5EA11782D537"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8711,8 +8728,8 @@ createNode nurbsCurve -n "footBack_R0_1_loc12Shape" -p "footBack_R0_1_loc"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_1_loc12_0crvShape" -p "footBack_R0_1_loc"; - rename -uid "214C257C-4CB0-BF88-FA53-018605122919"; +createNode nurbsCurve -n "footBack_R0_1_loc6_0crvShape" -p "footBack_R0_1_loc"; + rename -uid "DCDAA76B-4890-A558-210C-4A8B69DE4F36"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8729,8 +8746,8 @@ createNode nurbsCurve -n "footBack_R0_1_loc12_0crvShape" -p "footBack_R0_1_loc"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_1_loc12_1crvShape" -p "footBack_R0_1_loc"; - rename -uid "B3063B89-457D-F8EB-E445-7C9D7A735FB4"; +createNode nurbsCurve -n "footBack_R0_1_loc6_1crvShape" -p "footBack_R0_1_loc"; + rename -uid "8555527F-4148-5582-AFC8-8CADB827AF9A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8748,19 +8765,19 @@ createNode nurbsCurve -n "footBack_R0_1_loc12_1crvShape" -p "footBack_R0_1_loc"; 0 0 -0.1875 ; createNode transform -n "footBack_R0_crv" -p "footBack_R0_root"; - rename -uid "B46CA9F0-4DDD-F236-F193-31BA6002838B"; + rename -uid "1A0872BE-424E-C547-F070-70AA296A6783"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.980332218718955 -0.49678747209357782 11.584116504196611 ; + setAttr ".t" -type "double3" -10.980332218718956 -0.49678747209357832 11.584116504196617 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; - setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725739 -8.6433157474725792 ; + setAttr ".s" -type "double3" 8.6433157474725775 8.6433157474725739 -8.6433157474725792 ; createNode nurbsCurve -n "footBack_R0_crvShape" -p "footBack_R0_crv"; - rename -uid "B44EBB29-4E83-5779-07BA-0BAE399328C4"; + rename -uid "74BBB355-4B78-9DAB-3C14-73A5A18321B5"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footBack_R0_crvShapeOrig" -p "footBack_R0_crv"; - rename -uid "C81C1E13-4A44-97D2-7907-FA82EBAD3BD2"; + rename -uid "B3CBEAB9-4F8F-56A0-A203-6BA30870C288"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -8772,10 +8789,10 @@ createNode nurbsCurve -n "footBack_R0_crvShapeOrig" -p "footBack_R0_crv"; 0 0 0 ; createNode transform -n "footBack_R0_heel" -p "footBack_R0_root"; - rename -uid "84C29B98-4976-90D8-E621-44B0F6979BE7"; + rename -uid "CDBE241D-446E-EF0F-5379-99B86705E9C5"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.0658141036401503e-014 -0.34547277013915573 -0.37260003933978858 ; + setAttr ".t" -type "double3" -1.5987211554602254e-014 -0.34547277013915645 -0.37260003933978503 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8783,12 +8800,12 @@ createNode transform -n "footBack_R0_heel" -p "footBack_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_R0_heelShape" -p "footBack_R0_heel"; - rename -uid "F59A78D1-4FBE-7F6D-7B4F-07A105EC7F93"; + rename -uid "18BA8C64-484A-14C2-1E86-FF9BFDF4C32C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8800,8 +8817,8 @@ createNode nurbsCurve -n "footBack_R0_heelShape" -p "footBack_R0_heel"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_heel10Shape" -p "footBack_R0_heel"; - rename -uid "B5F62F62-4378-0470-8F4A-00B64C9F2C5D"; +createNode nurbsCurve -n "footBack_R0_heel4Shape" -p "footBack_R0_heel"; + rename -uid "8DF61FC1-4A34-00BF-EF15-05BD7506AC8C"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8813,8 +8830,8 @@ createNode nurbsCurve -n "footBack_R0_heel10Shape" -p "footBack_R0_heel"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_heel11Shape" -p "footBack_R0_heel"; - rename -uid "2E92BFC2-492F-E936-63E3-62976633ADF0"; +createNode nurbsCurve -n "footBack_R0_heel5Shape" -p "footBack_R0_heel"; + rename -uid "999F91BF-4FD8-EABD-0831-47AEFC68A4BC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8826,8 +8843,8 @@ createNode nurbsCurve -n "footBack_R0_heel11Shape" -p "footBack_R0_heel"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_heel12Shape" -p "footBack_R0_heel"; - rename -uid "E8E1B90D-4038-32A6-475A-02AFCDF38856"; +createNode nurbsCurve -n "footBack_R0_heel6Shape" -p "footBack_R0_heel"; + rename -uid "3073D05E-4CE2-CD2D-1C5E-88A155E8E604"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8844,8 +8861,8 @@ createNode nurbsCurve -n "footBack_R0_heel12Shape" -p "footBack_R0_heel"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_heel12_0crvShape" -p "footBack_R0_heel"; - rename -uid "EA1485C6-4D7A-CC2F-6225-43B6E336041B"; +createNode nurbsCurve -n "footBack_R0_heel6_0crvShape" -p "footBack_R0_heel"; + rename -uid "8E1BBAEF-4CB7-C4A5-5E48-D58AE574FCA9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8862,8 +8879,8 @@ createNode nurbsCurve -n "footBack_R0_heel12_0crvShape" -p "footBack_R0_heel"; 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_heel12_1crvShape" -p "footBack_R0_heel"; - rename -uid "4AB630D8-41CE-4436-E89B-12A8D2FC2FCC"; +createNode nurbsCurve -n "footBack_R0_heel6_1crvShape" -p "footBack_R0_heel"; + rename -uid "A2E9A7E7-4C34-7709-9AAD-A18A1C6D3F34"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8881,10 +8898,10 @@ createNode nurbsCurve -n "footBack_R0_heel12_1crvShape" -p "footBack_R0_heel"; 0 0 -0.1875 ; createNode transform -n "footBack_R0_outpivot" -p "footBack_R0_root"; - rename -uid "648C793F-4326-E4F2-B7C8-5F8541956323"; + rename -uid "92CDCE67-410A-0FC4-CFE1-09B0716090B9"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 1.0422206583139833 -0.34547277013915573 0.11497296198778173 ; + setAttr ".t" -type "double3" 1.0422206583139761 -0.3454727701391565 0.11497296198779061 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -8892,12 +8909,12 @@ createNode transform -n "footBack_R0_outpivot" -p "footBack_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_R0_outpivotShape" -p "footBack_R0_outpivot"; - rename -uid "A6EC6376-4120-9E05-BB93-9EB996F67A27"; + rename -uid "5A53B976-4964-EC1F-32E3-3294873E65A6"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8909,8 +8926,8 @@ createNode nurbsCurve -n "footBack_R0_outpivotShape" -p "footBack_R0_outpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_outpivot10Shape" -p "footBack_R0_outpivot"; - rename -uid "4DAFA26F-49A4-8D21-79D8-0CBA06732A7E"; +createNode nurbsCurve -n "footBack_R0_outpivot4Shape" -p "footBack_R0_outpivot"; + rename -uid "60A2EC1E-4603-53B5-31F5-E5945F3BBC80"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8922,8 +8939,8 @@ createNode nurbsCurve -n "footBack_R0_outpivot10Shape" -p "footBack_R0_outpivot" 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_outpivot11Shape" -p "footBack_R0_outpivot"; - rename -uid "8C6B69F2-4872-F814-9B4E-FB89106E6CE1"; +createNode nurbsCurve -n "footBack_R0_outpivot5Shape" -p "footBack_R0_outpivot"; + rename -uid "32E378AE-402D-D459-1E9A-A0B20C38CFB1"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8935,8 +8952,8 @@ createNode nurbsCurve -n "footBack_R0_outpivot11Shape" -p "footBack_R0_outpivot" 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_outpivot12Shape" -p "footBack_R0_outpivot"; - rename -uid "89F6508C-432A-0594-C73B-89BA1C709334"; +createNode nurbsCurve -n "footBack_R0_outpivot6Shape" -p "footBack_R0_outpivot"; + rename -uid "FD678B76-4C97-2012-9DE7-3CB92F7CC17B"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8953,8 +8970,8 @@ createNode nurbsCurve -n "footBack_R0_outpivot12Shape" -p "footBack_R0_outpivot" 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_outpivot12_0crvShape" -p "footBack_R0_outpivot"; - rename -uid "13D8BEB1-4B74-D797-ED4A-E58A06002FC0"; +createNode nurbsCurve -n "footBack_R0_outpivot6_0crvShape" -p "footBack_R0_outpivot"; + rename -uid "5EC4FA04-4BB0-4085-2021-1D81D7F63461"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8971,8 +8988,8 @@ createNode nurbsCurve -n "footBack_R0_outpivot12_0crvShape" -p "footBack_R0_outp 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_outpivot12_1crvShape" -p "footBack_R0_outpivot"; - rename -uid "FE1F14D3-444D-4A87-D175-06A4C5671CC7"; +createNode nurbsCurve -n "footBack_R0_outpivot6_1crvShape" -p "footBack_R0_outpivot"; + rename -uid "3AF9588E-49D4-787C-99A0-5CAC1E1C17A9"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -8990,10 +9007,10 @@ createNode nurbsCurve -n "footBack_R0_outpivot12_1crvShape" -p "footBack_R0_outp 0 0 -0.1875 ; createNode transform -n "footBack_R0_inpivot" -p "footBack_R0_root"; - rename -uid "B3B5F0B1-4825-6708-DC87-F8B40787A4DF"; + rename -uid "093A094B-4EA4-A47A-C9AD-1B912E7DEDFE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -1.16821468262156 -0.34547277013915567 0.2122813601173128 ; + setAttr ".t" -type "double3" -1.1682146826215689 -0.34547277013915628 0.21228136011731813 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9001,12 +9018,12 @@ createNode transform -n "footBack_R0_inpivot" -p "footBack_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 0.99999999999999978 1 1.0000000000000009 ; + setAttr ".s" -type "double3" 0.99999999999999978 1.0000000000000002 1.0000000000000009 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode nurbsCurve -n "footBack_R0_inpivotShape" -p "footBack_R0_inpivot"; - rename -uid "54FE8E8E-4AAC-0394-83FE-23A8D1D25256"; + rename -uid "DDC3925B-4EDF-E076-46EB-84978305EEAD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9018,8 +9035,8 @@ createNode nurbsCurve -n "footBack_R0_inpivotShape" -p "footBack_R0_inpivot"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "footBack_R0_inpivot10Shape" -p "footBack_R0_inpivot"; - rename -uid "D2324A28-4359-08C3-8C66-51BEFC969067"; +createNode nurbsCurve -n "footBack_R0_inpivot4Shape" -p "footBack_R0_inpivot"; + rename -uid "BAF45AF7-4A12-65AB-DF37-CFB22ACC30E5"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9031,8 +9048,8 @@ createNode nurbsCurve -n "footBack_R0_inpivot10Shape" -p "footBack_R0_inpivot"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "footBack_R0_inpivot11Shape" -p "footBack_R0_inpivot"; - rename -uid "B331EEAF-41CC-ECB2-30CF-768498882041"; +createNode nurbsCurve -n "footBack_R0_inpivot5Shape" -p "footBack_R0_inpivot"; + rename -uid "AD3F1EC7-457F-79AB-1EB0-BC9B20EE9A9A"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9044,8 +9061,8 @@ createNode nurbsCurve -n "footBack_R0_inpivot11Shape" -p "footBack_R0_inpivot"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "footBack_R0_inpivot12Shape" -p "footBack_R0_inpivot"; - rename -uid "66DC13F3-4C93-4E79-E025-8F9EBFF59CFA"; +createNode nurbsCurve -n "footBack_R0_inpivot6Shape" -p "footBack_R0_inpivot"; + rename -uid "7578B2BE-4DDE-7EE5-7010-A194812470FC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9062,8 +9079,8 @@ createNode nurbsCurve -n "footBack_R0_inpivot12Shape" -p "footBack_R0_inpivot"; 0 -0.1875 0 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_inpivot12_0crvShape" -p "footBack_R0_inpivot"; - rename -uid "C2DB332B-429F-FE84-754A-60AF4A5714F3"; +createNode nurbsCurve -n "footBack_R0_inpivot6_0crvShape" -p "footBack_R0_inpivot"; + rename -uid "2810C542-4FA1-D67B-0178-7CB056EEEBFC"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9080,8 +9097,8 @@ createNode nurbsCurve -n "footBack_R0_inpivot12_0crvShape" -p "footBack_R0_inpiv 0 0 -0.1875 -0.1875 0 0 ; -createNode nurbsCurve -n "footBack_R0_inpivot12_1crvShape" -p "footBack_R0_inpivot"; - rename -uid "6C5648F2-4300-55D7-9D27-A38BB523DF6B"; +createNode nurbsCurve -n "footBack_R0_inpivot6_1crvShape" -p "footBack_R0_inpivot"; + rename -uid "15FD54D8-4F8C-E139-C8EB-DD96721AA8E8"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9099,19 +9116,19 @@ createNode nurbsCurve -n "footBack_R0_inpivot12_1crvShape" -p "footBack_R0_inpiv 0 0 -0.1875 ; createNode transform -n "footBack_R0_1" -p "footBack_R0_root"; - rename -uid "2FC996E8-4F4B-34E9-3166-C7AB763B900D"; + rename -uid "FAC4F949-4FDF-8881-5EBF-ECB41C1EFB35"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -10.980332218718955 -0.49678747209357782 11.584116504196611 ; + setAttr ".t" -type "double3" -10.980332218718956 -0.49678747209357832 11.584116504196617 ; setAttr ".r" -type "double3" 0 179.99999999999997 0 ; - setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725739 -8.6433157474725792 ; + setAttr ".s" -type "double3" 8.6433157474725775 8.6433157474725739 -8.6433157474725792 ; createNode nurbsCurve -n "footBack_R0_Shape1" -p "footBack_R0_1"; - rename -uid "0C63E2F5-401A-3F47-A3DC-39AC326CCB7F"; + rename -uid "E7C7F59D-4673-D762-C667-1D939176D8BD"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "footBack_R0_Shape1Orig" -p "footBack_R0_1"; - rename -uid "71E5458A-4E02-6F61-BE07-D1945D9C2254"; + rename -uid "F8F04B7C-4354-B320-4B88-1BA308B3DA22"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -9125,7 +9142,7 @@ createNode nurbsCurve -n "footBack_R0_Shape1Orig" -p "footBack_R0_1"; 0 0 0 ; createNode transform -n "backLegUI_R0_root" -p "footBack_R0_root"; - rename -uid "64CB3A0C-4228-D181-8A5C-2D8D24C95658"; + rename -uid "628CC7A1-4B8B-D00E-AFA2-B3BAEC6F13FE"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "comp_type" -ln "comp_type" -dt "string"; addAttr -ci true -sn "comp_name" -ln "comp_name" -dt "string"; @@ -9137,7 +9154,7 @@ createNode transform -n "backLegUI_R0_root" -p "footBack_R0_root"; addAttr -ci true -sn "icon" -ln "icon" -dt "string"; addAttr -ci true -sn "ikrefarray" -ln "ikrefarray" -dt "string"; addAttr -ci true -sn "joint" -ln "joint" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "uniScale" -ln "uniScale" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "uniScale" -ln "uniScale" -dv 1 -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tx" -ln "k_tx" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_ty" -ln "k_ty" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_tz" -ln "k_tz" -min 0 -max 1 -at "bool"; @@ -9149,12 +9166,14 @@ createNode transform -n "backLegUI_R0_root" -p "footBack_R0_root"; addAttr -ci true -sn "k_sy" -ln "k_sy" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "k_sz" -ln "k_sz" -min 0 -max 1 -at "bool"; addAttr -ci true -sn "default_rotorder" -ln "default_rotorder" -min 0 -max 5 -at "long"; - addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "ctlSize" -ln "ctlSize" -at "double"; + addAttr -ci true -sn "neutralRotation" -ln "neutralRotation" -dv 1 -min 0 -max 1 + -at "bool"; + addAttr -ci true -sn "mirrorBehaviour" -ln "mirrorBehaviour" -min 0 -max 1 -at "bool"; + addAttr -ci true -sn "ctlSize" -ln "ctlSize" -dv 0.5 -at "double"; addAttr -ci true -sn "useIndex" -ln "useIndex" -min 0 -max 1 -at "bool"; - addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -at "long"; + addAttr -ci true -sn "parentJointIndex" -ln "parentJointIndex" -dv -1 -at "long"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" 7.9148715870389861 6.0337539388988519 -0.92016921390297313 ; + setAttr ".t" -type "double3" 7.9148715870389807 6.0337539388988546 -0.92016921390296602 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; @@ -9162,7 +9181,7 @@ createNode transform -n "backLegUI_R0_root" -p "footBack_R0_root"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 8.6433157474725739 8.6433157474725775 8.6433157474725828 ; + setAttr ".s" -type "double3" 8.6433157474725757 8.6433157474725792 8.6433157474725828 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; @@ -9174,12 +9193,8 @@ createNode transform -n "backLegUI_R0_root" -p "footBack_R0_root"; setAttr ".ctlGrp" -type "string" ""; setAttr ".icon" -type "string" "cross"; setAttr ".ikrefarray" -type "string" ""; - setAttr ".uniScale" yes; - setAttr ".neutralRotation" yes; - setAttr ".ctlSize" 0.5; - setAttr ".parentJointIndex" -1; createNode nurbsCurve -n "backLegUI_R0_rootShape" -p "backLegUI_R0_root"; - rename -uid "511F4F9E-4CED-445D-580C-5B831CB21702"; + rename -uid "9D15BB8A-46CF-F23F-9AE1-02A4A2D06442"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9191,8 +9206,8 @@ createNode nurbsCurve -n "backLegUI_R0_rootShape" -p "backLegUI_R0_root"; 0.25 0 0 -0.25 0 0 ; -createNode nurbsCurve -n "backLegUI_R0_root10Shape" -p "backLegUI_R0_root"; - rename -uid "7566C060-44B3-89A1-7682-7D94368E0394"; +createNode nurbsCurve -n "backLegUI_R0_root4Shape" -p "backLegUI_R0_root"; + rename -uid "7D00E214-4177-DCA9-1B5B-82B72A8F5724"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9204,8 +9219,8 @@ createNode nurbsCurve -n "backLegUI_R0_root10Shape" -p "backLegUI_R0_root"; 0 0.25 0 0 -0.25 0 ; -createNode nurbsCurve -n "backLegUI_R0_root11Shape" -p "backLegUI_R0_root"; - rename -uid "A54AB8AD-472D-8F62-DB6B-958A42ED77AA"; +createNode nurbsCurve -n "backLegUI_R0_root5Shape" -p "backLegUI_R0_root"; + rename -uid "E59E0832-4952-B571-C7ED-DF9193ACF4FD"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9217,8 +9232,8 @@ createNode nurbsCurve -n "backLegUI_R0_root11Shape" -p "backLegUI_R0_root"; 0 0 0.25 0 0 -0.25 ; -createNode nurbsCurve -n "backLegUI_R0_root12Shape" -p "backLegUI_R0_root"; - rename -uid "DD4D4C80-4713-D9E0-F221-1DAAA47F6BFB"; +createNode nurbsCurve -n "backLegUI_R0_root6Shape" -p "backLegUI_R0_root"; + rename -uid "6E8B09ED-426B-39D0-0226-9F9E7A0534E2"; setAttr ".ihi" 0; setAttr -k off ".v"; setAttr ".ove" yes; @@ -9245,36 +9260,35 @@ createNode nurbsCurve -n "backLegUI_R0_root12Shape" -p "backLegUI_R0_root"; -0.125 -0.125 -0.125 ; createNode transform -n "backLegUI_R0_sizeRef" -p "backLegUI_R0_root"; - rename -uid "3F9451D4-47B3-EBD8-B6A4-E2B0B540CF89"; + rename -uid "F8A26303-41E0-7716-33D4-C5BF602E3784"; addAttr -ci true -sn "isGearGuide" -ln "isGearGuide" -dv 1 -min 0 -max 1 -at "bool"; setAttr -k off -cb on ".v"; - setAttr ".t" -type "double3" -8.8817841970012523e-016 0 0.99999999999999956 ; + setAttr ".t" -type "double3" -4.4408920985006262e-016 1.1102230246251565e-016 0.99999999999999956 ; setAttr -k off -cb on ".tx"; setAttr -k off -cb on ".ty"; setAttr -k off -cb on ".tz"; - setAttr ".r" -type "double3" 0 179.99999999999997 0 ; setAttr -k off -cb on ".rx"; setAttr -k off -cb on ".ry"; setAttr -k off -cb on ".rz"; setAttr -cb on ".ro"; - setAttr ".s" -type "double3" 1.0000000000000002 0.99999999999999956 -0.99999999999999967 ; + setAttr ".s" -type "double3" 1.0000000000000004 0.99999999999999933 0.99999999999999967 ; setAttr -k off -cb on ".sx"; setAttr -k off -cb on ".sy"; setAttr -k off -cb on ".sz"; createNode transform -n "legBack_R0_crv1" -p "legBack_R0_root"; - rename -uid "EFA1D93E-4DC3-F5F6-B724-6090D77DA9DB"; + rename -uid "930F6C49-418E-9381-14A6-1B8BE78F1958"; setAttr ".ovdt" 1; setAttr ".ove" yes; - setAttr ".t" -type "double3" -1.7959711117807555 -3.2803056907023964 1.8090460715460535 ; - setAttr ".r" -type "double3" 0 179.99999999999997 0 ; + setAttr ".t" -type "double3" -1.7959711117807555 -3.2803056907023964 1.8090460715460541 ; + setAttr ".r" -type "double3" 0 180 0 ; setAttr ".s" -type "double3" 1.4137227438343885 1.413722743834388 -1.4137227438343878 ; createNode nurbsCurve -n "legBack_R0_crvShape1" -p "legBack_R0_crv1"; - rename -uid "F63DBDA6-486F-3F10-A2C4-2AB9D41C4ED4"; + rename -uid "348D1718-41BA-0000-3C0C-EAAED36C94D0"; setAttr -k off ".v"; setAttr -s 4 ".iog[0].og"; setAttr ".tw" yes; createNode nurbsCurve -n "legBack_R0_crvShape1Orig" -p "legBack_R0_crv1"; - rename -uid "52B710A4-425F-41B2-AD78-43B861B2D16E"; + rename -uid "D63B35F1-488E-35A1-34CD-F5AACD167CBD"; setAttr -k off ".v"; setAttr ".io" yes; setAttr ".cc" -type "nurbsCurve" @@ -9288,717 +9302,717 @@ createNode nurbsCurve -n "legBack_R0_crvShape1Orig" -p "legBack_R0_crv1"; 0 0 0 ; createNode lightLinker -s -n "lightLinker1"; - rename -uid "93C7E485-4303-96CB-3285-6998F488D1E1"; + rename -uid "6928B63B-4CB2-C38C-B04D-5F9986479C4D"; setAttr -s 2 ".lnk"; setAttr -s 2 ".slnk"; createNode shapeEditorManager -n "shapeEditorManager"; - rename -uid "4DBEB377-459F-32C6-F55C-5AAAF2C579C2"; + rename -uid "4F2FCCC8-4693-A422-5E13-CFA0ACE59619"; createNode poseInterpolatorManager -n "poseInterpolatorManager"; - rename -uid "C7C485D3-4234-7822-26D9-D9BFA07BD7D6"; + rename -uid "8B00DE24-422B-77A1-CE2B-12B4188D2ADC"; createNode displayLayerManager -n "layerManager"; - rename -uid "CDE0999F-463F-AC47-95D2-02BBD668E409"; + rename -uid "EC538FE5-4F66-16B0-D0EE-F8AC8150FD3D"; createNode displayLayer -n "defaultLayer"; - rename -uid "40709129-457B-A6AB-E667-2A9D9F646821"; + rename -uid "160727EA-4568-0465-2638-FBA688FB6A44"; createNode renderLayerManager -n "renderLayerManager"; - rename -uid "EC27F888-4D85-C0A4-6E2A-53BC243060AE"; + rename -uid "3B0A98D0-4187-DEBD-63B7-289C7032E904"; createNode renderLayer -n "defaultRenderLayer"; - rename -uid "B97D296A-45E0-9204-64D4-A189CDE26572"; + rename -uid "148C8E50-48C3-2544-0ED2-E59E92D8DE71"; setAttr ".g" yes; -createNode animCurveUU -n "spine_C0_root_st_profile"; - rename -uid "8B707449-4497-2FE4-1566-08901FF21A8F"; +createNode animCurveUU -n "spine_C0_root_st_profile1"; + rename -uid "C9D17E97-469F-3D0F-2DC2-FCAFEB60B7BA"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "spine_C0_root_sq_profile"; - rename -uid "F0CD71D0-4349-E26E-0E13-1A932BDAB7C3"; +createNode animCurveUU -n "spine_C0_root_sq_profile1"; + rename -uid "FA2FBC20-4ECA-B559-904F-69BF682D153F"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode unitConversion -n "unitConversion28"; - rename -uid "96509A29-4A64-92D0-B14C-7A956DFE8DD7"; +createNode unitConversion -n "unitConversion32"; + rename -uid "7454BA6C-4D72-A2E8-A2AA-EE893B82938C"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns156"; - rename -uid "C5AA862D-412C-5AF0-3D2F-07961A6A1E35"; +createNode mgear_curveCns -n "mgear_curveCns183"; + rename -uid "B4A759DC-496B-0B8B-3D8B-C198F74F96BD"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak156"; - rename -uid "16B63B40-47A3-0D2C-A4AF-409A2CEE8F64"; -createNode objectSet -n "mgear_curveCns156Set"; - rename -uid "3E1E0A33-4425-404D-7C6D-D2B526E3C1E1"; +createNode tweak -n "tweak183"; + rename -uid "50464DC8-432D-AF0D-FF1A-49B546659065"; +createNode objectSet -n "mgear_curveCns183Set"; + rename -uid "F7F6BC47-4CBA-8D0C-1A8B-32AF1C5E5BD8"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns156GroupId"; - rename -uid "BF989D7D-4B60-E68B-334C-3A87075F688B"; +createNode groupId -n "mgear_curveCns183GroupId"; + rename -uid "F4B09369-4112-C8A1-31B5-33BC8A558620"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns156GroupParts"; - rename -uid "3EE69B45-44E6-F7D5-2A35-E6AE2D633BD9"; +createNode groupParts -n "mgear_curveCns183GroupParts"; + rename -uid "79688A10-495A-2EED-5C6F-008466AECCB9"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet156"; - rename -uid "06C06E9A-40A8-4E9A-A7EE-0099709E8DA0"; +createNode objectSet -n "tweakSet183"; + rename -uid "62943B6F-420C-8572-F67A-8683A7F3A47F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId312"; - rename -uid "90878D57-4C8D-1566-E11E-1EA0DAE6D2AE"; +createNode groupId -n "groupId366"; + rename -uid "13B73348-4D64-813B-E78A-8E84AA0B6BB9"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts312"; - rename -uid "911B24E1-4FEF-9A5F-7015-F0B1660E3D2C"; +createNode groupParts -n "groupParts366"; + rename -uid "D0FBBE72-467D-D922-4E8F-4FBD9F2B52D7"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "neck_C0_root_st_profile"; - rename -uid "DA35A896-4EE6-275A-83CE-43B3BD6D6AED"; +createNode animCurveUU -n "neck_C0_root_st_profile1"; + rename -uid "EB6281D9-45F2-003A-4F15-5F966FD1C198"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "neck_C0_root_sq_profile"; - rename -uid "CFF724A1-4C18-65D2-FF15-8CBCF4B7054F"; +createNode animCurveUU -n "neck_C0_root_sq_profile1"; + rename -uid "BAB1C044-4DED-C3C4-78B6-BDA14C20948A"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode unitConversion -n "unitConversion29"; - rename -uid "A0E9D0B0-4E66-B072-50FD-1E950D8D1E54"; +createNode unitConversion -n "unitConversion33"; + rename -uid "5B295E9F-43A9-BCB4-23D4-9A8F677A8C4F"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns157"; - rename -uid "C8B66144-445A-BBA9-9FAB-A98EA8DEA17A"; +createNode mgear_curveCns -n "mgear_curveCns184"; + rename -uid "3EEEC1A5-46CA-DF93-E556-8BB32982BA3D"; setAttr -s 4 ".inputs"; -createNode tweak -n "tweak157"; - rename -uid "CAD750A3-4B39-E172-D55F-AEB9BB4CC076"; -createNode objectSet -n "mgear_curveCns157Set"; - rename -uid "E6108368-4FE5-C567-43D8-C69DC4CCAF55"; +createNode tweak -n "tweak184"; + rename -uid "B8257E47-4BEB-EBE5-AC34-1B822B146168"; +createNode objectSet -n "mgear_curveCns184Set"; + rename -uid "D1A3C72F-4C62-67A7-3A8F-B88FE5CB7E9B"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns157GroupId"; - rename -uid "BE10C042-442E-79E0-5EE0-2E823156CF11"; +createNode groupId -n "mgear_curveCns184GroupId"; + rename -uid "EE6D18CF-4D4B-BD23-86CE-6488747797DE"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns157GroupParts"; - rename -uid "1ADB0228-422A-3293-45D6-10A2F7C0942F"; +createNode groupParts -n "mgear_curveCns184GroupParts"; + rename -uid "6D45AECD-465A-50EC-1381-6F9432533BB7"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet157"; - rename -uid "D5FA85B0-48A3-EE95-1AB9-39914FE6F990"; +createNode objectSet -n "tweakSet184"; + rename -uid "54C6802E-43D8-843C-0568-A3BA7B0A9A87"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId314"; - rename -uid "83AB3ABC-43DC-494E-CCA6-0D914002FB24"; +createNode groupId -n "groupId368"; + rename -uid "47900F31-490E-FAAE-81B9-1DAABA9E6414"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts314"; - rename -uid "288A6D8D-465B-96A0-19D7-DCAADAFFA399"; +createNode groupParts -n "groupParts368"; + rename -uid "99865061-4384-0F39-8160-59B80D31EA0F"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns158"; - rename -uid "314DFD28-4CF3-CF82-A31B-60A37249A44F"; +createNode mgear_curveCns -n "mgear_curveCns185"; + rename -uid "FE94D78B-4D16-5587-5A29-F7BEB733DA9E"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak158"; - rename -uid "41017CDD-49A2-E9C8-FDD5-83B6BE9AEB25"; -createNode objectSet -n "mgear_curveCns158Set"; - rename -uid "B80917F9-4516-AB1C-06A6-CE8180C4FD15"; +createNode tweak -n "tweak185"; + rename -uid "25CB3D37-4CBF-CA0D-01F5-A4BA34D17DDA"; +createNode objectSet -n "mgear_curveCns185Set"; + rename -uid "AF9E256D-40BD-C01B-9F53-29BFA198E86F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns158GroupId"; - rename -uid "3B4D5339-429F-7813-9FB4-0C9FB7102019"; +createNode groupId -n "mgear_curveCns185GroupId"; + rename -uid "67760A5E-49C7-FEF3-1CFE-DBBBBC1F0399"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns158GroupParts"; - rename -uid "D220A4EF-43C1-E2CD-3B17-2582B9209F44"; +createNode groupParts -n "mgear_curveCns185GroupParts"; + rename -uid "466FB98F-4560-9A26-69E0-32A80BA63863"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet158"; - rename -uid "0750809B-46A7-4CB7-9008-E599E9C5ED00"; +createNode objectSet -n "tweakSet185"; + rename -uid "5DFCD5F2-40E3-51D8-79AE-918E17F97A31"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId316"; - rename -uid "67A22DCF-48B4-DF0C-6528-27BFCD6FA19F"; +createNode groupId -n "groupId370"; + rename -uid "EAFB591D-491F-CBA0-3DC5-4288F3BEA2FF"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts316"; - rename -uid "F84A2F34-4BE8-E5C9-F9A6-A6B738FEB930"; +createNode groupParts -n "groupParts370"; + rename -uid "8499E0F4-48D6-834B-8B70-5F8D552B8665"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns159"; - rename -uid "1D8D3431-48A2-1E21-E10A-10B743D5BF29"; +createNode mgear_curveCns -n "mgear_curveCns186"; + rename -uid "A8846675-4F02-7EB3-7769-FEB44605E577"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak159"; - rename -uid "4260C27E-4C21-17CF-077A-578745B71D4F"; -createNode objectSet -n "mgear_curveCns159Set"; - rename -uid "53CB8572-453D-724E-86B2-FA931CC930EB"; +createNode tweak -n "tweak186"; + rename -uid "7A3048D5-4541-FCD3-BC43-42AA7E2B6CE1"; +createNode objectSet -n "mgear_curveCns186Set"; + rename -uid "CB97DA2C-4EFA-F696-E538-4EB17C143715"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns159GroupId"; - rename -uid "09DD7CC6-4175-291E-ABAA-388E551B32FD"; +createNode groupId -n "mgear_curveCns186GroupId"; + rename -uid "8C132B31-4664-8F63-E939-BB946EFAE8DE"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns159GroupParts"; - rename -uid "FBEAD94F-4473-CB69-A31B-CF874501455A"; +createNode groupParts -n "mgear_curveCns186GroupParts"; + rename -uid "B2C10EBB-45C3-B6F3-23AA-FE8F96A26772"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet159"; - rename -uid "FF808359-4504-0B7C-DD78-55B04E966040"; +createNode objectSet -n "tweakSet186"; + rename -uid "08B48BC0-484E-AFF7-34E4-9C9D2BB434AC"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId318"; - rename -uid "F119603A-4646-AF81-9ED4-4ABA74D2E05D"; +createNode groupId -n "groupId372"; + rename -uid "898EB5D0-4080-878C-1030-028A6EAF8E25"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts318"; - rename -uid "D841BC77-454F-AA05-C13C-E1BA9BD6A6C9"; +createNode groupParts -n "groupParts372"; + rename -uid "BCAA02C9-4CBC-F222-51CE-EA946FAE6B82"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns160"; - rename -uid "AB0F93F7-4514-7B70-23F1-59BB095DDE9F"; +createNode mgear_curveCns -n "mgear_curveCns187"; + rename -uid "591040AE-4077-EB3E-9CBE-A6943786490A"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak160"; - rename -uid "63E26BC4-4827-482F-3A2A-FA872C3F1A1E"; -createNode objectSet -n "mgear_curveCns160Set"; - rename -uid "426F84AC-4E09-E61B-0309-C8ABCAA51B06"; +createNode tweak -n "tweak187"; + rename -uid "79C8B6F1-4734-CCED-EC53-0DBC353CFD52"; +createNode objectSet -n "mgear_curveCns187Set"; + rename -uid "E9D78926-4F8B-2F46-11C1-56AFB1F48C35"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns160GroupId"; - rename -uid "A834F846-4EC2-3C0B-024D-D9870277441F"; +createNode groupId -n "mgear_curveCns187GroupId"; + rename -uid "C07F1610-4DF4-2B37-9904-F4BADEF8927D"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns160GroupParts"; - rename -uid "66D19F8F-4F8D-B6F4-FC98-6F9AF2CF1384"; +createNode groupParts -n "mgear_curveCns187GroupParts"; + rename -uid "6DF8C15B-47B3-1B9B-134F-2E9E85DC9AC1"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet160"; - rename -uid "0650854A-40C4-F434-D693-F78F9AA1D9A2"; +createNode objectSet -n "tweakSet187"; + rename -uid "9351A3FD-43C7-087E-EEC1-FD825FAE55D8"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId320"; - rename -uid "593A1712-4369-7FC2-0357-04B9D07F242A"; +createNode groupId -n "groupId374"; + rename -uid "EE4E7482-4D7B-8EAE-8CCD-78BB043983B2"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts320"; - rename -uid "AA6A9C8C-49AE-9528-8494-3FBA8B8FB57F"; +createNode groupParts -n "groupParts374"; + rename -uid "0C6A370B-48A2-FD2D-BBF0-9193336918C5"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns161"; - rename -uid "65989987-4ECE-FC43-F48D-AD9EB118F140"; +createNode mgear_curveCns -n "mgear_curveCns188"; + rename -uid "3856F211-4DB8-DC53-AA5E-2C85B81AD51F"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak161"; - rename -uid "2640FB75-47EA-6C4D-108C-D8B582FFEC84"; -createNode objectSet -n "mgear_curveCns161Set"; - rename -uid "94C91950-45E9-75C7-274F-10A100BCE19C"; +createNode tweak -n "tweak188"; + rename -uid "DB52CD60-46C3-76AD-C096-5EA19F1A08D3"; +createNode objectSet -n "mgear_curveCns188Set"; + rename -uid "C4A57F10-4D04-BA54-229B-64A809773EBC"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns161GroupId"; - rename -uid "26659E99-4254-FDB1-ECA6-3FB7E1DA2540"; +createNode groupId -n "mgear_curveCns188GroupId"; + rename -uid "5E8CDD3D-4587-037B-EB08-4AB7BB9C4ACB"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns161GroupParts"; - rename -uid "B0EEA446-4B9D-5C11-420E-A181414B0F66"; +createNode groupParts -n "mgear_curveCns188GroupParts"; + rename -uid "AEC4F2D1-4432-750A-952F-B39890749C79"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet161"; - rename -uid "3867B691-4A84-4B67-FFEF-A3A9DE774EB5"; +createNode objectSet -n "tweakSet188"; + rename -uid "CECE9CCB-4006-BD9A-610E-0FBF3477D1B3"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId322"; - rename -uid "FB8073E6-4959-AAE1-FD9A-A3998CFF5A82"; +createNode groupId -n "groupId376"; + rename -uid "8282C970-4A10-EA12-013C-14AA9990F048"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts322"; - rename -uid "74B993DA-422A-3D04-53AA-CBB080746F99"; +createNode groupParts -n "groupParts376"; + rename -uid "4283FC60-4E8E-A021-65F4-C399CDB06E92"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns162"; - rename -uid "20F084DC-4FEB-F4B9-5507-2C8469242B70"; +createNode mgear_curveCns -n "mgear_curveCns189"; + rename -uid "A1CA27B2-496A-6BB9-5707-39A1577C24E6"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak162"; - rename -uid "D4777AF2-40AC-C397-4658-5C8BF189FE5E"; -createNode objectSet -n "mgear_curveCns162Set"; - rename -uid "6E96B18F-462C-DC82-FC8E-8A9011051A1A"; +createNode tweak -n "tweak189"; + rename -uid "60DD30BA-43B8-B13E-2FB8-1B9F8EA8A393"; +createNode objectSet -n "mgear_curveCns189Set"; + rename -uid "270CA835-4F89-0E86-ED5B-8D932FE1BC5D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns162GroupId"; - rename -uid "6F945B30-4296-0D2A-0D62-9D99C384BB0E"; +createNode groupId -n "mgear_curveCns189GroupId"; + rename -uid "1244F9A0-49A6-F404-5878-B28F98167790"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns162GroupParts"; - rename -uid "E9B682F2-42D6-8729-BF4B-CE9277520E5B"; +createNode groupParts -n "mgear_curveCns189GroupParts"; + rename -uid "81D9EB80-4B01-F426-F937-E9B060AECD49"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet162"; - rename -uid "278D37F9-4C0A-2F22-F720-8BB1E710456B"; +createNode objectSet -n "tweakSet189"; + rename -uid "FAD0A8F7-4AB9-4978-DE08-37A9BA3AB752"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId324"; - rename -uid "DBEB0758-401D-CABC-F5FA-AC8BB1903B0E"; +createNode groupId -n "groupId378"; + rename -uid "320E830A-46E8-C88F-7369-F48E17186773"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts324"; - rename -uid "CD995E76-4422-5D95-AAA4-FEABD9D67FE2"; +createNode groupParts -n "groupParts378"; + rename -uid "943192C7-4F36-742F-6F68-A99DEA81CD58"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns163"; - rename -uid "BDF61349-42B2-EC75-E478-7AA2D8E832B5"; +createNode mgear_curveCns -n "mgear_curveCns190"; + rename -uid "C84B6EA3-4F8F-74B5-3928-9C97AEA5AF4D"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak163"; - rename -uid "56B18511-456D-DEB7-DF68-05A2A5BD868C"; -createNode objectSet -n "mgear_curveCns163Set"; - rename -uid "151BA15C-40B4-CFAD-ACC7-F5BE079CD9DD"; +createNode tweak -n "tweak190"; + rename -uid "3F543231-44E3-C4CB-3D69-439B386686E4"; +createNode objectSet -n "mgear_curveCns190Set"; + rename -uid "94326E95-43B1-1064-CDCA-B5ACCC55C495"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns163GroupId"; - rename -uid "9106D4D1-4423-5C81-388E-B5BCF9938D9F"; +createNode groupId -n "mgear_curveCns190GroupId"; + rename -uid "3BBFE3D2-4EC2-005D-8CA9-0D8B5C314502"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns163GroupParts"; - rename -uid "25C0791C-419E-7450-76C0-0EA38100D8E5"; +createNode groupParts -n "mgear_curveCns190GroupParts"; + rename -uid "7BBA29C4-4591-4E56-551B-99A2B527ED22"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet163"; - rename -uid "837B9C31-418B-C242-CC4A-FFA681AE2B32"; +createNode objectSet -n "tweakSet190"; + rename -uid "F9C7471D-4FFC-7607-BAC7-4D9982022CCD"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId326"; - rename -uid "64AFDDCA-4CCD-4E51-7568-48A96A8358E9"; +createNode groupId -n "groupId380"; + rename -uid "5D60552F-45AF-B8B0-1BA2-7BBF5C741C9D"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts326"; - rename -uid "E35A59C3-4D10-77DD-5115-8FB716E6B505"; +createNode groupParts -n "groupParts380"; + rename -uid "371C4504-4BF6-2DAB-7B3F-96BBAF1988DD"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns164"; - rename -uid "47C713F5-44B7-F934-F6CA-B29F86666A9A"; +createNode mgear_curveCns -n "mgear_curveCns191"; + rename -uid "465FB26C-4701-16F6-5BE8-32BD7E4666D7"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak164"; - rename -uid "FDA69C6A-44AB-6E91-876E-49AAB63DAAA5"; -createNode objectSet -n "mgear_curveCns164Set"; - rename -uid "B9A2B1B2-4C9A-8363-8315-858DF43CB8D1"; +createNode tweak -n "tweak191"; + rename -uid "7E3D0E1F-49A8-DC60-3AB8-4D9287C62052"; +createNode objectSet -n "mgear_curveCns191Set"; + rename -uid "7E0BBC2F-4153-EC0E-8E7C-B7BDC3BADCEF"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns164GroupId"; - rename -uid "45486D85-442A-A938-2E76-F3898053DB9C"; +createNode groupId -n "mgear_curveCns191GroupId"; + rename -uid "165EB922-4B58-6D84-C1B4-078F9E40AEED"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns164GroupParts"; - rename -uid "A43F71A9-4276-EC14-A5CE-A38666BF78AD"; +createNode groupParts -n "mgear_curveCns191GroupParts"; + rename -uid "2CADA8D3-4937-82E5-0FCC-85B91F67DDFE"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet164"; - rename -uid "D8EB27FA-4748-B4FD-85C2-D38A464B9364"; +createNode objectSet -n "tweakSet191"; + rename -uid "7937EE14-451E-A510-604D-84A66762F47A"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId328"; - rename -uid "E53D3BE0-446D-8A50-5F00-FBADB39EE2FF"; +createNode groupId -n "groupId382"; + rename -uid "3815AE70-46EE-7BB3-C8DF-5DBB633F0082"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts328"; - rename -uid "5E78C159-4672-C8FC-0278-979AAC41D4BE"; +createNode groupParts -n "groupParts382"; + rename -uid "A6F2300E-42E0-97A3-06CF-AB9C99350BAF"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion30"; - rename -uid "D18CE609-4C27-49D1-DD19-D7B9457C51D3"; +createNode unitConversion -n "unitConversion34"; + rename -uid "2CE2613C-4CB8-E67D-07EC-A9BB9EBF9F7E"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns165"; - rename -uid "5643D44D-4BEF-C700-20AA-E6B70C55711C"; +createNode mgear_curveCns -n "mgear_curveCns192"; + rename -uid "183D9DF5-49ED-31FA-DEF2-2481CE9D1029"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak165"; - rename -uid "8850980F-4855-8BAD-326C-71BBAD232C1E"; -createNode objectSet -n "mgear_curveCns165Set"; - rename -uid "5A9ACFA1-4F47-8EC0-F33E-8594123C1EF6"; +createNode tweak -n "tweak192"; + rename -uid "5DEBB05C-4588-CB71-DB04-38B57024D3C9"; +createNode objectSet -n "mgear_curveCns192Set"; + rename -uid "85459B48-4AB8-B38D-88E9-FFA80B1EB8DB"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns165GroupId"; - rename -uid "A0091D70-4EFB-7046-F446-629E8F7A641D"; +createNode groupId -n "mgear_curveCns192GroupId"; + rename -uid "D80DBBFE-4592-EA10-70D9-A2971180E36F"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns165GroupParts"; - rename -uid "644F2E7B-42C3-B8A9-24B7-70AA0F36C4C0"; +createNode groupParts -n "mgear_curveCns192GroupParts"; + rename -uid "D3D9B12C-40C5-F232-D330-8CAD1CDCE7B2"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet165"; - rename -uid "ACD958A4-49CC-556C-C91E-FFA087EB0CD5"; +createNode objectSet -n "tweakSet192"; + rename -uid "E3D17D87-404C-11EB-041C-F89335D43487"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId330"; - rename -uid "AB82A7C9-4C44-0092-5F48-C0AD9D176E27"; +createNode groupId -n "groupId384"; + rename -uid "403342E4-4278-1FA3-BFD7-B28F1D8E3F79"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts330"; - rename -uid "344D9E10-4777-ABED-9F92-0CB57E878A37"; +createNode groupParts -n "groupParts384"; + rename -uid "D7C832AB-4C86-E9EC-E295-E5A40801A6B0"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "legFront_L0_root_st_profile"; - rename -uid "C3869D4B-4999-742A-742E-FDA8EB26498E"; +createNode animCurveUU -n "legFront_L0_root_st_profile1"; + rename -uid "F7F5A93E-4C11-87E7-58B0-B48781E4E4EB"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "legFront_L0_root_sq_profile"; - rename -uid "1315400A-4E2D-1939-D74A-0DB3D5B7EC23"; +createNode animCurveUU -n "legFront_L0_root_sq_profile1"; + rename -uid "A5EA90AB-46F8-ADC3-6AD3-9588B1DE16D0"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns166"; - rename -uid "BC4B8F3B-414A-4089-E0E2-9187C78049F0"; +createNode mgear_curveCns -n "mgear_curveCns193"; + rename -uid "4D953076-468C-1A27-4607-B884CF1F7874"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak166"; - rename -uid "AE41667C-4B28-A16B-3BD2-90A0EF7D17A9"; -createNode objectSet -n "mgear_curveCns166Set"; - rename -uid "506AC780-46EB-5034-09B0-5D862BD72001"; +createNode tweak -n "tweak193"; + rename -uid "0C833A5B-471B-FA2C-B560-DABBE087A13C"; +createNode objectSet -n "mgear_curveCns193Set"; + rename -uid "87DF384F-450C-3631-FFF2-ECB3B716B379"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns166GroupId"; - rename -uid "7960FB42-434D-C329-BE94-7BAC801E010F"; +createNode groupId -n "mgear_curveCns193GroupId"; + rename -uid "4EBDE493-49C2-1801-E65A-C2A8BCD8B76D"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns166GroupParts"; - rename -uid "4EA25501-40F0-4BD2-671F-38A46D68A919"; +createNode groupParts -n "mgear_curveCns193GroupParts"; + rename -uid "37EF4893-451B-6A3E-D569-D0A4EAD2CE3F"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet166"; - rename -uid "FA6D515B-457B-F85B-3510-6CA5EB6A56E1"; +createNode objectSet -n "tweakSet193"; + rename -uid "86B22D4F-4B82-298E-04DB-6186DDACBBF7"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId332"; - rename -uid "36E99FBF-4563-A2C4-8040-F9B47D829954"; +createNode groupId -n "groupId386"; + rename -uid "7DB88CB3-4F9F-D65F-C716-8588C4334413"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts332"; - rename -uid "207FB194-478B-95F9-E249-879A1BC3B186"; +createNode groupParts -n "groupParts386"; + rename -uid "CC0D316B-4FA8-8AF0-2DBB-2799F39EEA79"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns167"; - rename -uid "6CD80CAD-4379-479F-FF2D-C2946EA362F4"; +createNode mgear_curveCns -n "mgear_curveCns194"; + rename -uid "6665B84D-479B-4CB4-D16C-F9A6CD3E5C73"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak167"; - rename -uid "6C71795C-40F3-182B-2CDC-3FAA3020A072"; -createNode objectSet -n "mgear_curveCns167Set"; - rename -uid "359CB00A-4C56-46C7-4736-D99F1DBF9F75"; +createNode tweak -n "tweak194"; + rename -uid "740991D3-4247-7074-DD6D-E38CDA300760"; +createNode objectSet -n "mgear_curveCns194Set"; + rename -uid "5248003A-40BC-698C-1865-0585754ED983"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns167GroupId"; - rename -uid "D4C42FD6-432D-E3DF-AB40-679F110A7BCA"; +createNode groupId -n "mgear_curveCns194GroupId"; + rename -uid "E3C39CA2-4C96-11BD-BFF9-508C314786C1"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns167GroupParts"; - rename -uid "2F146C15-43DE-1186-C51D-1280771541B7"; +createNode groupParts -n "mgear_curveCns194GroupParts"; + rename -uid "D2A38D49-4BBB-94C8-F80C-34A90A68B89C"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet167"; - rename -uid "018892C5-4515-F1EC-734F-109E51155F50"; +createNode objectSet -n "tweakSet194"; + rename -uid "B2C5BA6A-46AD-81E0-C1B2-29928DFA64FA"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId334"; - rename -uid "E37EC78D-4FAA-1C4E-E288-E38C18B05E2A"; +createNode groupId -n "groupId388"; + rename -uid "F43DB70F-4705-C981-B684-258C29873E3F"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts334"; - rename -uid "03A8D3D5-455E-E41A-9F71-44B7C59FFBDF"; +createNode groupParts -n "groupParts388"; + rename -uid "36EF0DEE-4620-5484-504F-BD9C8BE9BCD6"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns168"; - rename -uid "833242B9-4CB8-94BD-7410-3496C828554B"; +createNode mgear_curveCns -n "mgear_curveCns195"; + rename -uid "DD725DA7-4EF1-BF51-E708-029D55AF9B57"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak168"; - rename -uid "5E30BA4D-4D04-A71A-2811-AEBACD998E68"; -createNode objectSet -n "mgear_curveCns168Set"; - rename -uid "D3B3AB76-494D-5B23-F2E0-89AF041626E7"; +createNode tweak -n "tweak195"; + rename -uid "50752A76-4E45-2F02-6808-3498ED398A2A"; +createNode objectSet -n "mgear_curveCns195Set"; + rename -uid "7504D07A-42F3-31A8-B114-D383B996B09C"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns168GroupId"; - rename -uid "E62C001E-4E51-1134-7631-AABEE2EF3F7D"; +createNode groupId -n "mgear_curveCns195GroupId"; + rename -uid "6C28D4BD-43EA-918A-9E35-2A8FC10D5FB9"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns168GroupParts"; - rename -uid "40AFAD35-486F-E4D3-57C8-BB937560AE3D"; +createNode groupParts -n "mgear_curveCns195GroupParts"; + rename -uid "F5DBDC78-46FD-3E3E-F835-0A8A7B9F2299"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet168"; - rename -uid "4A292368-4733-16FA-C131-5CA9665D434E"; +createNode objectSet -n "tweakSet195"; + rename -uid "603C8EA7-4B4E-F029-2743-9E9420DC1804"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId336"; - rename -uid "5D0F0178-4EF1-D5C9-DA35-BAB34BDC1E90"; +createNode groupId -n "groupId390"; + rename -uid "5D6968F4-4233-6868-5705-0BAFFAC45D43"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts336"; - rename -uid "42FAEF46-4249-6F51-DFDC-27B9CE5A857B"; +createNode groupParts -n "groupParts390"; + rename -uid "6D86B320-4A08-28C1-137E-6FA3C48865D3"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode unitConversion -n "unitConversion31"; - rename -uid "76384CFE-4055-E77A-69F8-F29563A7FA40"; +createNode unitConversion -n "unitConversion35"; + rename -uid "1A60D4D8-4BCC-7839-5AAB-8EABC7FA4200"; setAttr ".cf" 0.017453292519943295; -createNode mgear_curveCns -n "mgear_curveCns169"; - rename -uid "9F8999F3-4505-5F95-A8BD-F2B0489480AA"; +createNode mgear_curveCns -n "mgear_curveCns196"; + rename -uid "838F2F68-4BD7-9779-DD61-D6936A4ADCAB"; setAttr -s 2 ".inputs"; -createNode tweak -n "tweak169"; - rename -uid "98B73279-4E70-6E10-7A24-3A9CDC370292"; -createNode objectSet -n "mgear_curveCns169Set"; - rename -uid "38E910D5-4169-278C-F5BF-BCBC91340CF6"; +createNode tweak -n "tweak196"; + rename -uid "2200686D-4E89-CEC0-1FCE-50A1EC26E467"; +createNode objectSet -n "mgear_curveCns196Set"; + rename -uid "17C06CC9-4F1F-9597-C50F-8FBBD5718657"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns169GroupId"; - rename -uid "B75D1C09-455E-CE4C-EBF9-878FA52D9FA1"; +createNode groupId -n "mgear_curveCns196GroupId"; + rename -uid "422D0EA8-4C26-D192-B60A-85B060D4AC95"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns169GroupParts"; - rename -uid "456FF947-456E-E9A7-0F06-7DA89B703815"; +createNode groupParts -n "mgear_curveCns196GroupParts"; + rename -uid "66E992B4-4699-75AD-5C21-9D91BF9A4FD6"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet169"; - rename -uid "13A161CD-484D-24B4-92C9-BABFFE7452E5"; +createNode objectSet -n "tweakSet196"; + rename -uid "0A7D1DA3-4B97-AE86-30AA-27AC6B39B10B"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId338"; - rename -uid "A8ECD95E-4F6C-89ED-563D-908C1DCB8790"; +createNode groupId -n "groupId392"; + rename -uid "6BE19E6B-445E-D05D-D0EA-3DBCE82F9A58"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts338"; - rename -uid "EC0F1ECF-470D-7640-F5D3-0ABF179FB16E"; +createNode groupParts -n "groupParts392"; + rename -uid "D4DD9505-4F3C-4B8F-F301-23AB39EA0609"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; createNode animCurveUU -n "legFront_R0_root_st_profile1"; - rename -uid "B353E694-41E0-74F4-F123-C6941938991E"; + rename -uid "9E7CFC7D-4AAC-4324-710B-FBB924DFCD76"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; createNode animCurveUU -n "legFront_R0_root_sq_profile1"; - rename -uid "21A72F7E-4B67-EC0B-81BE-1280AB1072E1"; + rename -uid "16B19B37-413D-C191-14D1-3C8C0A89E044"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns170"; - rename -uid "3F1175B6-4FD2-90D8-238F-09A93398C438"; +createNode mgear_curveCns -n "mgear_curveCns197"; + rename -uid "F021B733-47A6-75A0-1D40-97BF57FFEF54"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak170"; - rename -uid "189A9E93-47A7-B771-DDB3-CB93A7DA1404"; -createNode objectSet -n "mgear_curveCns170Set"; - rename -uid "8B1F2E75-47A7-C940-D185-43A321874EBF"; +createNode tweak -n "tweak197"; + rename -uid "FFE48F12-48DC-B8E2-5A8B-AFAFA65077CF"; +createNode objectSet -n "mgear_curveCns197Set"; + rename -uid "F416CAD4-41E9-AE88-D526-53814E65808D"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns170GroupId"; - rename -uid "E5814F05-4B7A-77D8-AA10-9D97F04E384C"; +createNode groupId -n "mgear_curveCns197GroupId"; + rename -uid "97E2B5A3-49D4-1372-6EB8-D3AB4669792A"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns170GroupParts"; - rename -uid "08D11788-4C08-ACF6-00EA-45AF589D8F6F"; +createNode groupParts -n "mgear_curveCns197GroupParts"; + rename -uid "A25AF003-497F-4EBA-C237-BCA73C4DEFE8"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet170"; - rename -uid "C39E33F5-4D74-94A9-96B5-D2A0D261E489"; +createNode objectSet -n "tweakSet197"; + rename -uid "EA65AC90-461D-2A0A-7405-6080B9A38D30"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId340"; - rename -uid "89C1DAC0-42AD-9551-9C5B-89B185DFAEC6"; +createNode groupId -n "groupId394"; + rename -uid "4A2EF0D4-43C9-8077-E807-61BAB3879CB1"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts340"; - rename -uid "575F0C40-40A3-DD97-D19B-00B6374BEDD9"; +createNode groupParts -n "groupParts394"; + rename -uid "821D8376-47B1-0EEC-98C8-829965089C7B"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns171"; - rename -uid "D5414F9C-41E2-F38B-37D0-13ACB64F3032"; +createNode mgear_curveCns -n "mgear_curveCns198"; + rename -uid "864A0153-4870-DB45-D813-52850C466A02"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak171"; - rename -uid "DD1C1F2F-4096-2D7F-F0E4-4D93E3F7D8AC"; -createNode objectSet -n "mgear_curveCns171Set"; - rename -uid "E7DDF14D-48AE-882E-802C-72BD82E0BA33"; +createNode tweak -n "tweak198"; + rename -uid "1CB7503B-43A3-ECFE-78CD-34942379508C"; +createNode objectSet -n "mgear_curveCns198Set"; + rename -uid "580384FC-44B6-8EA0-63CE-5A90BB2C7E4F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns171GroupId"; - rename -uid "9D2D2AE1-49C8-3066-B20C-7AB62297F487"; +createNode groupId -n "mgear_curveCns198GroupId"; + rename -uid "D1F70E33-4D58-D433-A53B-159FBA2016F0"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns171GroupParts"; - rename -uid "DACFB03E-4CF3-782C-B226-64B19804378A"; +createNode groupParts -n "mgear_curveCns198GroupParts"; + rename -uid "30D2F809-47A7-0D47-2F20-2597F7E14E38"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet171"; - rename -uid "B59F8A00-453C-4E14-DFB1-D891B6EDDF62"; +createNode objectSet -n "tweakSet198"; + rename -uid "75776081-438D-3618-FEF6-F3B2BEB47375"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId342"; - rename -uid "894E2231-4170-3F91-EA57-0B845D0555D3"; +createNode groupId -n "groupId396"; + rename -uid "286ECEE2-4D96-4194-BF1C-FEB242579148"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts342"; - rename -uid "86DEC75D-452B-48D3-51E2-F68D09A8ECC5"; +createNode groupParts -n "groupParts396"; + rename -uid "392053D1-44F8-2B1E-3A19-1C8DF3540447"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns172"; - rename -uid "68205D6B-4F7D-D553-EC54-D8B71259F978"; +createNode mgear_curveCns -n "mgear_curveCns199"; + rename -uid "44373E99-410D-A4D1-147C-569AD4C6647E"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak172"; - rename -uid "E8ECB3AE-4D25-8E53-5712-C594B3DF1F2A"; -createNode objectSet -n "mgear_curveCns172Set"; - rename -uid "0BE439FA-4022-3D9A-CBD3-C3BF3F668E46"; +createNode tweak -n "tweak199"; + rename -uid "8C620EA3-42F0-958B-E12D-A1A7A0E7DC6C"; +createNode objectSet -n "mgear_curveCns199Set"; + rename -uid "A644DB62-42D4-78F3-5912-959E17387D30"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns172GroupId"; - rename -uid "524FD986-400F-FB2E-796B-5AB9A91B43E2"; +createNode groupId -n "mgear_curveCns199GroupId"; + rename -uid "B1CFF983-4B8B-9827-15EC-5CB003A6F216"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns172GroupParts"; - rename -uid "5FEBD2E6-452F-D62F-04B6-CEB42B48A844"; +createNode groupParts -n "mgear_curveCns199GroupParts"; + rename -uid "34E3E80B-4605-9098-0F80-E7A72223DC63"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet172"; - rename -uid "A7836C9B-4DDC-DF0B-CA01-FE90CF163007"; +createNode objectSet -n "tweakSet199"; + rename -uid "09FD9EE3-47A4-82F0-14BF-E2AB03CEBB5F"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId344"; - rename -uid "0D4881CE-46E0-5BF6-DD76-04B8C99E0FF1"; +createNode groupId -n "groupId398"; + rename -uid "E843ECE3-4D95-69EF-B5CD-199FED311FB5"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts344"; - rename -uid "BB4A809E-4143-3FA0-2513-EDBDC7291EBC"; +createNode groupParts -n "groupParts398"; + rename -uid "1A6F68EE-49B9-7AC6-0924-D5BDF324A168"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode animCurveUU -n "legBack_L0_root_st_profile"; - rename -uid "B3975D5F-477D-BC21-8EFB-7582AB48F958"; +createNode animCurveUU -n "legBack_L0_root_st_profile1"; + rename -uid "63753751-43C6-81C1-8631-AAADBC494538"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; -createNode animCurveUU -n "legBack_L0_root_sq_profile"; - rename -uid "E0DA62F0-41E0-F311-C475-7E9633245CEA"; +createNode animCurveUU -n "legBack_L0_root_sq_profile1"; + rename -uid "754BF9F3-4ABE-2C6D-9510-47B1DC667B14"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns173"; - rename -uid "2691639B-40E8-B5B0-A971-39B8F5BD975C"; +createNode mgear_curveCns -n "mgear_curveCns200"; + rename -uid "59538381-4D37-CE33-2707-A1A80EBDBDC4"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak173"; - rename -uid "4F9958C0-4CCF-DF94-77E2-989EAC8C9BFC"; -createNode objectSet -n "mgear_curveCns173Set"; - rename -uid "A429CC12-42C2-17AD-8A25-B7887815AA13"; +createNode tweak -n "tweak200"; + rename -uid "17E622B4-45D9-7248-EA40-69B3552075EC"; +createNode objectSet -n "mgear_curveCns200Set"; + rename -uid "710E5537-4B48-A311-E15D-E3936AB1E1E1"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns173GroupId"; - rename -uid "353A1896-4F59-BE6C-1AE4-F499B9B75FE6"; +createNode groupId -n "mgear_curveCns200GroupId"; + rename -uid "2EF4A523-4174-F2B8-F0A7-C59F0B4A8E95"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns173GroupParts"; - rename -uid "B5362FAE-4218-DAC7-CC2D-15A36E34944A"; +createNode groupParts -n "mgear_curveCns200GroupParts"; + rename -uid "70F7F6C1-4FC6-FB9E-756E-528859E779CC"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet173"; - rename -uid "161BA580-4053-88F9-2CA7-EBA553CFEE4C"; +createNode objectSet -n "tweakSet200"; + rename -uid "124AF794-40D0-9137-C69B-FEA79CDEF9BE"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId346"; - rename -uid "89614773-45ED-2F1A-B812-2E85E26FD618"; +createNode groupId -n "groupId400"; + rename -uid "777C0B77-41E4-E081-732A-7B8387DC59EC"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts346"; - rename -uid "C4B03F32-494D-856E-34F4-769EE046E49E"; +createNode groupParts -n "groupParts400"; + rename -uid "BECCA4A3-432D-7553-75B7-33ADA4A71117"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns174"; - rename -uid "DE90DC18-478F-0942-06D7-07A62A0E41A1"; +createNode mgear_curveCns -n "mgear_curveCns201"; + rename -uid "C93EB88D-46F3-5D97-90BF-648DD5CE9566"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak174"; - rename -uid "DE0893B3-4B7C-2D55-E60B-8886CE785EDD"; -createNode objectSet -n "mgear_curveCns174Set"; - rename -uid "17061297-4176-68A9-CFE9-A682FB1E515E"; +createNode tweak -n "tweak201"; + rename -uid "E2C3C30F-4263-A620-3F1C-F8AFA38DB8D1"; +createNode objectSet -n "mgear_curveCns201Set"; + rename -uid "7E5A9F10-4B3B-A5BF-A449-DC8E0DAC91B0"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns174GroupId"; - rename -uid "311DBBFC-4C1F-44F4-D0CA-19B97A5D6D39"; +createNode groupId -n "mgear_curveCns201GroupId"; + rename -uid "17C29421-48B7-FA2F-F4E6-FA88463BB1C8"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns174GroupParts"; - rename -uid "9573D7E9-433E-C642-3955-93B7EF7C8E7E"; +createNode groupParts -n "mgear_curveCns201GroupParts"; + rename -uid "BF0FC7E0-43EC-2F7D-35A9-3D9F6473E0A9"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet174"; - rename -uid "C73AEF42-4B5B-9047-3A05-898D65C56076"; +createNode objectSet -n "tweakSet201"; + rename -uid "4969C409-42B6-1CA3-C6DD-CD85F1071D91"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId348"; - rename -uid "EFAC62EA-45E1-E0E2-2417-F4A8553C6B8E"; +createNode groupId -n "groupId402"; + rename -uid "6B9D457E-4DDA-671A-BF75-F383B57CDEDB"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts348"; - rename -uid "8F0C4CBF-4DD8-9CD6-6CA1-6ABF351437AD"; +createNode groupParts -n "groupParts402"; + rename -uid "98F76D13-4141-AE05-EB34-2F80034DEF0F"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns175"; - rename -uid "0EA85973-4584-52C9-4CBC-9D83F1DE5E93"; +createNode mgear_curveCns -n "mgear_curveCns202"; + rename -uid "8A38D017-4C1E-1722-A46A-B58A8411EFA0"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak175"; - rename -uid "1DEA8AF1-4CE3-F935-C6BA-01AADDBA407B"; -createNode objectSet -n "mgear_curveCns175Set"; - rename -uid "D48AECC8-47E7-5884-CF13-178DFFB5429C"; +createNode tweak -n "tweak202"; + rename -uid "6B0306D7-46D0-8760-E899-29B958429795"; +createNode objectSet -n "mgear_curveCns202Set"; + rename -uid "FDA6F2C3-45D8-18BE-4120-0ABC757D2D9B"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns175GroupId"; - rename -uid "2589CEA3-45FD-E9AC-1E5B-B6BCA5247BBF"; +createNode groupId -n "mgear_curveCns202GroupId"; + rename -uid "D2390497-4C11-7BBC-5FCB-8C807379D377"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns175GroupParts"; - rename -uid "2BFB05AF-4014-8145-6565-52B68427512D"; +createNode groupParts -n "mgear_curveCns202GroupParts"; + rename -uid "F0200884-4811-BD41-2945-9AB4020D925A"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet175"; - rename -uid "D145B439-43B2-B3B8-C9E0-63BC5009575A"; +createNode objectSet -n "tweakSet202"; + rename -uid "B74F179E-4301-F308-85F7-74A0BD95CCC9"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId350"; - rename -uid "49642724-4B58-8492-2C1F-469E48424326"; +createNode groupId -n "groupId404"; + rename -uid "FF40C057-41A6-F9DE-7301-A989619F3022"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts350"; - rename -uid "0E80CC64-40EF-FB06-14E8-27B7EB9DC7FF"; +createNode groupParts -n "groupParts404"; + rename -uid "16DCCB9C-49F6-AECE-9704-A6A67CC94F53"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; createNode animCurveUU -n "legBack_R0_root_st_profile1"; - rename -uid "9350AA38-4FFF-A411-5F18-42AE08F27D4C"; + rename -uid "AB613EC9-4EC5-C65C-C865-18B78AB7D01D"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 -1 1 0; createNode animCurveUU -n "legBack_R0_root_sq_profile1"; - rename -uid "E2B09E25-4A2C-CE4E-16D1-43ABB9EE683E"; + rename -uid "63D80007-4272-E7D5-463F-8980C0546355"; setAttr ".tan" 18; setAttr ".wgt" no; setAttr -s 3 ".ktv[0:2]" 0 0 0.5 1 1 0; -createNode mgear_curveCns -n "mgear_curveCns176"; - rename -uid "8320FC91-4B79-B89A-190B-E48CDDEB77B8"; +createNode mgear_curveCns -n "mgear_curveCns203"; + rename -uid "B5BD0D76-4CB8-73CE-23AE-F0B57234E7C3"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak176"; - rename -uid "E3239CF0-485C-0156-175A-6BAD6419ADCF"; -createNode objectSet -n "mgear_curveCns176Set"; - rename -uid "7E6CD5C8-4E3C-A65A-82A0-CDBF6DAB01A8"; +createNode tweak -n "tweak203"; + rename -uid "69B612D3-414A-73B2-FC72-E3AE37CBB476"; +createNode objectSet -n "mgear_curveCns203Set"; + rename -uid "CFDFC27B-4C6F-6AE1-C062-ECA30AF28EDF"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns176GroupId"; - rename -uid "9EF45AAF-4299-BAF0-A3F3-9CBA09D5E664"; +createNode groupId -n "mgear_curveCns203GroupId"; + rename -uid "858FCD7E-4821-3DB6-3737-7AA1D132890A"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns176GroupParts"; - rename -uid "CAFFF4A9-4D9A-B0BF-BB6D-AF92809F0FAE"; +createNode groupParts -n "mgear_curveCns203GroupParts"; + rename -uid "ACE3E8F7-435B-6E27-7D3E-D18EE454DC4D"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet176"; - rename -uid "DE4CB701-4FE4-EEFA-AA8D-C7B857E57AD5"; +createNode objectSet -n "tweakSet203"; + rename -uid "FD62A262-4B76-C1EA-DCF6-388EAA0ED048"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId352"; - rename -uid "DE3C9121-43D0-3DB0-BC43-0BAF18381F03"; +createNode groupId -n "groupId406"; + rename -uid "F89D4A34-43D9-1540-E284-9CBB96C3D770"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts352"; - rename -uid "F95FF5A7-4087-5860-701B-F3B6544AB376"; +createNode groupParts -n "groupParts406"; + rename -uid "C455165E-44C6-B92F-7685-59A40013735B"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns177"; - rename -uid "E3282429-4243-8464-26FB-FEA6038E630F"; +createNode mgear_curveCns -n "mgear_curveCns204"; + rename -uid "58CA756D-4320-370A-0C92-9EBDDFA9F960"; setAttr -s 3 ".inputs"; -createNode tweak -n "tweak177"; - rename -uid "238A466A-40BD-C7B2-510F-9CB0279C09E8"; -createNode objectSet -n "mgear_curveCns177Set"; - rename -uid "2B568F12-4799-A3E4-0CFB-CB85526BE39B"; +createNode tweak -n "tweak204"; + rename -uid "77B337D4-408A-9FC5-8078-3784AD709307"; +createNode objectSet -n "mgear_curveCns204Set"; + rename -uid "E43362B7-4844-3EB4-EE24-22915DCF8DDA"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns177GroupId"; - rename -uid "FAC01436-41B5-1610-2C93-BFB062691B23"; +createNode groupId -n "mgear_curveCns204GroupId"; + rename -uid "746C564D-4781-09D7-5A7C-589F6E46D923"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns177GroupParts"; - rename -uid "CB3AAA4B-4AF6-CA75-8377-61BD58F7EA09"; +createNode groupParts -n "mgear_curveCns204GroupParts"; + rename -uid "5E50172D-444A-DDA6-21F6-F7BF094D2155"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet177"; - rename -uid "B8467281-4606-8E73-B01A-4797C09D767A"; +createNode objectSet -n "tweakSet204"; + rename -uid "786B8472-4114-07E6-5D8D-90A5E6EF6218"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId354"; - rename -uid "39101786-4137-DB3E-4A00-D18E6E96FDDE"; +createNode groupId -n "groupId408"; + rename -uid "BCDDAF94-4BD2-14B3-BD9C-0084767D779C"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts354"; - rename -uid "D215140D-4872-0B23-F870-15A3E4A8DF04"; +createNode groupParts -n "groupParts408"; + rename -uid "5B6ABFB3-4743-44A7-C4A0-8BB645A3EBE8"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode mgear_curveCns -n "mgear_curveCns178"; - rename -uid "F0AD36CD-448D-681B-C621-89AEABEC6D8F"; +createNode mgear_curveCns -n "mgear_curveCns205"; + rename -uid "AE4CEC41-4FD6-6751-A7B4-A79EEFC27C1A"; setAttr -s 5 ".inputs"; -createNode tweak -n "tweak178"; - rename -uid "84FA6E59-45F1-FB67-94A1-DC831EF4EF69"; -createNode objectSet -n "mgear_curveCns178Set"; - rename -uid "FC4F9AE9-4426-A0D8-F8BC-75A9FFC5E890"; +createNode tweak -n "tweak205"; + rename -uid "67DC8234-449C-E2BC-98DA-B382B7E21F5D"; +createNode objectSet -n "mgear_curveCns205Set"; + rename -uid "09E0ADDE-4A50-AFBC-7F97-829EDAED0424"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "mgear_curveCns178GroupId"; - rename -uid "212E36F4-4420-94D9-8E9D-649B1559B9E0"; +createNode groupId -n "mgear_curveCns205GroupId"; + rename -uid "964C6F63-48E8-551E-53DA-8A826946B5D4"; setAttr ".ihi" 0; -createNode groupParts -n "mgear_curveCns178GroupParts"; - rename -uid "DDE83F2D-4DB2-898C-1E7E-F4B45C788885"; +createNode groupParts -n "mgear_curveCns205GroupParts"; + rename -uid "29EF41E9-44F2-5C80-A379-EBB087824CF0"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; -createNode objectSet -n "tweakSet178"; - rename -uid "A114E36F-436F-716D-8C40-E9899D48B8E1"; +createNode objectSet -n "tweakSet205"; + rename -uid "0D231BD4-4193-63AA-85C8-CB8D8F7EFF52"; setAttr ".ihi" 0; setAttr ".vo" yes; -createNode groupId -n "groupId356"; - rename -uid "505D23C4-4E30-CBD0-6CD4-88BAB06C02CA"; +createNode groupId -n "groupId410"; + rename -uid "12667403-4AFD-7524-9712-30A5BCC2D350"; setAttr ".ihi" 0; -createNode groupParts -n "groupParts356"; - rename -uid "3405FA4E-4586-77EB-5A22-E5892B6C26EB"; +createNode groupParts -n "groupParts410"; + rename -uid "D32F9A9F-4A55-0D37-50D1-47AAEE96DEB2"; setAttr ".ihi" 0; setAttr ".ic" -type "componentList" 1 "cv[*]"; createNode script -n "uiConfigurationScriptNode"; - rename -uid "9D260E86-4658-287B-6D80-20AC96BD2D1E"; + rename -uid "1F8008E2-497C-466B-5D53-D49D1586B774"; setAttr ".b" -type "string" ( "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n" + " -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n" @@ -10023,24 +10037,24 @@ createNode script -n "uiConfigurationScriptNode"; + " -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `modelPanel -unParent -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n" + " -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n" + " -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n" - + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1135\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n" + + " -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1300\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\t}\n\t} else {\n" + "\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n" + " -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n" - + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1135\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n" - + " -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" - + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n" - + " -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n" - + " -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n" - + " -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n" - + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n" - + " -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n" - + " outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n" - + " -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n" - + " -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" - + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n" - + " -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n" - + " -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n" + + " -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1300\n -height 740\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels `;\n\t\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n" + + " -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n" + + " -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n" + + " -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n" + + " -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"graphEditor\" -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n" + + " -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n" + + " -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n" + + " -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n" + + " -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n" + + " animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n -constrainDrag 0\n -classicMode 1\n $editorName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"dopeSheetPanel\" -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n" + + " -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n" + + " -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n" + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n" + " -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n" + " dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"clipEditorPanel\" -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n" @@ -10066,15 +10080,15 @@ createNode script -n "uiConfigurationScriptNode"; + " $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"hyperShadePanel\" -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels `;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif (\"\" == $panelName) {\n\t\tif ($useSceneConfig) {\n\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n" + "\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n $editorName;\n\t\t}\n\t} else {\n\t\t$label = `panel -q -label $panelName`;\n" + "\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -activeTab -1\n -editorMode \"default\" \n" - + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"left3\\\" -ps 1 78 78 -ps 2 22 100 -ps 3 78 22 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap true\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" - + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1135\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" - + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1135\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" - + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Outliner\")) \n\t\t\t\t\t\"outlinerPanel\"\n\t\t\t\t\t\"$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" - + "\t\t\t\t\t\"outlinerPanel -edit -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-defaultImage \"\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"left3\\\" -ps 1 80 78 -ps 2 20 100 -ps 3 80 22 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap true\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1300\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1300\\n -height 740\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Outliner\")) \n\t\t\t\t\t\"outlinerPanel\"\n\t\t\t\t\t\"$panelName = `outlinerPanel -unParent -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -docTag \\\"isolOutln_fromSeln\\\" \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + + "\t\t\t\t\t\"outlinerPanel -edit -l (localizedPanelLabel(\\\"Outliner\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\noutlinerEditor -e \\n -docTag \\\"isolOutln_fromSeln\\\" \\n -showShapes 0\\n -showAssignedMaterials 0\\n -showReferenceNodes 1\\n -showReferenceMembers 1\\n -showAttributes 0\\n -showConnected 0\\n -showAnimCurvesOnly 0\\n -showMuteInfo 0\\n -organizeByLayer 1\\n -showAnimLayerWeight 1\\n -autoExpandLayers 1\\n -autoExpand 0\\n -showDagOnly 1\\n -showAssets 1\\n -showContainedOnly 1\\n -showPublishedAsConnected 0\\n -showContainerContents 1\\n -ignoreDagHierarchy 0\\n -expandConnections 0\\n -showUpstreamCurves 1\\n -showUnitlessCurves 1\\n -showCompounds 1\\n -showLeafs 1\\n -showNumericAttrsOnly 0\\n -highlightActive 1\\n -autoSelectNewObjects 0\\n -doNotSelectNewObjects 0\\n -dropIsParent 1\\n -transmitFilters 0\\n -setFilter \\\"defaultSetFilter\\\" \\n -showSetMembers 1\\n -allowMultiSelection 1\\n -alwaysToggleSelect 0\\n -directSelect 0\\n -isSet 0\\n -isSetMember 0\\n -displayMode \\\"DAG\\\" \\n -expandObjects 0\\n -setsIgnoreFilters 1\\n -containersIgnoreFilters 0\\n -editAttrName 0\\n -showAttrValues 0\\n -highlightSecondary 0\\n -showUVAttrsOnly 0\\n -showTextureNodesOnly 0\\n -attrAlphaOrder \\\"default\\\" \\n -animLayerFilterOptions \\\"allAffecting\\\" \\n -sortOrder \\\"none\\\" \\n -longNames 0\\n -niceNames 1\\n -showNamespace 1\\n -showPinIcons 0\\n -mapMotionTrails 0\\n -ignoreHiddenAttribute 0\\n -ignoreOutlinerColor 0\\n -renderFilterVisible 0\\n -renderFilterIndex 0\\n -selectionOrder \\\"chronological\\\" \\n -expandAttribute 0\\n $editorName\"\n" + "\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Script Editor\")) \n\t\t\t\t\t\"scriptedPanel\"\n\t\t\t\t\t\"$panelName = `scriptedPanel -unParent -type \\\"scriptEditorPanel\\\" -l (localizedPanelLabel(\\\"Script Editor\\\")) -mbv $menusOkayInPanels `\"\n\t\t\t\t\t\"scriptedPanel -edit -l (localizedPanelLabel(\\\"Script Editor\\\")) -mbv $menusOkayInPanels $panelName\"\n\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n setFocus `paneLayout -q -p1 $gMainPane`;\n sceneUIReplacement -deleteRemaining;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); setAttr ".st" 3; createNode script -n "sceneConfigurationScriptNode"; - rename -uid "24F57C12-43B1-FD41-6848-B79093A1ABF8"; + rename -uid "3E12F2DC-41AF-B7A5-408C-939B47AC531D"; setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; setAttr ".st" 6; select -ne :time1; @@ -10085,6 +10099,7 @@ select -ne :hardwareRenderingGlobals; setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ; + setAttr ".fprt" yes; select -ne :renderPartition; setAttr -s 2 ".st"; select -ne :renderGlobalsList1; @@ -10102,717 +10117,717 @@ select -ne :defaultResolution; select -ne :hardwareRenderGlobals; setAttr ".ctrs" 256; setAttr ".btrs" 512; -connectAttr "spine_C0_root_st_profile.o" "spine_C0_root.st_profile"; -connectAttr "spine_C0_root_sq_profile.o" "spine_C0_root.sq_profile"; -connectAttr "neck_C0_root_st_profile.o" "neck_C0_root.st_profile"; -connectAttr "neck_C0_root_sq_profile.o" "neck_C0_root.sq_profile"; -connectAttr "mgear_curveCns160.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak160.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns160GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns160Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId320.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet160.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "mgear_curveCns161.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak161.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns161GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns161Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId322.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet161.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "mgear_curveCns159.og[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.cr" - ; -connectAttr "tweak159.pl[0].cp[0]" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.twl" - ; -connectAttr "mgear_curveCns159GroupId.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" - ; -connectAttr "mgear_curveCns159Set.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" - ; -connectAttr "groupId318.id" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" - ; -connectAttr "tweakSet159.mwc" "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" - ; -connectAttr "mgear_curveCns162.og[0]" "mouth_C0_crv7Shape.cr"; -connectAttr "tweak162.pl[0].cp[0]" "mouth_C0_crv7Shape.twl"; -connectAttr "mgear_curveCns162GroupId.id" "mouth_C0_crv7Shape.iog.og[0].gid"; -connectAttr "mgear_curveCns162Set.mwc" "mouth_C0_crv7Shape.iog.og[0].gco"; -connectAttr "groupId324.id" "mouth_C0_crv7Shape.iog.og[1].gid"; -connectAttr "tweakSet162.mwc" "mouth_C0_crv7Shape.iog.og[1].gco"; -connectAttr "mgear_curveCns163.og[0]" "eye_L0_crvShape.cr"; -connectAttr "tweak163.pl[0].cp[0]" "eye_L0_crvShape.twl"; -connectAttr "mgear_curveCns163GroupId.id" "eye_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns163Set.mwc" "eye_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId326.id" "eye_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet163.mwc" "eye_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns164.og[0]" "eye_R0_crvShape.cr"; -connectAttr "tweak164.pl[0].cp[0]" "eye_R0_crvShape.twl"; -connectAttr "mgear_curveCns164GroupId.id" "eye_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns164Set.mwc" "eye_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId328.id" "eye_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet164.mwc" "eye_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns158.og[0]" "neck_C0_head_crvShape.cr"; -connectAttr "tweak158.pl[0].cp[0]" "neck_C0_head_crvShape.twl"; -connectAttr "mgear_curveCns158GroupId.id" "neck_C0_head_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns158Set.mwc" "neck_C0_head_crvShape.iog.og[0].gco"; -connectAttr "groupId316.id" "neck_C0_head_crvShape.iog.og[1].gid"; -connectAttr "tweakSet158.mwc" "neck_C0_head_crvShape.iog.og[1].gco"; -connectAttr "neck_C0_blade_pointConstraint7.ctx" "neck_C0_blade.tx" -l on; -connectAttr "neck_C0_blade_pointConstraint7.cty" "neck_C0_blade.ty" -l on; -connectAttr "neck_C0_blade_pointConstraint7.ctz" "neck_C0_blade.tz" -l on; -connectAttr "neck_C0_blade_aimConstraint7.crx" "neck_C0_blade.rx" -l on; -connectAttr "neck_C0_blade_aimConstraint7.cry" "neck_C0_blade.ry" -l on; -connectAttr "neck_C0_blade_aimConstraint7.crz" "neck_C0_blade.rz" -l on; -connectAttr "neck_C0_blade.pim" "neck_C0_blade_aimConstraint7.cpim"; -connectAttr "neck_C0_blade.t" "neck_C0_blade_aimConstraint7.ct"; -connectAttr "neck_C0_blade.rp" "neck_C0_blade_aimConstraint7.crp"; -connectAttr "neck_C0_blade.rpt" "neck_C0_blade_aimConstraint7.crt"; -connectAttr "neck_C0_blade.ro" "neck_C0_blade_aimConstraint7.cro"; -connectAttr "neck_C0_tan0.t" "neck_C0_blade_aimConstraint7.tg[0].tt"; -connectAttr "neck_C0_tan0.rp" "neck_C0_blade_aimConstraint7.tg[0].trp"; -connectAttr "neck_C0_tan0.rpt" "neck_C0_blade_aimConstraint7.tg[0].trt"; -connectAttr "neck_C0_tan0.pm" "neck_C0_blade_aimConstraint7.tg[0].tpm"; -connectAttr "neck_C0_blade_aimConstraint7.w0" "neck_C0_blade_aimConstraint7.tg[0].tw" - ; -connectAttr "neck_C0_root.wm" "neck_C0_blade_aimConstraint7.wum"; -connectAttr "unitConversion29.o" "neck_C0_blade_aimConstraint7.ox"; -connectAttr "neck_C0_blade.pim" "neck_C0_blade_pointConstraint7.cpim"; -connectAttr "neck_C0_blade.rp" "neck_C0_blade_pointConstraint7.crp"; -connectAttr "neck_C0_blade.rpt" "neck_C0_blade_pointConstraint7.crt"; -connectAttr "neck_C0_root.t" "neck_C0_blade_pointConstraint7.tg[0].tt"; -connectAttr "neck_C0_root.rp" "neck_C0_blade_pointConstraint7.tg[0].trp"; -connectAttr "neck_C0_root.rpt" "neck_C0_blade_pointConstraint7.tg[0].trt"; -connectAttr "neck_C0_root.pm" "neck_C0_blade_pointConstraint7.tg[0].tpm"; -connectAttr "neck_C0_blade_pointConstraint7.w0" "neck_C0_blade_pointConstraint7.tg[0].tw" - ; -connectAttr "mgear_curveCns157.og[0]" "neck_C0_neck_crvShape.cr"; -connectAttr "tweak157.pl[0].cp[0]" "neck_C0_neck_crvShape.twl"; -connectAttr "mgear_curveCns157GroupId.id" "neck_C0_neck_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns157Set.mwc" "neck_C0_neck_crvShape.iog.og[0].gco"; -connectAttr "groupId314.id" "neck_C0_neck_crvShape.iog.og[1].gid"; -connectAttr "tweakSet157.mwc" "neck_C0_neck_crvShape.iog.og[1].gco"; -connectAttr "legFront_L0_root_st_profile.o" "legFront_L0_root.st_profile"; -connectAttr "legFront_L0_root_sq_profile.o" "legFront_L0_root.sq_profile"; -connectAttr "mgear_curveCns167.og[0]" "footFront_L0_crvShape.cr"; -connectAttr "tweak167.pl[0].cp[0]" "footFront_L0_crvShape.twl"; -connectAttr "mgear_curveCns167GroupId.id" "footFront_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns167Set.mwc" "footFront_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId334.id" "footFront_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet167.mwc" "footFront_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns168.og[0]" "footFront_L0_Shape1.cr"; -connectAttr "tweak168.pl[0].cp[0]" "footFront_L0_Shape1.twl"; -connectAttr "mgear_curveCns168GroupId.id" "footFront_L0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns168Set.mwc" "footFront_L0_Shape1.iog.og[0].gco"; -connectAttr "groupId336.id" "footFront_L0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet168.mwc" "footFront_L0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns166.og[0]" "legFront_L0_crvShape1.cr"; -connectAttr "tweak166.pl[0].cp[0]" "legFront_L0_crvShape1.twl"; -connectAttr "mgear_curveCns166GroupId.id" "legFront_L0_crvShape1.iog.og[0].gid"; -connectAttr "mgear_curveCns166Set.mwc" "legFront_L0_crvShape1.iog.og[0].gco"; -connectAttr "groupId332.id" "legFront_L0_crvShape1.iog.og[1].gid"; -connectAttr "tweakSet166.mwc" "legFront_L0_crvShape1.iog.og[1].gco"; -connectAttr "shoulder_L0_blade_pointConstraint7.ctx" "shoulder_L0_blade.tx" -l on - ; -connectAttr "shoulder_L0_blade_pointConstraint7.cty" "shoulder_L0_blade.ty" -l on - ; -connectAttr "shoulder_L0_blade_pointConstraint7.ctz" "shoulder_L0_blade.tz" -l on - ; -connectAttr "shoulder_L0_blade_aimConstraint7.crx" "shoulder_L0_blade.rx" -l on; -connectAttr "shoulder_L0_blade_aimConstraint7.cry" "shoulder_L0_blade.ry" -l on; -connectAttr "shoulder_L0_blade_aimConstraint7.crz" "shoulder_L0_blade.rz" -l on; -connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_aimConstraint7.cpim"; -connectAttr "shoulder_L0_blade.t" "shoulder_L0_blade_aimConstraint7.ct"; -connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_aimConstraint7.crp"; -connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_aimConstraint7.crt"; -connectAttr "shoulder_L0_blade.ro" "shoulder_L0_blade_aimConstraint7.cro"; -connectAttr "shoulder_L0_0_loc.t" "shoulder_L0_blade_aimConstraint7.tg[0].tt"; -connectAttr "shoulder_L0_0_loc.rp" "shoulder_L0_blade_aimConstraint7.tg[0].trp"; -connectAttr "shoulder_L0_0_loc.rpt" "shoulder_L0_blade_aimConstraint7.tg[0].trt" - ; -connectAttr "shoulder_L0_0_loc.pm" "shoulder_L0_blade_aimConstraint7.tg[0].tpm"; -connectAttr "shoulder_L0_blade_aimConstraint7.w0" "shoulder_L0_blade_aimConstraint7.tg[0].tw" - ; -connectAttr "shoulder_L0_root.wm" "shoulder_L0_blade_aimConstraint7.wum"; -connectAttr "unitConversion30.o" "shoulder_L0_blade_aimConstraint7.ox"; -connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_pointConstraint7.cpim"; -connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_pointConstraint7.crp"; -connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_pointConstraint7.crt"; -connectAttr "shoulder_L0_root.t" "shoulder_L0_blade_pointConstraint7.tg[0].tt"; -connectAttr "shoulder_L0_root.rp" "shoulder_L0_blade_pointConstraint7.tg[0].trp" - ; -connectAttr "shoulder_L0_root.rpt" "shoulder_L0_blade_pointConstraint7.tg[0].trt" - ; -connectAttr "shoulder_L0_root.pm" "shoulder_L0_blade_pointConstraint7.tg[0].tpm" - ; -connectAttr "shoulder_L0_blade_pointConstraint7.w0" "shoulder_L0_blade_pointConstraint7.tg[0].tw" - ; -connectAttr "mgear_curveCns165.og[0]" "shoulder_L0_crvShape.cr"; -connectAttr "tweak165.pl[0].cp[0]" "shoulder_L0_crvShape.twl"; -connectAttr "mgear_curveCns165GroupId.id" "shoulder_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns165Set.mwc" "shoulder_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId330.id" "shoulder_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet165.mwc" "shoulder_L0_crvShape.iog.og[1].gco"; +connectAttr "spine_C0_root_st_profile1.o" "spine_C0_root.st_profile"; +connectAttr "spine_C0_root_sq_profile1.o" "spine_C0_root.sq_profile"; +connectAttr "neck_C0_root_st_profile1.o" "neck_C0_root.st_profile"; +connectAttr "neck_C0_root_sq_profile1.o" "neck_C0_root.sq_profile"; +connectAttr "mgear_curveCns187.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak187.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns187GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns187Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId374.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet187.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "mgear_curveCns188.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak188.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns188GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns188Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId376.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet188.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "mgear_curveCns186.og[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.cr" + ; +connectAttr "tweak186.pl[0].cp[0]" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.twl" + ; +connectAttr "mgear_curveCns186GroupId.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gid" + ; +connectAttr "mgear_curveCns186Set.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0].gco" + ; +connectAttr "groupId372.id" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gid" + ; +connectAttr "tweakSet186.mwc" "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1].gco" + ; +connectAttr "mgear_curveCns189.og[0]" "mouth_C0_crv8Shape.cr"; +connectAttr "tweak189.pl[0].cp[0]" "mouth_C0_crv8Shape.twl"; +connectAttr "mgear_curveCns189GroupId.id" "mouth_C0_crv8Shape.iog.og[0].gid"; +connectAttr "mgear_curveCns189Set.mwc" "mouth_C0_crv8Shape.iog.og[0].gco"; +connectAttr "groupId378.id" "mouth_C0_crv8Shape.iog.og[1].gid"; +connectAttr "tweakSet189.mwc" "mouth_C0_crv8Shape.iog.og[1].gco"; +connectAttr "mgear_curveCns190.og[0]" "eye_L0_crvShape.cr"; +connectAttr "tweak190.pl[0].cp[0]" "eye_L0_crvShape.twl"; +connectAttr "mgear_curveCns190GroupId.id" "eye_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns190Set.mwc" "eye_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId380.id" "eye_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet190.mwc" "eye_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns191.og[0]" "eye_R0_crvShape.cr"; +connectAttr "tweak191.pl[0].cp[0]" "eye_R0_crvShape.twl"; +connectAttr "mgear_curveCns191GroupId.id" "eye_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns191Set.mwc" "eye_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId382.id" "eye_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet191.mwc" "eye_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns185.og[0]" "neck_C0_head_crvShape.cr"; +connectAttr "tweak185.pl[0].cp[0]" "neck_C0_head_crvShape.twl"; +connectAttr "mgear_curveCns185GroupId.id" "neck_C0_head_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns185Set.mwc" "neck_C0_head_crvShape.iog.og[0].gco"; +connectAttr "groupId370.id" "neck_C0_head_crvShape.iog.og[1].gid"; +connectAttr "tweakSet185.mwc" "neck_C0_head_crvShape.iog.og[1].gco"; +connectAttr "neck_C0_blade_pointConstraint8.ctx" "neck_C0_blade.tx" -l on; +connectAttr "neck_C0_blade_pointConstraint8.cty" "neck_C0_blade.ty" -l on; +connectAttr "neck_C0_blade_pointConstraint8.ctz" "neck_C0_blade.tz" -l on; +connectAttr "neck_C0_blade_aimConstraint8.crx" "neck_C0_blade.rx" -l on; +connectAttr "neck_C0_blade_aimConstraint8.cry" "neck_C0_blade.ry" -l on; +connectAttr "neck_C0_blade_aimConstraint8.crz" "neck_C0_blade.rz" -l on; +connectAttr "neck_C0_blade.pim" "neck_C0_blade_aimConstraint8.cpim"; +connectAttr "neck_C0_blade.t" "neck_C0_blade_aimConstraint8.ct"; +connectAttr "neck_C0_blade.rp" "neck_C0_blade_aimConstraint8.crp"; +connectAttr "neck_C0_blade.rpt" "neck_C0_blade_aimConstraint8.crt"; +connectAttr "neck_C0_blade.ro" "neck_C0_blade_aimConstraint8.cro"; +connectAttr "neck_C0_tan0.t" "neck_C0_blade_aimConstraint8.tg[0].tt"; +connectAttr "neck_C0_tan0.rp" "neck_C0_blade_aimConstraint8.tg[0].trp"; +connectAttr "neck_C0_tan0.rpt" "neck_C0_blade_aimConstraint8.tg[0].trt"; +connectAttr "neck_C0_tan0.pm" "neck_C0_blade_aimConstraint8.tg[0].tpm"; +connectAttr "neck_C0_blade_aimConstraint8.w0" "neck_C0_blade_aimConstraint8.tg[0].tw" + ; +connectAttr "neck_C0_root.wm" "neck_C0_blade_aimConstraint8.wum"; +connectAttr "unitConversion33.o" "neck_C0_blade_aimConstraint8.ox"; +connectAttr "neck_C0_blade.pim" "neck_C0_blade_pointConstraint8.cpim"; +connectAttr "neck_C0_blade.rp" "neck_C0_blade_pointConstraint8.crp"; +connectAttr "neck_C0_blade.rpt" "neck_C0_blade_pointConstraint8.crt"; +connectAttr "neck_C0_root.t" "neck_C0_blade_pointConstraint8.tg[0].tt"; +connectAttr "neck_C0_root.rp" "neck_C0_blade_pointConstraint8.tg[0].trp"; +connectAttr "neck_C0_root.rpt" "neck_C0_blade_pointConstraint8.tg[0].trt"; +connectAttr "neck_C0_root.pm" "neck_C0_blade_pointConstraint8.tg[0].tpm"; +connectAttr "neck_C0_blade_pointConstraint8.w0" "neck_C0_blade_pointConstraint8.tg[0].tw" + ; +connectAttr "mgear_curveCns184.og[0]" "neck_C0_neck_crvShape.cr"; +connectAttr "tweak184.pl[0].cp[0]" "neck_C0_neck_crvShape.twl"; +connectAttr "mgear_curveCns184GroupId.id" "neck_C0_neck_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns184Set.mwc" "neck_C0_neck_crvShape.iog.og[0].gco"; +connectAttr "groupId368.id" "neck_C0_neck_crvShape.iog.og[1].gid"; +connectAttr "tweakSet184.mwc" "neck_C0_neck_crvShape.iog.og[1].gco"; +connectAttr "legFront_L0_root_st_profile1.o" "legFront_L0_root.st_profile"; +connectAttr "legFront_L0_root_sq_profile1.o" "legFront_L0_root.sq_profile"; +connectAttr "mgear_curveCns194.og[0]" "footFront_L0_crvShape.cr"; +connectAttr "tweak194.pl[0].cp[0]" "footFront_L0_crvShape.twl"; +connectAttr "mgear_curveCns194GroupId.id" "footFront_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns194Set.mwc" "footFront_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId388.id" "footFront_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet194.mwc" "footFront_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns195.og[0]" "footFront_L0_Shape1.cr"; +connectAttr "tweak195.pl[0].cp[0]" "footFront_L0_Shape1.twl"; +connectAttr "mgear_curveCns195GroupId.id" "footFront_L0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns195Set.mwc" "footFront_L0_Shape1.iog.og[0].gco"; +connectAttr "groupId390.id" "footFront_L0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet195.mwc" "footFront_L0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns193.og[0]" "legFront_L0_crvShape1.cr"; +connectAttr "tweak193.pl[0].cp[0]" "legFront_L0_crvShape1.twl"; +connectAttr "mgear_curveCns193GroupId.id" "legFront_L0_crvShape1.iog.og[0].gid"; +connectAttr "mgear_curveCns193Set.mwc" "legFront_L0_crvShape1.iog.og[0].gco"; +connectAttr "groupId386.id" "legFront_L0_crvShape1.iog.og[1].gid"; +connectAttr "tweakSet193.mwc" "legFront_L0_crvShape1.iog.og[1].gco"; +connectAttr "shoulder_L0_blade_pointConstraint8.ctx" "shoulder_L0_blade.tx" -l on + ; +connectAttr "shoulder_L0_blade_pointConstraint8.cty" "shoulder_L0_blade.ty" -l on + ; +connectAttr "shoulder_L0_blade_pointConstraint8.ctz" "shoulder_L0_blade.tz" -l on + ; +connectAttr "shoulder_L0_blade_aimConstraint8.crx" "shoulder_L0_blade.rx" -l on; +connectAttr "shoulder_L0_blade_aimConstraint8.cry" "shoulder_L0_blade.ry" -l on; +connectAttr "shoulder_L0_blade_aimConstraint8.crz" "shoulder_L0_blade.rz" -l on; +connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_aimConstraint8.cpim"; +connectAttr "shoulder_L0_blade.t" "shoulder_L0_blade_aimConstraint8.ct"; +connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_aimConstraint8.crp"; +connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_aimConstraint8.crt"; +connectAttr "shoulder_L0_blade.ro" "shoulder_L0_blade_aimConstraint8.cro"; +connectAttr "shoulder_L0_0_loc.t" "shoulder_L0_blade_aimConstraint8.tg[0].tt"; +connectAttr "shoulder_L0_0_loc.rp" "shoulder_L0_blade_aimConstraint8.tg[0].trp"; +connectAttr "shoulder_L0_0_loc.rpt" "shoulder_L0_blade_aimConstraint8.tg[0].trt" + ; +connectAttr "shoulder_L0_0_loc.pm" "shoulder_L0_blade_aimConstraint8.tg[0].tpm"; +connectAttr "shoulder_L0_blade_aimConstraint8.w0" "shoulder_L0_blade_aimConstraint8.tg[0].tw" + ; +connectAttr "shoulder_L0_root.wm" "shoulder_L0_blade_aimConstraint8.wum"; +connectAttr "unitConversion34.o" "shoulder_L0_blade_aimConstraint8.ox"; +connectAttr "shoulder_L0_blade.pim" "shoulder_L0_blade_pointConstraint8.cpim"; +connectAttr "shoulder_L0_blade.rp" "shoulder_L0_blade_pointConstraint8.crp"; +connectAttr "shoulder_L0_blade.rpt" "shoulder_L0_blade_pointConstraint8.crt"; +connectAttr "shoulder_L0_root.t" "shoulder_L0_blade_pointConstraint8.tg[0].tt"; +connectAttr "shoulder_L0_root.rp" "shoulder_L0_blade_pointConstraint8.tg[0].trp" + ; +connectAttr "shoulder_L0_root.rpt" "shoulder_L0_blade_pointConstraint8.tg[0].trt" + ; +connectAttr "shoulder_L0_root.pm" "shoulder_L0_blade_pointConstraint8.tg[0].tpm" + ; +connectAttr "shoulder_L0_blade_pointConstraint8.w0" "shoulder_L0_blade_pointConstraint8.tg[0].tw" + ; +connectAttr "mgear_curveCns192.og[0]" "shoulder_L0_crvShape.cr"; +connectAttr "tweak192.pl[0].cp[0]" "shoulder_L0_crvShape.twl"; +connectAttr "mgear_curveCns192GroupId.id" "shoulder_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns192Set.mwc" "shoulder_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId384.id" "shoulder_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet192.mwc" "shoulder_L0_crvShape.iog.og[1].gco"; connectAttr "legFront_R0_root_st_profile1.o" "legFront_R0_root.st_profile"; connectAttr "legFront_R0_root_sq_profile1.o" "legFront_R0_root.sq_profile"; -connectAttr "mgear_curveCns171.og[0]" "footFront_R0_crvShape.cr"; -connectAttr "tweak171.pl[0].cp[0]" "footFront_R0_crvShape.twl"; -connectAttr "mgear_curveCns171GroupId.id" "footFront_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns171Set.mwc" "footFront_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId342.id" "footFront_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet171.mwc" "footFront_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns172.og[0]" "footFront_R0_Shape1.cr"; -connectAttr "tweak172.pl[0].cp[0]" "footFront_R0_Shape1.twl"; -connectAttr "mgear_curveCns172GroupId.id" "footFront_R0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns172Set.mwc" "footFront_R0_Shape1.iog.og[0].gco"; -connectAttr "groupId344.id" "footFront_R0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet172.mwc" "footFront_R0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns170.og[0]" "legFront_R0_crvShape1.cr"; -connectAttr "tweak170.pl[0].cp[0]" "legFront_R0_crvShape1.twl"; -connectAttr "mgear_curveCns170GroupId.id" "legFront_R0_crvShape1.iog.og[0].gid"; -connectAttr "mgear_curveCns170Set.mwc" "legFront_R0_crvShape1.iog.og[0].gco"; -connectAttr "groupId340.id" "legFront_R0_crvShape1.iog.og[1].gid"; -connectAttr "tweakSet170.mwc" "legFront_R0_crvShape1.iog.og[1].gco"; -connectAttr "shoulder_R0_blade_pointConstraint4.ctx" "shoulder_R0_blade.tx" -l on - ; -connectAttr "shoulder_R0_blade_pointConstraint4.cty" "shoulder_R0_blade.ty" -l on - ; -connectAttr "shoulder_R0_blade_pointConstraint4.ctz" "shoulder_R0_blade.tz" -l on - ; -connectAttr "shoulder_R0_blade_aimConstraint4.crx" "shoulder_R0_blade.rx" -l on; -connectAttr "shoulder_R0_blade_aimConstraint4.cry" "shoulder_R0_blade.ry" -l on; -connectAttr "shoulder_R0_blade_aimConstraint4.crz" "shoulder_R0_blade.rz" -l on; -connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_aimConstraint4.cpim"; -connectAttr "shoulder_R0_blade.t" "shoulder_R0_blade_aimConstraint4.ct"; -connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_aimConstraint4.crp"; -connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_aimConstraint4.crt"; -connectAttr "shoulder_R0_blade.ro" "shoulder_R0_blade_aimConstraint4.cro"; -connectAttr "shoulder_R0_0_loc.t" "shoulder_R0_blade_aimConstraint4.tg[0].tt"; -connectAttr "shoulder_R0_0_loc.rp" "shoulder_R0_blade_aimConstraint4.tg[0].trp"; -connectAttr "shoulder_R0_0_loc.rpt" "shoulder_R0_blade_aimConstraint4.tg[0].trt" - ; -connectAttr "shoulder_R0_0_loc.pm" "shoulder_R0_blade_aimConstraint4.tg[0].tpm"; -connectAttr "shoulder_R0_blade_aimConstraint4.w0" "shoulder_R0_blade_aimConstraint4.tg[0].tw" - ; -connectAttr "shoulder_R0_root.wm" "shoulder_R0_blade_aimConstraint4.wum"; -connectAttr "unitConversion31.o" "shoulder_R0_blade_aimConstraint4.ox"; -connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_pointConstraint4.cpim"; -connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_pointConstraint4.crp"; -connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_pointConstraint4.crt"; -connectAttr "shoulder_R0_root.t" "shoulder_R0_blade_pointConstraint4.tg[0].tt"; -connectAttr "shoulder_R0_root.rp" "shoulder_R0_blade_pointConstraint4.tg[0].trp" - ; -connectAttr "shoulder_R0_root.rpt" "shoulder_R0_blade_pointConstraint4.tg[0].trt" - ; -connectAttr "shoulder_R0_root.pm" "shoulder_R0_blade_pointConstraint4.tg[0].tpm" - ; -connectAttr "shoulder_R0_blade_pointConstraint4.w0" "shoulder_R0_blade_pointConstraint4.tg[0].tw" - ; -connectAttr "mgear_curveCns169.og[0]" "shoulder_R0_crvShape.cr"; -connectAttr "tweak169.pl[0].cp[0]" "shoulder_R0_crvShape.twl"; -connectAttr "mgear_curveCns169GroupId.id" "shoulder_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns169Set.mwc" "shoulder_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId338.id" "shoulder_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet169.mwc" "shoulder_R0_crvShape.iog.og[1].gco"; -connectAttr "spine_C0_blade_pointConstraint7.ctx" "spine_C0_blade.tx" -l on; -connectAttr "spine_C0_blade_pointConstraint7.cty" "spine_C0_blade.ty" -l on; -connectAttr "spine_C0_blade_pointConstraint7.ctz" "spine_C0_blade.tz" -l on; -connectAttr "spine_C0_blade_aimConstraint7.crx" "spine_C0_blade.rx" -l on; -connectAttr "spine_C0_blade_aimConstraint7.cry" "spine_C0_blade.ry" -l on; -connectAttr "spine_C0_blade_aimConstraint7.crz" "spine_C0_blade.rz" -l on; -connectAttr "spine_C0_blade.pim" "spine_C0_blade_aimConstraint7.cpim"; -connectAttr "spine_C0_blade.t" "spine_C0_blade_aimConstraint7.ct"; -connectAttr "spine_C0_blade.rp" "spine_C0_blade_aimConstraint7.crp"; -connectAttr "spine_C0_blade.rpt" "spine_C0_blade_aimConstraint7.crt"; -connectAttr "spine_C0_blade.ro" "spine_C0_blade_aimConstraint7.cro"; -connectAttr "spine_C0_eff.t" "spine_C0_blade_aimConstraint7.tg[0].tt"; -connectAttr "spine_C0_eff.rp" "spine_C0_blade_aimConstraint7.tg[0].trp"; -connectAttr "spine_C0_eff.rpt" "spine_C0_blade_aimConstraint7.tg[0].trt"; -connectAttr "spine_C0_eff.pm" "spine_C0_blade_aimConstraint7.tg[0].tpm"; -connectAttr "spine_C0_blade_aimConstraint7.w0" "spine_C0_blade_aimConstraint7.tg[0].tw" - ; -connectAttr "spine_C0_root.wm" "spine_C0_blade_aimConstraint7.wum"; -connectAttr "unitConversion28.o" "spine_C0_blade_aimConstraint7.ox"; -connectAttr "spine_C0_blade.pim" "spine_C0_blade_pointConstraint7.cpim"; -connectAttr "spine_C0_blade.rp" "spine_C0_blade_pointConstraint7.crp"; -connectAttr "spine_C0_blade.rpt" "spine_C0_blade_pointConstraint7.crt"; -connectAttr "spine_C0_root.t" "spine_C0_blade_pointConstraint7.tg[0].tt"; -connectAttr "spine_C0_root.rp" "spine_C0_blade_pointConstraint7.tg[0].trp"; -connectAttr "spine_C0_root.rpt" "spine_C0_blade_pointConstraint7.tg[0].trt"; -connectAttr "spine_C0_root.pm" "spine_C0_blade_pointConstraint7.tg[0].tpm"; -connectAttr "spine_C0_blade_pointConstraint7.w0" "spine_C0_blade_pointConstraint7.tg[0].tw" - ; -connectAttr "mgear_curveCns156.og[0]" "spine_C0_crvShape.cr"; -connectAttr "tweak156.pl[0].cp[0]" "spine_C0_crvShape.twl"; -connectAttr "mgear_curveCns156GroupId.id" "spine_C0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns156Set.mwc" "spine_C0_crvShape.iog.og[0].gco"; -connectAttr "groupId312.id" "spine_C0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet156.mwc" "spine_C0_crvShape.iog.og[1].gco"; -connectAttr "legBack_L0_root_st_profile.o" "legBack_L0_root.st_profile"; -connectAttr "legBack_L0_root_sq_profile.o" "legBack_L0_root.sq_profile"; -connectAttr "mgear_curveCns174.og[0]" "footBack_L0_crvShape.cr"; -connectAttr "tweak174.pl[0].cp[0]" "footBack_L0_crvShape.twl"; -connectAttr "mgear_curveCns174GroupId.id" "footBack_L0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns174Set.mwc" "footBack_L0_crvShape.iog.og[0].gco"; -connectAttr "groupId348.id" "footBack_L0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet174.mwc" "footBack_L0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns175.og[0]" "footBack_L0_Shape1.cr"; -connectAttr "tweak175.pl[0].cp[0]" "footBack_L0_Shape1.twl"; -connectAttr "mgear_curveCns175GroupId.id" "footBack_L0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns175Set.mwc" "footBack_L0_Shape1.iog.og[0].gco"; -connectAttr "groupId350.id" "footBack_L0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet175.mwc" "footBack_L0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns173.og[0]" "legBack_L0_crvShape1.cr"; -connectAttr "tweak173.pl[0].cp[0]" "legBack_L0_crvShape1.twl"; -connectAttr "mgear_curveCns173GroupId.id" "legBack_L0_crvShape1.iog.og[0].gid"; -connectAttr "mgear_curveCns173Set.mwc" "legBack_L0_crvShape1.iog.og[0].gco"; -connectAttr "groupId346.id" "legBack_L0_crvShape1.iog.og[1].gid"; -connectAttr "tweakSet173.mwc" "legBack_L0_crvShape1.iog.og[1].gco"; +connectAttr "mgear_curveCns198.og[0]" "footFront_R0_crvShape.cr"; +connectAttr "tweak198.pl[0].cp[0]" "footFront_R0_crvShape.twl"; +connectAttr "mgear_curveCns198GroupId.id" "footFront_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns198Set.mwc" "footFront_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId396.id" "footFront_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet198.mwc" "footFront_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns199.og[0]" "footFront_R0_Shape1.cr"; +connectAttr "tweak199.pl[0].cp[0]" "footFront_R0_Shape1.twl"; +connectAttr "mgear_curveCns199GroupId.id" "footFront_R0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns199Set.mwc" "footFront_R0_Shape1.iog.og[0].gco"; +connectAttr "groupId398.id" "footFront_R0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet199.mwc" "footFront_R0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns197.og[0]" "legFront_R0_crvShape1.cr"; +connectAttr "tweak197.pl[0].cp[0]" "legFront_R0_crvShape1.twl"; +connectAttr "mgear_curveCns197GroupId.id" "legFront_R0_crvShape1.iog.og[0].gid"; +connectAttr "mgear_curveCns197Set.mwc" "legFront_R0_crvShape1.iog.og[0].gco"; +connectAttr "groupId394.id" "legFront_R0_crvShape1.iog.og[1].gid"; +connectAttr "tweakSet197.mwc" "legFront_R0_crvShape1.iog.og[1].gco"; +connectAttr "shoulder_R0_blade_pointConstraint2.ctx" "shoulder_R0_blade.tx" -l on + ; +connectAttr "shoulder_R0_blade_pointConstraint2.cty" "shoulder_R0_blade.ty" -l on + ; +connectAttr "shoulder_R0_blade_pointConstraint2.ctz" "shoulder_R0_blade.tz" -l on + ; +connectAttr "shoulder_R0_blade_aimConstraint2.crx" "shoulder_R0_blade.rx" -l on; +connectAttr "shoulder_R0_blade_aimConstraint2.cry" "shoulder_R0_blade.ry" -l on; +connectAttr "shoulder_R0_blade_aimConstraint2.crz" "shoulder_R0_blade.rz" -l on; +connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_aimConstraint2.cpim"; +connectAttr "shoulder_R0_blade.t" "shoulder_R0_blade_aimConstraint2.ct"; +connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_aimConstraint2.crp"; +connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_aimConstraint2.crt"; +connectAttr "shoulder_R0_blade.ro" "shoulder_R0_blade_aimConstraint2.cro"; +connectAttr "shoulder_R0_0_loc.t" "shoulder_R0_blade_aimConstraint2.tg[0].tt"; +connectAttr "shoulder_R0_0_loc.rp" "shoulder_R0_blade_aimConstraint2.tg[0].trp"; +connectAttr "shoulder_R0_0_loc.rpt" "shoulder_R0_blade_aimConstraint2.tg[0].trt" + ; +connectAttr "shoulder_R0_0_loc.pm" "shoulder_R0_blade_aimConstraint2.tg[0].tpm"; +connectAttr "shoulder_R0_blade_aimConstraint2.w0" "shoulder_R0_blade_aimConstraint2.tg[0].tw" + ; +connectAttr "shoulder_R0_root.wm" "shoulder_R0_blade_aimConstraint2.wum"; +connectAttr "unitConversion35.o" "shoulder_R0_blade_aimConstraint2.ox"; +connectAttr "shoulder_R0_blade.pim" "shoulder_R0_blade_pointConstraint2.cpim"; +connectAttr "shoulder_R0_blade.rp" "shoulder_R0_blade_pointConstraint2.crp"; +connectAttr "shoulder_R0_blade.rpt" "shoulder_R0_blade_pointConstraint2.crt"; +connectAttr "shoulder_R0_root.t" "shoulder_R0_blade_pointConstraint2.tg[0].tt"; +connectAttr "shoulder_R0_root.rp" "shoulder_R0_blade_pointConstraint2.tg[0].trp" + ; +connectAttr "shoulder_R0_root.rpt" "shoulder_R0_blade_pointConstraint2.tg[0].trt" + ; +connectAttr "shoulder_R0_root.pm" "shoulder_R0_blade_pointConstraint2.tg[0].tpm" + ; +connectAttr "shoulder_R0_blade_pointConstraint2.w0" "shoulder_R0_blade_pointConstraint2.tg[0].tw" + ; +connectAttr "mgear_curveCns196.og[0]" "shoulder_R0_crvShape.cr"; +connectAttr "tweak196.pl[0].cp[0]" "shoulder_R0_crvShape.twl"; +connectAttr "mgear_curveCns196GroupId.id" "shoulder_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns196Set.mwc" "shoulder_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId392.id" "shoulder_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet196.mwc" "shoulder_R0_crvShape.iog.og[1].gco"; +connectAttr "spine_C0_blade_pointConstraint8.ctx" "spine_C0_blade.tx" -l on; +connectAttr "spine_C0_blade_pointConstraint8.cty" "spine_C0_blade.ty" -l on; +connectAttr "spine_C0_blade_pointConstraint8.ctz" "spine_C0_blade.tz" -l on; +connectAttr "spine_C0_blade_aimConstraint8.crx" "spine_C0_blade.rx" -l on; +connectAttr "spine_C0_blade_aimConstraint8.cry" "spine_C0_blade.ry" -l on; +connectAttr "spine_C0_blade_aimConstraint8.crz" "spine_C0_blade.rz" -l on; +connectAttr "spine_C0_blade.pim" "spine_C0_blade_aimConstraint8.cpim"; +connectAttr "spine_C0_blade.t" "spine_C0_blade_aimConstraint8.ct"; +connectAttr "spine_C0_blade.rp" "spine_C0_blade_aimConstraint8.crp"; +connectAttr "spine_C0_blade.rpt" "spine_C0_blade_aimConstraint8.crt"; +connectAttr "spine_C0_blade.ro" "spine_C0_blade_aimConstraint8.cro"; +connectAttr "spine_C0_eff.t" "spine_C0_blade_aimConstraint8.tg[0].tt"; +connectAttr "spine_C0_eff.rp" "spine_C0_blade_aimConstraint8.tg[0].trp"; +connectAttr "spine_C0_eff.rpt" "spine_C0_blade_aimConstraint8.tg[0].trt"; +connectAttr "spine_C0_eff.pm" "spine_C0_blade_aimConstraint8.tg[0].tpm"; +connectAttr "spine_C0_blade_aimConstraint8.w0" "spine_C0_blade_aimConstraint8.tg[0].tw" + ; +connectAttr "spine_C0_root.wm" "spine_C0_blade_aimConstraint8.wum"; +connectAttr "unitConversion32.o" "spine_C0_blade_aimConstraint8.ox"; +connectAttr "spine_C0_blade.pim" "spine_C0_blade_pointConstraint8.cpim"; +connectAttr "spine_C0_blade.rp" "spine_C0_blade_pointConstraint8.crp"; +connectAttr "spine_C0_blade.rpt" "spine_C0_blade_pointConstraint8.crt"; +connectAttr "spine_C0_root.t" "spine_C0_blade_pointConstraint8.tg[0].tt"; +connectAttr "spine_C0_root.rp" "spine_C0_blade_pointConstraint8.tg[0].trp"; +connectAttr "spine_C0_root.rpt" "spine_C0_blade_pointConstraint8.tg[0].trt"; +connectAttr "spine_C0_root.pm" "spine_C0_blade_pointConstraint8.tg[0].tpm"; +connectAttr "spine_C0_blade_pointConstraint8.w0" "spine_C0_blade_pointConstraint8.tg[0].tw" + ; +connectAttr "mgear_curveCns183.og[0]" "spine_C0_crvShape.cr"; +connectAttr "tweak183.pl[0].cp[0]" "spine_C0_crvShape.twl"; +connectAttr "mgear_curveCns183GroupId.id" "spine_C0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns183Set.mwc" "spine_C0_crvShape.iog.og[0].gco"; +connectAttr "groupId366.id" "spine_C0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet183.mwc" "spine_C0_crvShape.iog.og[1].gco"; +connectAttr "legBack_L0_root_st_profile1.o" "legBack_L0_root.st_profile"; +connectAttr "legBack_L0_root_sq_profile1.o" "legBack_L0_root.sq_profile"; +connectAttr "mgear_curveCns201.og[0]" "footBack_L0_crvShape.cr"; +connectAttr "tweak201.pl[0].cp[0]" "footBack_L0_crvShape.twl"; +connectAttr "mgear_curveCns201GroupId.id" "footBack_L0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns201Set.mwc" "footBack_L0_crvShape.iog.og[0].gco"; +connectAttr "groupId402.id" "footBack_L0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet201.mwc" "footBack_L0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns202.og[0]" "footBack_L0_Shape1.cr"; +connectAttr "tweak202.pl[0].cp[0]" "footBack_L0_Shape1.twl"; +connectAttr "mgear_curveCns202GroupId.id" "footBack_L0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns202Set.mwc" "footBack_L0_Shape1.iog.og[0].gco"; +connectAttr "groupId404.id" "footBack_L0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet202.mwc" "footBack_L0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns200.og[0]" "legBack_L0_crvShape1.cr"; +connectAttr "tweak200.pl[0].cp[0]" "legBack_L0_crvShape1.twl"; +connectAttr "mgear_curveCns200GroupId.id" "legBack_L0_crvShape1.iog.og[0].gid"; +connectAttr "mgear_curveCns200Set.mwc" "legBack_L0_crvShape1.iog.og[0].gco"; +connectAttr "groupId400.id" "legBack_L0_crvShape1.iog.og[1].gid"; +connectAttr "tweakSet200.mwc" "legBack_L0_crvShape1.iog.og[1].gco"; connectAttr "legBack_R0_root_st_profile1.o" "legBack_R0_root.st_profile"; connectAttr "legBack_R0_root_sq_profile1.o" "legBack_R0_root.sq_profile"; -connectAttr "mgear_curveCns177.og[0]" "footBack_R0_crvShape.cr"; -connectAttr "tweak177.pl[0].cp[0]" "footBack_R0_crvShape.twl"; -connectAttr "mgear_curveCns177GroupId.id" "footBack_R0_crvShape.iog.og[0].gid"; -connectAttr "mgear_curveCns177Set.mwc" "footBack_R0_crvShape.iog.og[0].gco"; -connectAttr "groupId354.id" "footBack_R0_crvShape.iog.og[1].gid"; -connectAttr "tweakSet177.mwc" "footBack_R0_crvShape.iog.og[1].gco"; -connectAttr "mgear_curveCns178.og[0]" "footBack_R0_Shape1.cr"; -connectAttr "tweak178.pl[0].cp[0]" "footBack_R0_Shape1.twl"; -connectAttr "mgear_curveCns178GroupId.id" "footBack_R0_Shape1.iog.og[0].gid"; -connectAttr "mgear_curveCns178Set.mwc" "footBack_R0_Shape1.iog.og[0].gco"; -connectAttr "groupId356.id" "footBack_R0_Shape1.iog.og[1].gid"; -connectAttr "tweakSet178.mwc" "footBack_R0_Shape1.iog.og[1].gco"; -connectAttr "mgear_curveCns176.og[0]" "legBack_R0_crvShape1.cr"; -connectAttr "tweak176.pl[0].cp[0]" "legBack_R0_crvShape1.twl"; -connectAttr "mgear_curveCns176GroupId.id" "legBack_R0_crvShape1.iog.og[0].gid"; -connectAttr "mgear_curveCns176Set.mwc" "legBack_R0_crvShape1.iog.og[0].gco"; -connectAttr "groupId352.id" "legBack_R0_crvShape1.iog.og[1].gid"; -connectAttr "tweakSet176.mwc" "legBack_R0_crvShape1.iog.og[1].gco"; +connectAttr "mgear_curveCns204.og[0]" "footBack_R0_crvShape.cr"; +connectAttr "tweak204.pl[0].cp[0]" "footBack_R0_crvShape.twl"; +connectAttr "mgear_curveCns204GroupId.id" "footBack_R0_crvShape.iog.og[0].gid"; +connectAttr "mgear_curveCns204Set.mwc" "footBack_R0_crvShape.iog.og[0].gco"; +connectAttr "groupId408.id" "footBack_R0_crvShape.iog.og[1].gid"; +connectAttr "tweakSet204.mwc" "footBack_R0_crvShape.iog.og[1].gco"; +connectAttr "mgear_curveCns205.og[0]" "footBack_R0_Shape1.cr"; +connectAttr "tweak205.pl[0].cp[0]" "footBack_R0_Shape1.twl"; +connectAttr "mgear_curveCns205GroupId.id" "footBack_R0_Shape1.iog.og[0].gid"; +connectAttr "mgear_curveCns205Set.mwc" "footBack_R0_Shape1.iog.og[0].gco"; +connectAttr "groupId410.id" "footBack_R0_Shape1.iog.og[1].gid"; +connectAttr "tweakSet205.mwc" "footBack_R0_Shape1.iog.og[1].gco"; +connectAttr "mgear_curveCns203.og[0]" "legBack_R0_crvShape1.cr"; +connectAttr "tweak203.pl[0].cp[0]" "legBack_R0_crvShape1.twl"; +connectAttr "mgear_curveCns203GroupId.id" "legBack_R0_crvShape1.iog.og[0].gid"; +connectAttr "mgear_curveCns203Set.mwc" "legBack_R0_crvShape1.iog.og[0].gco"; +connectAttr "groupId406.id" "legBack_R0_crvShape1.iog.og[1].gid"; +connectAttr "tweakSet203.mwc" "legBack_R0_crvShape1.iog.og[1].gco"; relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; connectAttr "layerManager.dli[0]" "defaultLayer.id"; connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; -connectAttr "spine_C0_blade.bladeRollOffset" "unitConversion28.i"; -connectAttr "mgear_curveCns156GroupParts.og" "mgear_curveCns156.ip[0].ig"; -connectAttr "mgear_curveCns156GroupId.id" "mgear_curveCns156.ip[0].gi"; -connectAttr "spine_C0_root.wm" "mgear_curveCns156.inputs[0]"; -connectAttr "spine_C0_eff.wm" "mgear_curveCns156.inputs[1]"; -connectAttr "groupParts312.og" "tweak156.ip[0].ig"; -connectAttr "groupId312.id" "tweak156.ip[0].gi"; -connectAttr "mgear_curveCns156GroupId.msg" "mgear_curveCns156Set.gn" -na; -connectAttr "spine_C0_crvShape.iog.og[0]" "mgear_curveCns156Set.dsm" -na; -connectAttr "mgear_curveCns156.msg" "mgear_curveCns156Set.ub[0]"; -connectAttr "tweak156.og[0]" "mgear_curveCns156GroupParts.ig"; -connectAttr "mgear_curveCns156GroupId.id" "mgear_curveCns156GroupParts.gi"; -connectAttr "groupId312.msg" "tweakSet156.gn" -na; -connectAttr "spine_C0_crvShape.iog.og[1]" "tweakSet156.dsm" -na; -connectAttr "tweak156.msg" "tweakSet156.ub[0]"; -connectAttr "spine_C0_crvShapeOrig.ws" "groupParts312.ig"; -connectAttr "groupId312.id" "groupParts312.gi"; -connectAttr "neck_C0_blade.bladeRollOffset" "unitConversion29.i"; -connectAttr "mgear_curveCns157GroupParts.og" "mgear_curveCns157.ip[0].ig"; -connectAttr "mgear_curveCns157GroupId.id" "mgear_curveCns157.ip[0].gi"; -connectAttr "neck_C0_root.wm" "mgear_curveCns157.inputs[0]"; -connectAttr "neck_C0_tan0.wm" "mgear_curveCns157.inputs[1]"; -connectAttr "neck_C0_tan1.wm" "mgear_curveCns157.inputs[2]"; -connectAttr "neck_C0_neck.wm" "mgear_curveCns157.inputs[3]"; -connectAttr "groupParts314.og" "tweak157.ip[0].ig"; -connectAttr "groupId314.id" "tweak157.ip[0].gi"; -connectAttr "mgear_curveCns157GroupId.msg" "mgear_curveCns157Set.gn" -na; -connectAttr "neck_C0_neck_crvShape.iog.og[0]" "mgear_curveCns157Set.dsm" -na; -connectAttr "mgear_curveCns157.msg" "mgear_curveCns157Set.ub[0]"; -connectAttr "tweak157.og[0]" "mgear_curveCns157GroupParts.ig"; -connectAttr "mgear_curveCns157GroupId.id" "mgear_curveCns157GroupParts.gi"; -connectAttr "groupId314.msg" "tweakSet157.gn" -na; -connectAttr "neck_C0_neck_crvShape.iog.og[1]" "tweakSet157.dsm" -na; -connectAttr "tweak157.msg" "tweakSet157.ub[0]"; -connectAttr "neck_C0_neck_crvShapeOrig.ws" "groupParts314.ig"; -connectAttr "groupId314.id" "groupParts314.gi"; -connectAttr "mgear_curveCns158GroupParts.og" "mgear_curveCns158.ip[0].ig"; -connectAttr "mgear_curveCns158GroupId.id" "mgear_curveCns158.ip[0].gi"; -connectAttr "neck_C0_neck.wm" "mgear_curveCns158.inputs[0]"; -connectAttr "neck_C0_head.wm" "mgear_curveCns158.inputs[1]"; -connectAttr "neck_C0_eff.wm" "mgear_curveCns158.inputs[2]"; -connectAttr "groupParts316.og" "tweak158.ip[0].ig"; -connectAttr "groupId316.id" "tweak158.ip[0].gi"; -connectAttr "mgear_curveCns158GroupId.msg" "mgear_curveCns158Set.gn" -na; -connectAttr "neck_C0_head_crvShape.iog.og[0]" "mgear_curveCns158Set.dsm" -na; -connectAttr "mgear_curveCns158.msg" "mgear_curveCns158Set.ub[0]"; -connectAttr "tweak158.og[0]" "mgear_curveCns158GroupParts.ig"; -connectAttr "mgear_curveCns158GroupId.id" "mgear_curveCns158GroupParts.gi"; -connectAttr "groupId316.msg" "tweakSet158.gn" -na; -connectAttr "neck_C0_head_crvShape.iog.og[1]" "tweakSet158.dsm" -na; -connectAttr "tweak158.msg" "tweakSet158.ub[0]"; -connectAttr "neck_C0_head_crvShapeOrig.ws" "groupParts316.ig"; -connectAttr "groupId316.id" "groupParts316.gi"; -connectAttr "mgear_curveCns159GroupParts.og" "mgear_curveCns159.ip[0].ig"; -connectAttr "mgear_curveCns159GroupId.id" "mgear_curveCns159.ip[0].gi"; -connectAttr "mouth_C0_root.wm" "mgear_curveCns159.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns159.inputs[1]"; -connectAttr "groupParts318.og" "tweak159.ip[0].ig"; -connectAttr "groupId318.id" "tweak159.ip[0].gi"; -connectAttr "mgear_curveCns159GroupId.msg" "mgear_curveCns159Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns159Set.dsm" +connectAttr "spine_C0_blade.bladeRollOffset" "unitConversion32.i"; +connectAttr "mgear_curveCns183GroupParts.og" "mgear_curveCns183.ip[0].ig"; +connectAttr "mgear_curveCns183GroupId.id" "mgear_curveCns183.ip[0].gi"; +connectAttr "spine_C0_root.wm" "mgear_curveCns183.inputs[0]"; +connectAttr "spine_C0_eff.wm" "mgear_curveCns183.inputs[1]"; +connectAttr "groupParts366.og" "tweak183.ip[0].ig"; +connectAttr "groupId366.id" "tweak183.ip[0].gi"; +connectAttr "mgear_curveCns183GroupId.msg" "mgear_curveCns183Set.gn" -na; +connectAttr "spine_C0_crvShape.iog.og[0]" "mgear_curveCns183Set.dsm" -na; +connectAttr "mgear_curveCns183.msg" "mgear_curveCns183Set.ub[0]"; +connectAttr "tweak183.og[0]" "mgear_curveCns183GroupParts.ig"; +connectAttr "mgear_curveCns183GroupId.id" "mgear_curveCns183GroupParts.gi"; +connectAttr "groupId366.msg" "tweakSet183.gn" -na; +connectAttr "spine_C0_crvShape.iog.og[1]" "tweakSet183.dsm" -na; +connectAttr "tweak183.msg" "tweakSet183.ub[0]"; +connectAttr "spine_C0_crvShapeOrig.ws" "groupParts366.ig"; +connectAttr "groupId366.id" "groupParts366.gi"; +connectAttr "neck_C0_blade.bladeRollOffset" "unitConversion33.i"; +connectAttr "mgear_curveCns184GroupParts.og" "mgear_curveCns184.ip[0].ig"; +connectAttr "mgear_curveCns184GroupId.id" "mgear_curveCns184.ip[0].gi"; +connectAttr "neck_C0_root.wm" "mgear_curveCns184.inputs[0]"; +connectAttr "neck_C0_tan0.wm" "mgear_curveCns184.inputs[1]"; +connectAttr "neck_C0_tan1.wm" "mgear_curveCns184.inputs[2]"; +connectAttr "neck_C0_neck.wm" "mgear_curveCns184.inputs[3]"; +connectAttr "groupParts368.og" "tweak184.ip[0].ig"; +connectAttr "groupId368.id" "tweak184.ip[0].gi"; +connectAttr "mgear_curveCns184GroupId.msg" "mgear_curveCns184Set.gn" -na; +connectAttr "neck_C0_neck_crvShape.iog.og[0]" "mgear_curveCns184Set.dsm" -na; +connectAttr "mgear_curveCns184.msg" "mgear_curveCns184Set.ub[0]"; +connectAttr "tweak184.og[0]" "mgear_curveCns184GroupParts.ig"; +connectAttr "mgear_curveCns184GroupId.id" "mgear_curveCns184GroupParts.gi"; +connectAttr "groupId368.msg" "tweakSet184.gn" -na; +connectAttr "neck_C0_neck_crvShape.iog.og[1]" "tweakSet184.dsm" -na; +connectAttr "tweak184.msg" "tweakSet184.ub[0]"; +connectAttr "neck_C0_neck_crvShapeOrig.ws" "groupParts368.ig"; +connectAttr "groupId368.id" "groupParts368.gi"; +connectAttr "mgear_curveCns185GroupParts.og" "mgear_curveCns185.ip[0].ig"; +connectAttr "mgear_curveCns185GroupId.id" "mgear_curveCns185.ip[0].gi"; +connectAttr "neck_C0_neck.wm" "mgear_curveCns185.inputs[0]"; +connectAttr "neck_C0_head.wm" "mgear_curveCns185.inputs[1]"; +connectAttr "neck_C0_eff.wm" "mgear_curveCns185.inputs[2]"; +connectAttr "groupParts370.og" "tweak185.ip[0].ig"; +connectAttr "groupId370.id" "tweak185.ip[0].gi"; +connectAttr "mgear_curveCns185GroupId.msg" "mgear_curveCns185Set.gn" -na; +connectAttr "neck_C0_head_crvShape.iog.og[0]" "mgear_curveCns185Set.dsm" -na; +connectAttr "mgear_curveCns185.msg" "mgear_curveCns185Set.ub[0]"; +connectAttr "tweak185.og[0]" "mgear_curveCns185GroupParts.ig"; +connectAttr "mgear_curveCns185GroupId.id" "mgear_curveCns185GroupParts.gi"; +connectAttr "groupId370.msg" "tweakSet185.gn" -na; +connectAttr "neck_C0_head_crvShape.iog.og[1]" "tweakSet185.dsm" -na; +connectAttr "tweak185.msg" "tweakSet185.ub[0]"; +connectAttr "neck_C0_head_crvShapeOrig.ws" "groupParts370.ig"; +connectAttr "groupId370.id" "groupParts370.gi"; +connectAttr "mgear_curveCns186GroupParts.og" "mgear_curveCns186.ip[0].ig"; +connectAttr "mgear_curveCns186GroupId.id" "mgear_curveCns186.ip[0].gi"; +connectAttr "mouth_C0_root.wm" "mgear_curveCns186.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns186.inputs[1]"; +connectAttr "groupParts372.og" "tweak186.ip[0].ig"; +connectAttr "groupId372.id" "tweak186.ip[0].gi"; +connectAttr "mgear_curveCns186GroupId.msg" "mgear_curveCns186Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns186Set.dsm" -na; -connectAttr "mgear_curveCns159.msg" "mgear_curveCns159Set.ub[0]"; -connectAttr "tweak159.og[0]" "mgear_curveCns159GroupParts.ig"; -connectAttr "mgear_curveCns159GroupId.id" "mgear_curveCns159GroupParts.gi"; -connectAttr "groupId318.msg" "tweakSet159.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet159.dsm" +connectAttr "mgear_curveCns186.msg" "mgear_curveCns186Set.ub[0]"; +connectAttr "tweak186.og[0]" "mgear_curveCns186GroupParts.ig"; +connectAttr "mgear_curveCns186GroupId.id" "mgear_curveCns186GroupParts.gi"; +connectAttr "groupId372.msg" "tweakSet186.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet186.dsm" -na; -connectAttr "tweak159.msg" "tweakSet159.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts318.ig" - ; -connectAttr "groupId318.id" "groupParts318.gi"; -connectAttr "mgear_curveCns160GroupParts.og" "mgear_curveCns160.ip[0].ig"; -connectAttr "mgear_curveCns160GroupId.id" "mgear_curveCns160.ip[0].gi"; -connectAttr "mouth_C0_lipup.wm" "mgear_curveCns160.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns160.inputs[1]"; -connectAttr "groupParts320.og" "tweak160.ip[0].ig"; -connectAttr "groupId320.id" "tweak160.ip[0].gi"; -connectAttr "mgear_curveCns160GroupId.msg" "mgear_curveCns160Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns160Set.dsm" +connectAttr "tweak186.msg" "tweakSet186.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts372.ig" + ; +connectAttr "groupId372.id" "groupParts372.gi"; +connectAttr "mgear_curveCns187GroupParts.og" "mgear_curveCns187.ip[0].ig"; +connectAttr "mgear_curveCns187GroupId.id" "mgear_curveCns187.ip[0].gi"; +connectAttr "mouth_C0_lipup.wm" "mgear_curveCns187.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns187.inputs[1]"; +connectAttr "groupParts374.og" "tweak187.ip[0].ig"; +connectAttr "groupId374.id" "tweak187.ip[0].gi"; +connectAttr "mgear_curveCns187GroupId.msg" "mgear_curveCns187Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns187Set.dsm" -na; -connectAttr "mgear_curveCns160.msg" "mgear_curveCns160Set.ub[0]"; -connectAttr "tweak160.og[0]" "mgear_curveCns160GroupParts.ig"; -connectAttr "mgear_curveCns160GroupId.id" "mgear_curveCns160GroupParts.gi"; -connectAttr "groupId320.msg" "tweakSet160.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet160.dsm" +connectAttr "mgear_curveCns187.msg" "mgear_curveCns187Set.ub[0]"; +connectAttr "tweak187.og[0]" "mgear_curveCns187GroupParts.ig"; +connectAttr "mgear_curveCns187GroupId.id" "mgear_curveCns187GroupParts.gi"; +connectAttr "groupId374.msg" "tweakSet187.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet187.dsm" -na; -connectAttr "tweak160.msg" "tweakSet160.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts320.ig" - ; -connectAttr "groupId320.id" "groupParts320.gi"; -connectAttr "mgear_curveCns161GroupParts.og" "mgear_curveCns161.ip[0].ig"; -connectAttr "mgear_curveCns161GroupId.id" "mgear_curveCns161.ip[0].gi"; -connectAttr "mouth_C0_liplow.wm" "mgear_curveCns161.inputs[0]"; -connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns161.inputs[1]"; -connectAttr "groupParts322.og" "tweak161.ip[0].ig"; -connectAttr "groupId322.id" "tweak161.ip[0].gi"; -connectAttr "mgear_curveCns161GroupId.msg" "mgear_curveCns161Set.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns161Set.dsm" +connectAttr "tweak187.msg" "tweakSet187.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_lipup|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts374.ig" + ; +connectAttr "groupId374.id" "groupParts374.gi"; +connectAttr "mgear_curveCns188GroupParts.og" "mgear_curveCns188.ip[0].ig"; +connectAttr "mgear_curveCns188GroupId.id" "mgear_curveCns188.ip[0].gi"; +connectAttr "mouth_C0_liplow.wm" "mgear_curveCns188.inputs[0]"; +connectAttr "mouth_C0_rotcenter.wm" "mgear_curveCns188.inputs[1]"; +connectAttr "groupParts376.og" "tweak188.ip[0].ig"; +connectAttr "groupId376.id" "tweak188.ip[0].gi"; +connectAttr "mgear_curveCns188GroupId.msg" "mgear_curveCns188Set.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[0]" "mgear_curveCns188Set.dsm" -na; -connectAttr "mgear_curveCns161.msg" "mgear_curveCns161Set.ub[0]"; -connectAttr "tweak161.og[0]" "mgear_curveCns161GroupParts.ig"; -connectAttr "mgear_curveCns161GroupId.id" "mgear_curveCns161GroupParts.gi"; -connectAttr "groupId322.msg" "tweakSet161.gn" -na; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet161.dsm" +connectAttr "mgear_curveCns188.msg" "mgear_curveCns188Set.ub[0]"; +connectAttr "tweak188.og[0]" "mgear_curveCns188GroupParts.ig"; +connectAttr "mgear_curveCns188GroupId.id" "mgear_curveCns188GroupParts.gi"; +connectAttr "groupId376.msg" "tweakSet188.gn" -na; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShape.iog.og[1]" "tweakSet188.dsm" -na; -connectAttr "tweak161.msg" "tweakSet161.ub[0]"; -connectAttr "|guide|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts322.ig" - ; -connectAttr "groupId322.id" "groupParts322.gi"; -connectAttr "mgear_curveCns162GroupParts.og" "mgear_curveCns162.ip[0].ig"; -connectAttr "mgear_curveCns162GroupId.id" "mgear_curveCns162.ip[0].gi"; -connectAttr "mouth_C0_root.wm" "mgear_curveCns162.inputs[0]"; -connectAttr "mouth_C0_jaw.wm" "mgear_curveCns162.inputs[1]"; -connectAttr "groupParts324.og" "tweak162.ip[0].ig"; -connectAttr "groupId324.id" "tweak162.ip[0].gi"; -connectAttr "mgear_curveCns162GroupId.msg" "mgear_curveCns162Set.gn" -na; -connectAttr "mouth_C0_crv7Shape.iog.og[0]" "mgear_curveCns162Set.dsm" -na; -connectAttr "mgear_curveCns162.msg" "mgear_curveCns162Set.ub[0]"; -connectAttr "tweak162.og[0]" "mgear_curveCns162GroupParts.ig"; -connectAttr "mgear_curveCns162GroupId.id" "mgear_curveCns162GroupParts.gi"; -connectAttr "groupId324.msg" "tweakSet162.gn" -na; -connectAttr "mouth_C0_crv7Shape.iog.og[1]" "tweakSet162.dsm" -na; -connectAttr "tweak162.msg" "tweakSet162.ub[0]"; -connectAttr "mouth_C0_crv7ShapeOrig.ws" "groupParts324.ig"; -connectAttr "groupId324.id" "groupParts324.gi"; -connectAttr "mgear_curveCns163GroupParts.og" "mgear_curveCns163.ip[0].ig"; -connectAttr "mgear_curveCns163GroupId.id" "mgear_curveCns163.ip[0].gi"; -connectAttr "eye_L0_root.wm" "mgear_curveCns163.inputs[0]"; -connectAttr "eye_L0_look.wm" "mgear_curveCns163.inputs[1]"; -connectAttr "groupParts326.og" "tweak163.ip[0].ig"; -connectAttr "groupId326.id" "tweak163.ip[0].gi"; -connectAttr "mgear_curveCns163GroupId.msg" "mgear_curveCns163Set.gn" -na; -connectAttr "eye_L0_crvShape.iog.og[0]" "mgear_curveCns163Set.dsm" -na; -connectAttr "mgear_curveCns163.msg" "mgear_curveCns163Set.ub[0]"; -connectAttr "tweak163.og[0]" "mgear_curveCns163GroupParts.ig"; -connectAttr "mgear_curveCns163GroupId.id" "mgear_curveCns163GroupParts.gi"; -connectAttr "groupId326.msg" "tweakSet163.gn" -na; -connectAttr "eye_L0_crvShape.iog.og[1]" "tweakSet163.dsm" -na; -connectAttr "tweak163.msg" "tweakSet163.ub[0]"; -connectAttr "eye_L0_crvShapeOrig.ws" "groupParts326.ig"; -connectAttr "groupId326.id" "groupParts326.gi"; -connectAttr "mgear_curveCns164GroupParts.og" "mgear_curveCns164.ip[0].ig"; -connectAttr "mgear_curveCns164GroupId.id" "mgear_curveCns164.ip[0].gi"; -connectAttr "eye_R0_root.wm" "mgear_curveCns164.inputs[0]"; -connectAttr "eye_R0_look.wm" "mgear_curveCns164.inputs[1]"; -connectAttr "groupParts328.og" "tweak164.ip[0].ig"; -connectAttr "groupId328.id" "tweak164.ip[0].gi"; -connectAttr "mgear_curveCns164GroupId.msg" "mgear_curveCns164Set.gn" -na; -connectAttr "eye_R0_crvShape.iog.og[0]" "mgear_curveCns164Set.dsm" -na; -connectAttr "mgear_curveCns164.msg" "mgear_curveCns164Set.ub[0]"; -connectAttr "tweak164.og[0]" "mgear_curveCns164GroupParts.ig"; -connectAttr "mgear_curveCns164GroupId.id" "mgear_curveCns164GroupParts.gi"; -connectAttr "groupId328.msg" "tweakSet164.gn" -na; -connectAttr "eye_R0_crvShape.iog.og[1]" "tweakSet164.dsm" -na; -connectAttr "tweak164.msg" "tweakSet164.ub[0]"; -connectAttr "eye_R0_crvShapeOrig.ws" "groupParts328.ig"; -connectAttr "groupId328.id" "groupParts328.gi"; -connectAttr "shoulder_L0_blade.bladeRollOffset" "unitConversion30.i"; -connectAttr "mgear_curveCns165GroupParts.og" "mgear_curveCns165.ip[0].ig"; -connectAttr "mgear_curveCns165GroupId.id" "mgear_curveCns165.ip[0].gi"; -connectAttr "shoulder_L0_root.wm" "mgear_curveCns165.inputs[0]"; -connectAttr "shoulder_L0_0_loc.wm" "mgear_curveCns165.inputs[1]"; -connectAttr "groupParts330.og" "tweak165.ip[0].ig"; -connectAttr "groupId330.id" "tweak165.ip[0].gi"; -connectAttr "mgear_curveCns165GroupId.msg" "mgear_curveCns165Set.gn" -na; -connectAttr "shoulder_L0_crvShape.iog.og[0]" "mgear_curveCns165Set.dsm" -na; -connectAttr "mgear_curveCns165.msg" "mgear_curveCns165Set.ub[0]"; -connectAttr "tweak165.og[0]" "mgear_curveCns165GroupParts.ig"; -connectAttr "mgear_curveCns165GroupId.id" "mgear_curveCns165GroupParts.gi"; -connectAttr "groupId330.msg" "tweakSet165.gn" -na; -connectAttr "shoulder_L0_crvShape.iog.og[1]" "tweakSet165.dsm" -na; -connectAttr "tweak165.msg" "tweakSet165.ub[0]"; -connectAttr "shoulder_L0_crvShapeOrig.ws" "groupParts330.ig"; -connectAttr "groupId330.id" "groupParts330.gi"; -connectAttr "mgear_curveCns166GroupParts.og" "mgear_curveCns166.ip[0].ig"; -connectAttr "mgear_curveCns166GroupId.id" "mgear_curveCns166.ip[0].gi"; -connectAttr "legFront_L0_root.wm" "mgear_curveCns166.inputs[0]"; -connectAttr "legFront_L0_knee.wm" "mgear_curveCns166.inputs[1]"; -connectAttr "legFront_L0_ankle.wm" "mgear_curveCns166.inputs[2]"; -connectAttr "legFront_L0_foot.wm" "mgear_curveCns166.inputs[3]"; -connectAttr "legFront_L0_eff.wm" "mgear_curveCns166.inputs[4]"; -connectAttr "groupParts332.og" "tweak166.ip[0].ig"; -connectAttr "groupId332.id" "tweak166.ip[0].gi"; -connectAttr "mgear_curveCns166GroupId.msg" "mgear_curveCns166Set.gn" -na; -connectAttr "legFront_L0_crvShape1.iog.og[0]" "mgear_curveCns166Set.dsm" -na; -connectAttr "mgear_curveCns166.msg" "mgear_curveCns166Set.ub[0]"; -connectAttr "tweak166.og[0]" "mgear_curveCns166GroupParts.ig"; -connectAttr "mgear_curveCns166GroupId.id" "mgear_curveCns166GroupParts.gi"; -connectAttr "groupId332.msg" "tweakSet166.gn" -na; -connectAttr "legFront_L0_crvShape1.iog.og[1]" "tweakSet166.dsm" -na; -connectAttr "tweak166.msg" "tweakSet166.ub[0]"; -connectAttr "legFront_L0_crvShape1Orig.ws" "groupParts332.ig"; -connectAttr "groupId332.id" "groupParts332.gi"; -connectAttr "mgear_curveCns167GroupParts.og" "mgear_curveCns167.ip[0].ig"; -connectAttr "mgear_curveCns167GroupId.id" "mgear_curveCns167.ip[0].gi"; -connectAttr "footFront_L0_root.wm" "mgear_curveCns167.inputs[0]"; -connectAttr "footFront_L0_0_loc.wm" "mgear_curveCns167.inputs[1]"; -connectAttr "footFront_L0_1_loc.wm" "mgear_curveCns167.inputs[2]"; -connectAttr "groupParts334.og" "tweak167.ip[0].ig"; -connectAttr "groupId334.id" "tweak167.ip[0].gi"; -connectAttr "mgear_curveCns167GroupId.msg" "mgear_curveCns167Set.gn" -na; -connectAttr "footFront_L0_crvShape.iog.og[0]" "mgear_curveCns167Set.dsm" -na; -connectAttr "mgear_curveCns167.msg" "mgear_curveCns167Set.ub[0]"; -connectAttr "tweak167.og[0]" "mgear_curveCns167GroupParts.ig"; -connectAttr "mgear_curveCns167GroupId.id" "mgear_curveCns167GroupParts.gi"; -connectAttr "groupId334.msg" "tweakSet167.gn" -na; -connectAttr "footFront_L0_crvShape.iog.og[1]" "tweakSet167.dsm" -na; -connectAttr "tweak167.msg" "tweakSet167.ub[0]"; -connectAttr "footFront_L0_crvShapeOrig.ws" "groupParts334.ig"; -connectAttr "groupId334.id" "groupParts334.gi"; -connectAttr "mgear_curveCns168GroupParts.og" "mgear_curveCns168.ip[0].ig"; -connectAttr "mgear_curveCns168GroupId.id" "mgear_curveCns168.ip[0].gi"; -connectAttr "footFront_L0_root.wm" "mgear_curveCns168.inputs[0]"; -connectAttr "footFront_L0_heel.wm" "mgear_curveCns168.inputs[1]"; -connectAttr "footFront_L0_outpivot.wm" "mgear_curveCns168.inputs[2]"; -connectAttr "footFront_L0_heel.wm" "mgear_curveCns168.inputs[3]"; -connectAttr "footFront_L0_inpivot.wm" "mgear_curveCns168.inputs[4]"; -connectAttr "groupParts336.og" "tweak168.ip[0].ig"; -connectAttr "groupId336.id" "tweak168.ip[0].gi"; -connectAttr "mgear_curveCns168GroupId.msg" "mgear_curveCns168Set.gn" -na; -connectAttr "footFront_L0_Shape1.iog.og[0]" "mgear_curveCns168Set.dsm" -na; -connectAttr "mgear_curveCns168.msg" "mgear_curveCns168Set.ub[0]"; -connectAttr "tweak168.og[0]" "mgear_curveCns168GroupParts.ig"; -connectAttr "mgear_curveCns168GroupId.id" "mgear_curveCns168GroupParts.gi"; -connectAttr "groupId336.msg" "tweakSet168.gn" -na; -connectAttr "footFront_L0_Shape1.iog.og[1]" "tweakSet168.dsm" -na; -connectAttr "tweak168.msg" "tweakSet168.ub[0]"; -connectAttr "footFront_L0_Shape1Orig.ws" "groupParts336.ig"; -connectAttr "groupId336.id" "groupParts336.gi"; -connectAttr "shoulder_R0_blade.bladeRollOffset" "unitConversion31.i"; -connectAttr "mgear_curveCns169GroupParts.og" "mgear_curveCns169.ip[0].ig"; -connectAttr "mgear_curveCns169GroupId.id" "mgear_curveCns169.ip[0].gi"; -connectAttr "shoulder_R0_root.wm" "mgear_curveCns169.inputs[0]"; -connectAttr "shoulder_R0_0_loc.wm" "mgear_curveCns169.inputs[1]"; -connectAttr "groupParts338.og" "tweak169.ip[0].ig"; -connectAttr "groupId338.id" "tweak169.ip[0].gi"; -connectAttr "mgear_curveCns169GroupId.msg" "mgear_curveCns169Set.gn" -na; -connectAttr "shoulder_R0_crvShape.iog.og[0]" "mgear_curveCns169Set.dsm" -na; -connectAttr "mgear_curveCns169.msg" "mgear_curveCns169Set.ub[0]"; -connectAttr "tweak169.og[0]" "mgear_curveCns169GroupParts.ig"; -connectAttr "mgear_curveCns169GroupId.id" "mgear_curveCns169GroupParts.gi"; -connectAttr "groupId338.msg" "tweakSet169.gn" -na; -connectAttr "shoulder_R0_crvShape.iog.og[1]" "tweakSet169.dsm" -na; -connectAttr "tweak169.msg" "tweakSet169.ub[0]"; -connectAttr "shoulder_R0_crvShapeOrig.ws" "groupParts338.ig"; -connectAttr "groupId338.id" "groupParts338.gi"; -connectAttr "mgear_curveCns170GroupParts.og" "mgear_curveCns170.ip[0].ig"; -connectAttr "mgear_curveCns170GroupId.id" "mgear_curveCns170.ip[0].gi"; -connectAttr "legFront_R0_root.wm" "mgear_curveCns170.inputs[0]"; -connectAttr "legFront_R0_knee.wm" "mgear_curveCns170.inputs[1]"; -connectAttr "legFront_R0_ankle.wm" "mgear_curveCns170.inputs[2]"; -connectAttr "legFront_R0_foot.wm" "mgear_curveCns170.inputs[3]"; -connectAttr "legFront_R0_eff.wm" "mgear_curveCns170.inputs[4]"; -connectAttr "groupParts340.og" "tweak170.ip[0].ig"; -connectAttr "groupId340.id" "tweak170.ip[0].gi"; -connectAttr "mgear_curveCns170GroupId.msg" "mgear_curveCns170Set.gn" -na; -connectAttr "legFront_R0_crvShape1.iog.og[0]" "mgear_curveCns170Set.dsm" -na; -connectAttr "mgear_curveCns170.msg" "mgear_curveCns170Set.ub[0]"; -connectAttr "tweak170.og[0]" "mgear_curveCns170GroupParts.ig"; -connectAttr "mgear_curveCns170GroupId.id" "mgear_curveCns170GroupParts.gi"; -connectAttr "groupId340.msg" "tweakSet170.gn" -na; -connectAttr "legFront_R0_crvShape1.iog.og[1]" "tweakSet170.dsm" -na; -connectAttr "tweak170.msg" "tweakSet170.ub[0]"; -connectAttr "legFront_R0_crvShape1Orig.ws" "groupParts340.ig"; -connectAttr "groupId340.id" "groupParts340.gi"; -connectAttr "mgear_curveCns171GroupParts.og" "mgear_curveCns171.ip[0].ig"; -connectAttr "mgear_curveCns171GroupId.id" "mgear_curveCns171.ip[0].gi"; -connectAttr "footFront_R0_root.wm" "mgear_curveCns171.inputs[0]"; -connectAttr "footFront_R0_0_loc.wm" "mgear_curveCns171.inputs[1]"; -connectAttr "footFront_R0_1_loc.wm" "mgear_curveCns171.inputs[2]"; -connectAttr "groupParts342.og" "tweak171.ip[0].ig"; -connectAttr "groupId342.id" "tweak171.ip[0].gi"; -connectAttr "mgear_curveCns171GroupId.msg" "mgear_curveCns171Set.gn" -na; -connectAttr "footFront_R0_crvShape.iog.og[0]" "mgear_curveCns171Set.dsm" -na; -connectAttr "mgear_curveCns171.msg" "mgear_curveCns171Set.ub[0]"; -connectAttr "tweak171.og[0]" "mgear_curveCns171GroupParts.ig"; -connectAttr "mgear_curveCns171GroupId.id" "mgear_curveCns171GroupParts.gi"; -connectAttr "groupId342.msg" "tweakSet171.gn" -na; -connectAttr "footFront_R0_crvShape.iog.og[1]" "tweakSet171.dsm" -na; -connectAttr "tweak171.msg" "tweakSet171.ub[0]"; -connectAttr "footFront_R0_crvShapeOrig.ws" "groupParts342.ig"; -connectAttr "groupId342.id" "groupParts342.gi"; -connectAttr "mgear_curveCns172GroupParts.og" "mgear_curveCns172.ip[0].ig"; -connectAttr "mgear_curveCns172GroupId.id" "mgear_curveCns172.ip[0].gi"; -connectAttr "footFront_R0_root.wm" "mgear_curveCns172.inputs[0]"; -connectAttr "footFront_R0_heel.wm" "mgear_curveCns172.inputs[1]"; -connectAttr "footFront_R0_outpivot.wm" "mgear_curveCns172.inputs[2]"; -connectAttr "footFront_R0_heel.wm" "mgear_curveCns172.inputs[3]"; -connectAttr "footFront_R0_inpivot.wm" "mgear_curveCns172.inputs[4]"; -connectAttr "groupParts344.og" "tweak172.ip[0].ig"; -connectAttr "groupId344.id" "tweak172.ip[0].gi"; -connectAttr "mgear_curveCns172GroupId.msg" "mgear_curveCns172Set.gn" -na; -connectAttr "footFront_R0_Shape1.iog.og[0]" "mgear_curveCns172Set.dsm" -na; -connectAttr "mgear_curveCns172.msg" "mgear_curveCns172Set.ub[0]"; -connectAttr "tweak172.og[0]" "mgear_curveCns172GroupParts.ig"; -connectAttr "mgear_curveCns172GroupId.id" "mgear_curveCns172GroupParts.gi"; -connectAttr "groupId344.msg" "tweakSet172.gn" -na; -connectAttr "footFront_R0_Shape1.iog.og[1]" "tweakSet172.dsm" -na; -connectAttr "tweak172.msg" "tweakSet172.ub[0]"; -connectAttr "footFront_R0_Shape1Orig.ws" "groupParts344.ig"; -connectAttr "groupId344.id" "groupParts344.gi"; -connectAttr "mgear_curveCns173GroupParts.og" "mgear_curveCns173.ip[0].ig"; -connectAttr "mgear_curveCns173GroupId.id" "mgear_curveCns173.ip[0].gi"; -connectAttr "legBack_L0_root.wm" "mgear_curveCns173.inputs[0]"; -connectAttr "legBack_L0_knee.wm" "mgear_curveCns173.inputs[1]"; -connectAttr "legBack_L0_ankle.wm" "mgear_curveCns173.inputs[2]"; -connectAttr "legBack_L0_foot.wm" "mgear_curveCns173.inputs[3]"; -connectAttr "legBack_L0_eff.wm" "mgear_curveCns173.inputs[4]"; -connectAttr "groupParts346.og" "tweak173.ip[0].ig"; -connectAttr "groupId346.id" "tweak173.ip[0].gi"; -connectAttr "mgear_curveCns173GroupId.msg" "mgear_curveCns173Set.gn" -na; -connectAttr "legBack_L0_crvShape1.iog.og[0]" "mgear_curveCns173Set.dsm" -na; -connectAttr "mgear_curveCns173.msg" "mgear_curveCns173Set.ub[0]"; -connectAttr "tweak173.og[0]" "mgear_curveCns173GroupParts.ig"; -connectAttr "mgear_curveCns173GroupId.id" "mgear_curveCns173GroupParts.gi"; -connectAttr "groupId346.msg" "tweakSet173.gn" -na; -connectAttr "legBack_L0_crvShape1.iog.og[1]" "tweakSet173.dsm" -na; -connectAttr "tweak173.msg" "tweakSet173.ub[0]"; -connectAttr "legBack_L0_crvShape1Orig.ws" "groupParts346.ig"; -connectAttr "groupId346.id" "groupParts346.gi"; -connectAttr "mgear_curveCns174GroupParts.og" "mgear_curveCns174.ip[0].ig"; -connectAttr "mgear_curveCns174GroupId.id" "mgear_curveCns174.ip[0].gi"; -connectAttr "footBack_L0_root.wm" "mgear_curveCns174.inputs[0]"; -connectAttr "footBack_L0_0_loc.wm" "mgear_curveCns174.inputs[1]"; -connectAttr "footBack_L0_1_loc.wm" "mgear_curveCns174.inputs[2]"; -connectAttr "groupParts348.og" "tweak174.ip[0].ig"; -connectAttr "groupId348.id" "tweak174.ip[0].gi"; -connectAttr "mgear_curveCns174GroupId.msg" "mgear_curveCns174Set.gn" -na; -connectAttr "footBack_L0_crvShape.iog.og[0]" "mgear_curveCns174Set.dsm" -na; -connectAttr "mgear_curveCns174.msg" "mgear_curveCns174Set.ub[0]"; -connectAttr "tweak174.og[0]" "mgear_curveCns174GroupParts.ig"; -connectAttr "mgear_curveCns174GroupId.id" "mgear_curveCns174GroupParts.gi"; -connectAttr "groupId348.msg" "tweakSet174.gn" -na; -connectAttr "footBack_L0_crvShape.iog.og[1]" "tweakSet174.dsm" -na; -connectAttr "tweak174.msg" "tweakSet174.ub[0]"; -connectAttr "footBack_L0_crvShapeOrig.ws" "groupParts348.ig"; -connectAttr "groupId348.id" "groupParts348.gi"; -connectAttr "mgear_curveCns175GroupParts.og" "mgear_curveCns175.ip[0].ig"; -connectAttr "mgear_curveCns175GroupId.id" "mgear_curveCns175.ip[0].gi"; -connectAttr "footBack_L0_root.wm" "mgear_curveCns175.inputs[0]"; -connectAttr "footBack_L0_heel.wm" "mgear_curveCns175.inputs[1]"; -connectAttr "footBack_L0_outpivot.wm" "mgear_curveCns175.inputs[2]"; -connectAttr "footBack_L0_heel.wm" "mgear_curveCns175.inputs[3]"; -connectAttr "footBack_L0_inpivot.wm" "mgear_curveCns175.inputs[4]"; -connectAttr "groupParts350.og" "tweak175.ip[0].ig"; -connectAttr "groupId350.id" "tweak175.ip[0].gi"; -connectAttr "mgear_curveCns175GroupId.msg" "mgear_curveCns175Set.gn" -na; -connectAttr "footBack_L0_Shape1.iog.og[0]" "mgear_curveCns175Set.dsm" -na; -connectAttr "mgear_curveCns175.msg" "mgear_curveCns175Set.ub[0]"; -connectAttr "tweak175.og[0]" "mgear_curveCns175GroupParts.ig"; -connectAttr "mgear_curveCns175GroupId.id" "mgear_curveCns175GroupParts.gi"; -connectAttr "groupId350.msg" "tweakSet175.gn" -na; -connectAttr "footBack_L0_Shape1.iog.og[1]" "tweakSet175.dsm" -na; -connectAttr "tweak175.msg" "tweakSet175.ub[0]"; -connectAttr "footBack_L0_Shape1Orig.ws" "groupParts350.ig"; -connectAttr "groupId350.id" "groupParts350.gi"; -connectAttr "mgear_curveCns176GroupParts.og" "mgear_curveCns176.ip[0].ig"; -connectAttr "mgear_curveCns176GroupId.id" "mgear_curveCns176.ip[0].gi"; -connectAttr "legBack_R0_root.wm" "mgear_curveCns176.inputs[0]"; -connectAttr "legBack_R0_knee.wm" "mgear_curveCns176.inputs[1]"; -connectAttr "legBack_R0_ankle.wm" "mgear_curveCns176.inputs[2]"; -connectAttr "legBack_R0_foot.wm" "mgear_curveCns176.inputs[3]"; -connectAttr "legBack_R0_eff.wm" "mgear_curveCns176.inputs[4]"; -connectAttr "groupParts352.og" "tweak176.ip[0].ig"; -connectAttr "groupId352.id" "tweak176.ip[0].gi"; -connectAttr "mgear_curveCns176GroupId.msg" "mgear_curveCns176Set.gn" -na; -connectAttr "legBack_R0_crvShape1.iog.og[0]" "mgear_curveCns176Set.dsm" -na; -connectAttr "mgear_curveCns176.msg" "mgear_curveCns176Set.ub[0]"; -connectAttr "tweak176.og[0]" "mgear_curveCns176GroupParts.ig"; -connectAttr "mgear_curveCns176GroupId.id" "mgear_curveCns176GroupParts.gi"; -connectAttr "groupId352.msg" "tweakSet176.gn" -na; -connectAttr "legBack_R0_crvShape1.iog.og[1]" "tweakSet176.dsm" -na; -connectAttr "tweak176.msg" "tweakSet176.ub[0]"; -connectAttr "legBack_R0_crvShape1Orig.ws" "groupParts352.ig"; -connectAttr "groupId352.id" "groupParts352.gi"; -connectAttr "mgear_curveCns177GroupParts.og" "mgear_curveCns177.ip[0].ig"; -connectAttr "mgear_curveCns177GroupId.id" "mgear_curveCns177.ip[0].gi"; -connectAttr "footBack_R0_root.wm" "mgear_curveCns177.inputs[0]"; -connectAttr "footBack_R0_0_loc.wm" "mgear_curveCns177.inputs[1]"; -connectAttr "footBack_R0_1_loc.wm" "mgear_curveCns177.inputs[2]"; -connectAttr "groupParts354.og" "tweak177.ip[0].ig"; -connectAttr "groupId354.id" "tweak177.ip[0].gi"; -connectAttr "mgear_curveCns177GroupId.msg" "mgear_curveCns177Set.gn" -na; -connectAttr "footBack_R0_crvShape.iog.og[0]" "mgear_curveCns177Set.dsm" -na; -connectAttr "mgear_curveCns177.msg" "mgear_curveCns177Set.ub[0]"; -connectAttr "tweak177.og[0]" "mgear_curveCns177GroupParts.ig"; -connectAttr "mgear_curveCns177GroupId.id" "mgear_curveCns177GroupParts.gi"; -connectAttr "groupId354.msg" "tweakSet177.gn" -na; -connectAttr "footBack_R0_crvShape.iog.og[1]" "tweakSet177.dsm" -na; -connectAttr "tweak177.msg" "tweakSet177.ub[0]"; -connectAttr "footBack_R0_crvShapeOrig.ws" "groupParts354.ig"; -connectAttr "groupId354.id" "groupParts354.gi"; -connectAttr "mgear_curveCns178GroupParts.og" "mgear_curveCns178.ip[0].ig"; -connectAttr "mgear_curveCns178GroupId.id" "mgear_curveCns178.ip[0].gi"; -connectAttr "footBack_R0_root.wm" "mgear_curveCns178.inputs[0]"; -connectAttr "footBack_R0_heel.wm" "mgear_curveCns178.inputs[1]"; -connectAttr "footBack_R0_outpivot.wm" "mgear_curveCns178.inputs[2]"; -connectAttr "footBack_R0_heel.wm" "mgear_curveCns178.inputs[3]"; -connectAttr "footBack_R0_inpivot.wm" "mgear_curveCns178.inputs[4]"; -connectAttr "groupParts356.og" "tweak178.ip[0].ig"; -connectAttr "groupId356.id" "tweak178.ip[0].gi"; -connectAttr "mgear_curveCns178GroupId.msg" "mgear_curveCns178Set.gn" -na; -connectAttr "footBack_R0_Shape1.iog.og[0]" "mgear_curveCns178Set.dsm" -na; -connectAttr "mgear_curveCns178.msg" "mgear_curveCns178Set.ub[0]"; -connectAttr "tweak178.og[0]" "mgear_curveCns178GroupParts.ig"; -connectAttr "mgear_curveCns178GroupId.id" "mgear_curveCns178GroupParts.gi"; -connectAttr "groupId356.msg" "tweakSet178.gn" -na; -connectAttr "footBack_R0_Shape1.iog.og[1]" "tweakSet178.dsm" -na; -connectAttr "tweak178.msg" "tweakSet178.ub[0]"; -connectAttr "footBack_R0_Shape1Orig.ws" "groupParts356.ig"; -connectAttr "groupId356.id" "groupParts356.gi"; +connectAttr "tweak188.msg" "tweakSet188.ub[0]"; +connectAttr "|guide|global_C0_root|local_C0_root|body_C0_root|spine_C0_root|spine_C0_eff|neck_C0_root|neck_C0_neck|neck_C0_head|mouth_C0_root|mouth_C0_rotcenter|mouth_C0_liplow|mouth_C0_crv|mouth_C0_crvShapeOrig.ws" "groupParts376.ig" + ; +connectAttr "groupId376.id" "groupParts376.gi"; +connectAttr "mgear_curveCns189GroupParts.og" "mgear_curveCns189.ip[0].ig"; +connectAttr "mgear_curveCns189GroupId.id" "mgear_curveCns189.ip[0].gi"; +connectAttr "mouth_C0_root.wm" "mgear_curveCns189.inputs[0]"; +connectAttr "mouth_C0_jaw.wm" "mgear_curveCns189.inputs[1]"; +connectAttr "groupParts378.og" "tweak189.ip[0].ig"; +connectAttr "groupId378.id" "tweak189.ip[0].gi"; +connectAttr "mgear_curveCns189GroupId.msg" "mgear_curveCns189Set.gn" -na; +connectAttr "mouth_C0_crv8Shape.iog.og[0]" "mgear_curveCns189Set.dsm" -na; +connectAttr "mgear_curveCns189.msg" "mgear_curveCns189Set.ub[0]"; +connectAttr "tweak189.og[0]" "mgear_curveCns189GroupParts.ig"; +connectAttr "mgear_curveCns189GroupId.id" "mgear_curveCns189GroupParts.gi"; +connectAttr "groupId378.msg" "tweakSet189.gn" -na; +connectAttr "mouth_C0_crv8Shape.iog.og[1]" "tweakSet189.dsm" -na; +connectAttr "tweak189.msg" "tweakSet189.ub[0]"; +connectAttr "mouth_C0_crv8ShapeOrig.ws" "groupParts378.ig"; +connectAttr "groupId378.id" "groupParts378.gi"; +connectAttr "mgear_curveCns190GroupParts.og" "mgear_curveCns190.ip[0].ig"; +connectAttr "mgear_curveCns190GroupId.id" "mgear_curveCns190.ip[0].gi"; +connectAttr "eye_L0_root.wm" "mgear_curveCns190.inputs[0]"; +connectAttr "eye_L0_look.wm" "mgear_curveCns190.inputs[1]"; +connectAttr "groupParts380.og" "tweak190.ip[0].ig"; +connectAttr "groupId380.id" "tweak190.ip[0].gi"; +connectAttr "mgear_curveCns190GroupId.msg" "mgear_curveCns190Set.gn" -na; +connectAttr "eye_L0_crvShape.iog.og[0]" "mgear_curveCns190Set.dsm" -na; +connectAttr "mgear_curveCns190.msg" "mgear_curveCns190Set.ub[0]"; +connectAttr "tweak190.og[0]" "mgear_curveCns190GroupParts.ig"; +connectAttr "mgear_curveCns190GroupId.id" "mgear_curveCns190GroupParts.gi"; +connectAttr "groupId380.msg" "tweakSet190.gn" -na; +connectAttr "eye_L0_crvShape.iog.og[1]" "tweakSet190.dsm" -na; +connectAttr "tweak190.msg" "tweakSet190.ub[0]"; +connectAttr "eye_L0_crvShapeOrig.ws" "groupParts380.ig"; +connectAttr "groupId380.id" "groupParts380.gi"; +connectAttr "mgear_curveCns191GroupParts.og" "mgear_curveCns191.ip[0].ig"; +connectAttr "mgear_curveCns191GroupId.id" "mgear_curveCns191.ip[0].gi"; +connectAttr "eye_R0_root.wm" "mgear_curveCns191.inputs[0]"; +connectAttr "eye_R0_look.wm" "mgear_curveCns191.inputs[1]"; +connectAttr "groupParts382.og" "tweak191.ip[0].ig"; +connectAttr "groupId382.id" "tweak191.ip[0].gi"; +connectAttr "mgear_curveCns191GroupId.msg" "mgear_curveCns191Set.gn" -na; +connectAttr "eye_R0_crvShape.iog.og[0]" "mgear_curveCns191Set.dsm" -na; +connectAttr "mgear_curveCns191.msg" "mgear_curveCns191Set.ub[0]"; +connectAttr "tweak191.og[0]" "mgear_curveCns191GroupParts.ig"; +connectAttr "mgear_curveCns191GroupId.id" "mgear_curveCns191GroupParts.gi"; +connectAttr "groupId382.msg" "tweakSet191.gn" -na; +connectAttr "eye_R0_crvShape.iog.og[1]" "tweakSet191.dsm" -na; +connectAttr "tweak191.msg" "tweakSet191.ub[0]"; +connectAttr "eye_R0_crvShapeOrig.ws" "groupParts382.ig"; +connectAttr "groupId382.id" "groupParts382.gi"; +connectAttr "shoulder_L0_blade.bladeRollOffset" "unitConversion34.i"; +connectAttr "mgear_curveCns192GroupParts.og" "mgear_curveCns192.ip[0].ig"; +connectAttr "mgear_curveCns192GroupId.id" "mgear_curveCns192.ip[0].gi"; +connectAttr "shoulder_L0_root.wm" "mgear_curveCns192.inputs[0]"; +connectAttr "shoulder_L0_0_loc.wm" "mgear_curveCns192.inputs[1]"; +connectAttr "groupParts384.og" "tweak192.ip[0].ig"; +connectAttr "groupId384.id" "tweak192.ip[0].gi"; +connectAttr "mgear_curveCns192GroupId.msg" "mgear_curveCns192Set.gn" -na; +connectAttr "shoulder_L0_crvShape.iog.og[0]" "mgear_curveCns192Set.dsm" -na; +connectAttr "mgear_curveCns192.msg" "mgear_curveCns192Set.ub[0]"; +connectAttr "tweak192.og[0]" "mgear_curveCns192GroupParts.ig"; +connectAttr "mgear_curveCns192GroupId.id" "mgear_curveCns192GroupParts.gi"; +connectAttr "groupId384.msg" "tweakSet192.gn" -na; +connectAttr "shoulder_L0_crvShape.iog.og[1]" "tweakSet192.dsm" -na; +connectAttr "tweak192.msg" "tweakSet192.ub[0]"; +connectAttr "shoulder_L0_crvShapeOrig.ws" "groupParts384.ig"; +connectAttr "groupId384.id" "groupParts384.gi"; +connectAttr "mgear_curveCns193GroupParts.og" "mgear_curveCns193.ip[0].ig"; +connectAttr "mgear_curveCns193GroupId.id" "mgear_curveCns193.ip[0].gi"; +connectAttr "legFront_L0_root.wm" "mgear_curveCns193.inputs[0]"; +connectAttr "legFront_L0_knee.wm" "mgear_curveCns193.inputs[1]"; +connectAttr "legFront_L0_ankle.wm" "mgear_curveCns193.inputs[2]"; +connectAttr "legFront_L0_foot.wm" "mgear_curveCns193.inputs[3]"; +connectAttr "legFront_L0_eff.wm" "mgear_curveCns193.inputs[4]"; +connectAttr "groupParts386.og" "tweak193.ip[0].ig"; +connectAttr "groupId386.id" "tweak193.ip[0].gi"; +connectAttr "mgear_curveCns193GroupId.msg" "mgear_curveCns193Set.gn" -na; +connectAttr "legFront_L0_crvShape1.iog.og[0]" "mgear_curveCns193Set.dsm" -na; +connectAttr "mgear_curveCns193.msg" "mgear_curveCns193Set.ub[0]"; +connectAttr "tweak193.og[0]" "mgear_curveCns193GroupParts.ig"; +connectAttr "mgear_curveCns193GroupId.id" "mgear_curveCns193GroupParts.gi"; +connectAttr "groupId386.msg" "tweakSet193.gn" -na; +connectAttr "legFront_L0_crvShape1.iog.og[1]" "tweakSet193.dsm" -na; +connectAttr "tweak193.msg" "tweakSet193.ub[0]"; +connectAttr "legFront_L0_crvShape1Orig.ws" "groupParts386.ig"; +connectAttr "groupId386.id" "groupParts386.gi"; +connectAttr "mgear_curveCns194GroupParts.og" "mgear_curveCns194.ip[0].ig"; +connectAttr "mgear_curveCns194GroupId.id" "mgear_curveCns194.ip[0].gi"; +connectAttr "footFront_L0_root.wm" "mgear_curveCns194.inputs[0]"; +connectAttr "footFront_L0_0_loc.wm" "mgear_curveCns194.inputs[1]"; +connectAttr "footFront_L0_1_loc.wm" "mgear_curveCns194.inputs[2]"; +connectAttr "groupParts388.og" "tweak194.ip[0].ig"; +connectAttr "groupId388.id" "tweak194.ip[0].gi"; +connectAttr "mgear_curveCns194GroupId.msg" "mgear_curveCns194Set.gn" -na; +connectAttr "footFront_L0_crvShape.iog.og[0]" "mgear_curveCns194Set.dsm" -na; +connectAttr "mgear_curveCns194.msg" "mgear_curveCns194Set.ub[0]"; +connectAttr "tweak194.og[0]" "mgear_curveCns194GroupParts.ig"; +connectAttr "mgear_curveCns194GroupId.id" "mgear_curveCns194GroupParts.gi"; +connectAttr "groupId388.msg" "tweakSet194.gn" -na; +connectAttr "footFront_L0_crvShape.iog.og[1]" "tweakSet194.dsm" -na; +connectAttr "tweak194.msg" "tweakSet194.ub[0]"; +connectAttr "footFront_L0_crvShapeOrig.ws" "groupParts388.ig"; +connectAttr "groupId388.id" "groupParts388.gi"; +connectAttr "mgear_curveCns195GroupParts.og" "mgear_curveCns195.ip[0].ig"; +connectAttr "mgear_curveCns195GroupId.id" "mgear_curveCns195.ip[0].gi"; +connectAttr "footFront_L0_root.wm" "mgear_curveCns195.inputs[0]"; +connectAttr "footFront_L0_heel.wm" "mgear_curveCns195.inputs[1]"; +connectAttr "footFront_L0_outpivot.wm" "mgear_curveCns195.inputs[2]"; +connectAttr "footFront_L0_heel.wm" "mgear_curveCns195.inputs[3]"; +connectAttr "footFront_L0_inpivot.wm" "mgear_curveCns195.inputs[4]"; +connectAttr "groupParts390.og" "tweak195.ip[0].ig"; +connectAttr "groupId390.id" "tweak195.ip[0].gi"; +connectAttr "mgear_curveCns195GroupId.msg" "mgear_curveCns195Set.gn" -na; +connectAttr "footFront_L0_Shape1.iog.og[0]" "mgear_curveCns195Set.dsm" -na; +connectAttr "mgear_curveCns195.msg" "mgear_curveCns195Set.ub[0]"; +connectAttr "tweak195.og[0]" "mgear_curveCns195GroupParts.ig"; +connectAttr "mgear_curveCns195GroupId.id" "mgear_curveCns195GroupParts.gi"; +connectAttr "groupId390.msg" "tweakSet195.gn" -na; +connectAttr "footFront_L0_Shape1.iog.og[1]" "tweakSet195.dsm" -na; +connectAttr "tweak195.msg" "tweakSet195.ub[0]"; +connectAttr "footFront_L0_Shape1Orig.ws" "groupParts390.ig"; +connectAttr "groupId390.id" "groupParts390.gi"; +connectAttr "shoulder_R0_blade.bladeRollOffset" "unitConversion35.i"; +connectAttr "mgear_curveCns196GroupParts.og" "mgear_curveCns196.ip[0].ig"; +connectAttr "mgear_curveCns196GroupId.id" "mgear_curveCns196.ip[0].gi"; +connectAttr "shoulder_R0_root.wm" "mgear_curveCns196.inputs[0]"; +connectAttr "shoulder_R0_0_loc.wm" "mgear_curveCns196.inputs[1]"; +connectAttr "groupParts392.og" "tweak196.ip[0].ig"; +connectAttr "groupId392.id" "tweak196.ip[0].gi"; +connectAttr "mgear_curveCns196GroupId.msg" "mgear_curveCns196Set.gn" -na; +connectAttr "shoulder_R0_crvShape.iog.og[0]" "mgear_curveCns196Set.dsm" -na; +connectAttr "mgear_curveCns196.msg" "mgear_curveCns196Set.ub[0]"; +connectAttr "tweak196.og[0]" "mgear_curveCns196GroupParts.ig"; +connectAttr "mgear_curveCns196GroupId.id" "mgear_curveCns196GroupParts.gi"; +connectAttr "groupId392.msg" "tweakSet196.gn" -na; +connectAttr "shoulder_R0_crvShape.iog.og[1]" "tweakSet196.dsm" -na; +connectAttr "tweak196.msg" "tweakSet196.ub[0]"; +connectAttr "shoulder_R0_crvShapeOrig.ws" "groupParts392.ig"; +connectAttr "groupId392.id" "groupParts392.gi"; +connectAttr "mgear_curveCns197GroupParts.og" "mgear_curveCns197.ip[0].ig"; +connectAttr "mgear_curveCns197GroupId.id" "mgear_curveCns197.ip[0].gi"; +connectAttr "legFront_R0_root.wm" "mgear_curveCns197.inputs[0]"; +connectAttr "legFront_R0_knee.wm" "mgear_curveCns197.inputs[1]"; +connectAttr "legFront_R0_ankle.wm" "mgear_curveCns197.inputs[2]"; +connectAttr "legFront_R0_foot.wm" "mgear_curveCns197.inputs[3]"; +connectAttr "legFront_R0_eff.wm" "mgear_curveCns197.inputs[4]"; +connectAttr "groupParts394.og" "tweak197.ip[0].ig"; +connectAttr "groupId394.id" "tweak197.ip[0].gi"; +connectAttr "mgear_curveCns197GroupId.msg" "mgear_curveCns197Set.gn" -na; +connectAttr "legFront_R0_crvShape1.iog.og[0]" "mgear_curveCns197Set.dsm" -na; +connectAttr "mgear_curveCns197.msg" "mgear_curveCns197Set.ub[0]"; +connectAttr "tweak197.og[0]" "mgear_curveCns197GroupParts.ig"; +connectAttr "mgear_curveCns197GroupId.id" "mgear_curveCns197GroupParts.gi"; +connectAttr "groupId394.msg" "tweakSet197.gn" -na; +connectAttr "legFront_R0_crvShape1.iog.og[1]" "tweakSet197.dsm" -na; +connectAttr "tweak197.msg" "tweakSet197.ub[0]"; +connectAttr "legFront_R0_crvShape1Orig.ws" "groupParts394.ig"; +connectAttr "groupId394.id" "groupParts394.gi"; +connectAttr "mgear_curveCns198GroupParts.og" "mgear_curveCns198.ip[0].ig"; +connectAttr "mgear_curveCns198GroupId.id" "mgear_curveCns198.ip[0].gi"; +connectAttr "footFront_R0_root.wm" "mgear_curveCns198.inputs[0]"; +connectAttr "footFront_R0_0_loc.wm" "mgear_curveCns198.inputs[1]"; +connectAttr "footFront_R0_1_loc.wm" "mgear_curveCns198.inputs[2]"; +connectAttr "groupParts396.og" "tweak198.ip[0].ig"; +connectAttr "groupId396.id" "tweak198.ip[0].gi"; +connectAttr "mgear_curveCns198GroupId.msg" "mgear_curveCns198Set.gn" -na; +connectAttr "footFront_R0_crvShape.iog.og[0]" "mgear_curveCns198Set.dsm" -na; +connectAttr "mgear_curveCns198.msg" "mgear_curveCns198Set.ub[0]"; +connectAttr "tweak198.og[0]" "mgear_curveCns198GroupParts.ig"; +connectAttr "mgear_curveCns198GroupId.id" "mgear_curveCns198GroupParts.gi"; +connectAttr "groupId396.msg" "tweakSet198.gn" -na; +connectAttr "footFront_R0_crvShape.iog.og[1]" "tweakSet198.dsm" -na; +connectAttr "tweak198.msg" "tweakSet198.ub[0]"; +connectAttr "footFront_R0_crvShapeOrig.ws" "groupParts396.ig"; +connectAttr "groupId396.id" "groupParts396.gi"; +connectAttr "mgear_curveCns199GroupParts.og" "mgear_curveCns199.ip[0].ig"; +connectAttr "mgear_curveCns199GroupId.id" "mgear_curveCns199.ip[0].gi"; +connectAttr "footFront_R0_root.wm" "mgear_curveCns199.inputs[0]"; +connectAttr "footFront_R0_heel.wm" "mgear_curveCns199.inputs[1]"; +connectAttr "footFront_R0_outpivot.wm" "mgear_curveCns199.inputs[2]"; +connectAttr "footFront_R0_heel.wm" "mgear_curveCns199.inputs[3]"; +connectAttr "footFront_R0_inpivot.wm" "mgear_curveCns199.inputs[4]"; +connectAttr "groupParts398.og" "tweak199.ip[0].ig"; +connectAttr "groupId398.id" "tweak199.ip[0].gi"; +connectAttr "mgear_curveCns199GroupId.msg" "mgear_curveCns199Set.gn" -na; +connectAttr "footFront_R0_Shape1.iog.og[0]" "mgear_curveCns199Set.dsm" -na; +connectAttr "mgear_curveCns199.msg" "mgear_curveCns199Set.ub[0]"; +connectAttr "tweak199.og[0]" "mgear_curveCns199GroupParts.ig"; +connectAttr "mgear_curveCns199GroupId.id" "mgear_curveCns199GroupParts.gi"; +connectAttr "groupId398.msg" "tweakSet199.gn" -na; +connectAttr "footFront_R0_Shape1.iog.og[1]" "tweakSet199.dsm" -na; +connectAttr "tweak199.msg" "tweakSet199.ub[0]"; +connectAttr "footFront_R0_Shape1Orig.ws" "groupParts398.ig"; +connectAttr "groupId398.id" "groupParts398.gi"; +connectAttr "mgear_curveCns200GroupParts.og" "mgear_curveCns200.ip[0].ig"; +connectAttr "mgear_curveCns200GroupId.id" "mgear_curveCns200.ip[0].gi"; +connectAttr "legBack_L0_root.wm" "mgear_curveCns200.inputs[0]"; +connectAttr "legBack_L0_knee.wm" "mgear_curveCns200.inputs[1]"; +connectAttr "legBack_L0_ankle.wm" "mgear_curveCns200.inputs[2]"; +connectAttr "legBack_L0_foot.wm" "mgear_curveCns200.inputs[3]"; +connectAttr "legBack_L0_eff.wm" "mgear_curveCns200.inputs[4]"; +connectAttr "groupParts400.og" "tweak200.ip[0].ig"; +connectAttr "groupId400.id" "tweak200.ip[0].gi"; +connectAttr "mgear_curveCns200GroupId.msg" "mgear_curveCns200Set.gn" -na; +connectAttr "legBack_L0_crvShape1.iog.og[0]" "mgear_curveCns200Set.dsm" -na; +connectAttr "mgear_curveCns200.msg" "mgear_curveCns200Set.ub[0]"; +connectAttr "tweak200.og[0]" "mgear_curveCns200GroupParts.ig"; +connectAttr "mgear_curveCns200GroupId.id" "mgear_curveCns200GroupParts.gi"; +connectAttr "groupId400.msg" "tweakSet200.gn" -na; +connectAttr "legBack_L0_crvShape1.iog.og[1]" "tweakSet200.dsm" -na; +connectAttr "tweak200.msg" "tweakSet200.ub[0]"; +connectAttr "legBack_L0_crvShape1Orig.ws" "groupParts400.ig"; +connectAttr "groupId400.id" "groupParts400.gi"; +connectAttr "mgear_curveCns201GroupParts.og" "mgear_curveCns201.ip[0].ig"; +connectAttr "mgear_curveCns201GroupId.id" "mgear_curveCns201.ip[0].gi"; +connectAttr "footBack_L0_root.wm" "mgear_curveCns201.inputs[0]"; +connectAttr "footBack_L0_0_loc.wm" "mgear_curveCns201.inputs[1]"; +connectAttr "footBack_L0_1_loc.wm" "mgear_curveCns201.inputs[2]"; +connectAttr "groupParts402.og" "tweak201.ip[0].ig"; +connectAttr "groupId402.id" "tweak201.ip[0].gi"; +connectAttr "mgear_curveCns201GroupId.msg" "mgear_curveCns201Set.gn" -na; +connectAttr "footBack_L0_crvShape.iog.og[0]" "mgear_curveCns201Set.dsm" -na; +connectAttr "mgear_curveCns201.msg" "mgear_curveCns201Set.ub[0]"; +connectAttr "tweak201.og[0]" "mgear_curveCns201GroupParts.ig"; +connectAttr "mgear_curveCns201GroupId.id" "mgear_curveCns201GroupParts.gi"; +connectAttr "groupId402.msg" "tweakSet201.gn" -na; +connectAttr "footBack_L0_crvShape.iog.og[1]" "tweakSet201.dsm" -na; +connectAttr "tweak201.msg" "tweakSet201.ub[0]"; +connectAttr "footBack_L0_crvShapeOrig.ws" "groupParts402.ig"; +connectAttr "groupId402.id" "groupParts402.gi"; +connectAttr "mgear_curveCns202GroupParts.og" "mgear_curveCns202.ip[0].ig"; +connectAttr "mgear_curveCns202GroupId.id" "mgear_curveCns202.ip[0].gi"; +connectAttr "footBack_L0_root.wm" "mgear_curveCns202.inputs[0]"; +connectAttr "footBack_L0_heel.wm" "mgear_curveCns202.inputs[1]"; +connectAttr "footBack_L0_outpivot.wm" "mgear_curveCns202.inputs[2]"; +connectAttr "footBack_L0_heel.wm" "mgear_curveCns202.inputs[3]"; +connectAttr "footBack_L0_inpivot.wm" "mgear_curveCns202.inputs[4]"; +connectAttr "groupParts404.og" "tweak202.ip[0].ig"; +connectAttr "groupId404.id" "tweak202.ip[0].gi"; +connectAttr "mgear_curveCns202GroupId.msg" "mgear_curveCns202Set.gn" -na; +connectAttr "footBack_L0_Shape1.iog.og[0]" "mgear_curveCns202Set.dsm" -na; +connectAttr "mgear_curveCns202.msg" "mgear_curveCns202Set.ub[0]"; +connectAttr "tweak202.og[0]" "mgear_curveCns202GroupParts.ig"; +connectAttr "mgear_curveCns202GroupId.id" "mgear_curveCns202GroupParts.gi"; +connectAttr "groupId404.msg" "tweakSet202.gn" -na; +connectAttr "footBack_L0_Shape1.iog.og[1]" "tweakSet202.dsm" -na; +connectAttr "tweak202.msg" "tweakSet202.ub[0]"; +connectAttr "footBack_L0_Shape1Orig.ws" "groupParts404.ig"; +connectAttr "groupId404.id" "groupParts404.gi"; +connectAttr "mgear_curveCns203GroupParts.og" "mgear_curveCns203.ip[0].ig"; +connectAttr "mgear_curveCns203GroupId.id" "mgear_curveCns203.ip[0].gi"; +connectAttr "legBack_R0_root.wm" "mgear_curveCns203.inputs[0]"; +connectAttr "legBack_R0_knee.wm" "mgear_curveCns203.inputs[1]"; +connectAttr "legBack_R0_ankle.wm" "mgear_curveCns203.inputs[2]"; +connectAttr "legBack_R0_foot.wm" "mgear_curveCns203.inputs[3]"; +connectAttr "legBack_R0_eff.wm" "mgear_curveCns203.inputs[4]"; +connectAttr "groupParts406.og" "tweak203.ip[0].ig"; +connectAttr "groupId406.id" "tweak203.ip[0].gi"; +connectAttr "mgear_curveCns203GroupId.msg" "mgear_curveCns203Set.gn" -na; +connectAttr "legBack_R0_crvShape1.iog.og[0]" "mgear_curveCns203Set.dsm" -na; +connectAttr "mgear_curveCns203.msg" "mgear_curveCns203Set.ub[0]"; +connectAttr "tweak203.og[0]" "mgear_curveCns203GroupParts.ig"; +connectAttr "mgear_curveCns203GroupId.id" "mgear_curveCns203GroupParts.gi"; +connectAttr "groupId406.msg" "tweakSet203.gn" -na; +connectAttr "legBack_R0_crvShape1.iog.og[1]" "tweakSet203.dsm" -na; +connectAttr "tweak203.msg" "tweakSet203.ub[0]"; +connectAttr "legBack_R0_crvShape1Orig.ws" "groupParts406.ig"; +connectAttr "groupId406.id" "groupParts406.gi"; +connectAttr "mgear_curveCns204GroupParts.og" "mgear_curveCns204.ip[0].ig"; +connectAttr "mgear_curveCns204GroupId.id" "mgear_curveCns204.ip[0].gi"; +connectAttr "footBack_R0_root.wm" "mgear_curveCns204.inputs[0]"; +connectAttr "footBack_R0_0_loc.wm" "mgear_curveCns204.inputs[1]"; +connectAttr "footBack_R0_1_loc.wm" "mgear_curveCns204.inputs[2]"; +connectAttr "groupParts408.og" "tweak204.ip[0].ig"; +connectAttr "groupId408.id" "tweak204.ip[0].gi"; +connectAttr "mgear_curveCns204GroupId.msg" "mgear_curveCns204Set.gn" -na; +connectAttr "footBack_R0_crvShape.iog.og[0]" "mgear_curveCns204Set.dsm" -na; +connectAttr "mgear_curveCns204.msg" "mgear_curveCns204Set.ub[0]"; +connectAttr "tweak204.og[0]" "mgear_curveCns204GroupParts.ig"; +connectAttr "mgear_curveCns204GroupId.id" "mgear_curveCns204GroupParts.gi"; +connectAttr "groupId408.msg" "tweakSet204.gn" -na; +connectAttr "footBack_R0_crvShape.iog.og[1]" "tweakSet204.dsm" -na; +connectAttr "tweak204.msg" "tweakSet204.ub[0]"; +connectAttr "footBack_R0_crvShapeOrig.ws" "groupParts408.ig"; +connectAttr "groupId408.id" "groupParts408.gi"; +connectAttr "mgear_curveCns205GroupParts.og" "mgear_curveCns205.ip[0].ig"; +connectAttr "mgear_curveCns205GroupId.id" "mgear_curveCns205.ip[0].gi"; +connectAttr "footBack_R0_root.wm" "mgear_curveCns205.inputs[0]"; +connectAttr "footBack_R0_heel.wm" "mgear_curveCns205.inputs[1]"; +connectAttr "footBack_R0_outpivot.wm" "mgear_curveCns205.inputs[2]"; +connectAttr "footBack_R0_heel.wm" "mgear_curveCns205.inputs[3]"; +connectAttr "footBack_R0_inpivot.wm" "mgear_curveCns205.inputs[4]"; +connectAttr "groupParts410.og" "tweak205.ip[0].ig"; +connectAttr "groupId410.id" "tweak205.ip[0].gi"; +connectAttr "mgear_curveCns205GroupId.msg" "mgear_curveCns205Set.gn" -na; +connectAttr "footBack_R0_Shape1.iog.og[0]" "mgear_curveCns205Set.dsm" -na; +connectAttr "mgear_curveCns205.msg" "mgear_curveCns205Set.ub[0]"; +connectAttr "tweak205.og[0]" "mgear_curveCns205GroupParts.ig"; +connectAttr "mgear_curveCns205GroupId.id" "mgear_curveCns205GroupParts.gi"; +connectAttr "groupId410.msg" "tweakSet205.gn" -na; +connectAttr "footBack_R0_Shape1.iog.og[1]" "tweakSet205.dsm" -na; +connectAttr "tweak205.msg" "tweakSet205.ub[0]"; +connectAttr "footBack_R0_Shape1Orig.ws" "groupParts410.ig"; +connectAttr "groupId410.id" "groupParts410.gi"; connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; // End of quadruped.ma diff --git a/scripts/mgear/maya/shifter/component/arm_2jnt_01/__init__.py b/scripts/mgear/maya/shifter/component/arm_2jnt_01/__init__.py index 4392a48..82d12f1 100644 --- a/scripts/mgear/maya/shifter/component/arm_2jnt_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/arm_2jnt_01/__init__.py @@ -1,305 +1,575 @@ -# MGEAR is under the terms of the MIT License +"""Component Arm 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent - -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): - def addObjects(self): - """ +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== + def addObjects(self): + """Add all the objects needed to create the component.""" - """ self.WIP = self.options["mode"] self.normal = self.getNormalFromPos(self.guide.apos) self.binormal = self.getBiNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + self.length0 = vector.getDistance(self.guide.apos[0], + self.guide.apos[1]) + self.length1 = vector.getDistance(self.guide.apos[1], + self.guide.apos[2]) + self.length2 = vector.getDistance(self.guide.apos[2], + self.guide.apos[3]) # 1 bone chain for upv ref - self.armChainUpvRef = pri.add2DChain(self.root, self.getName("armUpvRef%s_jnt"), [self.guide.apos[0],self.guide.apos[2]], self.normal, False, self.WIP) - self.armChainUpvRef[1].setAttr("jointOrientZ", self.armChainUpvRef[1].getAttr("jointOrientZ")*-1) - - # FK Controlers ----------------------------------- - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_npo = pri.addTransform(self.root, self.getName("fk0_npo"), t) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0),tp=self.parentCtlTag) - att.setKeyableAttributes(self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + self.armChainUpvRef = primitive.add2DChain( + self.root, + self.getName("armUpvRef%s_jnt"), + [self.guide.apos[0], self.guide.apos[2]], + self.normal, False, self.WIP) - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - self.fk1_npo = pri.addTransform(self.fk0_ctl, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length1*self.n_factor,0,0),tp=self.fk0_ctl ) - att.setKeyableAttributes(self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + negateOri = self.armChainUpvRef[1].getAttr("jointOrientZ") * -1 + self.armChainUpvRef[1].setAttr("jointOrientZ", negateOri) - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk1_ctl, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk2_ctl) + # FK Controlers ----------------------------------- + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, "xz", + self.negate) + + self.fk0_npo = primitive.addTransform(self.root, + self.getName("fk0_npo"), + t) + + vec_po = datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0) + self.fk0_ctl = self.addCtl(self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=vec_po, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes( + self.fk0_ctl, + ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + + self.fk1_npo = primitive.addTransform(self.fk0_ctl, + self.getName("fk1_npo"), + t) + vec_po = datatypes.Vector(.5 * self.length1 * self.n_factor, 0, 0) + self.fk1_ctl = self.addCtl(self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1, + h=self.size * .1, + d=self.size * .1, + po=vec_po, + tp=self.fk0_ctl) + + attribute.setKeyableAttributes( + self.fk1_ctl, + ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) + + self.fk2_npo = primitive.addTransform(self.fk1_ctl, + self.getName("fk2_npo"), + t) + + vec_po = datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0) + self.fk2_ctl = self.addCtl(self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=vec_po, + tp=self.fk1_ctl) + + attribute.setKeyableAttributes(self.fk2_ctl) self.fk_ctl = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl] - for x in self.fk_ctl: - att.setInvertMirror(x, ["tx", "ty", "tz"]) - + for x in self.fk_ctl: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root, self.getName("ik_cns"), self.guide.pos["wrist"]) + self.ik_cns = primitive.addTransformFromPos( + self.root, self.getName("ik_cns"), self.guide.pos["wrist"]) + + t = transform.getTransformFromPos(self.guide.pos["wrist"]) + self.ikcns_ctl = self.addCtl(self.ik_cns, + "ikcns_ctl", + t, + self.color_ik, + "null", + w=self.size * .12, + tp=self.parentCtlTag) - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["wrist"]), self.color_ik, "null", w=self.size*.12, tp=self.parentCtlTag) - att.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) + attribute.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) if self.negate: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "x-y", True) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "x-y", + True) else: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xy", False) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", m, self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xy", + False) + + self.ik_ctl = self.addCtl(self.ikcns_ctl, + "ik_ctl", + m, + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + if self.settings["mirrorIK"]: if self.negate: self.ik_cns.sx.set(-1) - self.ik_ctl.rz.set(self.ik_ctl.rz.get()*-1) + self.ik_ctl.rz.set(self.ik_ctl.rz.get() * -1) else: - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) - att.setKeyableAttributes(self.ik_ctl) - self.ik_ctl_ref = pri.addTransform(self.ik_ctl, self.getName("ikCtl_ref"), m) + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + attribute.setKeyableAttributes(self.ik_ctl) + self.ik_ctl_ref = primitive.addTransform(self.ik_ctl, + self.getName("ikCtl_ref"), + m) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), v) + self.upv_cns = primitive.addTransformFromPos(self.root, + self.getName("upv_cns"), + v) + + self.upv_ctl = self.addCtl(self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.parentCtlTag) - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.12, tp=self.parentCtlTag) if self.settings["mirrorMid"]: if self.negate: self.upv_cns.rz.set(180) self.upv_cns.sy.set(-1) else: - att.setInvertMirror(self.upv_ctl, ["tx"]) - att.setKeyableAttributes(self.upv_ctl, self.t_params) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) - #IK rotation controls + # IK rotation controls if self.settings["ikTR"]: - self.ikRot_npo = pri.addTransform(self.root, self.getName("ikRot_npo"), m) - self.ikRot_cns = pri.addTransform(self.ikRot_npo, self.getName("ikRot_cns"), m) - self.ikRot_ctl = self.addCtl(self.ikRot_cns, "ikRot_ctl", m, self.color_ik, "sphere", w=self.size*.12, tp=self.ik_ctl) - att.setKeyableAttributes(self.ikRot_ctl, self.r_params) - - + self.ikRot_npo = primitive.addTransform(self.root, + self.getName("ikRot_npo"), + m) + self.ikRot_cns = primitive.addTransform(self.ikRot_npo, + self.getName("ikRot_cns"), + m) + self.ikRot_ctl = self.addCtl(self.ikRot_cns, + "ikRot_ctl", + m, + self.color_ik, + "sphere", + w=self.size * .12, + tp=self.ik_ctl) + + attribute.setKeyableAttributes(self.ikRot_ctl, self.r_params) # References -------------------------------------- # Calculate again the transfor for the IK ref. This way align with FK - trnIK_ref = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xz", self.negate) - self.ik_ref = pri.addTransform(self.ik_ctl_ref, self.getName("ik_ref"), trnIK_ref) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), trnIK_ref) + trnIK_ref = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xz", + self.negate) + self.ik_ref = primitive.addTransform(self.ik_ctl_ref, + self.getName("ik_ref"), + trnIK_ref) + self.fk_ref = primitive.addTransform(self.fk_ctl[2], + self.getName("fk_ref"), + trnIK_ref) # Chain -------------------------------------------- # The outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) self.bone0.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + self.bone1 = primitive.addLocator( + self.root, + self.getName("1_bone"), + transform.getTransform(self.fk_ctl[1])) self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) self.bone1.setAttr("visibility", False) - self.ctrn_loc = pri.addTransformFromPos(self.root, self.getName("ctrn_loc"), self.guide.apos[1]) - self.eff_loc = pri.addTransformFromPos(self.root, self.getName("eff_loc"), self.guide.apos[2]) + self.ctrn_loc = primitive.addTransformFromPos(self.root, + self.getName("ctrn_loc"), + self.guide.apos[1]) + self.eff_loc = primitive.addTransformFromPos(self.root, + self.getName("eff_loc"), + self.guide.apos[2]) # Mid Controler ------------------------------------ - t = tra.getTransform(self.ctrn_loc) - self.mid_cns = pri.addTransform(self.ctrn_loc, self.getName("mid_cns"), t) - self.mid_ctl = self.addCtl(self.mid_cns, "mid_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.parentCtlTag) + t = transform.getTransform(self.ctrn_loc) + + self.mid_cns = primitive.addTransform(self.ctrn_loc, + self.getName("mid_cns"), + t) + + self.mid_ctl = self.addCtl(self.mid_cns, + "mid_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.parentCtlTag) if self.settings["mirrorMid"]: if self.negate: self.mid_cns.rz.set(180) self.mid_cns.sz.set(-1) - self.mid_ctl_twst_npo = pri.addTransform(self.mid_ctl, self.getName("mid_twst_npo"), t) - self.mid_ctl_twst_ref = pri.addTransform(self.mid_ctl_twst_npo, self.getName("mid_twst_ref"), t) + self.mid_ctl_twst_npo = primitive.addTransform( + self.mid_ctl, + self.getName("mid_twst_npo"), + t) + self.mid_ctl_twst_ref = primitive.addTransform( + self.mid_ctl_twst_npo, + self.getName("mid_twst_ref"), + t) else: self.mid_ctl_twst_ref = self.mid_ctl - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) - + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) - #Roll join ref - self.rollRef = pri.add2DChain(self.root, self.getName("rollChain"), self.guide.apos[:2], self.normal, self.negate) + # Roll join ref + self.rollRef = primitive.add2DChain(self.root, self.getName( + "rollChain"), self.guide.apos[:2], self.normal, self.negate) for x in self.rollRef: x.setAttr("visibility", False) - self.tws0_loc = pri.addTransform(self.rollRef[0], self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.fk_ctl[0])) - - self.tws1_npo = pri.addTransform(self.ctrn_loc, self.getName("tws1_npo"), tra.getTransform(self.ctrn_loc)) - self.tws1_loc = pri.addTransform(self.tws1_npo, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.ctrn_loc)) - - self.tws2_npo = pri.addTransform(self.root, self.getName("tws2_npo"), tra.getTransform(self.fk_ctl[2])) - self.tws2_loc = pri.addTransform(self.tws2_npo, self.getName("tws2_loc"), tra.getTransform(self.fk_ctl[2])) - self.tws2_rot = pri.addTransform(self.tws2_loc, self.getName("tws2_rot"), tra.getTransform(self.fk_ctl[2])) + self.tws0_loc = primitive.addTransform( + self.rollRef[0], + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.fk_ctl[0])) + + self.tws1_npo = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_npo"), + transform.getTransform(self.ctrn_loc)) + self.tws1_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.ctrn_loc)) + + self.tws2_npo = primitive.addTransform( + self.root, + self.getName("tws2_npo"), + transform.getTransform(self.fk_ctl[2])) + self.tws2_loc = primitive.addTransform( + self.tws2_npo, + self.getName("tws2_loc"), + transform.getTransform(self.fk_ctl[2])) + self.tws2_rot = primitive.addTransform( + self.tws2_loc, + self.getName("tws2_rot"), + transform.getTransform(self.fk_ctl[2])) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the elbow. + 2 for elbow angle control + # We have at least one division at the start, the end and one for the + # elbow. + 2 for elbow angle control self.divisions = self.settings["div0"] + self.settings["div1"] + 3 + 2 self.div_cns = [] for i in range(self.divisions): - div_cns = pri.addTransform(self.root, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform(self.root, + self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) self.jnt_pos.append([div_cns, i]) - # End reference ------------------------------------ # To help the deformation on the wrist self.jnt_pos.append([self.eff_loc, 'end']) - #match IK FK references - self.match_fk0_off = pri.addTransform(self.root, self.getName("matchFk0_npo"), tra.getTransform(self.fk_ctl[1])) - self.match_fk0 = pri.addTransform(self.match_fk0_off, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1_off = pri.addTransform(self.root, self.getName("matchFk1_npo"), tra.getTransform(self.fk_ctl[2])) - self.match_fk1 = pri.addTransform(self.match_fk1_off, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) + # match IK FK references + self.match_fk0_off = primitive.addTransform( + self.root, + self.getName("matchFk0_npo"), + transform.getTransform(self.fk_ctl[1])) + self.match_fk0 = primitive.addTransform( + self.match_fk0_off, + self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + self.match_fk1_off = primitive.addTransform( + self.root, self.getName( + "matchFk1_npo"), transform.getTransform(self.fk_ctl[2])) + self.match_fk1 = primitive.addTransform( + self.match_fk1_off, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) if self.settings["ikTR"]: reference = self.ikRot_ctl - self.match_ikRot = pri.addTransform(self.fk2_ctl, self.getName("ikRot_mth"), tra.getTransform(self.ikRot_ctl)) + self.match_ikRot = primitive.addTransform( + self.fk2_ctl, + self.getName("ikRot_mth"), + transform.getTransform(self.ikRot_ctl)) else: reference = self.ik_ctl - self.match_fk2 = pri.addTransform(reference, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) + self.match_fk2 = primitive.addTransform( + reference, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + self.match_ikUpv = primitive.addTransform( + self.fk0_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) + # ===================================================== + # ATTRIBUTES + # ===================================================== def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - self.armpit_roll_att = self.addAnimParam("aproll", "Armpit Roll", "double", 0, -360, 360) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness_att = self.addAnimParam("roundness", "Roundness", "double", 0, 0, self.size) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.blend_att = self.addAnimParam("blend", + "Fk/Ik Blend", + "double", + self.settings["blend"], + 0, + 1) + self.roll_att = self.addAnimParam("roll", + "Roll", + "double", + 0, + -180, + 180) + self.armpit_roll_att = self.addAnimParam("aproll", + "Armpit Roll", + "double", + 0, + -360, + 360) + + self.scale_att = self.addAnimParam("ikscale", + "Scale", + "double", + 1, + .001, + 99) + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1, + 99) + self.slide_att = self.addAnimParam("slide", + "Slide", + "double", + .5, + 0, + 1) + self.softness_att = self.addAnimParam("softness", + "Softness", + "double", + 0, + 0, + 1) + self.reverse_att = self.addAnimParam("reverse", + "Reverse", + "double", + 0, + 0, + 1) + self.roundness_att = self.addAnimParam("roundness", + "Roundness", + "double", + 0, + 0, + self.size) + self.volume_att = self.addAnimParam("volume", + "Volume", + "double", + 1, + 0, + 1) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["ikTR"]: ref_names = ["Auto", "ik_ctl"] if self.settings["ikrefarray"]: ref_names = ref_names + self.settings["ikrefarray"].split(",") - self.ikRotRef_att = self.addAnimEnumParam("ikRotRef", "Ik Rot Ref", 0, ref_names) - - + self.ikRotRef_att = self.addAnimEnumParam("ikRotRef", + "Ik Rot Ref", + 0, + ref_names) if self.settings["upvrefarray"]: ref_names = self.settings["upvrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, ref_names) + self.upvref_att = self.addAnimEnumParam("upvref", + "UpV Ref", + 0, ref_names) if self.settings["pinrefarray"]: - ref_names = self.settings["pinrefarray" ].split(",") + ref_names = self.settings["pinrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.pin_att = self.addAnimEnumParam("elbowref", "Elbow Ref", 0, ref_names) + self.pin_att = self.addAnimEnumParam("elbowref", + "Elbow Ref", + 0, + ref_names) if self.validProxyChannels: - att.addProxyAttribute([self.blend_att, self.roundness_att], [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.ik_ctl, self.upv_ctl]) - att.addProxyAttribute(self.roll_att, [self.ik_ctl, self.upv_ctl]) - - + attribute.addProxyAttribute( + [self.blend_att, self.roundness_att], + [self.fk0_ctl, + self.fk1_ctl, + self.fk2_ctl, + self.ik_ctl, + self.upv_ctl]) + attribute.addProxyAttribute(self.roll_att, + [self.ik_ctl, self.upv_ctl]) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] - - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + self.st_value = fcurve.getFCurveValues(self.settings["st_profile"], + self.divisions) + self.sq_value = fcurve.getFCurveValues(self.settings["sq_profile"], + self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", self.st_value[i], + -1, + 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam("resample", + "Resample", + "bool", + True) + self.absolute_att = self.addSetupParam("absolute", + "Absolute", + "bool", + False) + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig - # 1 bone chain Upv ref ===================================================================================== - self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.armChainUpvRef, "ikSCsolver") - pm.pointConstraint(self.ik_ctl, self.ikHandleUpvRef) - pm.parentConstraint( self.armChainUpvRef[0], self.upv_cns, mo=True) + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + # 1 bone chain Upv ref ============================================== + self.ikHandleUpvRef = primitive.addIkHandle( + self.root, + self.getName("ikHandleArmChainUpvRef"), + self.armChainUpvRef, + "ikSCsolver") + pm.pointConstraint(self.ik_ctl, + self.ikHandleUpvRef) + pm.parentConstraint(self.armChainUpvRef[0], + self.upv_cns, + mo=True) # Visibilities ------------------------------------- # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -312,152 +582,183 @@ def addOperators(self): for shp in self.ikRot_ctl.getShapes(): pm.connectAttr(self.blend_att, shp.attr("visibility")) - # Controls ROT order ----------------------------------- - att.setRotOrder(self.fk0_ctl, "XZY") - att.setRotOrder(self.fk1_ctl, "XYZ") - att.setRotOrder(self.fk2_ctl, "YZX") - # att.setRotOrder(self.ik_ctl, "ZYX") - att.setRotOrder(self.ik_ctl, "XYZ") - + attribute.setRotOrder(self.fk0_ctl, "XZY") + attribute.setRotOrder(self.fk1_ctl, "XYZ") + attribute.setRotOrder(self.fk2_ctl, "YZX") + attribute.setRotOrder(self.ik_ctl, "XYZ") # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_loc] - node = aop.gear_ikfk2bone_op(out, self.root, self.ik_ref, self.upv_ctl, self.fk_ctl[0], self.fk_ctl[1], self.fk_ref, self.length0, self.length1, self.negate) + o_node = applyop.gear_ikfk2bone_op(out, + self.root, + self.ik_ref, + self.upv_ctl, + self.fk_ctl[0], + self.fk_ctl[1], + self.fk_ref, + self.length0, + self.length1, + self.negate) if self.settings["ikTR"]: - #connect the control inputs - outEff_dm = node.listConnections(c=True)[-1][1] + # connect the control inputs + outEff_dm = o_node.listConnections(c=True)[-1][1] + + inAttr = self.ikRot_npo.attr("translate") + outEff_dm.attr("outputTranslate") >> inAttr - outEff_dm.attr("outputTranslate") >> self.ikRot_npo.attr("translate") outEff_dm.attr("outputScale") >> self.ikRot_npo.attr("scale") - dm_node = nod.createDecomposeMatrixNode(node.attr("outB")) + dm_node = node.createDecomposeMatrixNode(o_node.attr("outB")) dm_node.attr("outputRotate") >> self.ikRot_npo.attr("rotate") - #rotation - - mulM_node = aop.gear_mulmatrix_op(self.ikRot_ctl.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) - intM_node = aop.gear_intmatrix_op(node.attr("outEff"), mulM_node.attr("output"), node.attr("blend")) - dm_node = nod.createDecomposeMatrixNode(intM_node.attr("output")) + # rotation + mulM_node = applyop.gear_mulmatrix_op( + self.ikRot_ctl.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) + intM_node = applyop.gear_intmatrix_op(o_node.attr("outEff"), + mulM_node.attr("output"), + o_node.attr("blend")) + dm_node = node.createDecomposeMatrixNode(intM_node.attr("output")) dm_node.attr("outputRotate") >> self.eff_loc.attr("rotate") - tra.matchWorldTransform(self.fk2_ctl, self.ikRot_cns) - - #scale: this fix the scalin popping issue - intM_node = aop.gear_intmatrix_op(self.fk2_ctl.attr("worldMatrix"), self.ik_ctl_ref.attr("worldMatrix"), node.attr("blend")) - mulM_node = aop.gear_mulmatrix_op(intM_node.attr("output"), self.eff_loc.attr("parentInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulM_node.attr("output")) + transform.matchWorldTransform(self.fk2_ctl, self.ikRot_cns) + + # scale: this fix the scalin popping issue + intM_node = applyop.gear_intmatrix_op( + self.fk2_ctl.attr("worldMatrix"), + self.ik_ctl_ref.attr("worldMatrix"), + o_node.attr("blend")) + mulM_node = applyop.gear_mulmatrix_op( + intM_node.attr("output"), + self.eff_loc.attr("parentInverseMatrix")) + dm_node = node.createDecomposeMatrixNode(mulM_node.attr("output")) dm_node.attr("outputScale") >> self.eff_loc.attr("scale") - - pm.connectAttr(self.blend_att, node+".blend") + pm.connectAttr(self.blend_att, o_node + ".blend") if self.negate: mulVal = -1 else: mulVal = 1 - nod.createMulNode(self.roll_att, mulVal, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") + node.createMulNode(self.roll_att, mulVal, o_node + ".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") # Twist references --------------------------------- - pm.pointConstraint(self.mid_ctl_twst_ref, self.tws1_npo, maintainOffset=False) - pm.scaleConstraint(self.mid_ctl_twst_ref, self.tws1_npo, maintainOffset=False) - pm.orientConstraint(self.mid_ctl_twst_ref, self.tws1_npo, maintainOffset=False) + pm.pointConstraint(self.mid_ctl_twst_ref, + self.tws1_npo, maintainOffset=False) + pm.scaleConstraint(self.mid_ctl_twst_ref, + self.tws1_npo, maintainOffset=False) + pm.orientConstraint(self.mid_ctl_twst_ref, + self.tws1_npo, maintainOffset=False) - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.root.attr("worldInverseMatrix")) + o_node = applyop.gear_mulmatrix_op(self.eff_loc.attr( + "worldMatrix"), self.root.attr("worldInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.tws2_npo.attr("translate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.tws2_npo.attr("translate")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.tws2_npo.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.tws2_npo.attr("rotate")) - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.tws2_rot.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.eff_loc.attr("worldMatrix"), + self.tws2_rot.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - att.setRotOrder(self.tws2_rot, "XYZ") - pm.connectAttr(dm_node+".outputRotate", self.tws2_rot+".rotate") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + attribute.setRotOrder(self.tws2_rot, "XYZ") + pm.connectAttr(dm_node + ".outputRotate", self.tws2_rot + ".rotate") self.tws0_rot.setAttr("sx", .001) self.tws2_rot.setAttr("sx", .001) - add_node = nod.createAddNode(self.roundness_att, .001) - pm.connectAttr(add_node+".output", self.tws1_rot.attr("sx")) - - pm.connectAttr(self.armpit_roll_att, self.tws0_rot+".rotateX") - - #Roll Shoulder - aop.splineIK(self.getName("rollRef"), self.rollRef, parent=self.root, cParent=self.bone0 ) + add_node = node.createAddNode(self.roundness_att, .001) + pm.connectAttr(add_node + ".output", self.tws1_rot.attr("sx")) + pm.connectAttr(self.armpit_roll_att, self.tws0_rot + ".rotateX") + # Roll Shoulder + applyop.splineIK(self.getName("rollRef"), self.rollRef, + parent=self.root, cParent=self.bone0) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - distB_node = nod.createDistNode(self.tws1_loc, self.tws2_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root.attr("sx")) + distA_node = node.createDistNode(self.tws0_loc, self.tws1_loc) + distB_node = node.createDistNode(self.tws1_loc, self.tws2_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root.attr("sx")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") - self.volDriver_att = div_node2+".outputX" + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") + self.volDriver_att = div_node2 + ".outputX" # Divisions ---------------------------------------- - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll for i, div_cns in enumerate(self.div_cns): - if i < (self.settings["div0"]+1): - perc = i*.5 / (self.settings["div0"]+1.0) + if i < (self.settings["div0"] + 1): + perc = i * .5 / (self.settings["div0"] + 1.0) elif i < (self.settings["div0"] + 2): perc = .49 - elif i < (self.settings["div0"] + 3 ): + elif i < (self.settings["div0"] + 3): perc = .50 - elif i < (self.settings["div0"] + 4 ): + elif i < (self.settings["div0"] + 4): perc = .51 else: - perc = .5 + (i-self.settings["div0"]-3.0)*.5 / (self.settings["div1"]+1.0) + perc = .5 + \ + (i - self.settings["div0"] - 3.0) * .5 / \ + (self.settings["div1"] + 1.0) perc = max(.001, min(.990, perc)) # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cns, [self.tws2_rot, self.tws1_rot, self.tws0_rot], 1-perc, 40) + o_node = applyop.gear_rollsplinekine_op( + div_cns, [self.tws2_rot, self.tws1_rot, self.tws0_rot], + 1 - perc, 40) else: - node = aop.gear_rollsplinekine_op(div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot], perc, 40) + o_node = applyop.gear_rollsplinekine_op( + div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot], + perc, 40) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") # Squash n Stretch - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") + o_node = applyop.gear_squashstretch2_op( + div_cns, None, pm.getAttr(self.volDriver_att), "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") # match IK/FK ref pm.parentConstraint(self.bone0, self.match_fk0_off, mo=True) pm.parentConstraint(self.bone1, self.match_fk1_off, mo=True) if self.settings["ikTR"]: - tra.matchWorldTransform(self.ikRot_ctl,self.match_ikRot ) - tra.matchWorldTransform(self.fk_ctl[2], self.match_fk2 ) + transform.matchWorldTransform(self.ikRot_ctl, self.match_ikRot) + transform.matchWorldTransform(self.fk_ctl[2], self.match_fk2) return # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self - # TODO: replace bone0 and control objects by loc connections def setRelation(self): + """Set the relation beetween object from guide to rig""" + self.relatives["root"] = self.div_cns[0] self.relatives["elbow"] = self.div_cns[self.settings["div0"] + 2] self.relatives["wrist"] = self.div_cns[-1] @@ -465,7 +766,7 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["elbow"] = self.settings["div0"] + 2 - self.jointRelatives["wrist"] = len(self.div_cns)-1 + self.jointRelatives["wrist"] = len(self.div_cns) - 1 self.jointRelatives["eff"] = -1 self.controlRelatives["root"] = self.fk0_ctl @@ -473,13 +774,13 @@ def setRelation(self): self.controlRelatives["wrist"] = self.fk2_ctl self.controlRelatives["eff"] = self.fk2_ctl - ## Add more connection definition to the set. - # @param self def addConnection(self): + """Add more connection definition to the set""" + self.connections["shoulder_01"] = self.connect_shoulder_01 - ## standard connection definition. - # @param self + def connect_standard(self): + """standard connection definition for the component""" if self.settings["ikTR"]: self.parent.addChild(self.root) @@ -487,16 +788,24 @@ def connect_standard(self): self.connectRef(self.settings["upvrefarray"], self.upv_cns, True) if self.settings["ikrefarray"]: - ikRotRefArray = "Auto,ik_ctl,"+self.settings["ikrefarray"] + ikRotRefArray = "Auto,ik_ctl," + self.settings["ikrefarray"] else: ikRotRefArray = "Auto,ik_ctl" - self.connectRef2(ikRotRefArray, self.ikRot_cns, self.ikRotRef_att, [self.ikRot_npo, self.ik_ctl], True) + self.connectRef2(ikRotRefArray, + self.ikRot_cns, + self.ikRotRef_att, + [self.ikRot_npo, self.ik_ctl], True) else: self.connect_standardWithIkRef() if self.settings["pinrefarray"]: - self.connectRef2("Auto,"+ self.settings["pinrefarray"], self.mid_cns, self.pin_att, [self.ctrn_loc], False) + self.connectRef2( + "Auto," + self.settings["pinrefarray"], self.mid_cns, + self.pin_att, [self.ctrn_loc], False) def connect_shoulder_01(self): + """ Custom connection to be use with shoulder 01 component""" self.connect_standard() - pm.parent(self.rollRef[0],self.parent_comp.ctl) + pm.parent(self.rollRef[0], + self.ikHandleUpvRef, + self.parent_comp.ctl) diff --git a/scripts/mgear/maya/shifter/component/arm_2jnt_01/guide.py b/scripts/mgear/maya/shifter/component/arm_2jnt_01/guide.py index 77ac378..83403ac 100644 --- a/scripts/mgear/maya/shifter/component/arm_2jnt_01/guide.py +++ b/scripts/mgear/maya/shifter/component/arm_2jnt_01/guide.py @@ -1,52 +1,22 @@ -# MGEAR is under the terms of the MIT License +"""Guide Arm 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial import pymel.core as pm -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,3,0] +VERSION = [1, 3, 0] TYPE = "arm_2jnt_01" NAME = "arm" DESCRIPTION = "2 bones arm with Maya nodes for roll bones. With elbow Pin" @@ -54,7 +24,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -67,40 +40,37 @@ class Guide(ComponentGuide): connectors = ["shoulder_01"] - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" + self.save_transform = ["root", "elbow", "wrist", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [3,0,-.01]) + vTemp = transform.getOffsetPosition(self.root, [3, 0, -.01]) self.elbow = self.addLoc("elbow", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [6,0,0]) + vTemp = transform.getOffsetPosition(self.root, [6, 0, 0]) self.wrist = self.addLoc("wrist", self.elbow, vTemp) - vTemp = tra.getOffsetPosition( self.root, [7,0,0]) + vTemp = transform.getOffsetPosition(self.root, [7, 0, 0]) self.eff = self.addLoc("eff", self.wrist, vTemp) - self.dispcrv = self.addDispCurve("crv", [self.root, self.elbow, self.wrist, self.eff]) + self.dispcrv = self.addDispCurve( + "crv", + [self.root, self.elbow, self.wrist, self.eff]) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") self.pUpvRefArray = self.addParam("pinrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 1.5 , 1, None) - self.pIKTR = self.addParam("ikTR", "bool", False) + self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1, None) + self.pIKTR = self.addParam("ikTR", "bool", False) self.pMirrorMid = self.addParam("mirrorMid", "bool", False) self.pMirrorIK = self.addParam("mirrorIK", "bool", False) @@ -109,12 +79,17 @@ def addParameters(self): self.pDiv1 = self.addParam("div1", "long", 2, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-.5],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,.5],[1,0]]) - - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSt_profile = self.addFCurveParam("st_profile", + [[0, 0], [.5, -.5], [1, 0]]) + self.pSq_profile = self.addFCurveParam("sq_profile", + [[0, 0], [.5, .5], [1, 0]]) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam("parentJointIndex", + "long", + -1, + None, + None) ########################################################## @@ -122,23 +97,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -146,7 +122,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -156,47 +132,57 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) self.populateCheck(self.settingsTab.ikTR_checkBox, "ikTR") self.populateCheck(self.settingsTab.mirrorMid_checkBox, "mirrorMid") self.populateCheck(self.settingsTab.mirrorIK_checkBox, "mirrorIK") self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) ikRefArrayItems = self.root.attr("ikrefarray").get().split(",") + for item in ikRefArrayItems: self.settingsTab.ikRefArray_listWidget.addItem(item) + upvRefArrayItems = self.root.attr("upvrefarray").get().split(",") for item in upvRefArrayItems: self.settingsTab.upvRefArray_listWidget.addItem(item) + pinRefArrayItems = self.root.attr("pinrefarray").get().split(",") for item in pinRefArrayItems: self.settingsTab.pinRefArray_listWidget.addItem(item) - #populate connections in main settings + # populate connections in main settings + self.c_box = self.mainSettingsTab.connector_comboBox for cnx in Guide.connectors: - self.mainSettingsTab.connector_comboBox.addItem(cnx) - self.connector_items = [ self.mainSettingsTab.connector_comboBox.itemText(i) for i in range( self.mainSettingsTab.connector_comboBox.count())] + self.c_box.addItem(cnx) + self.connector_items = [self.c_box.itemText(i) for i in + range(self.c_box.count())] + currentConnector = self.root.attr("connector").get() if currentConnector not in self.connector_items: - self.mainSettingsTab.connector_comboBox.addItem(currentConnector) + self.c_box.addItem(currentConnector) self.connector_items.append(currentConnector) - pm.displayWarning("The current connector: %s, is not a valid connector for this component. Build will Fail!!") + pm.displayWarning( + "The current connector: %s, is not a valid connector for this" + " component. Build will Fail!!") comboIndex = self.connector_items.index(currentConnector) - self.mainSettingsTab.connector_comboBox.setCurrentIndex(comboIndex) - - + self.c_box.setCurrentIndex(comboIndex) def create_componentLayout(self): @@ -208,31 +194,96 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - self.settingsTab.ikTR_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.ikTR_checkBox, "ikTR")) - self.settingsTab.mirrorMid_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorMid_checkBox, "mirrorMid")) - self.settingsTab.mirrorIK_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorIK_checkBox, "mirrorIK")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, "maxstretch")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.ikTR_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.ikTR_checkBox, "ikTR")) + + self.settingsTab.mirrorMid_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorMid_checkBox, "mirrorMid")) + + self.settingsTab.mirrorIK_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorIK_checkBox, + "mirrorIK")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArray_listWidget.installEventFilter(self) - self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) + self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + self.settingsTab.pinRefArray_listWidget.installEventFilter(self) + self.mainSettingsTab.connector_comboBox.currentIndexChanged.connect( + partial(self.updateConnector, + self.mainSettingsTab.connector_comboBox, + self.connector_items)) + def eventFilter(self, sender, event): if event.type() == QtCore.QEvent.ChildRemoved: if sender == self.settingsTab.ikRefArray_listWidget: @@ -245,7 +296,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/__init__.py b/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/__init__.py index 372d5be..4ea5d1e 100644 --- a/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/__init__.py @@ -1,263 +1,471 @@ -# MGEAR is under the terms of the MIT License +"""Component Arm 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu ############################################# # COMPONENT ############################################# -class Component(MainComponent): - def addObjects(self): +class Component(component.Main): + """Shifter component Class""" + # ===================================================== + # OBJECTS + # ===================================================== + def addObjects(self): + """Add all the objects needed to create the component.""" self.WIP = self.options["mode"] - self.normal = self.getNormalFromPos(self.guide.apos) self.binormal = self.getBiNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + self.length0 = vector.getDistance(self.guide.apos[0], + self.guide.apos[1]) + self.length1 = vector.getDistance(self.guide.apos[1], + self.guide.apos[2]) + self.length2 = vector.getDistance(self.guide.apos[2], + self.guide.apos[3]) # 1 bone chain for upv ref - self.armChainUpvRef= pri.add2DChain(self.root, self.getName("armUpvRef%s_jnt"), [self.guide.apos[0],self.guide.apos[2]], self.normal, False, self.WIP) - self.armChainUpvRef[1].setAttr("jointOrientZ", self.armChainUpvRef[1].getAttr("jointOrientZ")*-1) + self.armChainUpvRef = primitive.add2DChain( + self.root, + self.getName("armUpvRef%s_jnt"), + [self.guide.apos[0], self.guide.apos[2]], + self.normal, False, self.WIP) - # FK Controlers ----------------------------------- - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_npo = pri.addTransform(self.root, self.getName("fk0_npo"), t) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.parentCtlTag) - att.setKeyableAttributes(self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + self.armChainUpvRef[1].setAttr( + "jointOrientZ", + self.armChainUpvRef[1].getAttr("jointOrientZ") * -1) - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - self.fk1_npo = pri.addTransform(self.fk0_ctl, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length1*self.n_factor,0,0), tp=self.fk0_ctl) - att.setKeyableAttributes(self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) - - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk1_ctl, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk2_ctl) + # FK Controlers ----------------------------------- + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + self.fk0_npo = primitive.addTransform(self.root, + self.getName("fk0_npo"), + t) + + po_vec = datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0) + self.fk0_ctl = self.addCtl(self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes( + self.fk0_ctl, + ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + self.fk1_npo = primitive.addTransform(self.fk0_ctl, + self.getName("fk1_npo"), + t) + + po_vec = datatypes.Vector(.5 * self.length1 * self.n_factor, 0, 0) + self.fk1_ctl = self.addCtl(self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.fk0_ctl) + + attribute.setKeyableAttributes( + self.fk1_ctl, + ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) + self.fk2_npo = primitive.addTransform(self.fk1_ctl, + self.getName("fk2_npo"), + t) + + po_vec = datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0) + self.fk2_ctl = self.addCtl(self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.fk1_ctl) + + attribute.setKeyableAttributes(self.fk2_ctl) self.fk_ctl = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl] - for x in self.fk_ctl: - att.setInvertMirror(x, ["tx", "ty", "tz"]) - + for x in self.fk_ctl: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root, self.getName("ik_cns"), self.guide.pos["wrist"]) + self.ik_cns = primitive.addTransformFromPos(self.root, + self.getName("ik_cns"), + self.guide.pos["wrist"]) + + t = transform.getTransformFromPos(self.guide.pos["wrist"]) + self.ikcns_ctl = self.addCtl(self.ik_cns, + "ikcns_ctl", + t, + self.color_ik, + "null", + w=self.size * .12, + tp=self.parentCtlTag) - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["wrist"]), self.color_ik, "null", w=self.size*.12, tp=self.parentCtlTag) - att.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) + attribute.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) if self.negate: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "x-y", True) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "x-y", + True) else: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xy", False) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", m, self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xy", + False) + self.ik_ctl = self.addCtl(self.ikcns_ctl, + "ik_ctl", + m, + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) if self.settings["mirrorIK"]: if self.negate: self.ik_cns.sx.set(-1) - self.ik_ctl.rz.set(self.ik_ctl.rz.get()*-1) + self.ik_ctl.rz.set(self.ik_ctl.rz.get() * -1) else: - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) - att.setKeyableAttributes(self.ik_ctl) - self.ik_ctl_ref = pri.addTransform(self.ik_ctl, self.getName("ikCtl_ref"), m) + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + attribute.setKeyableAttributes(self.ik_ctl) + self.ik_ctl_ref = primitive.addTransform(self.ik_ctl, + self.getName("ikCtl_ref"), + m) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), v) + self.upv_cns = primitive.addTransformFromPos(self.root, + self.getName("upv_cns"), + v) - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.12, tp=self.parentCtlTag) + self.upv_ctl = self.addCtl(self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.parentCtlTag) if self.settings["mirrorMid"]: if self.negate: self.upv_cns.rz.set(180) self.upv_cns.sy.set(-1) else: - att.setInvertMirror(self.upv_ctl, ["tx"]) - att.setKeyableAttributes(self.upv_ctl, self.t_params) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) - #IK rotation controls + # IK rotation controls if self.settings["ikTR"]: - self.ikRot_npo = pri.addTransform(self.root, self.getName("ikRot_npo"), m) - self.ikRot_cns = pri.addTransform(self.ikRot_npo, self.getName("ikRot_cns"), m) - self.ikRot_ctl = self.addCtl(self.ikRot_cns, "ikRot_ctl", m, self.color_ik, "sphere", w=self.size*.12, tp=self.ik_ctl) - att.setKeyableAttributes(self.ikRot_ctl, self.r_params) + self.ikRot_npo = primitive.addTransform(self.root, + self.getName("ikRot_npo"), + m) + self.ikRot_cns = primitive.addTransform(self.ikRot_npo, + self.getName("ikRot_cns"), + m) + self.ikRot_ctl = self.addCtl(self.ikRot_cns, + "ikRot_ctl", + m, + self.color_ik, + "sphere", + w=self.size * .12, + tp=self.ik_ctl) + attribute.setKeyableAttributes(self.ikRot_ctl, self.r_params) # References -------------------------------------- # Calculate again the transfor for the IK ref. This way align with FK - trnIK_ref = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xz", self.negate) - self.ik_ref = pri.addTransform(self.ik_ctl_ref, self.getName("ik_ref"), trnIK_ref) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), trnIK_ref) + trnIK_ref = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xz", + self.negate) + self.ik_ref = primitive.addTransform(self.ik_ctl_ref, + self.getName("ik_ref"), + trnIK_ref) + self.fk_ref = primitive.addTransform(self.fk_ctl[2], + self.getName("fk_ref"), + trnIK_ref) # Chain -------------------------------------------- # The outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) + self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) bShape = self.bone0.getShape() bShape.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + t = transform.getTransform(self.fk_ctl[1]) + self.bone1 = primitive.addLocator(self.root, + self.getName("1_bone"), + t) + self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) bShape = self.bone1.getShape() bShape.setAttr("visibility", False) - #Elbow control - - tA = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - tA = tra.setMatrixPosition(tA, self.guide.apos[1]) - tB = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - t = tra.getInterpolateTransformMatrix(tA, tB) - self.ctrn_loc = pri.addTransform(self.root, self.getName("ctrn_loc"), t) - - #match IK FK references - self.match_fk0_off = pri.addTransform(self.root, self.getName("matchFk0_npo"), tra.getTransform(self.fk_ctl[1])) - self.match_fk0 = pri.addTransform(self.match_fk0_off, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1_off = pri.addTransform(self.root, self.getName("matchFk1_npo"), tra.getTransform(self.fk_ctl[2])) - self.match_fk1 = pri.addTransform(self.match_fk1_off, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) - self.match_fk2 = pri.addTransform(self.ik_ctl, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) - - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) - - + # Elbow control + + tA = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + tA = transform.setMatrixPosition(tA, self.guide.apos[1]) + tB = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + + t = transform.getInterpolateTransformMatrix(tA, tB) + self.ctrn_loc = primitive.addTransform(self.root, + self.getName("ctrn_loc"), + t) + + # match IK FK references + self.match_fk0_off = primitive.addTransform( + self.root, self.getName("matchFk0_npo"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk0 = primitive.addTransform( + self.match_fk0_off, self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + + self.match_fk1_off = primitive.addTransform( + self.root, + self.getName("matchFk1_npo"), + transform.getTransform(self.fk_ctl[2])) + + self.match_fk1 = primitive.addTransform( + self.match_fk1_off, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk2 = primitive.addTransform( + self.ik_ctl, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) + + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + + self.match_ikUpv = primitive.addTransform( + self.fk0_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) # Eff locator - self.eff_loc = pri.addTransformFromPos(self.root, self.getName("eff_loc"), self.guide.apos[2]) + self.eff_loc = primitive.addTransformFromPos( + self.root, + self.getName("eff_loc"), + self.guide.apos[2]) # Mid Controler ------------------------------------ - t = tra.getTransform(self.ctrn_loc) - self.mid_cns = pri.addTransform(self.ctrn_loc, self.getName("mid_cns"), t) - self.mid_ctl = self.addCtl(self.mid_cns, "mid_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.parentCtlTag) + t = transform.getTransform(self.ctrn_loc) + self.mid_cns = primitive.addTransform(self.ctrn_loc, + self.getName("mid_cns"), + t) + self.mid_ctl = self.addCtl(self.mid_cns, + "mid_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.parentCtlTag) + if self.settings["mirrorMid"]: if self.negate: self.mid_cns.rz.set(180) self.mid_cns.sz.set(-1) else: - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) - att.setKeyableAttributes(self.mid_ctl, self.t_params) - - #Roll join ref--------------------------------- - self.tws0_loc = pri.addTransform(self.root, self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - - self.tws1_npo = pri.addTransform(self.ctrn_loc, self.getName("tws1_npo"), tra.getTransform(self.ctrn_loc)) - self.tws1_loc = pri.addTransform(self.tws1_npo, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - - self.tws1A_npo = pri.addTransform(self.mid_ctl, self.getName("tws1A_npo"), tA) - self.tws1A_loc = pri.addTransform(self.tws1A_npo, self.getName("tws1A_loc"), tA) - self.tws1B_npo = pri.addTransform(self.mid_ctl, self.getName("tws1B_npo"), tB) - self.tws1B_loc = pri.addTransform(self.tws1B_npo, self.getName("tws1B_loc"), tB) - - - self.tws2_npo = pri.addTransform(self.root, self.getName("tws2_npo"), tra.getTransform(self.fk_ctl[2])) - self.tws2_loc = pri.addTransform(self.tws2_npo, self.getName("tws2_loc"), tra.getTransform(self.fk_ctl[2])) + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) + attribute.setKeyableAttributes(self.mid_ctl, self.t_params) + + # Roll join ref--------------------------------- + self.tws0_loc = primitive.addTransform( + self.root, + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + + self.tws1_npo = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_npo"), + transform.getTransform(self.ctrn_loc)) + + self.tws1_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) + + self.tws1A_npo = primitive.addTransform(self.mid_ctl, + self.getName("tws1A_npo"), + tA) + self.tws1A_loc = primitive.addTransform(self.tws1A_npo, + self.getName("tws1A_loc"), + tA) + self.tws1B_npo = primitive.addTransform(self.mid_ctl, + self.getName("tws1B_npo"), + tB) + self.tws1B_loc = primitive.addTransform(self.tws1B_npo, + self.getName("tws1B_loc"), + tB) + + self.tws2_npo = primitive.addTransform( + self.root, + self.getName("tws2_npo"), + transform.getTransform(self.fk_ctl[2])) + + self.tws2_loc = primitive.addTransform( + self.tws2_npo, + self.getName("tws2_loc"), + transform.getTransform(self.fk_ctl[2])) # Roll twist chain --------------------------------- - #Arm + # Arm self.armChainPos = [] - ii = 1.0/(self.settings["div0"]+1) + ii = 1.0 / (self.settings["div0"] + 1) i = 0.0 - for p in range(self.settings["div0"]+2): - self.armChainPos.append(vec.linearlyInterpolate(self.guide.pos["root"], self.guide.pos["elbow"], blend=i)) - i=i+ii - - self.armTwistChain= pri.add2DChain(self.root, self.getName("armTwist%s_jnt"), self.armChainPos, self.normal, False, self.WIP) - - #Forearm + for p in range(self.settings["div0"] + 2): + p_vec = vector.linearlyInterpolate(self.guide.pos["root"], + self.guide.pos["elbow"], + blend=i) + self.armChainPos.append(p_vec) + i = i + ii + + self.armTwistChain = primitive.add2DChain( + self.root, + self.getName("armTwist%s_jnt"), + self.armChainPos, + self.normal, + False, + self.WIP) + + # Forearm self.forearmChainPos = [] - ii = 1.0/(self.settings["div1"]+1) + ii = 1.0 / (self.settings["div1"] + 1) i = 0.0 - for p in range(self.settings["div1"]+2): - self.forearmChainPos.append(vec.linearlyInterpolate(self.guide.pos["elbow"], self.guide.pos["wrist"], blend=i)) - i=i+ii - - self.forearmTwistChain= pri.add2DChain(self.root, self.getName("forearmTwist%s_jnt"), self.forearmChainPos, self.normal, False, self.WIP) + for p in range(self.settings["div1"] + 2): + p_vec = vector.linearlyInterpolate(self.guide.pos["elbow"], + self.guide.pos["wrist"], + blend=i) + self.forearmChainPos.append(p_vec) + i = i + ii + + self.forearmTwistChain = primitive.add2DChain( + self.root, + self.getName("forearmTwist%s_jnt"), + self.forearmChainPos, + self.normal, False, + self.WIP) pm.parent(self.forearmTwistChain[0], self.mid_ctl) - #Hand Aux chain and nonroll + # Hand Aux chain and nonroll self.auxChainPos = [] ii = .5 i = 0.0 for p in range(3): - self.auxChainPos.append(vec.linearlyInterpolate(self.guide.pos["wrist"], self.guide.pos["eff"], blend=i)) - i=i+ii + p_vec = vector.linearlyInterpolate(self.guide.pos["wrist"], + self.guide.pos["eff"], + blend=i) + self.auxChainPos.append(p_vec) + i = i + ii t = self.root.getMatrix(worldSpace=True) - self.aux_npo = pri.addTransform(self.root, self.getName("aux_npo"), t) - self.auxTwistChain = pri.add2DChain(self.aux_npo, self.getName("auxTwist%s_jnt"), self.auxChainPos, self.normal, False, self.WIP) - - #Non Roll join ref --------------------------------- - self.armRollRef = pri.add2DChain(self.root, self.getName("armRollRef%s_jnt"), self.armChainPos[:2], self.normal, False, self.WIP) - - - self.forearmRollRef = pri.add2DChain(self.aux_npo, self.getName("forearmRollRef%s_jnt"), self.auxChainPos[:2], self.normal, False, self.WIP) - + self.aux_npo = primitive.addTransform(self.root, + self.getName("aux_npo"), + t) + self.auxTwistChain = primitive.add2DChain( + self.aux_npo, + self.getName("auxTwist%s_jnt"), + self.auxChainPos, + self.normal, + False, + self.WIP) + + # Non Roll join ref --------------------------------- + self.armRollRef = primitive.add2DChain( + self.root, + self.getName("armRollRef%s_jnt"), + self.armChainPos[:2], + self.normal, + False, + self.WIP) + + self.forearmRollRef = primitive.add2DChain( + self.aux_npo, + self.getName("forearmRollRef%s_jnt"), + self.auxChainPos[:2], + self.normal, + False, + self.WIP) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the elbow. + 2 for elbow angle control + # We have attribute least one division attribute the start, the end + # and one for the elbow. + 2 for elbow angle control self.divisions = self.settings["div0"] + self.settings["div1"] + 4 self.div_cns = [] for i in range(self.divisions): - div_cns = pri.addTransform(self.root, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform(self.root, + self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) @@ -265,131 +473,302 @@ def addObjects(self): # End reference ------------------------------------ # To help the deformation on the wrist - self.end_ref = pri.addTransform(self.eff_loc, self.getName("end_ref"), tra.getTransform(self.eff_loc)) + self.end_ref = primitive.addTransform( + self.eff_loc, + self.getName("end_ref"), + transform.getTransform(self.eff_loc)) if self.negate: self.end_ref.attr("rz").set(180.0) if self.settings["ikTR"]: - reference = self.ikRot_ctl - self.match_ikRot = pri.addTransform(self.fk2_ctl, self.getName("ikRot_mth"), tra.getTransform(self.ikRot_ctl)) - else: - reference = self.ik_ctl + # reference = self.ikRot_ctl + self.match_ikRot = primitive.addTransform( + self.fk2_ctl, + self.getName("ikRot_mth"), + transform.getTransform(self.ikRot_ctl)) + # else: + # reference = self.ik_ctl self.jnt_pos.append([self.end_ref, "end"]) # Tangent controls - t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], self.tws1A_npo, .5) - self.armTangentA_loc = pri.addTransform(self.root, self.getName("armTangentA_loc"), self.fk_ctl[0].getMatrix(worldSpace=True)) - self.armTangentA_npo = pri.addTransform(self.armTangentA_loc, self.getName("armTangentA_npo"), t) - self.armTangentA_ctl = self.addCtl(self.armTangentA_npo, "armTangentA_ctl", t, self.color_ik, "circle", w=self.size*.2, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + t = transform.getInterpolateTransformMatrix(self.fk_ctl[0], + self.tws1A_npo, + .5) + self.armTangentA_loc = primitive.addTransform( + self.root, + self.getName("armTangentA_loc"), + self.fk_ctl[0].getMatrix(worldSpace=True)) + + self.armTangentA_npo = primitive.addTransform( + self.armTangentA_loc, + self.getName("armTangentA_npo"), + t) + + self.armTangentA_ctl = self.addCtl(self.armTangentA_npo, + "armTangentA_ctl", + t, + self.color_ik, + "circle", + w=self.size * .2, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) if self.negate: self.armTangentA_npo.rz.set(180) self.armTangentA_npo.sz.set(-1) - att.setKeyableAttributes(self.armTangentA_ctl, self.t_params) - - t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], self.tws1A_npo, .9) - self.armTangentB_npo = pri.addTransform(self.tws1A_loc, self.getName("armTangentB_npo"), t) - self.armTangentB_ctl = self.addCtl(self.armTangentB_npo, "armTangentB_ctl", t, self.color_ik, "circle", w=self.size*.1, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + attribute.setKeyableAttributes(self.armTangentA_ctl, self.t_params) + + t = transform.getInterpolateTransformMatrix(self.fk_ctl[0], + self.tws1A_npo, + .9) + self.armTangentB_npo = primitive.addTransform( + self.tws1A_loc, + self.getName("armTangentB_npo"), + t) + self.armTangentB_ctl = self.addCtl(self.armTangentB_npo, + "armTangentB_ctl", + t, + self.color_ik, + "circle", + w=self.size * .1, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) if self.negate: self.armTangentB_npo.rz.set(180) self.armTangentB_npo.sz.set(-1) - att.setKeyableAttributes(self.armTangentB_ctl, self.t_params) + attribute.setKeyableAttributes(self.armTangentB_ctl, self.t_params) tC = self.tws1B_npo.getMatrix(worldSpace=True) - tC = tra.setMatrixPosition(tC, self.guide.apos[2]) - t = tra.getInterpolateTransformMatrix(self.tws1B_npo, tC, .1) - self.forearmTangentA_npo = pri.addTransform(self.tws1B_loc, self.getName("forearmTangentA_npo"), t) - self.forearmTangentA_ctl = self.addCtl(self.forearmTangentA_npo, "forearmTangentA_ctl", t, self.color_ik, "circle", w=self.size*.1, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + tC = transform.setMatrixPosition(tC, self.guide.apos[2]) + t = transform.getInterpolateTransformMatrix(self.tws1B_npo, tC, .1) + self.forearmTangentA_npo = primitive.addTransform( + self.tws1B_loc, + self.getName("forearmTangentA_npo"), + t) + + self.forearmTangentA_ctl = self.addCtl( + self.forearmTangentA_npo, + "forearmTangentA_ctl", + t, + self.color_ik, + "circle", + w=self.size * .1, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) + if self.negate: self.forearmTangentA_npo.rz.set(180) self.forearmTangentA_npo.sz.set(-1) - att.setKeyableAttributes(self.forearmTangentA_ctl, self.t_params) + attribute.setKeyableAttributes(self.forearmTangentA_ctl, self.t_params) + + t = transform.getInterpolateTransformMatrix(self.tws1B_npo, tC, .5) + self.forearmTangentB_loc = primitive.addTransform( + self.root, + self.getName("forearmTangentB_loc"), + tC) + self.forearmTangentB_npo = primitive.addTransform( + self.forearmTangentB_loc, + self.getName("forearmTangentB_npo"), + t) + self.forearmTangentB_ctl = self.addCtl( + self.forearmTangentB_npo, + "forearmTangentB_ctl", + t, + self.color_ik, + "circle", + w=self.size * .2, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) - t = tra.getInterpolateTransformMatrix(self.tws1B_npo, tC, .5) - self.forearmTangentB_loc = pri.addTransform(self.root, self.getName("forearmTangentB_loc"), tC) - self.forearmTangentB_npo = pri.addTransform(self.forearmTangentB_loc, self.getName("forearmTangentB_npo"), t) - self.forearmTangentB_ctl = self.addCtl(self.forearmTangentB_npo, "forearmTangentB_ctl", t, self.color_ik, "circle", w=self.size*.2, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) if self.negate: self.forearmTangentB_npo.rz.set(180) self.forearmTangentB_npo.sz.set(-1) - att.setKeyableAttributes(self.forearmTangentB_ctl, self.t_params) + attribute.setKeyableAttributes(self.forearmTangentB_ctl, self.t_params) t = self.mid_ctl.getMatrix(worldSpace=True) - self.elbowTangent_npo = pri.addTransform(self.mid_ctl, self.getName("elbowTangent_npo"), t) - self.elbowTangent_ctl = self.addCtl(self.elbowTangent_npo, "elbowTangent_ctl", t, self.color_fk, "circle", w=self.size*.15, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + self.elbowTangent_npo = primitive.addTransform( + self.mid_ctl, + self.getName("elbowTangent_npo"), + t) + + self.elbowTangent_ctl = self.addCtl( + self.elbowTangent_npo, + "elbowTangent_ctl", + t, + self.color_fk, + "circle", + w=self.size * .15, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) + if self.negate: self.elbowTangent_npo.rz.set(180) self.elbowTangent_npo.sz.set(-1) - att.setKeyableAttributes(self.elbowTangent_ctl, self.t_params) - + attribute.setKeyableAttributes(self.elbowTangent_ctl, self.t_params) + # ===================================================== + # ATTRIBUTES + # ===================================================== def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness_att = self.addAnimParam("roundness", "Roundness", "double", 0, 0, 1) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) - self.tangentVis_att = self.addAnimParam("Tangent_vis", "Tangent vis", "bool", False) + self.blend_att = self.addAnimParam("blend", + "Fk/Ik Blend", + "double", + self.settings["blend"], + 0, + 1) + self.roll_att = self.addAnimParam("roll", + "Roll", + "double", + 0, + -180, + 180) + self.scale_att = self.addAnimParam("ikscale", + "Scale", + "double", + 1, + .001, + 99) + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1, + 99) + self.slide_att = self.addAnimParam("slide", + "Slide", + "double", + .5, + 0, + 1) + self.softness_att = self.addAnimParam("softness", + "Softness", + "double", + 0, + 0, + 1) + self.reverse_att = self.addAnimParam("reverse", + "Reverse", + "double", + 0, + 0, + 1) + self.roundness_att = self.addAnimParam("roundness", + "Roundness", + "double", + 0, + 0, + 1) + self.volume_att = self.addAnimParam("volume", + "Volume", + "double", + 1, + 0, + 1) + self.tangentVis_att = self.addAnimParam("Tangent_vis", + "Tangent vis", + "bool", + False) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["ikTR"]: ref_names = ["Auto", "ik_ctl"] if self.settings["ikrefarray"]: ref_names = ref_names + self.settings["ikrefarray"].split(",") - self.ikRotRef_att = self.addAnimEnumParam("ikRotRef", "Ik Rot Ref", 0, ref_names) + self.ikRotRef_att = self.addAnimEnumParam("ikRotRef", + "Ik Rot Ref", + 0, + ref_names) if self.settings["upvrefarray"]: ref_names = self.settings["upvrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, ref_names) + self.upvref_att = self.addAnimEnumParam("upvref", + "UpV Ref", + 0, + ref_names) if self.settings["pinrefarray"]: - ref_names = self.settings["pinrefarray" ].split(",") + ref_names = self.settings["pinrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.pin_att = self.addAnimEnumParam("elbowref", "Elbow Ref", 0, ref_names) + self.pin_att = self.addAnimEnumParam("elbowref", + "Elbow Ref", + 0, + ref_names) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] - - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + self.st_value = fcurve.getFCurveValues(self.settings["st_profile"], + self.divisions) + self.sq_value = fcurve.getFCurveValues(self.settings["sq_profile"], + self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], -1, 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam("resample", + "Resample", + "bool", + True) + self.absolute_att = self.addSetupParam("absolute", + "Absolute", + "bool", + False) + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): - - # 1 bone chain Upv ref ===================================================================================== - self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.armChainUpvRef, "ikSCsolver") + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + # 1 bone chain Upv ref ====================================== + self.ikHandleUpvRef = primitive.addIkHandle( + self.root, + self.getName("ikHandleLegChainUpvRef"), + self.armChainUpvRef, + "ikSCsolver") pm.pointConstraint(self.ik_ctl, self.ikHandleUpvRef) - pm.parentConstraint( self.armChainUpvRef[0], self.upv_cns, mo=True) + pm.parentConstraint(self.armChainUpvRef[0], self.upv_cns, mo=True) # Visibilities ------------------------------------- # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -403,76 +782,122 @@ def addOperators(self): pm.connectAttr(self.blend_att, shp.attr("visibility")) # Controls ROT order ----------------------------------- - att.setRotOrder(self.fk0_ctl, "XZY") - att.setRotOrder(self.fk1_ctl, "XYZ") - att.setRotOrder(self.fk2_ctl, "YZX") - # att.setRotOrder(self.ik_ctl, "ZYX") - att.setRotOrder(self.ik_ctl, "XYZ") - + attribute.setRotOrder(self.fk0_ctl, "XZY") + attribute.setRotOrder(self.fk1_ctl, "XYZ") + attribute.setRotOrder(self.fk2_ctl, "YZX") + attribute.setRotOrder(self.ik_ctl, "XYZ") # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_loc] - node = aop.gear_ikfk2bone_op(out, self.root, self.ik_ref, self.upv_ctl, self.fk_ctl[0], self.fk_ctl[1], self.fk_ref, self.length0, self.length1, self.negate) + o_node = applyop.gear_ikfk2bone_op(out, + self.root, + self.ik_ref, + self.upv_ctl, + self.fk_ctl[0], + self.fk_ctl[1], + self.fk_ref, + self.length0, + self.length1, + self.negate) if self.settings["ikTR"]: - #connect the control inputs - outEff_dm = node.listConnections(c=True)[-1][1] + # connect the control inputs + outEff_dm = o_node.listConnections(c=True)[-1][1] + + in_attr = self.ikRot_npo.attr("translate") + outEff_dm.attr("outputTranslate") >> in_attr - outEff_dm.attr("outputTranslate") >> self.ikRot_npo.attr("translate") outEff_dm.attr("outputScale") >> self.ikRot_npo.attr("scale") - dm_node = nod.createDecomposeMatrixNode(node.attr("outB")) + dm_node = node.createDecomposeMatrixNode(o_node.attr("outB")) dm_node.attr("outputRotate") >> self.ikRot_npo.attr("rotate") - #rotation + # rotation + + mulM_node = applyop.gear_mulmatrix_op( + self.ikRot_ctl.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) - mulM_node = aop.gear_mulmatrix_op(self.ikRot_ctl.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) - intM_node = aop.gear_intmatrix_op(node.attr("outEff"), mulM_node.attr("output"), node.attr("blend")) - dm_node = nod.createDecomposeMatrixNode(intM_node.attr("output")) + intM_node = applyop.gear_intmatrix_op(o_node.attr("outEff"), + mulM_node.attr("output"), + o_node.attr("blend")) + dm_node = node.createDecomposeMatrixNode(intM_node.attr("output")) dm_node.attr("outputRotate") >> self.eff_loc.attr("rotate") - tra.matchWorldTransform(self.fk2_ctl, self.ikRot_cns) + transform.matchWorldTransform(self.fk2_ctl, self.ikRot_cns) - #scale: this fix the scalin popping issue - intM_node = aop.gear_intmatrix_op(self.fk2_ctl.attr("worldMatrix"), self.ik_ctl_ref.attr("worldMatrix"), node.attr("blend")) - mulM_node = aop.gear_mulmatrix_op(intM_node.attr("output"), self.eff_loc.attr("parentInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulM_node.attr("output")) - dm_node.attr("outputScale") >> self.eff_loc.attr("scale") + # scale: this fix the scalin popping issue + intM_node = applyop.gear_intmatrix_op( + self.fk2_ctl.attr("worldMatrix"), + self.ik_ctl_ref.attr("worldMatrix"), + o_node.attr("blend")) + mulM_node = applyop.gear_mulmatrix_op( + intM_node.attr("output"), + self.eff_loc.attr("parentInverseMatrix")) + + dm_node = node.createDecomposeMatrixNode(mulM_node.attr("output")) + dm_node.attr("outputScale") >> self.eff_loc.attr("scale") - pm.connectAttr(self.blend_att, node+".blend") + pm.connectAttr(self.blend_att, o_node + ".blend") if self.negate: mulVal = -1 else: mulVal = 1 - nod.createMulNode(self.roll_att, mulVal, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") + node.createMulNode(self.roll_att, mulVal, o_node + ".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") # Twist references --------------------------------- - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.root.attr("worldInverseMatrix")) - dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.tws2_npo.attr("translate")) - + o_node = applyop.gear_mulmatrix_op( + self.eff_loc.attr("worldMatrix"), + self.root.attr("worldInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.tws2_npo.attr("rotate")) - - #spline IK for twist jnts - self.ikhArmTwist, self.armTwistCrv = aop.splineIK(self.getName("armTwist"), self.armTwistChain, parent=self.root, cParent=self.bone0 ) - self.ikhForearmTwist, self.forearmTwistCrv = aop.splineIK(self.getName("forearmTwist"), self.forearmTwistChain, parent=self.root, cParent=self.bone1 ) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.tws2_npo.attr("translate")) - #references - self.ikhArmRef, self.tmpCrv = aop.splineIK(self.getName("armRollRef"), self.armRollRef, parent=self.root, cParent=self.bone0 ) - self.ikhForearmRef, self.tmpCrv = aop.splineIK(self.getName("forearmRollRef"), self.forearmRollRef, parent=self.root, cParent=self.eff_loc ) - self.ikhAuxTwist, self.tmpCrv = aop.splineIK(self.getName("auxTwist"), self.auxTwistChain, parent=self.root, cParent=self.eff_loc ) - - #setting connexions for ikhArmTwist + dm_node = pm.createNode("decomposeMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.tws2_npo.attr("rotate")) + + # spline IK for twist jnts + self.ikhArmTwist, self.armTwistCrv = applyop.splineIK( + self.getName("armTwist"), + self.armTwistChain, + parent=self.root, + cParent=self.bone0) + + self.ikhForearmTwist, self.forearmTwistCrv = applyop.splineIK( + self.getName("forearmTwist"), + self.forearmTwistChain, + parent=self.root, + cParent=self.bone1) + + # references + self.ikhArmRef, self.tmpCrv = applyop.splineIK( + self.getName("armRollRef"), + self.armRollRef, + parent=self.root, + cParent=self.bone0) + + self.ikhForearmRef, self.tmpCrv = applyop.splineIK( + self.getName("forearmRollRef"), + self.forearmRollRef, + parent=self.root, + cParent=self.eff_loc) + + self.ikhAuxTwist, self.tmpCrv = applyop.splineIK( + self.getName("auxTwist"), + self.auxTwistChain, + parent=self.root, + cParent=self.eff_loc) + + # setting connexions for ikhArmTwist self.ikhArmTwist.attr("dTwistControlEnable").set(True) self.ikhArmTwist.attr("dWorldUpType").set(4) self.ikhArmTwist.attr("dWorldUpAxis").set(3) @@ -480,10 +905,13 @@ def addOperators(self): self.ikhArmTwist.attr("dWorldUpVectorY").set(0.0) self.ikhArmTwist.attr("dWorldUpVectorEndZ").set(1.0) self.ikhArmTwist.attr("dWorldUpVectorEndY").set(0.0) - pm.connectAttr(self.armRollRef[0].attr("worldMatrix[0]"), self.ikhArmTwist.attr("dWorldUpMatrix")) - pm.connectAttr(self.bone0.attr("worldMatrix[0]"), self.ikhArmTwist.attr("dWorldUpMatrixEnd")) - #setting connexions for ikhAuxTwist + pm.connectAttr(self.armRollRef[0].attr("worldMatrix[0]"), + self.ikhArmTwist.attr("dWorldUpMatrix")) + pm.connectAttr(self.bone0.attr("worldMatrix[0]"), + self.ikhArmTwist.attr("dWorldUpMatrixEnd")) + + # setting connexions for ikhAuxTwist self.ikhAuxTwist.attr("dTwistControlEnable").set(True) self.ikhAuxTwist.attr("dWorldUpType").set(4) self.ikhAuxTwist.attr("dWorldUpAxis").set(3) @@ -491,162 +919,232 @@ def addOperators(self): self.ikhAuxTwist.attr("dWorldUpVectorY").set(0.0) self.ikhAuxTwist.attr("dWorldUpVectorEndZ").set(1.0) self.ikhAuxTwist.attr("dWorldUpVectorEndY").set(0.0) - pm.connectAttr(self.forearmRollRef[0].attr("worldMatrix[0]"), self.ikhAuxTwist.attr("dWorldUpMatrix")) - pm.connectAttr(self.eff_loc.attr("worldMatrix[0]"), self.ikhAuxTwist.attr("dWorldUpMatrixEnd")) - pm.connectAttr(self.auxTwistChain[1].attr("rx"), self.ikhForearmTwist.attr("twist")) + pm.connectAttr(self.forearmRollRef[0].attr("worldMatrix[0]"), + self.ikhAuxTwist.attr("dWorldUpMatrix")) + pm.connectAttr(self.eff_loc.attr("worldMatrix[0]"), + self.ikhAuxTwist.attr("dWorldUpMatrixEnd")) + pm.connectAttr(self.auxTwistChain[1].attr("rx"), + self.ikhForearmTwist.attr("twist")) pm.parentConstraint(self.bone1, self.aux_npo, maintainOffset=True) - #scale arm length for twist chain (not the squash and stretch) + # scale arm length for twist chain (not the squash and stretch) arclen_node = pm.arclen(self.armTwistCrv, ch=True) alAttrArm = arclen_node.attr("arcLength") - muldiv_nodeArm = pm.createNode("multiplyDivide") - pm.connectAttr(arclen_node.attr("arcLength"), muldiv_nodeArm.attr("input1X")) + muldiv_nodeArm = pm.createNode("multiplyDivide") + pm.connectAttr(arclen_node.attr("arcLength"), + muldiv_nodeArm.attr("input1X")) muldiv_nodeArm.attr("input2X").set(alAttrArm.get()) muldiv_nodeArm.attr("operation").set(2) for jnt in self.armTwistChain: - pm.connectAttr(muldiv_nodeArm.attr("outputX"),jnt.attr("sx")) + pm.connectAttr(muldiv_nodeArm.attr("outputX"), jnt.attr("sx")) - #scale forearm length for twist chain (not the squash and stretch) + # scale forearm length for twist chain (not the squash and stretch) arclen_node = pm.arclen(self.forearmTwistCrv, ch=True) alAttrForearm = arclen_node.attr("arcLength") - muldiv_nodeForearm = pm.createNode("multiplyDivide") - pm.connectAttr(arclen_node.attr("arcLength"), muldiv_nodeForearm.attr("input1X")) + muldiv_nodeForearm = pm.createNode("multiplyDivide") + pm.connectAttr(arclen_node.attr("arcLength"), + muldiv_nodeForearm.attr("input1X")) muldiv_nodeForearm.attr("input2X").set(alAttrForearm.get()) muldiv_nodeForearm.attr("operation").set(2) for jnt in self.forearmTwistChain: - pm.connectAttr(muldiv_nodeForearm.attr("outputX"),jnt.attr("sx")) + pm.connectAttr(muldiv_nodeForearm.attr("outputX"), jnt.attr("sx")) - #scale compensation for the first twist join + # scale compensation for the first twist join dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix[0]"), dm_node.attr("inputMatrix")) - pm.connectAttr(dm_node.attr("outputScale"), self.armTwistChain[0].attr("inverseScale")) - pm.connectAttr(dm_node.attr("outputScale"), self.forearmTwistChain[0].attr("inverseScale")) - - #tangent controls - muldiv_node = pm.createNode("multiplyDivide") + pm.connectAttr(self.root.attr("worldMatrix[0]"), + dm_node.attr("inputMatrix")) + pm.connectAttr(dm_node.attr("outputScale"), + self.armTwistChain[0].attr("inverseScale")) + pm.connectAttr(dm_node.attr("outputScale"), + self.forearmTwistChain[0].attr("inverseScale")) + + # tangent controls + muldiv_node = pm.createNode("multiplyDivide") muldiv_node.attr("input2X").set(-1) pm.connectAttr(self.tws1A_npo.attr("rz"), muldiv_node.attr("input1X")) - muldiv_nodeBias = pm.createNode("multiplyDivide") - pm.connectAttr(muldiv_node.attr("outputX"), muldiv_nodeBias.attr("input1X")) + muldiv_nodeBias = pm.createNode("multiplyDivide") + pm.connectAttr(muldiv_node.attr("outputX"), + muldiv_nodeBias.attr("input1X")) pm.connectAttr(self.roundness_att, muldiv_nodeBias.attr("input2X")) - pm.connectAttr(muldiv_nodeBias.attr("outputX"), self.tws1A_loc.attr("rz") ) + pm.connectAttr(muldiv_nodeBias.attr("outputX"), + self.tws1A_loc.attr("rz")) if self.negate: axis = "xz" else: axis = "-xz" - aop.aimCns(self.tws1A_npo, self.tws0_loc, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) + applyop.aimCns(self.tws1A_npo, + self.tws0_loc, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) + + applyop.aimCns(self.forearmTangentB_loc, + self.forearmTangentA_npo, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) - aop.aimCns(self.forearmTangentB_loc, self.forearmTangentA_npo, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) pm.pointConstraint(self.eff_loc, self.forearmTangentB_loc) - - muldiv_node = pm.createNode("multiplyDivide") + muldiv_node = pm.createNode("multiplyDivide") muldiv_node.attr("input2X").set(-1) pm.connectAttr(self.tws1B_npo.attr("rz"), muldiv_node.attr("input1X")) - muldiv_nodeBias = pm.createNode("multiplyDivide") - pm.connectAttr(muldiv_node.attr("outputX"), muldiv_nodeBias.attr("input1X")) - pm.connectAttr(self.roundness_att, muldiv_nodeBias.attr("input2X")) - pm.connectAttr(muldiv_nodeBias.attr("outputX"), self.tws1B_loc.attr("rz") ) + muldiv_nodeBias = pm.createNode("multiplyDivide") + pm.connectAttr(muldiv_node.attr("outputX"), + muldiv_nodeBias.attr("input1X")) + pm.connectAttr(self.roundness_att, + muldiv_nodeBias.attr("input2X")) + pm.connectAttr(muldiv_nodeBias.attr("outputX"), + self.tws1B_loc.attr("rz")) if self.negate: axis = "-xz" else: axis = "xz" - aop.aimCns(self.tws1B_npo, self.tws2_loc, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) - - aop.aimCns(self.armTangentA_loc, self.armTangentB_npo, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) + applyop.aimCns(self.tws1B_npo, + self.tws2_loc, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) + + applyop.aimCns(self.armTangentA_loc, + self.armTangentB_npo, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - distB_node = nod.createDistNode(self.tws1_loc, self.tws2_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root.attr("sx")) + distA_node = node.createDistNode(self.tws0_loc, self.tws1_loc) + distB_node = node.createDistNode(self.tws1_loc, self.tws2_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root.attr("sx")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") - - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") - self.volDriver_att = div_node2+".outputX" - - # connecting tangent scaele compensation after volume to aboid duplicate some nodes ------------------------------ - distA_node = nod.createDistNode(self.tws0_loc, self.mid_ctl) - distB_node = nod.createDistNode(self.mid_ctl, self.tws2_loc) - - - div_nodeArm = nod.createDivNode(distA_node+".distance", dm_node.attr("outputScaleX")) - div_node2 = nod.createDivNode(div_nodeArm+".outputX", distA_node.attr("distance").get()) - pm.connectAttr(div_node2.attr("outputX"), self.tws1A_loc.attr("sx")) - pm.connectAttr(div_node2.attr("outputX"), self.armTangentA_loc.attr("sx")) - - div_nodeForearm = nod.createDivNode(distB_node+".distance", dm_node.attr("outputScaleX")) - div_node2 = nod.createDivNode(div_nodeForearm+".outputX", distB_node.attr("distance").get()) - pm.connectAttr(div_node2.attr("outputX"), self.tws1B_loc.attr("sx")) - pm.connectAttr(div_node2.attr("outputX"), self.forearmTangentB_loc.attr("sx")) - - #conection curve - aop.gear_curvecns_op(self.armTwistCrv, [ self.armTangentA_loc, self.armTangentA_ctl, self.armTangentB_ctl,self.elbowTangent_ctl ]) - aop.gear_curvecns_op(self.forearmTwistCrv, [ self.elbowTangent_ctl, self.forearmTangentA_ctl, self.forearmTangentB_ctl,self.forearmTangentB_loc ]) - - #Tangent controls vis + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") + + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") + self.volDriver_att = div_node2 + ".outputX" + + # connecting tangent scaele compensation after + # volume to avoid duplicate some nodes + distA_node = node.createDistNode(self.tws0_loc, self.mid_ctl) + distB_node = node.createDistNode(self.mid_ctl, self.tws2_loc) + + div_nodeArm = node.createDivNode(distA_node + ".distance", + dm_node.attr("outputScaleX")) + div_node2 = node.createDivNode(div_nodeArm + ".outputX", + distA_node.attr("distance").get()) + pm.connectAttr(div_node2.attr("outputX"), + self.tws1A_loc.attr("sx")) + pm.connectAttr(div_node2.attr("outputX"), + self.armTangentA_loc.attr("sx")) + + div_nodeForearm = node.createDivNode(distB_node + ".distance", + dm_node.attr("outputScaleX")) + div_node2 = node.createDivNode(div_nodeForearm + ".outputX", + distB_node.attr("distance").get()) + pm.connectAttr(div_node2.attr("outputX"), + self.tws1B_loc.attr("sx")) + pm.connectAttr(div_node2.attr("outputX"), + self.forearmTangentB_loc.attr("sx")) + + # conection curve + cns_list = [self.armTangentA_loc, self.armTangentA_ctl, + self.armTangentB_ctl, self.elbowTangent_ctl] + applyop.gear_curvecns_op(self.armTwistCrv, cns_list) + + cns_list = [self.elbowTangent_ctl, self.forearmTangentA_ctl, + self.forearmTangentB_ctl, self.forearmTangentB_loc] + applyop.gear_curvecns_op(self.forearmTwistCrv, cns_list) + + # Tangent controls vis for shp in self.armTangentA_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.armTangentB_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.forearmTangentA_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.forearmTangentB_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.elbowTangent_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) # Divisions ---------------------------------------- - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + # attribute 0 or 1 the division will follow exactly the rotation of + # the controler.. and we wont have this nice tangent + roll for i, div_cns in enumerate(self.div_cns): - if i < (self.settings["div0"]+2): - mulmat_node = aop.gear_mulmatrix_op(self.armTwistChain[i]+".worldMatrix", div_cns+".parentInverseMatrix") + if i < (self.settings["div0"] + 2): + mulmat_node = applyop.gear_mulmatrix_op( + self.armTwistChain[i] + ".worldMatrix", + div_cns + ".parentInverseMatrix") lastArmDiv = div_cns else: - mulmat_node = aop.gear_mulmatrix_op(self.forearmTwistChain[i-(self.settings["div0"]+2)]+".worldMatrix", div_cns+".parentInverseMatrix") + ftc = self.forearmTwistChain[i - (self.settings["div0"] + 2)] + mulmat_node = applyop.gear_mulmatrix_op( + ftc + ".worldMatrix", + div_cns + ".parentInverseMatrix") lastForeDiv = div_cns - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", div_cns+".t") - pm.connectAttr(dm_node+".outputRotate", div_cns+".r") - # Squash n Stretch - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") + dm_node = node.createDecomposeMatrixNode(mulmat_node + ".output") + pm.connectAttr(dm_node + ".outputTranslate", div_cns + ".t") + pm.connectAttr(dm_node + ".outputRotate", div_cns + ".r") - #force translation for last loc arm and foreamr - aop.gear_mulmatrix_op(self.elbowTangent_ctl.worldMatrix,lastArmDiv.parentInverseMatrix, lastArmDiv, "t" ) - aop.gear_mulmatrix_op(self.tws2_loc.worldMatrix,lastForeDiv.parentInverseMatrix, lastForeDiv, "t" ) + # Squash n Stretch + o_node = applyop.gear_squashstretch2_op( + div_cns, + None, + pm.getAttr(self.volDriver_att), + "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") + + # force translation for last loc arm and foreamr + applyop.gear_mulmatrix_op(self.elbowTangent_ctl.worldMatrix, + lastArmDiv.parentInverseMatrix, + lastArmDiv, + "t") + applyop.gear_mulmatrix_op(self.tws2_loc.worldMatrix, + lastForeDiv.parentInverseMatrix, + lastForeDiv, + "t") # return # NOTE: next line fix the issue on meters. - # This is special case becasuse the IK solver from mGear use the scale as lenght and we have shear - # TODO: check for a more clean and elegant solution instead of re-match the world matrix again - tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) - tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) - tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0) - tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1) + # This is special case becasuse the IK solver from mGear use the scale + # as lenght and we have shear + # TODO: check for a more clean and elegant solution instead of re-match + # the world matrix again + transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) + transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) + transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0) + transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1) # match IK/FK ref pm.parentConstraint(self.bone0, self.match_fk0_off, mo=True) pm.parentConstraint(self.bone1, self.match_fk1_off, mo=True) if self.settings["ikTR"]: - tra.matchWorldTransform(self.ikRot_ctl,self.match_ikRot ) - tra.matchWorldTransform(self.fk_ctl[2], self.match_fk2 ) - + transform.matchWorldTransform(self.ikRot_ctl, self.match_ikRot) + transform.matchWorldTransform(self.fk_ctl[2], self.match_fk2) # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.div_cns[0] self.relatives["elbow"] = self.div_cns[self.settings["div0"] + 2] self.relatives["wrist"] = self.div_cns[-1] @@ -654,7 +1152,7 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["elbow"] = self.settings["div0"] + 2 - self.jointRelatives["wrist"] = len(self.div_cns)-2 + self.jointRelatives["wrist"] = len(self.div_cns) - 2 self.jointRelatives["eff"] = -1 self.controlRelatives["root"] = self.fk0_ctl @@ -662,31 +1160,42 @@ def setRelation(self): self.controlRelatives["wrist"] = self.fk2_ctl self.controlRelatives["eff"] = self.fk2_ctl - ## Add more connection definition to the set. - # @param self def addConnection(self): + """Add more connection definition to the set""" + self.connections["shoulder_01"] = self.connect_shoulder_01 - ## standard connection definition. - # @param self def connect_standard(self): + """standard connection definition for the component""" + if self.settings["ikTR"]: self.parent.addChild(self.root) self.connectRef(self.settings["ikrefarray"], self.ik_cns) self.connectRef(self.settings["upvrefarray"], self.upv_cns, True) if self.settings["ikrefarray"]: - ikRotRefArray = "Auto,ik_ctl,"+self.settings["ikrefarray"] + ikRotRefArray = "Auto,ik_ctl," + self.settings["ikrefarray"] else: ikRotRefArray = "Auto,ik_ctl" - self.connectRef2(ikRotRefArray, self.ikRot_cns, self.ikRotRef_att, [self.ikRot_npo, self.ik_ctl], True) + self.connectRef2(ikRotRefArray, + self.ikRot_cns, + self.ikRotRef_att, + [self.ikRot_npo, self.ik_ctl], + True) else: self.connect_standardWithIkRef() if self.settings["pinrefarray"]: - self.connectRef2("Auto,"+ self.settings["pinrefarray"], self.mid_cns, self.pin_att, [self.ctrn_loc], False) - + self.connectRef2("Auto," + self.settings["pinrefarray"], + self.mid_cns, + self.pin_att, + [self.ctrn_loc], + False) def connect_shoulder_01(self): + """ Custom connection to be use with shoulder 01 component""" + self.connect_standard() - pm.parent(self.rollRef[0],self.parent_comp.ctl) + pm.parent(self.armRollRef[0], + self.ikHandleUpvRef, + self.parent_comp.ctl) diff --git a/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/guide.py b/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/guide.py index 78080d4..bf6f693 100644 --- a/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/guide.py +++ b/scripts/mgear/maya/shifter/component/arm_2jnt_freeTangents_01/guide.py @@ -1,61 +1,34 @@ -# MGEAR is under the terms of the MIT License +"""Guide Arm 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial import pymel.core as pm -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide - -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,3,0] +VERSION = [1, 3, 0] TYPE = "arm_2jnt_freeTangents_01" NAME = "arm" -DESCRIPTION = "2 bones arm with classic bendy/roll arms. With elbow pin and only one central tangent" +DESCRIPTION = "2 bones arm with classic bendy/roll arms. With elbow pin and " \ + "only one central tangent" ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -68,55 +41,55 @@ class Guide(ComponentGuide): connectors = ["shoulder_01"] - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "elbow", "wrist", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [3,0,-.01]) + vTemp = transform.getOffsetPosition(self.root, [3, 0, -.01]) self.elbow = self.addLoc("elbow", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [6,0,0]) + vTemp = transform.getOffsetPosition(self.root, [6, 0, 0]) self.wrist = self.addLoc("wrist", self.elbow, vTemp) - vTemp = tra.getOffsetPosition( self.root, [7,0,0]) + vTemp = transform.getOffsetPosition(self.root, [7, 0, 0]) self.eff = self.addLoc("eff", self.wrist, vTemp) - self.dispcrv = self.addDispCurve("crv", [self.root, self.elbow, self.wrist, self.eff]) + self.dispcrv = self.addDispCurve( + "crv", + [self.root, self.elbow, self.wrist, self.eff]) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") self.pUpvRefArray = self.addParam("pinrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 1.5 , 1, None) - self.pIKTR = self.addParam("ikTR", "bool", False) + self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1, None) + self.pIKTR = self.addParam("ikTR", "bool", False) self.pMirrorMid = self.addParam("mirrorMid", "bool", False) self.pMirrorIK = self.addParam("mirrorIK", "bool", False) - # Divisions self.pDiv0 = self.addParam("div0", "long", 2, 1, None) self.pDiv1 = self.addParam("div1", "long", 2, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-.5],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,.5],[1,0]]) - - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSt_profile = self.addFCurveParam("st_profile", + [[0, 0], [.5, -.5], [1, 0]]) + self.pSq_profile = self.addFCurveParam("sq_profile", + [[0, 0], [.5, .5], [1, 0]]) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam("parentJointIndex", + "long", + -1, + None, + None) ########################################################## @@ -124,23 +97,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -148,7 +122,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -158,19 +132,23 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) self.populateCheck(self.settingsTab.ikTR_checkBox, "ikTR") self.populateCheck(self.settingsTab.mirrorMid_checkBox, "mirrorMid") self.populateCheck(self.settingsTab.mirrorIK_checkBox, "mirrorIK") @@ -186,19 +164,25 @@ def populate_componentControls(self): for item in pinRefArrayItems: self.settingsTab.pinRefArray_listWidget.addItem(item) - #populate connections in main settings + # populate connections in main settings for cnx in Guide.connectors: self.mainSettingsTab.connector_comboBox.addItem(cnx) - self.connector_items = [ self.mainSettingsTab.connector_comboBox.itemText(i) for i in range( self.mainSettingsTab.connector_comboBox.count())] + + sll = [self.mainSettingsTab.connector_comboBox.itemText(i) + for i in + range(self.mainSettingsTab.connector_comboBox.count())] + + self.connector_items = sll currentConnector = self.root.attr("connector").get() if currentConnector not in self.connector_items: self.mainSettingsTab.connector_comboBox.addItem(currentConnector) self.connector_items.append(currentConnector) - pm.displayWarning("The current connector: %s, is not a valid connector for this component. Build will Fail!!") + pm.displayWarning( + "The current connector: %s, is not a valid " + "connector for this component. Build will Fail!!") comboIndex = self.connector_items.index(currentConnector) self.mainSettingsTab.connector_comboBox.setCurrentIndex(comboIndex) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -209,29 +193,86 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - self.settingsTab.ikTR_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.ikTR_checkBox, "ikTR")) - self.settingsTab.mirrorMid_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorMid_checkBox, "mirrorMid")) - self.settingsTab.mirrorIK_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorIK_checkBox, "mirrorIK")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.ikTR_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.ikTR_checkBox, "ikTR")) + + self.settingsTab.mirrorMid_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorMid_checkBox, + "mirrorMid")) + self.settingsTab.mirrorIK_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorIK_checkBox, + "mirrorIK")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) self.settingsTab.upvRefArray_listWidget.installEventFilter(self) - self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) + self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) self.settingsTab.pinRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -246,7 +287,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/__init__.py b/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/__init__.py index 11ecd84..f1d40f8 100644 --- a/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/__init__.py @@ -1,28 +1,4 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 11 / 18 +"""Component Arm Miles 2 joints 01 module""" # ms 2jnt feature ----------------------- # //done//FK isolation @@ -35,315 +11,644 @@ # //done//addition limb jt layer ctl(optional) # To Do List ------------------------------- - # upper sleeve lower sleeve ctl(optional) -# custom Upper limb 4 pt bezier node with input for rot interpolation +# custom Upper limb 4 pt bezier o_node with input for rot interpolation -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt - +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): - def addObjects(self): +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== + def addObjects(self): + """Add all the objects needed to create the component.""" self.normal = self.getNormalFromPos(self.guide.apos) self.binormal = self.getBiNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + self.length0 = vector.getDistance( + self.guide.apos[0], self.guide.apos[1]) + self.length1 = vector.getDistance( + self.guide.apos[1], self.guide.apos[2]) + self.length2 = vector.getDistance( + self.guide.apos[2], self.guide.apos[3]) # FK Controlers ----------------------------------- - # *ms* set npo @ Tpose, to make the fk rotation work best with rot order"yzx" + # *ms* set npo @ Tpose, to make the fk rotation work + # best with rot order"yzx" - self.fk_cns = pri.addTransformFromPos(self.root, self.getName("fk_cns"), self.guide.apos[0]) + self.fk_cns = primitive.addTransformFromPos( + self.root, self.getName("fk_cns"), self.guide.apos[0]) - tpv = self.guide.apos[0] + ((self.guide.apos[1] - self.guide.apos[0])*[1,0,0]) - t = tra.getTransformLookingAt(self.guide.apos[0], tpv, self.normal, "xz", self.negate) - # *ms* add FK isolation - self.fk0_npo = pri.addTransform(self.fk_cns, self.getName("fk0_npo"), t) + vec_offset = ((self.guide.apos[1] - self.guide.apos[0]) * [1, 0, 0]) + tpv = self.guide.apos[0] + vec_offset - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0*.7, h=self.size*.1, d=self.size*.1, po=dt.Vector(.35*self.length0*self.n_factor,0,0), tp=self.parentCtlTag) - att.setKeyableAttributes(self.fk0_ctl) + t = transform.getTransformLookingAt( + self.guide.apos[0], tpv, self.normal, "xz", self.negate) + # *ms* add FK isolation + self.fk0_npo = primitive.addTransform( + self.fk_cns, self.getName("fk0_npo"), t) + + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, "xz", + self.negate) + + po_off = datatypes.Vector(.35 * self.length0 * self.n_factor, 0, 0) + + self.fk0_ctl = self.addCtl(self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0 * .7, + h=self.size * .1, + d=self.size * .1, + po=po_off, + tp=self.parentCtlTag) + attribute.setKeyableAttributes(self.fk0_ctl) # *ms* add fk roll control Simage style - self.fk0_roll_ctl = self.addCtl(self.fk0_ctl, "fk0_roll_ctl", t, self.color_fk, "cube", w=self.length0*.3, h=self.size*.1, d=self.size*0.1, po=dt.Vector(.85*self.length0*self.n_factor,0,0), tp=self.fk0_ctl) - att.setRotOrder(self.fk0_roll_ctl, "YZX") - att.setKeyableAttributes(self.fk0_roll_ctl, ["rx"]) - self.fk0_mtx = pri.addTransform(self.root, self.getName("fk0_mtx"), t) - - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.fk1_ref = pri.addTransform(self.fk0_roll_ctl, self.getName("fk1_ref"), t) - - self.fk1_loc = pri.addTransform(self.root, self.getName("fk1_loc"), t) - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - - self.fk1_npo = pri.addTransform(self.fk1_loc, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1*.7, h=self.size*.1, d=self.size*.1, po=dt.Vector(.35*self.length1*self.n_factor,0,0), tp=self.fk0_roll_ctl) - att.setKeyableAttributes(self.fk1_ctl) - self.fk1_mtx = pri.addTransform(self.fk1_ctl, self.getName("fk1_mtx"), t) - self.fk1_roll_ctl = self.addCtl(self.fk1_ctl, "fk1_roll_ctl", t, self.color_fk, "cube", w=self.length1*.3, h=self.size*.1, d=self.size*.1, po=dt.Vector(.85*self.length1*self.n_factor,0,0), tp=self.fk1_ctl) - att.setRotOrder(self.fk1_roll_ctl, "XYZ") - att.setKeyableAttributes(self.fk1_roll_ctl, ["rx"]) - - - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) + po_off = datatypes.Vector(.85 * self.length0 * self.n_factor, 0, 0) + self.fk0_roll_ctl = self.addCtl(self.fk0_ctl, + "fk0_roll_ctl", + t, self.color_fk, + "cube", w=self.length0 * .3, + h=self.size * .1, + d=self.size * 0.1, + po=po_off, + tp=self.fk0_ctl) + + attribute.setRotOrder(self.fk0_roll_ctl, "YZX") + attribute.setKeyableAttributes(self.fk0_roll_ctl, ["rx"]) + self.fk0_mtx = primitive.addTransform( + self.root, self.getName("fk0_mtx"), t) + + t = transform.setMatrixPosition(t, self.guide.apos[1]) + + self.fk1_ref = primitive.addTransform( + self.fk0_roll_ctl, self.getName("fk1_ref"), t) + + self.fk1_loc = primitive.addTransform( + self.root, self.getName("fk1_loc"), t) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + + self.fk1_npo = primitive.addTransform( + self.fk1_loc, self.getName("fk1_npo"), t) + + po_off = datatypes.Vector(.35 * self.length1 * self.n_factor, 0, 0) + self.fk1_ctl = self.addCtl(self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1 * .7, + h=self.size * .1, + d=self.size * .1, + po=po_off, tp=self.fk0_roll_ctl) + + attribute.setKeyableAttributes(self.fk1_ctl) + + self.fk1_mtx = primitive.addTransform( + self.fk1_ctl, self.getName("fk1_mtx"), t) + + po_off = datatypes.Vector(.85 * self.length1 * self.n_factor, 0, 0) + self.fk1_roll_ctl = self.addCtl(self.fk1_ctl, + "fk1_roll_ctl", + t, + self.color_fk, + "cube", + w=self.length1 * .3, + h=self.size * .1, + d=self.size * .1, + po=po_off, tp=self.fk1_ctl) + attribute.setRotOrder(self.fk1_roll_ctl, "XYZ") + attribute.setKeyableAttributes(self.fk1_roll_ctl, ["rx"]) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) # *ms* buffer object to feed into ikfk solver for hand seperation - self.fk2_mtx = pri.addTransform(self.fk1_roll_ctl, self.getName("fk2_mtx"), t) - + self.fk2_mtx = primitive.addTransform(self.fk1_roll_ctl, + self.getName("fk2_mtx"), + t) # fk2_loc is need to take the effector position + bone1 rotation - t1= tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[1], self.normal, "-xz", self.negate) - self.fk2_loc = pri.addTransform(self.root, self.getName("fk2_loc"), t1) - - self.fk2_npo = pri.addTransform(self.fk2_loc, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_roll_ctl) - att.setKeyableAttributes(self.fk2_ctl) + t1 = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[1], + self.normal, + "-xz", + self.negate) + + self.fk2_loc = primitive.addTransform( + self.root, self.getName("fk2_loc"), t1) + + self.fk2_npo = primitive.addTransform(self.fk2_loc, + self.getName("fk2_npo"), + t) + po_off = datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0) + self.fk2_ctl = self.addCtl(self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=po_off, + tp=self.fk1_roll_ctl) + attribute.setKeyableAttributes(self.fk2_ctl) self.fk_ctl = [self.fk0_roll_ctl, self.fk1_mtx, self.fk2_ctl] - self.fk_ctls = [self.fk0_ctl,self.fk0_roll_ctl, self.fk1_ctl, self.fk1_roll_ctl, self.fk2_ctl] - for x in self.fk_ctls: - att.setInvertMirror(x, ["tx", "ty", "tz"]) + self.fk_ctls = [self.fk0_ctl, + self.fk0_roll_ctl, + self.fk1_ctl, + self.fk1_roll_ctl, + self.fk2_ctl] + for x in self.fk_ctls: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root, self.getName("ik_cns"), self.guide.pos["wrist"]) + self.ik_cns = primitive.addTransformFromPos( + self.root, self.getName("ik_cns"), self.guide.pos["wrist"]) - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["wrist"]), self.color_ik, "null", w=self.size*.12, tp=self.parentCtlTag) - att.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) + self.ikcns_ctl = self.addCtl( + self.ik_cns, + "ikcns_ctl", + transform.getTransformFromPos(self.guide.pos["wrist"]), + self.color_ik, + "null", + w=self.size * .12, tp=self.parentCtlTag) + attribute.setInvertMirror(self.ikcns_ctl, ["tx", "ty", "tz"]) if self.negate: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "x-y", True) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "x-y", + True) else: - m = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xy", False) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", m, self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl) - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + m = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xy", + False) + self.ik_ctl = self.addCtl(self.ikcns_ctl, + "ik_ctl", + m, + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + attribute.setKeyableAttributes(self.ik_ctl) + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] # *ms* auto up vector ------------------------------ - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), self.guide.apos[0]) - self.upv_auv = pri.addTransformFromPos(self.root, self.getName("upv_auv"), self.guide.apos[0]) - self.upv_mtx = pri.addTransformFromPos(self.upv_cns, self.getName("upv_mtx"), self.guide.apos[0]) - - self.upv_npo = pri.addTransformFromPos(self.upv_mtx, self.getName("upv_npo"), v) - self.upv_ctl = self.addCtl(self.upv_npo, "upv_ctl", tra.getTransform(self.upv_npo), self.color_ik, "diamond", w=self.size*.12, tp=self.parentCtlTag) - att.setKeyableAttributes(self.upv_ctl, self.t_params) - att.setInvertMirror(self.upv_ctl, ["tx"]) + self.upv_cns = primitive.addTransformFromPos(self.root, + self.getName("upv_cns"), + self.guide.apos[0]) + self.upv_auv = primitive.addTransformFromPos(self.root, + self.getName("upv_auv"), + self.guide.apos[0]) + self.upv_mtx = primitive.addTransformFromPos(self.upv_cns, + self.getName("upv_mtx"), + self.guide.apos[0]) + + self.upv_npo = primitive.addTransformFromPos(self.upv_mtx, + self.getName("upv_npo"), + v) + self.upv_ctl = self.addCtl(self.upv_npo, + "upv_ctl", + transform.getTransform(self.upv_npo), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.parentCtlTag) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) # References -------------------------------------- # Calculate again the transfor for the IK ref. This way align with FK - trnIK_ref = tra.getTransformLookingAt(self.guide.pos["wrist"], self.guide.pos["eff"], self.normal, "xz", self.negate) - self.ik_ref = pri.addTransform(self.ik_ctl, self.getName("ik_ref"), trnIK_ref) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), trnIK_ref) + trnIK_ref = transform.getTransformLookingAt(self.guide.pos["wrist"], + self.guide.pos["eff"], + self.normal, + "xz", + self.negate) + self.ik_ref = primitive.addTransform(self.ik_ctl, + self.getName("ik_ref"), + trnIK_ref) + self.fk_ref = primitive.addTransform(self.fk_ctl[2], + self.getName("fk_ref"), + trnIK_ref) # Chain -------------------------------------------- # take outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) + self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) self.bone0.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + self.bone1 = primitive.addLocator( + self.root, + self.getName("1_bone"), + transform.getTransform(self.fk_ctl[1])) + self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) self.bone1.setAttr("visibility", False) - self.ctrn_loc = pri.addTransformFromPos(self.root, self.getName("ctrn_loc"), self.guide.apos[1]) + self.ctrn_loc = primitive.addTransformFromPos(self.root, + self.getName("ctrn_loc"), + self.guide.apos[1]) # eff npo --- take the effector output of gear ik solver - self.eff_npo = pri.addTransformFromPos(self.root, self.getName("eff_npo"), self.guide.apos[2]) + self.eff_npo = primitive.addTransformFromPos(self.root, + self.getName("eff_npo"), + self.guide.apos[2]) # eff loc --- take the fk ik blend result - self.eff_loc = pri.addTransformFromPos(self.eff_npo, self.getName("eff_loc"), self.guide.apos[2]) + self.eff_loc = primitive.addTransformFromPos(self.eff_npo, + self.getName("eff_loc"), + self.guide.apos[2]) # Mid Controler ------------------------------------ - self.mid_ctl = self.addCtl(self.ctrn_loc, "mid_ctl", tra.getTransform(self.ctrn_loc), self.color_ik, "sphere", w=self.size*.2, tp=self.parentCtlTag) - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) + self.mid_ctl = self.addCtl(self.ctrn_loc, + "mid_ctl", + transform.getTransform(self.ctrn_loc), + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.parentCtlTag) + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) # *ms* add elbow thickness - - - #Roll join ref - - self.tws0_npo = pri.addTransform(self.root, self.getName("tws0_npo"), tra.getTransform(self.fk_ctl[0])) - self.tws0_loc = pri.addTransform(self.tws0_npo, self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.fk_ctl[0])) - - self.tws1_npo = pri.addTransform(self.ctrn_loc, self.getName("tws1_npo"), tra.getTransform(self.ctrn_loc)) - self.tws1_loc = pri.addTransform(self.tws1_npo, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.ctrn_loc)) - - self.tws2_loc = pri.addTransform(self.tws1_npo, self.getName("tws2_loc"), tra.getTransform(self.ctrn_loc)) - self.tws2_rot = pri.addTransform(self.tws2_loc, self.getName("tws2_rot"), tra.getTransform(self.ctrn_loc)) - - self.tws3_npo = pri.addTransform(self.root, self.getName("tws3_npo"), tra.getTransform(self.fk_ctl[2])) - self.tws3_loc = pri.addTransform(self.tws3_npo, self.getName("tws3_loc"), tra.getTransform(self.fk_ctl[2])) - self.tws3_rot = pri.addTransform(self.tws3_loc, self.getName("tws3_rot"), tra.getTransform(self.fk_ctl[2])) + # Roll join ref + + self.tws0_npo = primitive.addTransform( + self.root, + self.getName("tws0_npo"), + transform.getTransform(self.fk_ctl[0])) + self.tws0_loc = primitive.addTransform( + self.tws0_npo, + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.fk_ctl[0])) + + self.tws1_npo = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_npo"), + transform.getTransform(self.ctrn_loc)) + self.tws1_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.ctrn_loc)) + + self.tws2_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws2_loc"), + transform.getTransform(self.ctrn_loc)) + self.tws2_rot = primitive.addTransform( + self.tws2_loc, + self.getName("tws2_rot"), + transform.getTransform(self.ctrn_loc)) + + self.tws3_npo = primitive.addTransform( + self.root, + self.getName("tws3_npo"), + transform.getTransform(self.fk_ctl[2])) + self.tws3_loc = primitive.addTransform( + self.tws3_npo, + self.getName("tws3_loc"), + transform.getTransform(self.fk_ctl[2])) + self.tws3_rot = primitive.addTransform( + self.tws3_loc, + self.getName("tws3_rot"), + transform.getTransform(self.fk_ctl[2])) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the elbow. + 2 for elbow angle control + # We have at least one division at the start, the end and one for the + # elbow. + 2 for elbow angle control # separate up and dn limb self.divisions = self.settings["div0"] + self.settings["div1"] + 3 + 2 - self.divisions0 = self.settings["div0"] +2 - self.divisions1 = self.settings["div1"] +2 + self.divisions0 = self.settings["div0"] + 2 + self.divisions1 = self.settings["div1"] + 2 self.div_cns = [] self.div_cnsUp = [] self.div_cnsDn = [] self.div_ctls = [] - self.div_org = pri.addTransform(self.root, self.getName("div_org"), tra.getTransform(self.root)) + self.div_org = primitive.addTransform( + self.root, + self.getName("div_org"), + transform.getTransform(self.root)) self.previousTag = self.parentCtlTag for i in range(self.divisions0): - div_cns = pri.addTransform(self.div_org, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform( + self.div_org, self.getName("div%s_loc" % i)) + if self.negate: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % i), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05,w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % i), + transform.getTransform(div_cns), + self.color_fk, "square", d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) else: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % i), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05,w=self.size*.1,po=dt.Vector(0,self.size*0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) - att.setKeyableAttributes(div_ctl) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % i), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) + attribute.setKeyableAttributes(div_ctl) self.previousTag = div_ctl self.div_cns.append(div_cns) self.div_cnsUp.append(div_cns) - self.jnt_pos.append([div_ctl,i]) + self.jnt_pos.append([div_ctl, i]) self.div_ctls.append(div_ctl) # mid division d = self.divisions0 - self.div_mid = pri.addTransform(self.div_org, self.getName("div%s_loc" % d), tra.getTransform(self.mid_ctl)) + self.div_mid = primitive.addTransform( + self.div_org, + self.getName("div%s_loc" % d), + transform.getTransform(self.mid_ctl)) if self.negate: - self.div_mid_ctl = self.addCtl(self.div_mid, self.getName("div%s_ctl" % d), tra.getTransform(self.div_mid), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0), ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) + self.div_mid_ctl = self.addCtl( + self.div_mid, + self.getName("div%s_ctl" % d), + transform.getTransform(self.div_mid), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) else: - self.div_mid_ctl = self.addCtl(self.div_mid, self.getName("div%s_ctl" % d), tra.getTransform(self.div_mid), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*0.05,0), ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) - att.setKeyableAttributes(self.div_mid_ctl) + self.div_mid_ctl = self.addCtl( + self.div_mid, self.getName("div%s_ctl" % d), + transform.getTransform(self.div_mid), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) + attribute.setKeyableAttributes(self.div_mid_ctl) self.previousTag = div_ctl self.div_cns.append(self.div_mid) - self.jnt_pos.append([self.div_mid_ctl,self.divisions0]) + self.jnt_pos.append([self.div_mid_ctl, self.divisions0]) self.div_ctls.append(self.div_mid_ctl) # down division for i in range(self.divisions1): - dd = i +self.divisions1+1 - div_cns = pri.addTransform(self.div_org, self.getName("div%s_loc" % dd)) + dd = i + self.divisions1 + 1 + div_cns = primitive.addTransform( + self.div_org, self.getName("div%s_loc" % dd)) if self.negate: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % dd), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % dd), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) else: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % dd), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousTag) - att.setKeyableAttributes(div_ctl) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % dd), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousTag) + attribute.setKeyableAttributes(div_ctl) self.previousTag = div_ctl self.div_cns.append(div_cns) self.div_cnsDn.append(div_cns) - self.jnt_pos.append([div_ctl,i+self.divisions0+1]) + self.jnt_pos.append([div_ctl, i + self.divisions0 + 1]) self.div_ctls.append(div_ctl) # End reference ------------------------------------ # To help the deformation on the wrist self.jnt_pos.append([self.eff_loc, 'end']) - #match IK FK references - - self.match_fk0 = pri.addTransform(self.root, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1 = pri.addTransform(self.root, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) - self.match_fk2 = pri.addTransform(self.ik_ctl, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) - - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_roll_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) + # match IK FK references + + self.match_fk0 = primitive.addTransform( + self.root, + self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + self.match_fk1 = primitive.addTransform( + self.root, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) + self.match_fk2 = primitive.addTransform( + self.ik_ctl, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) + + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + self.match_ikUpv = primitive.addTransform( + self.fk0_roll_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) + # ===================================================== + # ATTRIBUTES + # ===================================================== def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Arm", "double", self.settings["blend"], 0, 1) - self.blend2_att = self.addAnimParam("blend_hand", "Fk/Ik Hand", "double", self.settings["blend"], 0, 1) - self.auv_att = self.addAnimParam("auv", "Auto Upvector", "double", 0, 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - self.armpit_roll_att = self.addAnimParam("aproll", "Armpit Roll", "double", 0, -360, 360) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness0_att = self.addAnimParam("roundness_up", "Roundness Up", "double", 0, 0, self.size) - self.roundness1_att = self.addAnimParam("roundness_dn", "Roundness Dn", "double", 0, 0, self.size) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) - self.elbow_thickness_att = self.addAnimParam("elbowthickness", "Elbow Thickness", "double", self.settings["elbow"], 0, 5) - self.jntctl_vis_att = self.addAnimParam("jntct_vis", "Joint Ctl Vis", "bool", 0,1,1) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Arm", "double", self.settings["blend"], 0, 1) + self.blend2_att = self.addAnimParam( + "blend_hand", "Fk/Ik Hand", "double", self.settings["blend"], 0, 1) + self.auv_att = self.addAnimParam( + "auv", "Auto Upvector", "double", 0, 0, 1) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + self.armpit_roll_att = self.addAnimParam( + "aproll", "Armpit Roll", "double", 0, -360, 360) + self.scale_att = self.addAnimParam( + "ikscale", "Scale", "double", 1, .001, 99) + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1, + 99) + self.slide_att = self.addAnimParam( + "slide", "Slide", "double", .5, 0, 1) + self.softness_att = self.addAnimParam( + "softness", "Softness", "double", 0, 0, 1) + self.reverse_att = self.addAnimParam( + "reverse", "Reverse", "double", 0, 0, 1) + self.roundness0_att = self.addAnimParam( + "roundness_up", "Roundness Up", "double", 0, 0, self.size) + self.roundness1_att = self.addAnimParam( + "roundness_dn", "Roundness Dn", "double", 0, 0, self.size) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) + self.elbow_thickness_att = self.addAnimParam("elbowthickness", + "Elbow Thickness", + "double", + self.settings["elbow"], + 0, + 5) + self.jntctl_vis_att = self.addAnimParam( + "jntct_vis", "Joint Ctl Vis", "bool", 0) # Ref if self.settings["fkrefarray"]: ref_names = self.settings["fkrefarray"].split(",") if len(ref_names) > 1: - self.ref_att = self.addAnimEnumParam("fkref", "Fk Ref", 0, self.settings["fkrefarray"].split(",")) + self.ref_att = self.addAnimEnumParam( + "fkref", + "Fk Ref", + 0, + self.settings["fkrefarray"].split(",")) if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["upvrefarray"]: ref_names = self.settings["upvrefarray"].split(",") if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, self.settings["upvrefarray"].split(",")) + self.upvref_att = self.addAnimEnumParam( + "upvref", + "UpV Ref", + 0, + self.settings["upvrefarray"].split(",")) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) + self.st_value = fcurve.getFCurveValues(self.settings["st_profile"], + self.divisions) + self.sq_value = fcurve.getFCurveValues(self.settings["sq_profile"], + self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], + -1, + 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam( + "resample", "Resample", "bool", True) + self.absolute_att = self.addSetupParam( + "absolute", "Absolute", "bool", False) - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] + # ===================================================== + # OPERATORS + # ===================================================== + def addOperators(self): + """Create operators and set the relations for the component rig - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. - def addOperators(self): + """ # Visibilities ------------------------------------- # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk0_roll_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_roll_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) - fkvis2_node = nod.createReverseNode(self.blend2_att) + fkvis2_node = node.createReverseNode(self.blend2_att) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis2_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis2_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -359,162 +664,232 @@ def addOperators(self): pm.connectAttr(self.jntctl_vis_att, shp.attr("visibility")) # Controls ROT order ----------------------------------- - att.setRotOrder(self.fk0_ctl, "YZX") - att.setRotOrder(self.fk1_ctl, "XYZ") - att.setRotOrder(self.fk2_ctl, "YZX") - att.setRotOrder(self.ik_ctl, "XYZ") - + attribute.setRotOrder(self.fk0_ctl, "YZX") + attribute.setRotOrder(self.fk1_ctl, "XYZ") + attribute.setRotOrder(self.fk2_ctl, "YZX") + attribute.setRotOrder(self.ik_ctl, "XYZ") # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_npo] - node = aop.gear_ikfk2bone_op(out, self.root, self.ik_ref, self.upv_ctl, self.fk0_mtx, self.fk1_mtx, self.fk2_mtx, self.length0, self.length1, self.negate) - - pm.connectAttr(self.blend_att, node+".blend") - pm.connectAttr(self.roll_att, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") - # update issue on effector scale interpolation, disconnect for stability + o_node = applyop.gear_ikfk2bone_op(out, + self.root, + self.ik_ref, + self.upv_ctl, + self.fk0_mtx, + self.fk1_mtx, + self.fk2_mtx, + self.length0, + self.length1, + self.negate) + + pm.connectAttr(self.blend_att, o_node + ".blend") + pm.connectAttr(self.roll_att, o_node + ".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") + # update issue on effector scale interpol, disconnect for stability pm.disconnectAttr(self.eff_npo.scale) # auto upvector ------------------------------------- if self.negate: - node = aop.aimCns(self.upv_auv, self.ik_ctl, axis="-xy", wupType=4, wupVector=[0,1,0], wupObject=self.upv_auv, maintainOffset=False) + o_node = applyop.aimCns(self.upv_auv, + self.ik_ctl, + axis="-xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.upv_auv, + maintainOffset=False) else: - node = aop.aimCns(self.upv_auv, self.ik_ctl, axis="xy", wupType=4, wupVector=[0,1,0], wupObject=self.upv_auv, maintainOffset=False) - - node = aop.gear_mulmatrix_op(self.upv_auv.attr("worldMatrix"), self.upv_mtx.attr("parentInverseMatrix")) + o_node = applyop.aimCns(self.upv_auv, + self.ik_ctl, + axis="xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.upv_auv, + maintainOffset=False) + + o_node = applyop.gear_mulmatrix_op( + self.upv_auv.attr("worldMatrix"), + self.upv_mtx.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") pb_node = pm.createNode("pairBlend") - pb_node.attr("rotInterpolation").set (1) - pm.connectAttr(dm_node+".outputTranslate", pb_node+".inTranslate2") - pm.connectAttr(dm_node+".outputRotate", pb_node+".inRotate2") - pm.connectAttr(pb_node+".outRotate", self.upv_mtx.attr("rotate")) - pm.connectAttr(pb_node+".outTranslate", self.upv_mtx.attr("translate")) - pm.connectAttr(self.auv_att, pb_node+".weight") + pb_node.attr("rotInterpolation").set(1) + pm.connectAttr(dm_node + ".outputTranslate", pb_node + ".inTranslate2") + pm.connectAttr(dm_node + ".outputRotate", pb_node + ".inRotate2") + pm.connectAttr(pb_node + ".outRotate", self.upv_mtx.attr("rotate")) + pm.connectAttr(pb_node + ".outTranslate", + self.upv_mtx.attr("translate")) + pm.connectAttr(self.auv_att, pb_node + ".weight") # fk0 mtx connection - node = aop.gear_mulmatrix_op(self.fk0_roll_ctl.attr("worldMatrix"), self.fk0_mtx.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.fk0_roll_ctl.attr("worldMatrix"), + self.fk0_mtx.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk0_mtx.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.fk0_mtx.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk0_mtx.attr("translate")) + pm.connectAttr(dm_node + ".outputRotate", self.fk0_mtx.attr("rotate")) # fk1 loc connect to fk1 ref @ pos and rot, not scl to avoid shearing - node = aop.gear_mulmatrix_op(self.fk1_ref.attr("worldMatrix"), self.fk1_loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.fk1_ref.attr("worldMatrix"), + self.fk1_loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk1_loc.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.fk1_loc.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk1_loc.attr("translate")) + pm.connectAttr(dm_node + ".outputRotate", self.fk1_loc.attr("rotate")) # fk1 mtx orient cns to fk1 roll - pm.connectAttr(self.fk1_roll_ctl.attr("rotate"), self.fk1_mtx.attr("rotate")) + pm.connectAttr(self.fk1_roll_ctl.attr("rotate"), + self.fk1_mtx.attr("rotate")) # fk2_loc position constraint to effector------------------------ - node = aop.gear_mulmatrix_op(self.eff_npo.attr("worldMatrix"), self.fk2_loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.eff_npo.attr("worldMatrix"), + self.fk2_loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk2_loc.attr("translate")) - # fk2_loc rotation constraint to bone1 (bugfixed) ------------------------ - node = aop.gear_mulmatrix_op(self.bone1.attr("worldMatrix"), self.fk2_loc.attr("parentInverseMatrix")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk2_loc.attr("translate")) + # fk2_loc rotation constraint to bone1 (bugfixed) -------------- + o_node = applyop.gear_mulmatrix_op( + self.bone1.attr("worldMatrix"), + self.fk2_loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.fk2_loc.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.fk2_loc.attr("rotate")) - - # hand ikfk blending from fk ref to ik ref (serious bugfix)-------------------------------- - node = aop.gear_mulmatrix_op(self.fk_ref.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) + # hand ikfk blending from fk ref to ik ref (serious bugfix)-------- + o_node = applyop.gear_mulmatrix_op( + self.fk_ref.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") pb_node = pm.createNode("pairBlend") - pb_node.attr("rotInterpolation").set (1) - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", pb_node+".inRotate1") - pm.connectAttr(self.blend2_att, pb_node+".weight") - pm.connectAttr(pb_node+".outRotate", self.eff_loc.attr("rotate")) - node = aop.gear_mulmatrix_op(self.ik_ref.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) + pb_node.attr("rotInterpolation").set(1) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", pb_node + ".inRotate1") + pm.connectAttr(self.blend2_att, pb_node + ".weight") + pm.connectAttr(pb_node + ".outRotate", self.eff_loc.attr("rotate")) + o_node = applyop.gear_mulmatrix_op( + self.ik_ref.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) dm_node1 = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node1+".inputMatrix") - pm.connectAttr(dm_node1+".outputRotate", pb_node+".inRotate2") + pm.connectAttr(o_node + ".output", dm_node1 + ".inputMatrix") + pm.connectAttr(dm_node1 + ".outputRotate", pb_node + ".inRotate2") # use blendcolors to blend scale bc_node = pm.createNode("blendColors") - pm.connectAttr(self.blend_att, bc_node+".blender") - pm.connectAttr(dm_node+".outputScale", bc_node+".color2") - pm.connectAttr(dm_node1+".outputScale", bc_node+".color1") - pm.connectAttr(bc_node+".output", self.eff_loc.attr("scale")) + pm.connectAttr(self.blend_att, bc_node + ".blender") + pm.connectAttr(dm_node + ".outputScale", bc_node + ".color2") + pm.connectAttr(dm_node1 + ".outputScale", bc_node + ".color1") + pm.connectAttr(bc_node + ".output", self.eff_loc.attr("scale")) # Twist references --------------------------------- - pm.connectAttr(self.mid_ctl.attr("translate"), self.tws1_npo.attr("translate")) - pm.connectAttr(self.mid_ctl.attr("rotate"), self.tws1_npo.attr("rotate")) - pm.connectAttr(self.mid_ctl.attr("scale"), self.tws1_npo.attr("scale")) - - - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.tws3_npo.attr("parentInverseMatrix")) + pm.connectAttr(self.mid_ctl.attr("translate"), + self.tws1_npo.attr("translate")) + pm.connectAttr(self.mid_ctl.attr("rotate"), + self.tws1_npo.attr("rotate")) + pm.connectAttr(self.mid_ctl.attr("scale"), + self.tws1_npo.attr("scale")) + + o_node = applyop.gear_mulmatrix_op( + self.eff_loc.attr("worldMatrix"), + self.tws3_npo.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.tws3_npo.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.tws3_npo.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.tws3_npo.attr("translate")) - att.setRotOrder(self.tws3_rot, "XYZ") + pm.connectAttr(dm_node + ".outputRotate", + self.tws3_npo.attr("rotate")) + + attribute.setRotOrder(self.tws3_rot, "XYZ") # elbow thickness connection if self.negate: - node = nod.createMulNode([self.elbow_thickness_att,self.elbow_thickness_att], [0.5,-0.5,0], [self.tws1_loc+".translateX",self.tws2_loc+".translateX"]) + o_node = node.createMulNode( + [self.elbow_thickness_att, self.elbow_thickness_att], + [0.5, -0.5, 0], + [self.tws1_loc + ".translateX", self.tws2_loc + ".translateX"]) else: - node = nod.createMulNode([self.elbow_thickness_att,self.elbow_thickness_att], [-0.5,0.5,0], [self.tws1_loc+".translateX",self.tws2_loc+".translateX"]) + o_node = node.createMulNode( + [self.elbow_thickness_att, self.elbow_thickness_att], + [-0.5, 0.5, 0], + [self.tws1_loc + ".translateX", self.tws2_loc + ".translateX"]) # connect both tws1 and tws2 (mid tws) self.tws0_rot.setAttr("sx", .001) self.tws3_rot.setAttr("sx", .001) - add_node = nod.createAddNode(self.roundness0_att, .001) - pm.connectAttr(add_node+".output", self.tws1_rot.attr("sx")) - - add_node = nod.createAddNode(self.roundness1_att, .001) - pm.connectAttr(add_node+".output", self.tws2_rot.attr("sx")) + add_node = node.createAddNode(self.roundness0_att, .001) + pm.connectAttr(add_node + ".output", self.tws1_rot.attr("sx")) + add_node = node.createAddNode(self.roundness1_att, .001) + pm.connectAttr(add_node + ".output", self.tws2_rot.attr("sx")) - pm.connectAttr(self.armpit_roll_att, self.tws0_rot+".rotateX") + pm.connectAttr(self.armpit_roll_att, self.tws0_rot + ".rotateX") - #Roll Shoulder--use aimconstraint withour uovwctor to solve the stable twist + # Roll Shoulder--use aimconstraint withour uovwctor to solve + # the stable twist if self.negate: - node = aop.aimCns(self.tws0_loc, self.mid_ctl, axis="-xy", wupType=4, wupVector=[0,1,0], wupObject=self.tws0_npo, maintainOffset=False) + o_node = applyop.aimCns(self.tws0_loc, + self.mid_ctl, + axis="-xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.tws0_npo, + maintainOffset=False) else: - node = aop.aimCns(self.tws0_loc, self.mid_ctl, axis="xy", wupType=4, wupVector=[0,1,0], wupObject=self.tws0_npo, maintainOffset=False) - + o_node = applyop.aimCns(self.tws0_loc, + self.mid_ctl, + axis="xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.tws0_npo, + maintainOffset=False) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_npo) - distB_node = nod.createDistNode(self.tws1_npo, self.tws3_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root.attr("sx")) + distA_node = node.createDistNode(self.tws0_loc, self.tws1_npo) + distB_node = node.createDistNode(self.tws1_npo, self.tws3_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root.attr("sx")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") - self.volDriver_att = div_node2+".outputX" + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") + self.volDriver_att = div_node2 + ".outputX" # Divisions ---------------------------------------- # div mid constraint to mid ctl - node = aop.gear_mulmatrix_op(self.mid_ctl.attr("worldMatrix"), self.div_mid.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.mid_ctl.attr("worldMatrix"), + self.div_mid.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.div_mid.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.div_mid.attr("rotate")) - - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.div_mid.attr("translate")) + pm.connectAttr(dm_node + ".outputRotate", + self.div_mid.attr("rotate")) + + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll # linear scaling percentage (1) to effector (2) to elbow scl_1_perc = [] scl_2_perc = [] for i, div_cnsUp in enumerate(self.div_cnsUp): - if i < (self.settings["div0"]+1): - perc = i/ (self.settings["div0"]+1.0) + if i < (self.settings["div0"] + 1): + perc = i / (self.settings["div0"] + 1.0) elif i < (self.settings["div0"] + 2): perc = .95 @@ -522,23 +897,26 @@ def addOperators(self): # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cnsUp, [self.tws1_rot, self.tws0_rot], 1-perc, 20) + o_node = applyop.gear_rollsplinekine_op( + div_cnsUp, [self.tws1_rot, self.tws0_rot], 1 - perc, 20) else: - node = aop.gear_rollsplinekine_op(div_cnsUp, [self.tws0_rot, self.tws1_rot], perc, 20) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + o_node = applyop.gear_rollsplinekine_op( + div_cnsUp, [self.tws0_rot, self.tws1_rot], perc, 20) + + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") - scl_1_perc.append(perc/2) + scl_1_perc.append(perc / 2) scl_2_perc.append(perc) scl_1_perc.append(0.5) scl_2_perc.append(1) for i, div_cnsDn in enumerate(self.div_cnsDn): if i == (0): - perc = .05 - elif i < (self.settings["div1"]+1): - perc = i/ (self.settings["div1"]+1.0) + perc = .05 + elif i < (self.settings["div1"] + 1): + perc = i / (self.settings["div1"] + 1.0) elif i < (self.settings["div1"] + 2): perc = .95 @@ -546,58 +924,63 @@ def addOperators(self): # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cnsDn, [self.tws3_rot, self.tws2_rot], 1-perc, 20) + o_node = applyop.gear_rollsplinekine_op( + div_cnsDn, [self.tws3_rot, self.tws2_rot], 1 - perc, 20) else: - node = aop.gear_rollsplinekine_op(div_cnsDn, [self.tws2_rot, self.tws3_rot], perc, 20) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + o_node = applyop.gear_rollsplinekine_op( + div_cnsDn, [self.tws2_rot, self.tws3_rot], perc, 20) + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") - scl_1_perc.append(perc/2+0.5) - scl_2_perc.append(1-perc) + scl_1_perc.append(perc / 2 + 0.5) + scl_2_perc.append(1 - perc) # Squash n Stretch for i, div_cns in enumerate(self.div_cns): - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") + o_node = applyop.gear_squashstretch2_op( + div_cns, None, pm.getAttr(self.volDriver_att), "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") # get the first mult_node after sq op - mult_node = pm.listHistory(node, future=True )[1] + mult_node = pm.listHistory(o_node, future=True)[1] # linear blend effector scale bc_node = pm.createNode("blendColors") bc_node.setAttr("color2R", 1) bc_node.setAttr("color2G", 1) bc_node.setAttr("blender", scl_1_perc[i]) - pm.connectAttr(self.eff_loc.attr("scale"), bc_node+".color1") + pm.connectAttr(self.eff_loc.attr("scale"), bc_node + ".color1") # linear blend mid scale bc_node2 = pm.createNode("blendColors") bc_node2.setAttr("color2R", 1) bc_node2.setAttr("color2G", 1) bc_node2.setAttr("blender", scl_2_perc[i]) - pm.connectAttr(self.mid_ctl.attr("scale"), bc_node2+".color1") + pm.connectAttr(self.mid_ctl.attr("scale"), bc_node2 + ".color1") # mid_ctl scale * effector scale mult_node2 = pm.createNode("multiplyDivide") - pm.connectAttr(bc_node2+".output", mult_node2+".input1") - pm.connectAttr(bc_node+".output", mult_node2+".input2") + pm.connectAttr(bc_node2 + ".output", mult_node2 + ".input1") + pm.connectAttr(bc_node + ".output", mult_node2 + ".input2") # plug to sq scale - pm.connectAttr(mult_node2+".output", mult_node+".input2") + pm.connectAttr(mult_node2 + ".output", mult_node + ".input2") # match IK/FK ref - pm.connectAttr(self.bone0.attr("rotate"), self.match_fk0.attr("rotate")) - pm.connectAttr(self.bone0.attr("translate"), self.match_fk0.attr("translate")) - pm.connectAttr(self.bone1.attr("rotate"), self.match_fk1.attr("rotate")) - pm.connectAttr(self.bone1.attr("translate"), self.match_fk1.attr("translate")) + pm.connectAttr(self.bone0.attr("rotate"), + self.match_fk0.attr("rotate")) + pm.connectAttr(self.bone0.attr("translate"), + self.match_fk0.attr("translate")) + pm.connectAttr(self.bone1.attr("rotate"), + self.match_fk1.attr("rotate")) + pm.connectAttr(self.bone1.attr("translate"), + self.match_fk1.attr("translate")) return # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self - # TODO: replace bone0 and control objects by loc connections def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.div_cns[0] self.relatives["elbow"] = self.div_cns[self.settings["div0"] + 2] self.relatives["wrist"] = self.div_cns[-1] @@ -605,16 +988,17 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["elbow"] = self.settings["div0"] + 2 - self.jointRelatives["wrist"] = len(self.div_cns)-1 + self.jointRelatives["wrist"] = len(self.div_cns) - 1 self.jointRelatives["eff"] = -1 self.controlRelatives["root"] = self.fk0_ctl self.controlRelatives["elbow"] = self.fk1_ctl self.controlRelatives["wrist"] = self.fk2_ctl self.controlRelatives["eff"] = self.fk2_ctl - ## standard connection definition. - # @param self + def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithIkRef() # fk isolation connection - self.connect_standardWithRotRef(self.settings["fkrefarray"], self.fk_cns) + self.connect_standardWithRotRef(self.settings["fkrefarray"], + self.fk_cns) diff --git a/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/guide.py b/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/guide.py index 560b13d..a170829 100644 --- a/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/guide.py +++ b/scripts/mgear/maya/shifter/component/arm_ms_2jnt_01/guide.py @@ -1,59 +1,32 @@ -# MGEAR is under the terms of the MIT License +"""Guide Arm Miles 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info -AUTHOR = "Jeremie Passerin, Miquel Campos, Miles Cheng" -URL = "www.jeremiepasserin.com, www.miquletd.com" -EMAIL = "geerem@hotmail.com, hello@miquel-campos.com , miles@simage.com.hk" -VERSION = [1,3,0] +AUTHOR = "Miles Cheng, Jeremie Passerin, Miquel Campos" +URL = "" +EMAIL = "miles@simage.com.hk, geerem@hotmail.com, hello@miquel-campos.com" +VERSION = [1, 3, 0] TYPE = "arm_ms_2jnt_01" NAME = "arm" -DESCRIPTION = "2 bones arm with Maya nodes for roll bones + Simage specification" +DESCRIPTION = "2 bones arm with Maya nodes for roll bones + Simage specs" ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -64,51 +37,51 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "elbow", "wrist", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [3,0,-.01]) + vTemp = transform.getOffsetPosition(self.root, [3, 0, -.01]) self.elbow = self.addLoc("elbow", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [6,0,0]) + vTemp = transform.getOffsetPosition(self.root, [6, 0, 0]) self.wrist = self.addLoc("wrist", self.elbow, vTemp) - vTemp = tra.getOffsetPosition( self.root, [7,0,0]) + vTemp = transform.getOffsetPosition(self.root, [7, 0, 0]) self.eff = self.addLoc("eff", self.wrist, vTemp) - self.dispcrv = self.addDispCurve("crv", [self.root, self.elbow, self.wrist, self.eff]) + self.dispcrv = self.addDispCurve( + "crv", [self.root, self.elbow, self.wrist, self.eff]) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 0, 0, 1) - self.pFkRefArray = self.addParam("fkrefarray", "string", "") - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 0, 0, 1) + self.pFkRefArray = self.addParam("fkrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 2 , 1, None) - self.pElbowThickness = self.addParam("elbow","double",0,0,None) + self.pMaxStretch = self.addParam("maxstretch", "double", 2, 1, None) + self.pElbowThickness = self.addParam("elbow", "double", 0, 0, None) # Divisions self.pDiv0 = self.addParam("div0", "long", 3, 1, None) self.pDiv1 = self.addParam("div1", "long", 3, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-.5],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,.5],[1,0]]) - - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSt_profile = self.addFCurveParam("st_profile", + [[0, 0], [.5, -.5], [1, 0]]) + self.pSq_profile = self.addFCurveParam("sq_profile", + [[0, 0], [.5, .5], [1, 0]]) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam("parentJointIndex", + "long", + -1, + None, + None) ########################################################## @@ -116,23 +89,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -140,7 +114,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -150,22 +124,29 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) - self.settingsTab.elbow_spinBox.setValue(self.root.attr("elbow").get()) - self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) - self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.settingsTab.elbow_spinBox.setValue( + self.root.attr("elbow").get()) + self.settingsTab.div0_spinBox.setValue( + self.root.attr("div0").get()) + self.settingsTab.div1_spinBox.setValue( + self.root.attr("div1").get()) fkRefArrayItems = self.root.attr("fkrefarray").get().split(",") for item in fkRefArrayItems: @@ -177,7 +158,6 @@ def populate_componentControls(self): for item in upvRefArrayItems: self.settingsTab.upvRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -188,29 +168,69 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.elbow_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.elbow_spinBox, "elbow")) - - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - - - self.settingsTab.fkRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) - self.settingsTab.fkRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) - self.settingsTab.fkRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + self.settingsTab.elbow_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.elbow_spinBox, + "elbow")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.fkRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) + self.settingsTab.fkRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) + self.settingsTab.fkRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) self.settingsTab.fkRefArray_listWidget.installEventFilter(self) - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) self.settingsTab.upvRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -225,6 +245,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/chain_01/__init__.py b/scripts/mgear/maya/shifter/component/chain_01/__init__.py index db8a085..4e4185e 100644 --- a/scripts/mgear/maya/shifter/component/chain_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/chain_01/__init__.py @@ -1,60 +1,28 @@ -# MGEAR is under the terms of the MIT License +"""Component Chain 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.applyop as aop -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec +from mgear.maya import node, applyop, vector +from mgear.maya import attribute, transform, primitive ########################################################## # COMPONENT ########################################################## -## The main component class. -class Component(MainComponent): + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - self.normal = self.guide.blades["blade"].z*-1 + self.normal = self.guide.blades["blade"].z * -1 self.binormal = self.guide.blades["blade"].x self.isFk = self.settings["mode"] != 1 @@ -63,7 +31,6 @@ def addObjects(self): self.WIP = self.options["mode"] - # FK controllers ------------------------------------ if self.isFk: self.fk_npo = [] @@ -71,26 +38,50 @@ def addObjects(self): self.fk_ref = [] self.fk_off = [] t = self.guide.tra["root"] - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t) parent = self.ik_cns tOld = False fk_ctl = None self.previusTag = self.parentCtlTag - for i, t in enumerate(tra.getChainTransform(self.guide.apos, self.normal, self.negate)): - dist = vec.getDistance(self.guide.apos[i], self.guide.apos[i+1]) + for i, t in enumerate(transform.getChainTransform(self.guide.apos, + self.normal, + self.negate)): + dist = vector.getDistance(self.guide.apos[i], + self.guide.apos[i + 1]) if self.settings["neutralpose"] or not tOld: tnpo = t else: - tnpo = tra.setMatrixPosition(tOld, tra.getPositionFromMatrix(t)) + tnpo = transform.setMatrixPosition( + tOld, + transform.getPositionFromMatrix(t)) if i: - tref = tra.setMatrixPosition(tOld, tra.getPositionFromMatrix(t)) - fk_ref = pri.addTransform(fk_ctl, self.getName("fk%s_ref"%i), tref) + tref = transform.setMatrixPosition( + tOld, + transform.getPositionFromMatrix(t)) + fk_ref = primitive.addTransform( + fk_ctl, + self.getName("fk%s_ref" % i), + tref) self.fk_ref.append(fk_ref) else: tref = t - fk_off = pri.addTransform(parent, self.getName("fk%s_off"%i), tref) - fk_npo = pri.addTransform(fk_off, self.getName("fk%s_npo"%i), tnpo) - fk_ctl = self.addCtl(fk_npo, "fk%s_ctl"%i, t, self.color_fk, "cube", w=dist, h=self.size*.1, d=self.size*.1, po=dt.Vector(dist*.5*self.n_factor,0,0), tp=self.previusTag) + fk_off = primitive.addTransform( + parent, self.getName("fk%s_off" % i), tref) + fk_npo = primitive.addTransform( + fk_off, self.getName("fk%s_npo" % i), tnpo) + fk_ctl = self.addCtl( + fk_npo, + "fk%s_ctl" % i, + t, + self.color_fk, + "cube", + w=dist, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(dist * .5 * self.n_factor, 0, 0), + tp=self.previusTag) + self.fk_off.append(fk_off) self.fk_npo.append(fk_npo) self.fk_ctl.append(fk_ctl) @@ -100,76 +91,120 @@ def addObjects(self): # IK controllers ------------------------------------ if self.isIk: - normal = vec.getTransposedVector(self.normal, [self.guide.apos[0], self.guide.apos[1]], [self.guide.apos[-2], self.guide.apos[-1]]) - t = tra.getTransformLookingAt(self.guide.apos[-2], self.guide.apos[-1], normal, "xy", self.negate) - t = tra.setMatrixPosition(t, self.guide.apos[-1]) - - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", t, self.color_ik, "null", w=self.size, tp=self.parentCtlTag) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", t, self.color_ik, "cube", w=self.size*.3, h=self.size*.3, d=self.size*.3, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl, self.t_params) + normal = vector.getTransposedVector( + self.normal, + [self.guide.apos[0], self.guide.apos[1]], + [self.guide.apos[-2], self.guide.apos[-1]]) + t = transform.getTransformLookingAt(self.guide.apos[-2], + self.guide.apos[-1], + normal, + "xy", + self.negate) + t = transform.setMatrixPosition(t, self.guide.apos[-1]) + + self.ik_cns = primitive.addTransform(self.root, + self.getName("ik_cns"), + t) + self.ikcns_ctl = self.addCtl(self.ik_cns, + "ikcns_ctl", + t, + self.color_ik, + "null", + w=self.size, + tp=self.parentCtlTag) + self.ik_ctl = self.addCtl(self.ikcns_ctl, + "ik_ctl", + t, + self.color_ik, + "cube", + w=self.size * .3, + h=self.size * .3, + d=self.size * .3, + tp=self.ikcns_ctl) + attribute.setKeyableAttributes(self.ik_ctl, self.t_params) v = self.guide.apos[-1] - self.guide.apos[0] v = v ^ self.normal v.normalize() v *= self.size v += self.guide.apos[1] - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), v) - - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.1, tp=self.parentCtlTag) - att.setKeyableAttributes(self.upv_ctl, self.t_params) + self.upv_cns = primitive.addTransformFromPos( + self.root, self.getName("upv_cns"), v) + + self.upv_ctl = self.addCtl(self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .1, + tp=self.parentCtlTag) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) # Chain - self.chain = pri.add2DChain(self.root, self.getName("chain"), self.guide.apos, self.normal, self.negate) + self.chain = primitive.add2DChain(self.root, + self.getName("chain"), + self.guide.apos, + self.normal, + self.negate) self.chain[0].attr("visibility").set(self.WIP) # Chain of deformers ------------------------------- self.loc = [] parent = self.root - for i, t in enumerate(tra.getChainTransform(self.guide.apos, self.normal, self.negate)): - loc = pri.addTransform(parent, self.getName("%s_loc"%i), t) + for i, t in enumerate(transform.getChainTransform(self.guide.apos, + self.normal, + self.negate)): + loc = primitive.addTransform(parent, self.getName("%s_loc" % i), t) self.loc.append(loc) self.jnt_pos.append([loc, i, None, False]) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- if self.isFkIk: - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) if self.isIk: - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Visibilities ------------------------------------- if self.isFkIk: # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for fk_ctl in self.fk_ctl: for shp in fk_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", + shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -182,83 +217,94 @@ def addOperators(self): # FK Chain ----------------------------------------- if self.isFk: for off, ref in zip(self.fk_off[1:], self.fk_ref): - aop.gear_mulmatrix_op(ref.worldMatrix, off.parentInverseMatrix, off, "rt") + applyop.gear_mulmatrix_op( + ref.worldMatrix, off.parentInverseMatrix, off, "rt") # IK Chain ----------------------------------------- if self.isIk: - self.ikh = pri.addIkHandle(self.root, self.getName("ikh"), self.chain) + self.ikh = primitive.addIkHandle( + self.root, self.getName("ikh"), self.chain) self.ikh.attr("visibility").set(False) - #Constraint and up vector + # Constraint and up vector pm.pointConstraint(self.ik_ctl, self.ikh, maintainOffset=False) pm.poleVectorConstraint(self.upv_ctl, self.ikh) # TwistTest - if [round(elem, 4) for elem in tra.getTranslation(self.chain[1])] != [round(elem, 4) for elem in self.guide.apos[1]]: - add_nodeTwist = nod.createAddNode(180.0, self.roll_att) - pm.connectAttr(add_nodeTwist+".output", self.ikh.attr("twist")) + o_list = [round(elem, 4) for elem + in transform.getTranslation(self.chain[1])] \ + != [round(elem, 4) for elem in self.guide.apos[1]] + + if o_list: + add_nodeTwist = node.createAddNode(180.0, self.roll_att) + pm.connectAttr(add_nodeTwist + ".output", + self.ikh.attr("twist")) else: pm.connectAttr(self.roll_att, self.ikh.attr("twist")) # Chain of deformers ------------------------------- for i, loc in enumerate(self.loc): - if self.settings["mode"] == 0: # fk only + if self.settings["mode"] == 0: # fk only pm.parentConstraint(self.fk_ctl[i], loc, maintainOffset=False) - pm.connectAttr(self.fk_ctl[i]+".scale", loc+".scale") + pm.connectAttr(self.fk_ctl[i] + ".scale", loc + ".scale") - elif self.settings["mode"] == 1: # ik only - pm.parentConstraint( self.chain[i], loc, maintainOffset=False) + elif self.settings["mode"] == 1: # ik only + pm.parentConstraint(self.chain[i], loc, maintainOffset=False) - elif self.settings["mode"] == 2: # fk/ik + elif self.settings["mode"] == 2: # fk/ik - rev_node = nod.createReverseNode(self.blend_att) + rev_node = node.createReverseNode(self.blend_att) # orientation - cns = pm.parentConstraint(self.fk_ctl[i], self.chain[i], loc, maintainOffset=False) + cns = pm.parentConstraint( + self.fk_ctl[i], self.chain[i], loc, maintainOffset=False) cns.interpType.set(0) - weight_att = pm.parentConstraint(cns, query=True, weightAliasList=True) - pm.connectAttr(rev_node+".outputX", weight_att[0]) + weight_att = pm.parentConstraint( + cns, query=True, weightAliasList=True) + pm.connectAttr(rev_node + ".outputX", weight_att[0]) pm.connectAttr(self.blend_att, weight_att[1]) - #scaling + # scaling blend_node = pm.createNode("blendColors") - pm.connectAttr(self.chain[i].attr("scale"), blend_node+".color1") - pm.connectAttr(self.fk_ctl[i].attr("scale"), blend_node+".color2") - pm.connectAttr(self.blend_att, blend_node+".blender") - pm.connectAttr(blend_node+".output", loc+".scale") + pm.connectAttr(self.chain[i].attr("scale"), + blend_node + ".color1") + pm.connectAttr(self.fk_ctl[i].attr("scale"), + blend_node + ".color2") + pm.connectAttr(self.blend_att, blend_node + ".blender") + pm.connectAttr(blend_node + ".output", loc + ".scale") # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation between object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.loc[0] self.controlRelatives["root"] = self.fk_ctl[0] self.jointRelatives["root"] = 0 - for i in range(0, len(self.loc)-1): - self.relatives["%s_loc"%i] = self.loc[i+1] - self.controlRelatives["%s_loc"%i] = self.fk_ctl[i+1] - self.jointRelatives["%s_loc"%i] = i+1 - self.relatives["%s_loc"%(len(self.loc)-1)] = self.loc[-1] - self.controlRelatives["%s_loc"%(len(self.loc)-1)] = self.fk_ctl[-1] - self.jointRelatives["%s_loc"%(len(self.loc)-1)] = len(self.loc)-1 - + for i in range(0, len(self.loc) - 1): + self.relatives["%s_loc" % i] = self.loc[i + 1] + self.controlRelatives["%s_loc" % i] = self.fk_ctl[i + 1] + self.jointRelatives["%s_loc" % i] = i + 1 + self.relatives["%s_loc" % (len(self.loc) - 1)] = self.loc[-1] + self.controlRelatives["%s_loc" % (len(self.loc) - 1)] = self.fk_ctl[-1] + self.jointRelatives["%s_loc" % (len(self.loc) - 1)] = len(self.loc) - 1 # @param self def addConnection(self): + """Add more connection definition to the set""" + self.connections["standard"] = self.connect_standard self.connections["orientation"] = self.connect_orientation self.connections["parent"] = self.connect_parent def connect_orientation(self): + """orientation connection definition for the component""" self.connect_orientCns() - ## standard connection definition. def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithSimpleIkRef() - # @param self def connect_parent(self): self.connect_standardWithSimpleIkRef() diff --git a/scripts/mgear/maya/shifter/component/chain_01/guide.py b/scripts/mgear/maya/shifter/component/chain_01/guide.py index d54899e..faa07d1 100644 --- a/scripts/mgear/maya/shifter/component/chain_01/guide.py +++ b/scripts/mgear/maya/shifter/component/chain_01/guide.py @@ -1,51 +1,22 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## +"""Guide Chain 01 module""" from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt +from mgear.maya.shifter.component import guide +from mgear.maya import pyqt +from mgear.vendor.Qt import QtWidgets, QtCore + from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,1] +VERSION = [1, 0, 1] TYPE = "chain_01" NAME = "chain" DESCRIPTION = "Simple IK/FK chain, With IK space switch" @@ -53,7 +24,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -64,19 +38,15 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" + self.save_transform = ["root", "#_loc"] self.save_blade = ["blade"] self.addMinMax("#_loc", 1, -1) - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() self.locs = self.addLocMulti("#_loc", self.root) @@ -86,26 +56,27 @@ def addObjects(self): centers.extend(self.locs) self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pType = self.addParam("mode", "long", 0, 0) - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - # self.pBladeOffset = self.addParam("bladeOffset", "float", 0, 0) - self.pNeutralPose = self.addParam("neutralpose", "bool", False) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pType = self.addParam("mode", "long", 0, 0) + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pNeutralPose = self.addParam("neutralpose", "bool", False) + self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) - #TODO: if have IK or IK/FK lock the axis position to force 2D Planar IK solver - # Create a a method to lock and unlock while changing options in the PYSIDE component Settings + # TODO: if have IK or IK/FK lock the axis position to + # force 2D Planar IK solver + # Create a a method to lock and unlock while changing + # options in the PYSIDE component Settings ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): def __init__(self, parent=None): @@ -113,17 +84,16 @@ def __init__(self, parent=None): self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -131,7 +101,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -141,29 +111,35 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.mode_comboBox.setCurrentIndex(self.root.attr("mode").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.mode_comboBox.setCurrentIndex( + self.root.attr("mode").get()) + if self.root.attr("neutralpose").get(): - self.settingsTab.neutralPose_checkBox.setCheckState(QtCore.Qt.Checked) + self.settingsTab.neutralPose_checkBox.setCheckState( + QtCore.Qt.Checked) else: - self.settingsTab.neutralPose_checkBox.setCheckState(QtCore.Qt.Unchecked) + self.settingsTab.neutralPose_checkBox.setCheckState( + QtCore.Qt.Unchecked) ikRefArrayItems = self.root.attr("ikrefarray").get().split(",") for item in ikRefArrayItems: self.settingsTab.ikRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -174,13 +150,29 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.mode_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.settingsTab.mode_comboBox, "mode")) - self.settingsTab.neutralPose_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.neutralPose_checkBox, "neutralpose")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.mode_comboBox.currentIndexChanged.connect( + partial(self.updateComboBox, + self.settingsTab.mode_comboBox, + "mode")) + + self.settingsTab.neutralPose_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.neutralPose_checkBox, + "neutralpose")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) self.settingsTab.ikRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -191,6 +183,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/chain_spring_01/__init__.py b/scripts/mgear/maya/shifter/component/chain_spring_01/__init__.py index 802db64..993c595 100644 --- a/scripts/mgear/maya/shifter/component/chain_spring_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/chain_spring_01/__init__.py @@ -1,65 +1,30 @@ -# MGEAR is under the terms of the MIT License +"""Component Chain Spring 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -########################################################## -# GLOBAL -########################################################## -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya import applyop, vector, node +from mgear.maya import attribute, transform, primitive -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.vector as vec -import mgear.maya.applyop as aop - -########################################################## +############################################# # COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +############################################# + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): # blades computation self.normal = self.guide.blades["blade"].z self.binormal = self.guide.blades["blade"].x - self.fk_npo = [] self.fk_ctl = [] self.spring_cns = [] @@ -69,21 +34,43 @@ def addObjects(self): self.spring_npo = [] self.spring_target = [] parent = self.root - self.previousTag = self.parentCtlTag - for i, t in enumerate(tra.getChainTransform(self.guide.apos, self.normal, self.negate)): - dist = vec.getDistance(self.guide.apos[i], self.guide.apos[i+1]) - - fk_npo = pri.addTransform(parent, self.getName("fk%s_npo"%i), t) - spring_aim = pri.addTransform(fk_npo, self.getName("spring%s_aim"%i), t) - spring_cns = pri.addTransform(fk_npo, self.getName("spring%s_cns"%i), t) - fk_ctl = self.addCtl(spring_cns, "fk%s_ctl"%i, t, self.color_fk, "cube", w=dist, h=self.size*.1, d=self.size*.1, po=dt.Vector(dist*.5*self.n_factor,0,0), tp=self.previousTag) - self.previousTag = fk_ctl + self.previousTag = self.parentCtlTag + for i, t in enumerate(transform.getChainTransform(self.guide.apos, + self.normal, + self.negate)): + dist = vector.getDistance(self.guide.apos[i], + self.guide.apos[i + 1]) + + fk_npo = primitive.addTransform(parent, + self.getName("fk%s_npo" % i), t) + + spring_aim = primitive.addTransform( + fk_npo, + self.getName("spring%s_aim" % i), t) + + spring_cns = primitive.addTransform( + fk_npo, + self.getName("spring%s_cns" % i), t) + + fk_ctl = self.addCtl( + spring_cns, + "fk%s_ctl" % i, + t, + self.color_fk, + "cube", w=dist, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(dist * .5 * self.n_factor, 0, 0), + tp=self.previousTag, + lp=False) + self.previousTag = fk_ctl - t = tra.getTransformFromPos(self.guide.apos[i+1]) - spring_npo = pri.addTransform(parent, self.getName("spring%s_npo"%i), t) - spring_target = pri.addTransform(spring_npo, self.getName("spring%s"%i), t) - + t = transform.getTransformFromPos(self.guide.apos[i + 1]) + spring_npo = primitive.addTransform( + parent, self.getName("spring%s_npo" % i), t) + spring_target = primitive.addTransform( + spring_npo, self.getName("spring%s" % i), t) parent = fk_ctl @@ -94,95 +81,116 @@ def addObjects(self): self.fk_npo.append(fk_npo) self.fk_ctl.append(fk_ctl) - att.setKeyableAttributes(self.fk_ctl, self.tr_params) + attribute.setKeyableAttributes(self.fk_ctl, self.tr_params) self.spring_target.append(spring_target) - # Chain of deformers ------------------------------- self.loc = [] parent = self.root - for i, t in enumerate(tra.getChainTransform(self.guide.apos, self.normal, self.negate)): - loc = pri.addTransform(parent, self.getName("%s_loc"%i), t) + for i, t in enumerate(transform.getChainTransform(self.guide.apos, + self.normal, + self.negate)): + loc = primitive.addTransform(parent, self.getName("%s_loc" % i), t) self.loc.append(loc) self.jnt_pos.append([loc, i]) parent = loc # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- self.aDamping = [] self.aStiffness = [] - self.aSpring_intensity = self.addAnimParam("spring_intensity", "Spring chain intensity", "double", 0, 0, 1) + self.aSpring_intensity = self.addAnimParam("spring_intensity", + "Spring chain intensity", + "double", + 0, + 0, + 1) for i, tar in enumerate(self.spring_target): - aDamping = self.addAnimParam( "damping_%s"%i, "damping_%s"%i, "double", 0.5, 0, 1) + aDamping = self.addAnimParam("damping_%s" % i, + "damping_%s" % i, + "double", + 0.5, + 0, + 1) self.aDamping.append(aDamping) for i, tar in enumerate(self.spring_target): - aStiffness = self.addAnimParam( "stiffness_%s"%i, "stiffness_%s"%i, "double", 0.5, 0, 1) - self.aStiffness.append(aStiffness) + aStiffness = self.addAnimParam( + "stiffness_%s" % i, "stiffness_%s" % i, "double", 0.5, 0, 1) + self.aStiffness.append(aStiffness) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Chain of deformers ------------------------------- for i, loc in enumerate(self.loc): pm.parentConstraint(self.fk_ctl[i], loc, maintainOffset=False) # spring operators - #settings aim contraints + # settings aim contraints for i, tranCns in enumerate(self.spring_aim): if self.negate: aimAxis = "-xy" else: aimAxis = "xy" - aop.aimCns(tranCns, self.spring_target[i], aimAxis, 2, [0,1,0], self.fk_npo[i], False) - aop.oriCns(tranCns, self.spring_cns[i]) + applyop.aimCns(tranCns, + self.spring_target[i], + aimAxis, + 2, + [0, 1, 0], + self.fk_npo[i], + False) + ori_cns = applyop.oriCns(tranCns, self.spring_cns[i]) + + springOP = applyop.gear_spring_op(self.spring_target[i]) - springOP = aop.gear_spring_op(self.spring_target[i]) + blend_node = pm.createNode("pairBlend") - pm.connectAttr(self.aSpring_intensity, springOP+".intensity") - pm.connectAttr(self.aDamping[i], springOP+".damping") - pm.connectAttr(self.aStiffness[i], springOP+".stiffness") + pm.connectAttr(ori_cns.constraintRotate, blend_node.inRotate2) + pm.connectAttr(self.aSpring_intensity, blend_node.weight) + pm.disconnectAttr(ori_cns.constraintRotate, + self.spring_cns[i].rotate) + pm.connectAttr(blend_node.outRotateX, self.spring_cns[i].rotateX) + pm.connectAttr(blend_node.outRotateY, self.spring_cns[i].rotateY) + pm.connectAttr(blend_node.outRotateZ, self.spring_cns[i].rotateZ) + + pm.connectAttr(self.aSpring_intensity, springOP + ".intensity") + pm.connectAttr(self.aDamping[i], springOP + ".damping") + pm.connectAttr(self.aStiffness[i], springOP + ".stiffness") # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation between object from guide to rig.\n - # @param self def setRelation(self): - - # self.relatives["root"] = self.loc[0] - # self.jointRelatives["root"] = 0 - # for i in range(0, len(self.loc)-1): - # self.relatives["%s_loc"%i] = self.loc[i+1] - # self.jointRelatives["%s_loc"%i] = i+1 - # self.relatives["%s_loc"%(len(self.loc)-1)] = self.loc[-1] - # self.jointRelatives["%s_loc"%(len(self.loc)-1)] = len(self.loc)-1 + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.loc[0] self.controlRelatives["root"] = self.fk_ctl[0] self.jointRelatives["root"] = 0 - for i in range(0, len(self.loc)-1): - self.relatives["%s_loc"%i] = self.loc[i+1] - self.controlRelatives["%s_loc"%i] = self.fk_ctl[i+1] - self.jointRelatives["%s_loc"%i] = i+1 - self.relatives["%s_loc"%(len(self.loc)-1)] = self.loc[-1] - self.controlRelatives["%s_loc"%(len(self.loc)-1)] = self.fk_ctl[-1] - self.jointRelatives["%s_loc"%(len(self.loc)-1)] = len(self.loc)-1 + for i in range(0, len(self.loc) - 1): + self.relatives["%s_loc" % i] = self.loc[i + 1] + self.controlRelatives["%s_loc" % i] = self.fk_ctl[i + 1] + self.jointRelatives["%s_loc" % i] = i + 1 + self.relatives["%s_loc" % (len(self.loc) - 1)] = self.loc[-1] + self.controlRelatives["%s_loc" % (len(self.loc) - 1)] = self.fk_ctl[-1] + self.jointRelatives["%s_loc" % (len(self.loc) - 1)] = len(self.loc) - 1 diff --git a/scripts/mgear/maya/shifter/component/chain_spring_01/guide.py b/scripts/mgear/maya/shifter/component/chain_spring_01/guide.py index c02b8a5..9ff4051 100644 --- a/scripts/mgear/maya/shifter/component/chain_spring_01/guide.py +++ b/scripts/mgear/maya/shifter/component/chain_spring_01/guide.py @@ -1,48 +1,17 @@ -# MGEAR is under the terms of the MIT License +"""Guide Chain spring 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.maya.shifter.component import guide +from mgear.maya import pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() - # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,1] +VERSION = [1, 0, 1] TYPE = "chain_spring_01" NAME = "chainSpring" DESCRIPTION = "FK chain with spring" @@ -50,7 +19,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -61,19 +33,14 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "#_loc"] self.save_blade = ["blade"] self.addMinMax("#_loc", 1, -1) - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() self.locs = self.addLocMulti("#_loc", self.root) @@ -83,12 +50,11 @@ def addObjects(self): centers.extend(self.locs) self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + """Add the configurations settings""" + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) return @@ -97,14 +63,15 @@ def addParameters(self): ########################################################## -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.setup_componentSettingWindow() self.create_componentControls() @@ -113,7 +80,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -123,10 +90,11 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ return @@ -143,4 +111,4 @@ def create_componentConnections(self): return def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/control_01/__init__.py b/scripts/mgear/maya/shifter/component/control_01/__init__.py index 830d38b..b242fb6 100644 --- a/scripts/mgear/maya/shifter/component/control_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/control_01/__init__.py @@ -1,83 +1,71 @@ -# MGEAR is under the terms of the MIT License +"""Component Control 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.maya.shifter import component -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: +from mgear.maya import attribute, transform, primitive -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 ############################################# -# GLOBAL +# COMPONENT ############################################# -# mgear -from mgear.maya.shifter.component import MainComponent -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.vector as vec +class Component(component.Main): + """Shifter component Class""" -############################################# -# COMPONENT -############################################# -class Component(MainComponent): - + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): - # self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) + """Add all the objects needed to create the component.""" if self.settings["neutralRotation"]: - t = tra.getTransformFromPos(self.guide.pos["root"]) + t = transform.getTransformFromPos(self.guide.pos["root"]) else: t = self.guide.tra["root"] - t = tra.setMatrixScale(t) - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) - - self.ctl = self.addCtl( self.ik_cns, - "ctl", - t, - self.color_ik, - self.settings["icon"], - w=self.settings["ctlSize"]*self.size, - h=self.settings["ctlSize"]*self.size, - d=self.settings["ctlSize"]*self.size, - tp=self.parentCtlTag) - - params = [ s for s in ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz"] if self.settings["k_"+s] ] - att.setKeyableAttributes(self.ctl, params) + if self.settings["mirrorBehaviour"] and self.negate: + scl = [1, 1, -1] + else: + scl = [1, 1, 1] + t = transform.setMatrixScale(t, scl) + + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t) + + self.ctl = self.addCtl(self.ik_cns, + "ctl", + t, + self.color_ik, + self.settings["icon"], + w=self.settings["ctlSize"] * self.size, + h=self.settings["ctlSize"] * self.size, + d=self.settings["ctlSize"] * self.size, + tp=self.parentCtlTag) + + # we need to set the rotation order before lock any rotation axis + if self.settings["k_ro"]: + rotOderList = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"] + attribute.setRotOrder( + self.ctl, rotOderList[self.settings["default_rotorder"]]) + + params = [s for s in + ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz"] + if self.settings["k_" + s]] + attribute.setKeyableAttributes(self.ctl, params) if self.settings["joint"]: self.jnt_pos.append([self.ctl, 0, None, self.settings["uniScale"]]) - if self.settings["k_ro"]: - rotOderList = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"] - att.setRotOrder(self.ctl, rotOderList[self.settings["default_rotorder"]]) - def addAttributes(self): # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) - + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) def addOperators(self): return @@ -85,25 +73,22 @@ def addOperators(self): # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.ctl self.controlRelatives["root"] = self.ctl if self.settings["joint"]: self.jointRelatives["root"] = 0 - - # @param self def addConnection(self): + """Add more connection definition to the set""" self.connections["standard"] = self.connect_standard self.connections["orientation"] = self.connect_orientation - - ## standard connection definition. - # @param self def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithSimpleIkRef() def connect_orientation(self): + """Orient connection definition for the component""" self.connect_orientCns() diff --git a/scripts/mgear/maya/shifter/component/control_01/guide.py b/scripts/mgear/maya/shifter/component/control_01/guide.py index 4a94155..3cb0021 100644 --- a/scripts/mgear/maya/shifter/component/control_01/guide.py +++ b/scripts/mgear/maya/shifter/component/control_01/guide.py @@ -1,60 +1,38 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -from functools import partial +"""Guide Control 01 module""" +from functools import partial import pymel.core as pm -# mgear -import mgear.maya.transform as tra -from mgear.maya.shifter.component.guide import ComponentGuide -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore + from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,1,0] +VERSION = [1, 2, 0] TYPE = "control_01" NAME = "control" -DESCRIPTION = "Simple controler with space switch and Rot order selection. \nThis component can use the root rotation to place the control orientation" +DESCRIPTION = "Simple controler with space switch and Rot order selection. \n"\ + "This component can use the root rotation to place the "\ + "control orientation \n" \ + "NOTE: MAYA 2018 and 2018.1 have a bug that break the behaviour"\ + " with negative scale. This affect 'Mirror behaviour option' " + ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -72,39 +50,39 @@ def postInit(self): self.save_transform = ["root", "sizeRef"] # ===================================================== - ## Add more object to the object definition list. + # Add more object to the object definition list. # @param self def addObjects(self): self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,0,1]) + vTemp = transform.getOffsetPosition(self.root, [0, 0, 1]) self.sizeRef = self.addLoc("sizeRef", self.root, vTemp) # self.sizeRef.visibility.set(False) pm.delete(self.sizeRef.getShapes()) - - # ===================================================== - ## Add more parameter to the parameter definition list. + # Add more parameter to the parameter definition list. # @param self def addParameters(self): - self.pIcon = self.addParam("icon", "string", "cube") - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pJoint = self.addParam("joint", "bool", False) self.pJoint = self.addParam("uniScale", "bool", True) for s in ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx", "sy", "sz"]: - self.addParam("k_"+s, "bool", True) + self.addParam("k_" + s, "bool", True) - self.pDefault_RotOrder = self.addParam("default_rotorder", "long", 0, 0, 5) + self.pDefault_RotOrder = self.addParam( + "default_rotorder", "long", 0, 0, 5) self.pNeutralRotation = self.addParam("neutralRotation", "bool", True) - self.pCtlSize = self.addParam("ctlSize", "double", 1 , None, None) + self.pMirrorBehaviour = self.addParam("mirrorBehaviour", "bool", False) + self.pCtlSize = self.addParam("ctlSize", "double", 1, None, None) self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) return @@ -112,26 +90,40 @@ def addParameters(self): # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) - self.iconsList = ['arrow', 'circle', 'compas', 'cross', 'crossarrow', 'cube', 'cubewithpeak', 'cylinder', 'diamond', 'flower', 'null', 'pyramid', 'sphere', 'square'] - - - super(self.__class__, self).__init__(parent = parent) + pyqt.deleteInstances(self, MayaQDockWidget) + self.iconsList = ['arrow', + 'circle', + 'compas', + 'cross', + 'crossarrow', + 'cube', + 'cubewithpeak', + 'cylinder', + 'diamond', + 'flower', + 'null', + 'pyramid', + 'sphere', + 'square'] + + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -139,7 +131,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -149,21 +141,26 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings + # populate component settings self.populateCheck(self.settingsTab.joint_checkBox, "joint") self.populateCheck(self.settingsTab.uniScale_checkBox, "uniScale") - self.populateCheck(self.settingsTab.neutralRotation_checkBox, "neutralRotation") - self.settingsTab.ctlSize_doubleSpinBox.setValue(self.root.attr("ctlSize").get()) + self.populateCheck(self.settingsTab.neutralRotation_checkBox, + "neutralRotation") + self.populateCheck(self.settingsTab.mirrorBehaviour_checkBox, + "mirrorBehaviour") + self.settingsTab.ctlSize_doubleSpinBox.setValue( + self.root.attr("ctlSize").get()) sideIndex = self.iconsList.index(self.root.attr("icon").get()) self.settingsTab.controlShape_comboBox.setCurrentIndex(sideIndex) @@ -178,13 +175,13 @@ def populate_componentControls(self): self.populateCheck(self.settingsTab.sy_checkBox, "k_sy") self.populateCheck(self.settingsTab.sz_checkBox, "k_sz") - self.settingsTab.ro_comboBox.setCurrentIndex(self.root.attr("default_rotorder").get()) + self.settingsTab.ro_comboBox.setCurrentIndex( + self.root.attr("default_rotorder").get()) ikRefArrayItems = self.root.attr("ikrefarray").get().split(",") for item in ikRefArrayItems: self.settingsTab.ikRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -195,27 +192,65 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.joint_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.joint_checkBox, "joint")) - self.settingsTab.uniScale_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.uniScale_checkBox, "uniScale")) - self.settingsTab.neutralRotation_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.neutralRotation_checkBox, "neutralRotation")) - self.settingsTab.ctlSize_doubleSpinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.ctlSize_doubleSpinBox, "ctlSize")) - self.settingsTab.controlShape_comboBox.currentIndexChanged.connect(partial(self.updateControlShape, self.settingsTab.controlShape_comboBox, self.iconsList, "icon")) - - self.settingsTab.tx_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.tx_checkBox, "k_tx")) - self.settingsTab.ty_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.ty_checkBox, "k_ty")) - self.settingsTab.tz_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.tz_checkBox, "k_tz")) - self.settingsTab.rx_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.rx_checkBox, "k_rx")) - self.settingsTab.ry_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.ry_checkBox, "k_ry")) - self.settingsTab.rz_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.rz_checkBox, "k_rz")) - self.settingsTab.ro_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.ro_checkBox, "k_ro")) - self.settingsTab.sx_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.sx_checkBox, "k_sx")) - self.settingsTab.sy_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.sy_checkBox, "k_sy")) - self.settingsTab.sz_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.sz_checkBox, "k_sz")) - - self.settingsTab.ro_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.settingsTab.ro_comboBox, "default_rotorder")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.joint_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.joint_checkBox, + "joint")) + self.settingsTab.uniScale_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.uniScale_checkBox, + "uniScale")) + self.settingsTab.neutralRotation_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.neutralRotation_checkBox, + "neutralRotation")) + self.settingsTab.mirrorBehaviour_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorBehaviour_checkBox, + "mirrorBehaviour")) + self.settingsTab.ctlSize_doubleSpinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.ctlSize_doubleSpinBox, + "ctlSize")) + self.settingsTab.controlShape_comboBox.currentIndexChanged.connect( + partial(self.updateControlShape, + self.settingsTab.controlShape_comboBox, + self.iconsList, "icon")) + + self.settingsTab.tx_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.tx_checkBox, "k_tx")) + self.settingsTab.ty_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.ty_checkBox, "k_ty")) + self.settingsTab.tz_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.tz_checkBox, "k_tz")) + self.settingsTab.rx_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.rx_checkBox, "k_rx")) + self.settingsTab.ry_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.ry_checkBox, "k_ry")) + self.settingsTab.rz_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.rz_checkBox, "k_rz")) + self.settingsTab.ro_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.ro_checkBox, "k_ro")) + self.settingsTab.sx_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.sx_checkBox, "k_sx")) + self.settingsTab.sy_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.sy_checkBox, "k_sy")) + self.settingsTab.sz_checkBox.stateChanged.connect( + partial(self.updateCheck, self.settingsTab.sz_checkBox, "k_sz")) + + self.settingsTab.ro_comboBox.currentIndexChanged.connect( + partial(self.updateComboBox, + self.settingsTab.ro_comboBox, + "default_rotorder")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) self.settingsTab.ikRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -226,6 +261,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/control_01/settingsUI.py b/scripts/mgear/maya/shifter/component/control_01/settingsUI.py index af86769..e8cf56e 100644 --- a/scripts/mgear/maya/shifter/component/control_01/settingsUI.py +++ b/scripts/mgear/maya/shifter/component/control_01/settingsUI.py @@ -1,37 +1,10 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import mgear.maya.pyqt as gqt QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() - class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") - Form.resize(280, 525) + Form.resize(733, 550) self.gridLayout = QtWidgets.QGridLayout(Form) self.gridLayout.setObjectName("gridLayout") self.groupBox = QtWidgets.QGroupBox(Form) @@ -50,6 +23,9 @@ def setupUi(self, Form): self.neutralRotation_checkBox = QtWidgets.QCheckBox(self.groupBox) self.neutralRotation_checkBox.setObjectName("neutralRotation_checkBox") self.verticalLayout_4.addWidget(self.neutralRotation_checkBox) + self.mirrorBehaviour_checkBox = QtWidgets.QCheckBox(self.groupBox) + self.mirrorBehaviour_checkBox.setObjectName("mirrorBehaviour_checkBox") + self.verticalLayout_4.addWidget(self.mirrorBehaviour_checkBox) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.ctlSize_label = QtWidgets.QLabel(self.groupBox) @@ -122,7 +98,7 @@ def setupUi(self, Form): self.tz_checkBox = QtWidgets.QCheckBox(self.keyable_groupBox) self.tz_checkBox.setObjectName("tz_checkBox") self.verticalLayout.addWidget(self.tz_checkBox) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.verticalLayout.addItem(spacerItem) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtWidgets.QVBoxLayout() @@ -154,7 +130,6 @@ def setupUi(self, Form): self.verticalLayout_2.addWidget(self.ro_comboBox) self.horizontalLayout.addLayout(self.verticalLayout_2) self.verticalLayout_3 = QtWidgets.QVBoxLayout() - self.verticalLayout_3.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) self.verticalLayout_3.setObjectName("verticalLayout_3") self.scale_pushButton = QtWidgets.QPushButton(self.keyable_groupBox) self.scale_pushButton.setObjectName("scale_pushButton") @@ -168,7 +143,7 @@ def setupUi(self, Form): self.sz_checkBox = QtWidgets.QCheckBox(self.keyable_groupBox) self.sz_checkBox.setObjectName("sz_checkBox") self.verticalLayout_3.addWidget(self.sz_checkBox) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.verticalLayout_3.addItem(spacerItem1) self.horizontalLayout.addLayout(self.verticalLayout_3) self.gridLayout_4.addLayout(self.horizontalLayout, 0, 0, 1, 1) @@ -206,9 +181,9 @@ def setupUi(self, Form): self.gridLayout.addWidget(self.ikRefArray_groupBox, 2, 0, 1, 1) self.retranslateUi(Form) - QtCore.QObject.connect(self.translate_pushButton, QtCore.SIGNAL("clicked()"), self.tz_checkBox.toggle) - QtCore.QObject.connect(self.translate_pushButton, QtCore.SIGNAL("clicked()"), self.ty_checkBox.toggle) QtCore.QObject.connect(self.translate_pushButton, QtCore.SIGNAL("clicked()"), self.tx_checkBox.toggle) + QtCore.QObject.connect(self.translate_pushButton, QtCore.SIGNAL("clicked()"), self.ty_checkBox.toggle) + QtCore.QObject.connect(self.translate_pushButton, QtCore.SIGNAL("clicked()"), self.tz_checkBox.toggle) QtCore.QObject.connect(self.rotate_pushButton, QtCore.SIGNAL("clicked()"), self.rx_checkBox.toggle) QtCore.QObject.connect(self.rotate_pushButton, QtCore.SIGNAL("clicked()"), self.ry_checkBox.toggle) QtCore.QObject.connect(self.rotate_pushButton, QtCore.SIGNAL("clicked()"), self.rz_checkBox.toggle) @@ -222,7 +197,10 @@ def retranslateUi(self, Form): Form.setWindowTitle(gqt.fakeTranslate("Form", "Form", None, -1)) self.joint_checkBox.setText(gqt.fakeTranslate("Form", "Joint", None, -1)) self.uniScale_checkBox.setText(gqt.fakeTranslate("Form", "Uniform Scale", None, -1)) + self.neutralRotation_checkBox.setToolTip(gqt.fakeTranslate("Form", "

If is active, it will align the control with world space

", None, -1)) self.neutralRotation_checkBox.setText(gqt.fakeTranslate("Form", "World Space Orientation Align", None, -1)) + self.mirrorBehaviour_checkBox.setToolTip(gqt.fakeTranslate("Form", "

If is active, the control will have symmetrical behaviour on Left and Right side.


WARNING: There is a bug in Maya 2018 and 2018.1 that will result in an incorrect behaviour, because this option will negate one of the axis. Other Maya version should be ok.

", None, -1)) + self.mirrorBehaviour_checkBox.setText(gqt.fakeTranslate("Form", "Mirror Behaviour L and R", None, -1)) self.ctlSize_label.setText(gqt.fakeTranslate("Form", "Ctl Size", None, -1)) self.controlShape_comboBox.setItemText(0, gqt.fakeTranslate("Form", "Arrow", None, -1)) self.controlShape_comboBox.setItemText(1, gqt.fakeTranslate("Form", "Circle", None, -1)) diff --git a/scripts/mgear/maya/shifter/component/control_01/settingsUI.ui b/scripts/mgear/maya/shifter/component/control_01/settingsUI.ui index 701e0db..78841ba 100644 --- a/scripts/mgear/maya/shifter/component/control_01/settingsUI.ui +++ b/scripts/mgear/maya/shifter/component/control_01/settingsUI.ui @@ -6,8 +6,8 @@ 0 0 - 280 - 525 + 733 + 550 @@ -38,11 +38,24 @@ + + <html><head/><body><p>If is active, it will align the control with world space</p></body></html> + World Space Orientation Align + + + + <html><head/><body><p>If is active, the control will have symmetrical behaviour on Left and Right side.</p><p><br/></p><p>WARNING: There is a bug in Maya 2018 and 2018.1 that will result in an incorrect behaviour, because this option will negate one of the axis. Other Maya version should be ok.</p></body></html> + + + Mirror Behaviour L and R + + + @@ -224,6 +237,9 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 @@ -312,9 +328,6 @@ - - QLayout::SetMinAndMaxSize - @@ -348,6 +361,9 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 @@ -440,16 +456,16 @@ translate_pushButton clicked() - tz_checkBox + tx_checkBox toggle() - 46 - 114 + 120 + 210 - 21 - 193 + 31 + 232 @@ -460,28 +476,28 @@ toggle() - 20 - 120 + 139 + 212 - 13 - 165 + 68 + 258 translate_pushButton clicked() - tx_checkBox + tz_checkBox toggle() - 68 - 117 + 176 + 212 - 14 - 143 + 168 + 278 @@ -492,12 +508,12 @@ toggle() - 116 - 120 + 338 + 208 - 97 - 144 + 338 + 234 @@ -508,12 +524,12 @@ toggle() - 134 - 122 + 367 + 212 - 118 - 168 + 367 + 261 @@ -524,12 +540,12 @@ toggle() - 145 - 121 + 401 + 207 - 104 - 189 + 397 + 275 @@ -540,12 +556,12 @@ toggle() - 151 - 117 + 430 + 213 - 128 - 219 + 419 + 302 @@ -556,12 +572,12 @@ toggle() - 213 - 113 + 533 + 209 - 196 - 150 + 532 + 234 @@ -572,12 +588,12 @@ toggle() - 220 - 121 + 563 + 211 - 210 - 176 + 558 + 261 @@ -588,12 +604,12 @@ toggle() - 227 - 110 + 593 + 218 - 223 - 192 + 587 + 277 diff --git a/scripts/mgear/maya/shifter/component/eye_01/__init__.py b/scripts/mgear/maya/shifter/component/eye_01/__init__.py index 5801315..befb987 100644 --- a/scripts/mgear/maya/shifter/component/eye_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/eye_01/__init__.py @@ -1,118 +1,121 @@ -# MGEAR is under the terms of the MIT License +"""Component Eye 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: +import pymel.core as pm +from pymel.core import datatypes -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +from mgear.maya.shifter import component -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +from mgear.maya import attribute, transform, primitive, applyop -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 ########################################################## -# GLOBAL +# COMPONENT ########################################################## -# Maya -import pymel.core as pm -import pymel.core.datatypes as dt -# mgear -from mgear.maya.shifter.component import MainComponent -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.applyop as aop - -########################################################## -# COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - - ## Add all the objects needed to create the component. - # @param self def addObjects(self): - - t = tra.getTransformFromPos(self.guide.pos["root"]) - self.eyeOver_npo = pri.addTransform(self.root, self.getName("eyeOver_npo"), t) - self.eyeOver_ctl = self.addCtl(self.eyeOver_npo, "Over_ctl", t, self.color_fk, "sphere", w=1*self.size, tp=self.parentCtlTag) - self.eye_npo = pri.addTransform(self.root, self.getName("eye_npo"), t) - self.eyeFK_ctl = self.addCtl(self.eye_npo, "fk_ctl", t, self.color_fk, "arrow", w=1*self.size, tp=self.eyeOver_ctl) + """Add all the objects needed to create the component.""" + + t = transform.getTransformFromPos(self.guide.pos["root"]) + + self.eyeOver_npo = primitive.addTransform( + self.root, self.getName("eyeOver_npo"), t) + + self.eyeOver_ctl = self.addCtl(self.eyeOver_npo, + "Over_ctl", + t, + self.color_fk, + "sphere", + w=1 * self.size, + tp=self.parentCtlTag) + self.eye_npo = primitive.addTransform(self.root, + self.getName("eye_npo"), + t) + self.eyeFK_ctl = self.addCtl(self.eye_npo, + "fk_ctl", + t, + self.color_fk, + "arrow", + w=1 * self.size, + tp=self.eyeOver_ctl) # look at - t = tra.getTransformFromPos(self.guide.pos["look"]) - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) - self.eyeIK_npo = pri.addTransform(self.ik_cns, self.getName("ik_npo"), t) - self.eyeIK_ctl = self.addCtl(self.eyeIK_npo, "ik_ctl", t, self.color_fk, "circle", w=.5*self.size, tp=self.eyeFK_ctl, ro=dt.Vector([1.5708,0,0])) - att.setKeyableAttributes(self.eyeIK_ctl, self.t_params) + t = transform.getTransformFromPos(self.guide.pos["look"]) + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t) + + self.eyeIK_npo = primitive.addTransform( + self.ik_cns, self.getName("ik_npo"), t) + + self.eyeIK_ctl = self.addCtl(self.eyeIK_npo, + "ik_ctl", + t, + self.color_fk, + "circle", + w=.5 * self.size, + tp=self.eyeFK_ctl, + ro=datatypes.Vector([1.5708, 0, 0])) + attribute.setKeyableAttributes(self.eyeIK_ctl, self.t_params) self.jnt_pos.append([self.eyeFK_ctl, "eye", "parent_relative_jnt"]) - self.jnt_pos.append([self.eyeOver_ctl, "eyeOver", "parent_relative_jnt", False]) - - + self.jnt_pos.append( + [self.eyeOver_ctl, "eyeOver", "parent_relative_jnt", False]) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ upvDir = self.settings["upVectorDirection"] if upvDir == 0: - upvVec = [1,0,0] + upvVec = [1, 0, 0] elif upvDir == 1: - upvVec = [0,1,0] + upvVec = [0, 1, 0] else: - upvVec = [0,0,1] + upvVec = [0, 0, 1] - aop.aimCns(self.eye_npo, self.eyeIK_ctl, "zy", 2, upvVec, self.root, False) - - pm.scaleConstraint(self.eyeOver_ctl, self.eye_npo, maintainOffset=False) - pm.pointConstraint(self.eyeOver_ctl, self.eye_npo, maintainOffset=False) + applyop.aimCns( + self.eye_npo, self.eyeIK_ctl, "zy", 2, upvVec, self.root, False) + pm.scaleConstraint( + self.eyeOver_ctl, self.eye_npo, maintainOffset=False) + pm.pointConstraint( + self.eyeOver_ctl, self.eye_npo, maintainOffset=False) # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation between object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.eyeFK_ctl self.relatives["look"] = self.eyeOver_ctl @@ -122,8 +125,6 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["look"] = 1 - - ## standard connection definition. - # @param self def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithSimpleIkRef() diff --git a/scripts/mgear/maya/shifter/component/eye_01/guide.py b/scripts/mgear/maya/shifter/component/eye_01/guide.py index 041ef27..9517fc2 100644 --- a/scripts/mgear/maya/shifter/component/eye_01/guide.py +++ b/scripts/mgear/maya/shifter/component/eye_01/guide.py @@ -1,55 +1,21 @@ -# MGEAR is under the terms of the MIT License +"""Guide Eye 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -########################################################## -# GLOBAL -########################################################## from functools import partial +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore - -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +import settingsUI as sui # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "eye_01" NAME = "eye" DESCRIPTION = "eye control rig" @@ -57,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -68,37 +37,32 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "look"] - - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" - #eye guide + # eye guide self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,0,1]) + vTemp = transform.getOffsetPosition(self.root, [0, 0, 1]) self.look = self.addLoc("look", self.root, vTemp) centers = [self.root, self.look] self.dispcrv = self.addDispCurve("crv", centers) - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" + + self.pUpVDir = self.addEnumParam( + "upVectorDirection", ["X", "Y", "Z"], 1) - self.pUpVDir = self.addEnumParam("upVectorDirection", ["X", "Y", "Z"], 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -106,23 +70,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -130,7 +95,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -140,23 +105,24 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.upVectorDirection_comboBox.setCurrentIndex(self.root.attr("upVectorDirection").get()) + # populate component settings + self.settingsTab.upVectorDirection_comboBox.setCurrentIndex( + self.root.attr("upVectorDirection").get()) ikRefArrayItems = self.root.attr("ikrefarray").get().split(",") for item in ikRefArrayItems: self.settingsTab.ikRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -167,10 +133,22 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.upVectorDirection_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.settingsTab.upVectorDirection_comboBox, "upVectorDirection")) + cBox = self.settingsTab.upVectorDirection_comboBox + cBox.currentIndexChanged.connect( + partial(self.updateComboBox, + self.settingsTab.upVectorDirection_comboBox, + "upVectorDirection")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) self.settingsTab.ikRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -181,6 +159,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/foot_bk_01/__init__.py b/scripts/mgear/maya/shifter/component/foot_bk_01/__init__.py index f6b3a0f..70790fa 100644 --- a/scripts/mgear/maya/shifter/component/foot_bk_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/foot_bk_01/__init__.py @@ -1,53 +1,22 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya +"""Component Foot Banking 01 module""" + import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop +from mgear.maya import node, applyop, vector +from mgear.maya import attribute, transform, primitive -############################################# -# COMPONENT -############################################# -class Component(MainComponent): +class Component(component.Main): + """Shifter component Class""" + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" self.div_count = len(self.guide.apos) - 5 @@ -58,35 +27,83 @@ def addObjects(self): # Heel --------------------------------------------- # bank pivot - t = tra.getTransformLookingAt(self.guide.pos["heel"], self.guide.apos[-4], self.normal, "xz", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["inpivot"]) - self.in_npo = pri.addTransform(self.root, self.getName("in_npo"), t) - self.in_piv = pri.addTransform(self.in_npo, self.getName("in_piv"), t) - t = tra.setMatrixPosition(t, self.guide.pos["outpivot"]) - self.out_piv = pri.addTransform(self.in_piv, self.getName("out_piv"), t) + t = transform.getTransformLookingAt(self.guide.pos["heel"], + self.guide.apos[-4], + self.normal, + "xz", + self.negate) - # heel - t = tra.getTransformLookingAt(self.guide.pos["heel"], self.guide.apos[-4], self.normal, "xz", self.negate) + t = transform.setMatrixPosition(t, self.guide.pos["inpivot"]) - self.heel_loc = pri.addTransform(self.out_piv, self.getName("heel_loc"), t) - att.setRotOrder(self.heel_loc, "YZX") - self.heel_ctl = self.addCtl(self.heel_loc, "heel_ctl", t, self.color_ik, "sphere", w=self.size*.1, tp=self.parentCtlTag) - att.setKeyableAttributes(self.heel_ctl, self.r_params) + self.in_npo = primitive.addTransform( + self.root, self.getName("in_npo"), t) + + self.in_piv = primitive.addTransform( + self.in_npo, self.getName("in_piv"), t) + + t = transform.setMatrixPosition(t, self.guide.pos["outpivot"]) + + self.out_piv = primitive.addTransform( + self.in_piv, self.getName("out_piv"), t) + + # heel + t = transform.getTransformLookingAt(self.guide.pos["heel"], + self.guide.apos[-4], + self.normal, + "xz", + self.negate) + + self.heel_loc = primitive.addTransform( + self.out_piv, self.getName("heel_loc"), t) + + attribute.setRotOrder(self.heel_loc, "YZX") + self.heel_ctl = self.addCtl(self.heel_loc, + "heel_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .1, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.heel_ctl, self.r_params) # Tip ---------------------------------------------- - v = dt.Vector(self.guide.apos[-5].x,self.guide.apos[-1].y,self.guide.apos[-5].z) - t = tra.setMatrixPosition(t, v) - self.tip_ctl = self.addCtl(self.heel_ctl, "tip_ctl", t, self.color_ik, "circle", w=self.size, tp=self.heel_ctl) - att.setKeyableAttributes(self.tip_ctl, self.r_params) + v = datatypes.Vector(self.guide.apos[-5].x, + self.guide.apos[-1].y, + self.guide.apos[-5].z) + t = transform.setMatrixPosition(t, v) + self.tip_ctl = self.addCtl(self.heel_ctl, + "tip_ctl", + t, + self.color_ik, + "circle", + w=self.size, + tp=self.heel_ctl) + attribute.setKeyableAttributes(self.tip_ctl, self.r_params) # Roll --------------------------------------------- if self.settings["useRollCtl"]: - t = tra.getTransformLookingAt(self.guide.pos["heel"], self.guide.apos[-4], self.normal, "xz", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["root"]) - - self.roll_np = pri.addTransform(self.root, self.getName("roll_npo"), t) - self.roll_ctl = self.addCtl(self.roll_np, "roll_ctl", t, self.color_ik, "cylinder", w=self.size*.5, h=self.size*.5, ro=dt.Vector(3.1415*.5,0,0), tp=self.tip_ctl) - att.setKeyableAttributes(self.roll_ctl, ["rx", "rz"]) + t = transform.getTransformLookingAt(self.guide.pos["heel"], + self.guide.apos[-4], + self.normal, + "xz", + self.negate) + t = transform.setMatrixPosition(t, self.guide.pos["root"]) + + self.roll_np = primitive.addTransform( + self.root, self.getName("roll_npo"), t) + + self.roll_ctl = self.addCtl(self.roll_np, + "roll_ctl", + t, + self.color_ik, + "cylinder", + w=self.size * .5, + h=self.size * .5, + ro=datatypes.Vector(3.1415 * .5, 0, 0), + tp=self.tip_ctl) + + attribute.setKeyableAttributes(self.roll_ctl, ["rx", "rz"]) # Backward Controlers ------------------------------ bk_pos = self.guide.apos[1:-3] @@ -98,15 +115,23 @@ def addObjects(self): for i, pos in enumerate(bk_pos): if i == 0: - t = tra.getTransform(self.heel_ctl) - t = tra.setMatrixPosition(t, pos) + t = transform.getTransform(self.heel_ctl) + t = transform.setMatrixPosition(t, pos) else: - dir = bk_pos[i-1] - t = tra.getTransformLookingAt(pos, dir, self.normal, "xz", self.negate) - - bk_loc = pri.addTransform(parent, self.getName("bk%s_loc"%i), t) - bk_ctl = self.addCtl(bk_loc, "bk%s_ctl"%i, t, self.color_ik, "sphere", w=self.size*.15, tp=self.previousTag) - att.setKeyableAttributes(bk_ctl, self.r_params) + dir = bk_pos[i - 1] + t = transform.getTransformLookingAt( + pos, dir, self.normal, "xz", self.negate) + + bk_loc = primitive.addTransform( + parent, self.getName("bk%s_loc" % i), t) + bk_ctl = self.addCtl(bk_loc, + "bk%s_ctl" % i, + t, + self.color_ik, + "sphere", + w=self.size * .15, + tp=self.previousTag) + attribute.setKeyableAttributes(bk_ctl, self.r_params) self.previousTag = bk_ctl self.bk_loc.append(bk_loc) @@ -114,8 +139,13 @@ def addObjects(self): parent = bk_ctl # FK Reference ------------------------------------ - self.fk_ref = pri.addTransformFromPos(self.bk_ctl[-1], self.getName("fk_ref"), self.guide.apos[0]) - self.fk_npo = pri.addTransform(self.fk_ref, self.getName("fk0_npo"), tra.getTransform(self.bk_ctl[-1])) + self.fk_ref = primitive.addTransformFromPos(self.bk_ctl[-1], + self.getName("fk_ref"), + self.guide.apos[0]) + self.fk_npo = primitive.addTransform( + self.fk_ref, + self.getName("fk0_npo"), + transform.getTransform(self.bk_ctl[-1])) # Forward Controlers ------------------------------ self.fk_ctl = [] @@ -123,34 +153,67 @@ def addObjects(self): parent = self.fk_npo self.previousTag = self.tip_ctl for i, bk_ctl in enumerate(reversed(self.bk_ctl[1:])): - t = tra.getTransform(bk_ctl) - dist = vec.getDistance(self.guide.apos[i+1], self.guide.apos[i+2]) + t = transform.getTransform(bk_ctl) + dist = vector.getDistance(self.guide.apos[i + 1], + self.guide.apos[i + 2]) + + fk_loc = primitive.addTransform( + parent, self.getName("fk%s_loc" % i), t) + + po_vec = datatypes.Vector(dist * .5 * self.n_factor, 0, 0) + fk_ctl = self.addCtl(fk_loc, + "fk%s_ctl" % i, + t, + self.color_fk, + "cube", + w=dist, + h=self.size * .5, + d=self.size * .5, + po=po_vec, + tp=self.previousTag) - fk_loc = pri.addTransform(parent, self.getName("fk%s_loc"%i), t) - fk_ctl = self.addCtl(fk_loc, "fk%s_ctl"%i, t, self.color_fk, "cube", w=dist, h=self.size*.5, d=self.size*.5, po=dt.Vector(dist*.5*self.n_factor,0,0), tp=self.previousTag) self.previousTag = fk_ctl - att.setKeyableAttributes(fk_ctl) + attribute.setKeyableAttributes(fk_ctl) self.jnt_pos.append([fk_ctl, i]) parent = fk_ctl self.fk_ctl.append(fk_ctl) self.fk_loc.append(fk_loc) + # ===================================================== + # ATTRIBUTES + # ===================================================== def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- # Roll Angles if not self.settings["useRollCtl"]: - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - self.bank_att = self.addAnimParam("bank", "Bank", "double", 0, -180, 180) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + self.bank_att = self.addAnimParam( + "bank", "Bank", "double", 0, -180, 180) - self.angles_att = [ self.addAnimParam("angle_%s"%i, "Angle %s"%i, "double", -20) for i in range(self.div_count) ] + self.angles_att = [self.addAnimParam("angle_%s" % i, + "Angle %s" % i, + "double", -20) + for i in range(self.div_count)] # Setup ------------------------------------------ - self.blend_att = self.addSetupParam("blend", "Fk/Ik Blend", "double", 1, 0, 1) + self.blend_att = self.addSetupParam( + "blend", "Fk/Ik Blend", "double", 1, 0, 1) + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Visibilities ------------------------------------- # ik @@ -167,77 +230,99 @@ def addOperators(self): pm.connectAttr(self.blend_att, shp.attr("visibility")) # Roll / Bank -------------------------------------- - if self.settings["useRollCtl"]: # Using the controler + if self.settings["useRollCtl"]: # Using the controler self.roll_att = self.roll_ctl.attr("rz") self.bank_att = self.roll_ctl.attr("rx") - clamp_node = nod.createClampNode([self.roll_att, self.bank_att, self.bank_att], [0, -180, 0], [180,0,180]) - inAdd_nod = nod.createAddNode(clamp_node+".outputB", pm.getAttr(self.in_piv.attr("rx")) * self.n_factor) + clamp_node = node.createClampNode( + [self.roll_att, self.bank_att, self.bank_att], + [0, -180, 0], + [180, 0, 180]) + + inAdd_nod = node.createAddNode( + clamp_node + ".outputB", + pm.getAttr(self.in_piv.attr("rx")) * self.n_factor) - pm.connectAttr(clamp_node+".outputR", self.heel_loc.attr("rz")) - pm.connectAttr(clamp_node+".outputG", self.out_piv.attr("rx")) - pm.connectAttr(inAdd_nod+".output", self.in_piv.attr("rx")) + pm.connectAttr(clamp_node + ".outputR", self.heel_loc.attr("rz")) + pm.connectAttr(clamp_node + ".outputG", self.out_piv.attr("rx")) + pm.connectAttr(inAdd_nod + ".output", self.in_piv.attr("rx")) # Reverse Controler offset ------------------------- - angle_outputs = nod.createAddNodeMulti(self.angles_att) + angle_outputs = node.createAddNodeMulti(self.angles_att) for i, bk_loc in enumerate(reversed(self.bk_loc)): - if i == 0 : # First + if i == 0: # First input = self.roll_att min_input = self.angles_att[i] - elif i == len(self.angles_att): # Last - sub_nod = nod.createSubNode(self.roll_att, angle_outputs[i-1]) - input = sub_nod+".output" + elif i == len(self.angles_att): # Last + sub_nod = node.createSubNode(self.roll_att, + angle_outputs[i - 1]) + input = sub_nod + ".output" min_input = -360 - else: # Others - sub_nod = nod.createSubNode(self.roll_att, angle_outputs[i-1]) - input = sub_nod+".output" + else: # Others + sub_nod = node.createSubNode(self.roll_att, + angle_outputs[i - 1]) + input = sub_nod + ".output" min_input = self.angles_att[i] - clamp_node = nod.createClampNode(input, min_input, 0) - add_node = nod.createAddNode(clamp_node+".outputR", bk_loc.getAttr("rz")) - pm.connectAttr(add_node+".output", bk_loc.attr("rz")) + clamp_node = node.createClampNode(input, min_input, 0) + + add_node = node.createAddNode(clamp_node + ".outputR", + bk_loc.getAttr("rz")) + + pm.connectAttr(add_node + ".output", bk_loc.attr("rz")) # Reverse compensation ----------------------------- for i, fk_loc in enumerate(self.fk_loc): - bk_ctl = self.bk_ctl[-i-1] - bk_loc = self.bk_loc[-i-1] + bk_ctl = self.bk_ctl[-i - 1] + bk_loc = self.bk_loc[-i - 1] fk_ctl = self.fk_ctl[i] # Inverse Rotorder - node = aop.gear_inverseRotorder_op(bk_ctl, fk_ctl) - pm.connectAttr(node+".output", bk_loc.attr("ro")) + o_node = applyop.gear_inverseRotorder_op(bk_ctl, fk_ctl) + pm.connectAttr(o_node + ".output", bk_loc.attr("ro")) pm.connectAttr(fk_ctl.attr("ro"), fk_loc.attr("ro")) - att.lockAttribute(bk_ctl, "ro") - + attribute.lockAttribute(bk_ctl, "ro") # Compensate the backward rotation # ik - addx_node = nod.createAddNode(bk_ctl.attr("rx"), bk_loc.attr("rx")) - addy_node = nod.createAddNode(bk_ctl.attr("ry"), bk_loc.attr("ry")) - addz_node = nod.createAddNode(bk_ctl.attr("rz"), bk_loc.attr("rz")) - addz_node = nod.createAddNode(addz_node+".output", -bk_loc.getAttr("rz") - fk_loc.getAttr("rz")) - - neg_node = nod.createMulNode([addx_node+".output",addy_node+".output",addz_node+".output"], [-1,-1,-1]) - ik_outputs = [neg_node+".outputX", neg_node+".outputY", neg_node+".outputZ"] + addx_node = node.createAddNode( + bk_ctl.attr("rx"), bk_loc.attr("rx")) + addy_node = node.createAddNode( + bk_ctl.attr("ry"), bk_loc.attr("ry")) + addz_node = node.createAddNode( + bk_ctl.attr("rz"), bk_loc.attr("rz")) + addz_node = node.createAddNode( + addz_node + ".output", + -bk_loc.getAttr("rz") - fk_loc.getAttr("rz")) + + neg_node = node.createMulNode([addx_node + ".output", + addy_node + ".output", + addz_node + ".output"], + [-1, -1, -1]) + ik_outputs = [neg_node + ".outputX", + neg_node + ".outputY", + neg_node + ".outputZ"] # fk - fk_outputs = [0,0,fk_loc.getAttr("rz")] + fk_outputs = [0, 0, fk_loc.getAttr("rz")] # blend - blend_node = nod.createBlendNode(ik_outputs, fk_outputs, self.blend_att) - pm.connectAttr(blend_node+".output", fk_loc.attr("rotate")) + blend_node = node.createBlendNode(ik_outputs, + fk_outputs, + self.blend_att) + pm.connectAttr(blend_node + ".output", fk_loc.attr("rotate")) return # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" + self.relatives["root"] = self.fk_ctl[0] self.relatives["heel"] = self.fk_ctl[0] self.relatives["inpivot"] = self.fk_ctl[0] @@ -254,57 +339,63 @@ def setRelation(self): self.jointRelatives["outpivot"] = 0 for i in range(self.div_count): - self.relatives["%s_loc"%i] = self.fk_ctl[i] - self.jointRelatives["%s_loc"%i] = i + self.relatives["%s_loc" % i] = self.fk_ctl[i] + self.jointRelatives["%s_loc" % i] = i if self.div_count > 0: - self.relatives["%s_loc"%self.div_count] = self.fk_ctl[-1] - self.jointRelatives["%s_loc"%self.div_count] = self.div_count-1 + self.relatives["%s_loc" % self.div_count] = self.fk_ctl[-1] + self.jointRelatives["%s_loc" % self.div_count] = self.div_count - 1 - ## Add more connection definition to the set. - # @param self def addConnection(self): + """Add more connection definition to the set""" + self.connections["leg_2jnt_01"] = self.connect_leg_2jnt_01 self.connections["leg_ms_2jnt_01"] = self.connect_leg_ms_2jnt_01 self.connections["leg_3jnt_01"] = self.connect_leg_3jnt_01 - ## leg connection definition. - # @param self def connect_leg_2jnt_01(self): + """Connector for leg 2jnt""" + # If the parent component hasn't been generated we skip the connection if self.parent_comp is None: return - pm.connectAttr(self.parent_comp.blend_att, self.blend_att) pm.parent(self.root, self.parent_comp.ik_ctl) pm.parent(self.parent_comp.ik_ref, self.bk_ctl[-1]) - pm.parentConstraint(self.parent_comp.tws2_rot, self.fk_ref, maintainOffset=True) + pm.parentConstraint( + self.parent_comp.tws2_rot, self.fk_ref, maintainOffset=True) return def connect_leg_ms_2jnt_01(self): + """Connector for leg ms 2jnt""" + # If the parent component hasn't been generated we skip the connection if self.parent_comp is None: return - pm.connectAttr(self.parent_comp.blend_att, self.blend_att) pm.parent(self.root, self.parent_comp.ik_ctl) pm.parent(self.parent_comp.ik_ref, self.bk_ctl[-1]) - pm.parentConstraint(self.parent_comp.tws3_rot, self.fk_ref, maintainOffset=True) - cns = pm.scaleConstraint(self.parent_comp.fk_ref, self.parent_comp.ik_ref, self.fk_ref, wal = True) + pm.parentConstraint(self.parent_comp.tws3_rot, + self.fk_ref, + maintainOffset=True) + cns = pm.scaleConstraint(self.parent_comp.fk_ref, + self.parent_comp.ik_ref, + self.fk_ref, wal=True) bc_node = pm.createNode("blendColors") - pm.connectAttr(bc_node+".outputB",cns+".%sW0"%self.parent_comp.fk_ref) - pm.connectAttr(bc_node+".outputR",cns+".%sW1"%self.parent_comp.ik_ref) - pm.connectAttr(self.parent_comp.blend_att, bc_node+".blender") - + pm.connectAttr(bc_node + ".outputB", + cns + ".%sW0" % self.parent_comp.fk_ref) + pm.connectAttr(bc_node + ".outputR", + cns + ".%sW1" % self.parent_comp.ik_ref) + pm.connectAttr(self.parent_comp.blend_att, bc_node + ".blender") return - ## leg connection definition. - # @param self def connect_leg_3jnt_01(self): + """Connector for leg 3jnt""" + # If the parent component hasn't been generated we skip the connection if self.parent_comp is None: return @@ -313,6 +404,7 @@ def connect_leg_3jnt_01(self): pm.parent(self.root, self.parent_comp.ik_ctl) pm.parent(self.parent_comp.ik_ref, self.bk_ctl[-1]) pm.parent(self.parent_comp.ik2b_ikCtl_ref, self.bk_ctl[-1]) - pm.parentConstraint(self.parent_comp.tws3_rot, self.fk_ref, maintainOffset=True) + pm.parentConstraint( + self.parent_comp.tws3_rot, self.fk_ref, maintainOffset=True) return diff --git a/scripts/mgear/maya/shifter/component/foot_bk_01/guide.py b/scripts/mgear/maya/shifter/component/foot_bk_01/guide.py index d50d588..571d977 100644 --- a/scripts/mgear/maya/shifter/component/foot_bk_01/guide.py +++ b/scripts/mgear/maya/shifter/component/foot_bk_01/guide.py @@ -1,53 +1,25 @@ # MGEAR is under the terms of the MIT License # Copyright (c) 2016 Jeremie Passerin, Miquel Campos +"""Guide Foot banking 01 module""" -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# from functools import partial -# pyMel import pymel.core as pm -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "foot_bk_01" NAME = "foot" DESCRIPTION = "Foot with reversed controllers to control foot roll." @@ -55,7 +27,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -68,17 +43,13 @@ class Guide(ComponentGuide): connectors = ["leg_2jnt_01", "leg_ms_2jnt_01", "leg_3jnt_01"] - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "#_loc", "heel", "outpivot", "inpivot"] self.addMinMax("#_loc", 1, -1) - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() self.locs = self.addLocMulti("#_loc", self.root) @@ -88,23 +59,23 @@ def addObjects(self): self.dispcrv = self.addDispCurve("crv", centers) # Heel and pivots - vTemp = tra.getOffsetPosition( self.root, [0,-1,-1]) + vTemp = transform.getOffsetPosition(self.root, [0, -1, -1]) self.heel = self.addLoc("heel", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [1,-1,-1]) + vTemp = transform.getOffsetPosition(self.root, [1, -1, -1]) self.outpivot = self.addLoc("outpivot", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [-1,-1,-1]) + vTemp = transform.getOffsetPosition(self.root, [-1, -1, -1]) self.inpivot = self.addLoc("inpivot", self.root, vTemp) - self.dispcrv = self.addDispCurve("1", [self.root, self.heel, self.outpivot, self.heel, self.inpivot]) + cnt = [self.root, self.heel, self.outpivot, self.heel, self.inpivot] + self.dispcrv = self.addDispCurve("1", cnt) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pRoll = self.addParam("useRollCtl", "bool", True) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pRoll = self.addParam("useRollCtl", "bool", True) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -112,23 +83,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -136,7 +108,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -146,31 +118,34 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings + # populate component settings self.populateCheck(self.settingsTab.useRollCtl_checkBox, "useRollCtl") - #populate connections in main settings + # populate connections in main settings for cnx in Guide.connectors: self.mainSettingsTab.connector_comboBox.addItem(cnx) - self.connector_items = [ self.mainSettingsTab.connector_comboBox.itemText(i) for i in range( self.mainSettingsTab.connector_comboBox.count())] + cBox = self.mainSettingsTab.connector_comboBox + self.connector_items = [cBox.itemText(i) for i in range(cBox.count())] currentConnector = self.root.attr("connector").get() if currentConnector not in self.connector_items: self.mainSettingsTab.connector_comboBox.addItem(currentConnector) self.connector_items.append(currentConnector) - pm.displayWarning("The current connector: %s, is not a valid connector for this component. Build will Fail!!") + pm.displayWarning("The current connector: %s, is not a valid " + "connector for this component. " + "Build will Fail!!") comboIndex = self.connector_items.index(currentConnector) self.mainSettingsTab.connector_comboBox.setCurrentIndex(comboIndex) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -181,9 +156,14 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.useRollCtl_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.useRollCtl_checkBox, "neutralpose")) - self.mainSettingsTab.connector_comboBox.currentIndexChanged.connect(partial(self.updateConnector, self.mainSettingsTab.connector_comboBox, self.connector_items) ) - + self.settingsTab.useRollCtl_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.useRollCtl_checkBox, + "neutralpose")) + self.mainSettingsTab.connector_comboBox.currentIndexChanged.connect( + partial(self.updateConnector, + self.mainSettingsTab.connector_comboBox, + self.connector_items)) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/guide.py b/scripts/mgear/maya/shifter/component/guide.py index c53f50f..1fe6713 100644 --- a/scripts/mgear/maya/shifter/component/guide.py +++ b/scripts/mgear/maya/shifter/component/guide.py @@ -1,86 +1,49 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - """ Shifter's Component guide class. """ -########################################################## -# GLOBAL -########################################################## from functools import partial +import maya.cmds as cmds # pyMel import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes # mgear import mgear -import mgear.string as string - -import mgear.maya.dag as dag -import mgear.maya.vector as vec -import mgear.maya.transform as tra -import mgear.maya.icon as ico -import mgear.maya.curve as cur -import mgear.maya.applyop as aop -import mgear.maya.attribute as att -import mgear.maya.pyqt as gqt +from mgear import string +from mgear.maya import dag, vector, transform, applyop, attribute, curve, icon -from mgear.maya.shifter.guide import MainGuide -from mgear.maya.shifter.guide import helperSlots -import mgear.maya.shifter.gui as gui +from mgear.maya.shifter import guide, gui import mainSettingsUI as msui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() - - +from mgear.vendor.Qt import QtWidgets, QtCore ########################################################## # COMPONENT GUIDE ########################################################## -class ComponentGuide(MainGuide): - """ - Main class for component guide creation. + +class ComponentGuide(guide.Main): + """Main class for component guide creation. + This class handles all the parameters and objectDefs creation. - It also know how to parse its own hierachy of object to retrieve position and transform. + It also know how to parse its own hierachy of object to retrieve position + and transform. Finally it also now how to export itself as xml_node. Attributes: - paramNames (list): List of parameter name cause it's actually important to keep them sorted. + paramNames (list): List of parameter name cause it's actually important + to keep them sorted. paramDefs (dic): Dictionary of parameter definition. values (dic): Dictionary of options values. - valid (bool): We will check a few things and make sure the guide we are loading is up to date. - If parameters or object are missing a warning message will be display and - the guide should be updated. + valid (bool): We will check a few things and make sure the guide we are + loading is up to date. + If parameters or object are missing a warning message will be + display and the guide should be updated. tra (dic): dictionary of global transform atra (list): list of global transform pos (dic): dictionary of global postion @@ -88,36 +51,42 @@ class ComponentGuide(MainGuide): prim (dic): dictionary of primitive blades (dic): dictionary of blades size (float): Size reference of the component. Default = .1 - save_transform (list): Transform of object name in this list will be saved - save_primitive (list): Primitive of object name in this list will be saved + save_transform (list): Transform of object name in this list will + be saved + save_primitive (list): Primitive of object name in this list will + be saved save_blade (list): Normal and BiNormal of object will be saved minmax (dic): Define the min and max object for multi location objects """ - compType = "component" ## Component type - compName = "component" ## Component default name + compType = "component" # Component type + compName = "component" # Component default name compSide = "C" - compIndex = 0 ## Component default index + compIndex = 0 # Component default index - description = "" ## Description of the component + description = "" # Description of the component connectors = [] compatible = [] ctl_grp = "" # ==================================================== - ## Init method. - # @param self - # @param ref an xml definition or a SI3DObject + # Init method. def __init__(self): # Parameters names, definition and values. - self.paramNames = [] ## List of parameter name cause it's actually important to keep them sorted. - self.paramDefs = {} ## Dictionary of parameter definition. - self.values = {} ## Dictionary of options values. - - # We will check a few things and make sure the guide we are loading is up to date. - # If parameters or object are missing a warning message will be display and the guide should be updated. + # List of parameter name cause it's actually important to keep + # them sorted. + self.paramNames = [] + # Dictionary of parameter definition. + self.paramDefs = {} + # Dictionary of options values. + self.values = {} + + # We will check a few things and make sure the guide we are loading is + # up to date. + # If parameters or object are missing a warning message will be display + # and the guide should be updated. self.valid = True self.root = None @@ -128,31 +97,33 @@ def __init__(self): self.parentLocalName = None # List and dictionary used during the creation of the component - self.tra = {} ## dictionary of global transform - self.atra = [] ## list of global transform - self.pos = {} ## dictionary of global postion - self.apos = [] ## list of global position - self.prim = {} ## dictionary of primitive + self.tra = {} # dictionary of global transform + self.atra = [] # list of global transform + self.pos = {} # dictionary of global postion + self.apos = [] # list of global position + self.prim = {} # dictionary of primitive self.blades = {} self.size = .1 # self.root_size = None - # List and dictionary used to define data of the guide that should be saved - # self.pick_transform = [] ## User will have to pick the position of this object name - self.save_transform = [] ## Transform of object name in this list will be saved - self.save_primitive = [] ## Primitive of object name in this list will be saved - self.save_blade = [] ## Normal and BiNormal of object will be saved - self.minmax = {} ## Define the min and max object for multi location objects + # List and dictionary used to define data of the guide that + # should be saved + # Transform of object name in this list will be saved + self.save_transform = [] + # Primitive of object name in this list will be saved + self.save_primitive = [] + # Normal and BiNormal of object will be saved + self.save_blade = [] + # Define the min and max object for multi location objects + self.minmax = {} # Init the guide self.postInit() self.initialHierarchy() self.addParameters() - def postInit(self): - """ - Define the objects name and categories. + """Define the objects name and categories. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -165,21 +136,22 @@ def postInit(self): # OBJECTS AND PARAMETERS def initialHierarchy(self): - """ - Initial hierachy. It's no more than the basic set of parameters and layout + """Initial hierachy. + + It's no more than the basic set of parameters and layout needed for the setting property. """ # Parameters -------------------------------------- # This are the necessary parameter for component guide definition - self.pCompType = self.addParam("comp_type", "string", self.compType) - self.pCompName = self.addParam("comp_name", "string", self.compName) - self.pCompSide = self.addParam("comp_side", "string", self.compSide) - self.pCompIndex = self.addParam("comp_index", "long", self.compIndex, 0) - self.pConnector = self.addParam("connector", "string", "standard") - self.pUIHost = self.addParam("ui_host", "string", "") - self.pCtlGroup = self.addParam("ctlGrp", "string", "") - + self.pCompType = self.addParam("comp_type", "string", self.compType) + self.pCompName = self.addParam("comp_name", "string", self.compName) + self.pCompSide = self.addParam("comp_side", "string", self.compSide) + self.pCompIndex = self.addParam( + "comp_index", "long", self.compIndex, 0) + self.pConnector = self.addParam("connector", "string", "standard") + self.pUIHost = self.addParam("ui_host", "string", "") + self.pCtlGroup = self.addParam("ctlGrp", "string", "") # Items ------------------------------------------- typeItems = [self.compType, self.compType] @@ -192,10 +164,8 @@ def initialHierarchy(self): connectorItems.append(item) connectorItems.append(item) - def addObjects(self): - """ - Create the objects of the guide. + """Create the objects of the guide. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -203,10 +173,8 @@ def addObjects(self): """ self.root = self.addRoot() - def addParameters(self): - """ - Create the parameter definitions of the guide. + """Create the parameter definitions of the guide. Note: REIMPLEMENT. This method should be reimplemented in each component. @@ -217,8 +185,7 @@ def addParameters(self): # ==================================================== # SET / GET def setFromHierarchy(self, root): - """ - Set the component guide from given hierarchy. + """Set the component guide from given hierarchy. Args: root (dagNode): The root of the hierarchy to parse. @@ -230,7 +197,8 @@ def setFromHierarchy(self, root): # --------------------------------------------------- # First check and set the settings if not self.root.hasAttr("comp_type"): - mgear.log("%s is not a proper guide."%self.root.longName(), mgear.sev_error) + mgear.log("%s is not a proper guide." % + self.root.longName(), mgear.sev_error) self.valid = False return @@ -241,7 +209,8 @@ def setFromHierarchy(self, root): for name in self.save_transform: if "#" in name: i = 0 - while not self.minmax[name].max > 0 or i < self.minmax[name].max: + while not self.minmax[name].max > 0 or i < \ + self.minmax[name].max: localName = string.replaceSharpWithPadding(name, i) node = dag.findChild(self.model, self.getName(localName)) @@ -256,7 +225,9 @@ def setFromHierarchy(self, root): i += 1 if i < self.minmax[name].min: - mgear.log("Minimum of object requiered for "+name+" hasn't been reached!!", mgear.sev_warning) + mgear.log("Minimum of object requiered for " + + name + " hasn't been reached!!", + mgear.sev_warning) self.valid = False continue @@ -282,17 +253,15 @@ def setFromHierarchy(self, root): self.valid = False continue - self.blades[name] = vec.Blade(node.getMatrix(worldSpace=True)) + self.blades[name] = vector.Blade(node.getMatrix(worldSpace=True)) self.size = self.getSize() - # ==================================================== # DRAW def draw(self, parent): - """ - Draw the guide in the scene. + """Draw the guide in the scene. Args: parent (dagNode): the parent of the component. @@ -303,16 +272,12 @@ def draw(self, parent): self.addObjects() pm.select(self.root) - - - #TODO: add function to scale the points of the icons + # TODO: add function to scale the points of the icons # Set the size of the root # self.root.size = self.root_size - def drawFromUI(self, parent): - """ - Draw the guide in the scene from the UI command. + """Draw the guide in the scene from the UI command. Args: parent (dagNode): the parent of the component. @@ -323,19 +288,15 @@ def drawFromUI(self, parent): return False self.draw(parent) - tra.resetTransform(self.root, r=False, s=False) + transform.resetTransform(self.root, r=False, s=False) gui.Guide_UI.inspectSettings() return True - - def modalPositions(self): - """ - Launch a modal dialog to set position of the guide. + """Launch a modal dialog to set position of the guide.""" - """ self.jNumberVal = False self.dirAxisVal = False self.jSpacVal = False @@ -348,37 +309,38 @@ def _addLocMultiOptions(): pm.setParent(q=True) - pm.columnLayout( adjustableColumn=True, cal="right" ) - pm.text(l='', al="center") + pm.columnLayout(adjustableColumn=True, cal="right") + pm.text(label='', al="center") fl = pm.formLayout() - jNumber = pm.intFieldGrp(v1=3, l="Joint Number") - pm.setParent( '..' ) - pm.formLayout(fl, e=True, af=(jNumber, "left",-30)) + jNumber = pm.intFieldGrp(v1=3, label="Joint Number") + pm.setParent('..') + pm.formLayout(fl, e=True, af=(jNumber, "left", -30)) dirSet = ["X", "-X", "Y", "-Y", "Z", "-Z"] fl = pm.formLayout() - dirAxis = pm.optionMenu(l="Direction") + dirAxis = pm.optionMenu(label="Direction") dirAxis.addMenuItems(dirSet) - pm.setParent( '..' ) + pm.setParent('..') pm.formLayout(fl, e=True, af=(dirAxis, "left", 70)) fl = pm.formLayout() - jSpac = pm.floatFieldGrp(v1=1.0, l="spacing") - pm.setParent( '..' ) - pm.formLayout(fl, e=True, af=(jSpac, "left",-30)) + jSpac = pm.floatFieldGrp(v1=1.0, label="spacing") + pm.setParent('..') + pm.formLayout(fl, e=True, af=(jSpac, "left", -30)) - pm.text(l='', al="center") + pm.text(label='', al="center") - pm.button(l='Continue', c=partial(_retriveOptions, jNumber, dirAxis, jSpac)) - pm.setParent( '..' ) + pm.button(label='Continue', c=partial( + _retriveOptions, jNumber, dirAxis, jSpac)) + pm.setParent('..') def _retriveOptions(jNumber, dirAxis, jSpac, *args): self.jNumberVal = jNumber.getValue()[0] self.dirAxisVal = dirAxis.getValue() self.jSpacVal = jSpac.getValue()[0] - pm.layoutDialog( dismiss="Continue" ) + pm.layoutDialog(dismiss="Continue") def _show(): @@ -388,38 +350,37 @@ def _show(): if self.jNumberVal: if self.dirAxisVal == "X": - offVec = dt.Vector(self.jSpacVal, 0, 0) + offVec = datatypes.Vector(self.jSpacVal, 0, 0) elif self.dirAxisVal == "-X": - offVec = dt.Vector(self.jSpacVal*-1, 0, 0) + offVec = datatypes.Vector(self.jSpacVal * -1, 0, 0) elif self.dirAxisVal == "Y": - offVec = dt.Vector(0, self.jSpacVal, 0) + offVec = datatypes.Vector(0, self.jSpacVal, 0) elif self.dirAxisVal == "-Y": - offVec = dt.Vector(0, self.jSpacVal*-1, 0) + offVec = datatypes.Vector(0, self.jSpacVal * -1, 0) elif self.dirAxisVal == "Z": - offVec = dt.Vector(0, 0, self.jSpacVal) + offVec = datatypes.Vector(0, 0, self.jSpacVal) elif self.dirAxisVal == "-Z": - offVec = dt.Vector(0, 0, self.jSpacVal*-1) + offVec = datatypes.Vector(0, 0, self.jSpacVal * -1) - newPosition = dt.Vector(0, 0, 0) + newPosition = datatypes.Vector(0, 0, 0) for i in range(self.jNumberVal): newPosition = offVec + newPosition localName = string.replaceSharpWithPadding(name, i) - self.tra[localName] = tra.getTransformFromPos(newPosition) + self.tra[localName] = transform.getTransformFromPos( + newPosition) return True # ==================================================== # UPDATE - def setIndex(self, model): - """ - Update the component index to get the next valid one. + """Update the component index to get the next valid one. Args: model (dagNode): The parent model of the guide. - """ - self.model = model.getParent(generations=-1) + """ + self.model = model.getParent(generations=-1) # Find next index available while True: @@ -428,34 +389,33 @@ def setIndex(self, model): break self.setParamDefValue("comp_index", self.values["comp_index"] + 1) - def symmetrize(self): - """ - Inverse the transform of each element of the guide. - """ + """Inverse the transform of each element of the guide.""" if self.values["comp_side"] not in ["R", "L"]: mgear.log("Can't symmetrize central component", mgear.sev_error) return False for name, paramDef in self.paramDefs.items(): if paramDef.valueType == "string": - self.setParamDefValue(name, mgear.string.convertRLName(self.values[name])) + self.setParamDefValue( + name, mgear.string.convertRLName(self.values[name])) for name, t in self.tra.items(): - self.tra[name] = tra.getSymmetricalTransform(t) + self.tra[name] = transform.getSymmetricalTransform(t) for name, blade in self.blades.items(): - self.blades[name] = vec.Blade(tra.getSymmetricalTransform(blade.transform)) + self.blades[name] = vector.Blade( + transform.getSymmetricalTransform(blade.transform)) return True def rename(self, root, newName, newSide, newIndex): - """ - Rename the component. + """Rename the component. Args: root (dagNode): The parent of the component newName (str): The new name. newSide (str): Side of the component. newIndex (int): index of the comonent. + """ self.parent = root @@ -469,59 +429,64 @@ def rename(self, root, newName, newSide, newIndex): self.parent.attr("comp_name").set(newName) self.parent.attr("comp_side").set(newSide) # set new index and update to the next valid - self.setParamDefValue("comp_name",newName) - self.setParamDefValue("comp_side",newSide) + self.setParamDefValue("comp_name", newName) + self.setParamDefValue("comp_side", newSide) - self.setParamDefValue("comp_index",newIndex) + self.setParamDefValue("comp_index", newIndex) self.setIndex(self.parent) - self.parent.attr("comp_index").set( self.values["comp_index"]) + self.parent.attr("comp_index").set(self.values["comp_index"]) - - objList = dag.findComponentChildren(self.parent, oldName, oldSideIndex) - newSideIndex = newSide + str(self.values["comp_index"]) + # objList = dag.findComponentChildren(self.parent, + # oldName, oldSideIndex) + # NOTE: Experimenta using findComponentChildren2 + objList = dag.findComponentChildren2( + self.parent, oldName, oldSideIndex) + newSideIndex = newSide + str(self.values["comp_index"]) objList.append(self.parent) for obj in objList: - suffix = obj.name().split("_")[-1] + suffix = obj.name().split("_")[-1] if len(obj.name().split("_")) == 3: new_name = "_".join([newName, newSideIndex, suffix]) else: - subIndex = obj.name().split("_")[-2] + subIndex = obj.name().split("_")[-2] new_name = "_".join([newName, newSideIndex, subIndex, suffix]) pm.rename(obj, new_name) - # ==================================================== # ELEMENTS - def addRoot(self): - """ - Add a root object to the guide. + """Add a root object to the guide. + This method can initialize the object or draw it. - Root object is a simple transform with a specific display and a setting property. + Root object is a simple transform with a specific display and a setting + property. Returns: dagNode: The root + """ if "root" not in self.tra.keys(): - self.tra["root"] = tra.getTransformFromPos(dt.Vector(0,0,0)) + self.tra["root"] = transform.getTransformFromPos( + datatypes.Vector(0, 0, 0)) - self.root = ico.guideRootIcon(self.parent, self.getName("root"), color=13, m=self.tra["root"] ) + self.root = icon.guideRootIcon(self.parent, self.getName( + "root"), color=13, m=self.tra["root"]) - #Add Parameters from parameter definition list. + # Add Parameters from parameter definition list. for scriptName in self.paramNames: paramDef = self.paramDefs[scriptName] paramDef.create(self.root) return self.root - def addLoc(self, name, parent, position=None): - """ - Add a loc object to the guide. + """Add a loc object to the guide. + This mehod can initialize the object or draw it. - Loc object is a simple null to define a position or a tranformation in the guide. + Loc object is a simple null to define a position or a tranformation in + the guide. Args: name (str): Local name of the element. @@ -533,35 +498,41 @@ def addLoc(self, name, parent, position=None): """ if name not in self.tra.keys(): - self.tra[name] = tra.getTransformFromPos(position) + self.tra[name] = transform.getTransformFromPos(position) if name in self.prim.keys(): - # this functionality is not implemented. The actual design from softimage Gear should be review to fit in Maya. - loc = self.prim[name].create(parent, self.getName(name), self.tra[name], color=17) + # this functionality is not implemented. The actual design from + # softimage Gear should be review to fit in Maya. + loc = self.prim[name].create( + parent, self.getName(name), self.tra[name], color=17) else: - loc = ico.guideLocatorIcon(parent, self.getName(name), color=17, m=self.tra[name]) + loc = icon.guideLocatorIcon(parent, self.getName( + name), color=17, m=self.tra[name]) return loc + def addLocMulti(self, name, parent, updateParent=True): + """Add multiple loc objects to the guide. - def addLocMulti(self, name, parent, updateParent = True): - """ - Add multiple loc objects to the guide. This method can initialize the object or draw it. - Loc object is a simple null to define a position or a tranformation in the guide. + Loc object is a simple null to define a position or a tranformation in + the guide. Args: name (str): Local name of the element. parent (dagNode): The parent of the element. minimum (int): The minimum number of loc. maximum (int): The maximum number of loc. - updateParent (bool): if True update the parent reference. False, keep the same for all loc. + updateParent (bool): if True update the parent reference. False, + keep the same for all loc. Returns: list of dagNode: The created loc objects in a list. """ if "#" not in name: - mgear.log("You need to put a '#' in the name of multiple location.", mgear.sev_error) + mgear.log( + "You need to put a '#' in the name of multiple location.", + mgear.sev_error) return False locs = [] @@ -571,7 +542,8 @@ def addLocMulti(self, name, parent, updateParent = True): if localName not in self.tra.keys(): break - loc = ico.guideLocatorIcon(parent, self.getName(localName), color=17, m=self.tra[localName]) + loc = icon.guideLocatorIcon(parent, self.getName( + localName), color=17, m=self.tra[localName]) locs.append(loc) if updateParent: parent = loc @@ -579,10 +551,9 @@ def addLocMulti(self, name, parent, updateParent = True): i += 1 return locs - def addBlade(self, name, parentPos, parentDir): - """ - Add a blade object to the guide. + """Add a blade object to the guide. + This mehod can initialize the object or draw it. Blade object is a 3points curve to define a plan in the guide. @@ -596,27 +567,32 @@ def addBlade(self, name, parentPos, parentDir): """ if name not in self.blades.keys(): - self.blades[name] = vec.Blade(tra.getTransformFromPos(dt.Vector(0,0,0))) + self.blades[name] = vector.Blade( + transform.getTransformFromPos(datatypes.Vector(0, 0, 0))) offset = False else: offset = True dist = .6 * self.root.attr("scaleX").get() - blade = ico.guideBladeIcon(parent=parentPos, name=self.getName(name),lenX=dist, color=13, m=self.blades[name].transform ) - aim_cns = aop.aimCns(blade, parentDir, axis="xy", wupType=2, wupVector=[0,1,0], wupObject=self.root, maintainOffset=offset) + blade = icon.guideBladeIcon(parent=parentPos, name=self.getName( + name), lenX=dist, color=13, m=self.blades[name].transform) + aim_cns = applyop.aimCns(blade, parentDir, axis="xy", wupType=2, + wupVector=[0, 1, 0], wupObject=self.root, + maintainOffset=offset) pm.pointConstraint(parentPos, blade) - offsetAttr = att.addAttribute(blade, "bladeRollOffset", "float", aim_cns.attr("offsetX").get()) + offsetAttr = attribute.addAttribute( + blade, "bladeRollOffset", "float", aim_cns.attr("offsetX").get()) pm.connectAttr(offsetAttr, aim_cns.attr("offsetX")) - att.lockAttribute(blade) + attribute.lockAttribute(blade) return blade - def addDispCurve(self, name, centers=[], degree=1): - """ - Add a display curve object to the guide. - Display curve object is a simple curve to show the connection between different guide element.. + """Add a display curve object to the guide. + + Display curve object is a simple curve to show the connection between + different guide element.. Args: name (str): Local name of the element. @@ -627,7 +603,8 @@ def addDispCurve(self, name, centers=[], degree=1): dagNode: The newly creted curve. """ - crv = cur.addCnsCurve(centers[0], self.getName(name), centers, degree) + crv = curve.addCnsCurve( + centers[0], self.getName(name), centers, degree) crv.attr("overrideEnabled").set(1) crv.attr("overrideDisplayType").set(1) @@ -635,14 +612,8 @@ def addDispCurve(self, name, centers=[], degree=1): # ==================================================== # MISC - ## - # @param self - # @paran model - # @return Dictionary of X3DObject - def getObjects(self, model, includeShapes=True): - """ - Get the objects of the component. + """Get the objects of the component. Args: model(dagNode): The root of the component. @@ -658,41 +629,88 @@ def getObjects(self, model, includeShapes=True): else: children = pm.listRelatives(model, ad=True, typ='transform') pm.select(children) - for child in pm.ls(self.fullName+"_*", selection=True): - objects[child[child.index(self.fullName+"_")+len(self.fullName+"_"):]] = child + for child in pm.ls(self.fullName + "_*", selection=True): + objects[child[child.index( + self.fullName + "_") + len(self.fullName + "_"):]] = child return objects + def getObjects2(self, model, includeShapes=True): + """Get the objects of the component. + Args: + model(dagNode): The root of the component. + includeShapes (boo): If True, will include the shapes. + + Returns: + list of dagNode: The list of the objects. - def addMinMax(self, name, minimum=1, maximum=-1): """ - Add minimun and maximum number of locator when we use the modal menu. + objects = {} + if includeShapes: + children = [pm.PyNode(x) for x in cmds.listRelatives( + model.longName(), ad=True, fullPath=True)] + else: + children = [pm.PyNode(x) for x in cmds.listRelatives( + model.longName(), ad=True, typ='transform', fullPath=True)] + for child in children: + cName = child.longName() + if cName.startswith(self.fullName): + objects[cName.split("_")[-1]] = child + + return objects + + def getObjects3(self, model): + """ + NOTE: Experimental function + Get the objects of the component. + This version only get the transforms by Name using Maya Cmds + + Args: + model(dagNode): The root of the component. + + Returns: + list of dagNode: The list of the objects. + + """ + objects = {} + + for child in cmds.ls(self.fullName + "_*", type="transform"): + if pm.PyNode(child).getParent(-1) == model: + objects[child[child.index( + self.fullName + "_") + len(self.fullName + "_"):]] = child + + return objects + + def addMinMax(self, name, minimum=1, maximum=-1): + """Add minimun and maximum number of locator + + When we use the modal menu. + """ if "#" not in name: - mgear.log("Invalid definition for min/max. You should have a '#' in the name", mgear.sev_error) + mgear.log( + "Invalid definition for min/max. You should have a '#' in " + "the name", mgear.sev_error) self.minmax[name] = MinMax(minimum, maximum) - def getSize(self): - """ - Get the size of the component. + """Get the size of the component. Returns: float: the size + """ size = .01 for pos in self.apos: - d = vec.getDistance(self.pos["root"], pos) + d = vector.getDistance(self.pos["root"], pos) size = max(size, d) size = max(size, .01) return size - def getName(self, name): - """ - Return the fullname of given element of the component. + """Return the fullname of given element of the component. Args: name (str): Localname of the element. @@ -702,21 +720,18 @@ def getName(self, name): """ return self.fullName + "_" + name - def getFullName(self): - """ - Return the fullname of the component. + """Return the fullname of the component. Returns: str: Component fullname. """ - return self.values["comp_name"] + "_" + self.values["comp_side"] + str(self.values["comp_index"]) - + return self.values["comp_name"] + "_" + self.values["comp_side"] + \ + str(self.values["comp_index"]) def getType(self): - """ - Return the type of the component. + """Return the type of the component. Returns: str: component type. @@ -724,15 +739,13 @@ def getType(self): """ return self.compType - def getObjectNames(self): - """ - Get the objects names of the component + """Get the objects names of the component Returns: set: The names set. - """ + """ names = set() names.update(self.save_transform) names.update(self.save_primitive) @@ -741,8 +754,7 @@ def getObjectNames(self): return names def getVersion(self): - """ - Get the version of the component. + """Get the version of the component. Returns: str: versionof the component. @@ -757,6 +769,8 @@ def getVersion(self): ########################################################## # OTHER CLASSES ########################################################## + + class MinMax(object): """ Minimun and maximum class. @@ -784,12 +798,14 @@ def __init__(self, parent=None): super(mainSettingsTab, self).__init__() self.setupUi(self) -class componentMainSettings(QtWidgets.QDialog, helperSlots): + +class componentMainSettings(QtWidgets.QDialog, guide.helperSlots): valueChanged = QtCore.Signal(int) def __init__(self, parent=None): super(componentMainSettings, self).__init__() - # the inspectSettings function set the current selection to the component root before open the settings dialog + # the inspectSettings function set the current selection to the + # component root before open the settings dialog self.root = pm.selected()[0] self.mainSettingsTab = mainSettingsTab() @@ -812,29 +828,36 @@ def create_controls(self): # Close Button self.close_button = QtWidgets.QPushButton("Close") - def populate_controls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls attribute values + + Populate the controls values from the custom attributes + of the component. """ - #populate tab + # populate tab self.tabs.insertTab(0, self.mainSettingsTab, "Main Settings") - #populate main settings - self.mainSettingsTab.name_lineEdit.setText(self.root.attr("comp_name").get()) + # populate main settings + self.mainSettingsTab.name_lineEdit.setText( + self.root.attr("comp_name").get()) sideSet = ["C", "L", "R"] sideIndex = sideSet.index(self.root.attr("comp_side").get()) self.mainSettingsTab.side_comboBox.setCurrentIndex(sideIndex) - self.mainSettingsTab.componentIndex_spinBox.setValue(self.root.attr("comp_index").get()) + self.mainSettingsTab.componentIndex_spinBox.setValue( + self.root.attr("comp_index").get()) if self.root.attr("useIndex").get(): - self.mainSettingsTab.useJointIndex_checkBox.setCheckState(QtCore.Qt.Checked) + self.mainSettingsTab.useJointIndex_checkBox.setCheckState( + QtCore.Qt.Checked) else: - self.mainSettingsTab.useJointIndex_checkBox.setCheckState(QtCore.Qt.Unchecked) - self.mainSettingsTab.parentJointIndex_spinBox.setValue(self.root.attr("parentJointIndex").get()) - self.mainSettingsTab.host_lineEdit.setText(self.root.attr("ui_host").get()) - self.mainSettingsTab.subGroup_lineEdit.setText(self.root.attr("ctlGrp").get()) - + self.mainSettingsTab.useJointIndex_checkBox.setCheckState( + QtCore.Qt.Unchecked) + self.mainSettingsTab.parentJointIndex_spinBox.setValue( + self.root.attr("parentJointIndex").get()) + self.mainSettingsTab.host_lineEdit.setText( + self.root.attr("ui_host").get()) + self.mainSettingsTab.subGroup_lineEdit.setText( + self.root.attr("ctlGrp").get()) def create_layout(self): """ @@ -843,7 +866,6 @@ def create_layout(self): """ return - def create_connections(self): """ Create the slots connections to the controls functions @@ -851,10 +873,25 @@ def create_connections(self): """ self.close_button.clicked.connect(self.close_settings) - self.mainSettingsTab.name_lineEdit.editingFinished.connect(self.updateComponentName ) - self.mainSettingsTab.side_comboBox.currentIndexChanged.connect(self.updateComponentName ) - self.mainSettingsTab.componentIndex_spinBox.valueChanged.connect(self.updateComponentName ) - self.mainSettingsTab.useJointIndex_checkBox.stateChanged.connect(partial(self.updateCheck, self.mainSettingsTab.useJointIndex_checkBox, "useIndex")) - self.mainSettingsTab.parentJointIndex_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.mainSettingsTab.parentJointIndex_spinBox, "parentJointIndex")) - self.mainSettingsTab.host_pushButton.clicked.connect(partial(self.updateHostUI, self.mainSettingsTab.host_lineEdit, "ui_host")) - self.mainSettingsTab.subGroup_lineEdit.editingFinished.connect(partial(self.updateLineEdit, self.mainSettingsTab.subGroup_lineEdit, "ctlGrp") ) + self.mainSettingsTab.name_lineEdit.editingFinished.connect( + self.updateComponentName) + self.mainSettingsTab.side_comboBox.currentIndexChanged.connect( + self.updateComponentName) + self.mainSettingsTab.componentIndex_spinBox.valueChanged.connect( + self.updateComponentName) + self.mainSettingsTab.useJointIndex_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.mainSettingsTab.useJointIndex_checkBox, + "useIndex")) + self.mainSettingsTab.parentJointIndex_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.mainSettingsTab.parentJointIndex_spinBox, + "parentJointIndex")) + self.mainSettingsTab.host_pushButton.clicked.connect( + partial(self.updateHostUI, + self.mainSettingsTab.host_lineEdit, + "ui_host")) + self.mainSettingsTab.subGroup_lineEdit.editingFinished.connect( + partial(self.updateLineEdit, + self.mainSettingsTab.subGroup_lineEdit, + "ctlGrp")) diff --git a/scripts/mgear/maya/shifter/component/hydraulic_01/__init__.py b/scripts/mgear/maya/shifter/component/hydraulic_01/__init__.py index af4db59..705a009 100644 --- a/scripts/mgear/maya/shifter/component/hydraulic_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/hydraulic_01/__init__.py @@ -1,135 +1,151 @@ -# MGEAR is under the terms of the MIT License +"""Component Hydraulic 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.maya.shifter import component +from mgear.maya import attribute, transform, primitive, applyop -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 ########################################################## -# GLOBAL +# COMPONENT ########################################################## -# mgear -from mgear.maya.shifter.component import MainComponent -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.applyop as aop - -########################################################## -# COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - self.normal = self.guide.blades["blade"].z*-1 + self.normal = self.guide.blades["blade"].z * -1 self.binormal = self.guide.blades["blade"].x - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, axis="yx", negate=self.negate) - - self.ctl_npo = pri.addTransform(self.root, self.getName("ctl_npo"), t) - self.ctl = self.addCtl(self.ctl_npo, "base_ctl", t, self.color_ik, "square", w=1.0, tp=self.parentCtlTag) - att.setKeyableAttributes(self.ctl, self.tr_params) - - self.ref_base = pri.addTransform(self.ctl, self.getName("ref_base"), t) - - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) - self.tip_npo = pri.addTransform(self.ik_cns, self.getName("tip_npo"), t) - self.tip_ctl = self.addCtl(self.tip_npo, "tip_ctl", t, self.color_ik, "square", w=1.0, tp=self.ctl) - att.setKeyableAttributes(self.tip_ctl, self.tr_params) - - self.ref_tip = pri.addTransform(self.tip_ctl, self.getName("ref_tip"), t) + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + axis="yx", + negate=self.negate) + + self.ctl_npo = primitive.addTransform( + self.root, self.getName("ctl_npo"), t) + self.ctl = self.addCtl(self.ctl_npo, + "base_ctl", + t, + self.color_ik, + "square", + w=1.0, + tp=self.parentCtlTag) + attribute.setKeyableAttributes(self.ctl, self.tr_params) + + self.ref_base = primitive.addTransform( + self.ctl, self.getName("ref_base"), t) + + t = transform.setMatrixPosition(t, self.guide.apos[1]) + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t) + self.tip_npo = primitive.addTransform( + self.ik_cns, self.getName("tip_npo"), t) + + self.tip_ctl = self.addCtl(self.tip_npo, + "tip_ctl", + t, + self.color_ik, + "square", + w=1.0, + tp=self.ctl) + + attribute.setKeyableAttributes(self.tip_ctl, self.tr_params) + + self.ref_tip = primitive.addTransform( + self.tip_ctl, self.getName("ref_tip"), t) self.div_cns = [] for i in range(self.settings["div"]): - div_cns = pri.addTransform(self.root, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform(self.root, + self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) self.jnt_pos.append([div_cns, i]) - # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" + # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) - + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): - aop.aimCns(self.ref_base, self.tip_ctl, axis="yx", wupType=2, wupVector=[1,0,0], wupObject=self.ctl, maintainOffset=False) - aop.aimCns(self.ref_tip, self.ctl, axis="-yx", wupType=2, wupVector=[1,0,0], wupObject=self.tip_ctl, maintainOffset=False) - bIncrement = 1.0/ (self.settings["div"]-1) - blend=0 + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + applyop.aimCns(self.ref_base, + self.tip_ctl, + axis="yx", + wupType=2, + wupVector=[1, 0, 0], + wupObject=self.ctl, + maintainOffset=False) + applyop.aimCns(self.ref_tip, + self.ctl, + axis="-yx", + wupType=2, + wupVector=[1, 0, 0], + wupObject=self.tip_ctl, + maintainOffset=False) + + bIncrement = 1.0 / (self.settings["div"] - 1) + blend = 0 for i, div_cns in enumerate(self.div_cns): - intMatrix = aop.gear_intmatrix_op(self.ref_base.attr("worldMatrix"), self.ref_tip.attr("worldMatrix"), blend) - aop.gear_mulmatrix_op(intMatrix.attr("output"), div_cns.attr("parentInverseMatrix[0]"), div_cns) + intMatrix = applyop.gear_intmatrix_op( + self.ref_base.attr("worldMatrix"), + self.ref_tip.attr("worldMatrix"), + blend) - blend = blend+bIncrement + applyop.gear_mulmatrix_op(intMatrix.attr("output"), + div_cns.attr("parentInverseMatrix[0]"), + div_cns) + blend = blend + bIncrement # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.ref_base self.relatives["tip"] = self.ref_tip self.controlRelatives["root"] = self.ctl self.controlRelatives["tip"] = self.tip_ctl - for i in range(0, len(self.div_cns)-1): - self.relatives["%s_loc"%i] = self.div_cns[i+1] - self.jointRelatives["%s_loc"%i] = i+1 + for i in range(0, len(self.div_cns) - 1): + self.relatives["%s_loc" % i] = self.div_cns[i + 1] + self.jointRelatives["%s_loc" % i] = i + 1 + + self.relatives["%s_loc" % (len(self.div_cns) - 1)] = self.div_cns[-1] - self.relatives["%s_loc"%(len(self.div_cns)-1)] = self.div_cns[-1] - self.jointRelatives["%s_loc"%(len(self.div_cns)-1)] = len(self.div_cns)-1 + dlen = len(self.div_cns) - 1 + self.jointRelatives["%s_loc" % (len(self.div_cns) - 1)] = dlen - ## standard connection definition. - # @param self def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithSimpleIkRef() diff --git a/scripts/mgear/maya/shifter/component/hydraulic_01/guide.py b/scripts/mgear/maya/shifter/component/hydraulic_01/guide.py index fa190b1..40743c5 100644 --- a/scripts/mgear/maya/shifter/component/hydraulic_01/guide.py +++ b/scripts/mgear/maya/shifter/component/hydraulic_01/guide.py @@ -1,52 +1,21 @@ -# MGEAR is under the terms of the MIT License +"""Guide Hydraulic 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra - +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "hydraulic_01" NAME = "hydraulic" DESCRIPTION = "Hydraulic component for mechanical rigging." @@ -54,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,37 +37,29 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "tip"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [2,0,0]) + vTemp = transform.getOffsetPosition(self.root, [2, 0, 0]) self.loc = self.addLoc("tip", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.loc) centers = [self.root, self.loc] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pRefArray = self.addParam("ikrefarray", "string", "") + self.pRefArray = self.addParam("ikrefarray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) self.pDiv = self.addParam("div", "long", 2, 2, None) @@ -103,24 +67,26 @@ def addParameters(self): # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -128,7 +94,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -138,23 +104,23 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate Controls + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings + # populate component settings self.settingsTab.div_spinBox.setValue(self.root.attr("div").get()) refArrayItems = self.root.attr("ikrefarray").get().split(",") for item in refArrayItems: self.settingsTab.refArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -165,9 +131,16 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.div_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div_spinBox, "div")) - self.settingsTab.refArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) - self.settingsTab.refArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) + self.settingsTab.div_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div_spinBox, "div")) + self.settingsTab.refArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) + self.settingsTab.refArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) self.settingsTab.refArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -179,4 +152,4 @@ def eventFilter(self, sender, event): return QtWidgets.QDialog.eventFilter(self, sender, event) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/leg_2jnt_01/__init__.py b/scripts/mgear/maya/shifter/component/leg_2jnt_01/__init__.py index 82c85c9..c4a7e1e 100644 --- a/scripts/mgear/maya/shifter/component/leg_2jnt_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/leg_2jnt_01/__init__.py @@ -1,275 +1,478 @@ -# MGEAR is under the terms of the MIT License +"""Component Leg 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): + +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" self.WIP = self.options["mode"] self.normal = self.getNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + self.length0 = vector.getDistance( + self.guide.apos[0], self.guide.apos[1]) + self.length1 = vector.getDistance( + self.guide.apos[1], self.guide.apos[2]) + self.length2 = vector.getDistance( + self.guide.apos[2], self.guide.apos[3]) # 1 bone chain for upv ref - self.legChainUpvRef= pri.add2DChain(self.root, self.getName("legUpvRef%s_jnt"), [self.guide.apos[0],self.guide.apos[2]], self.normal, False, self.WIP) - self.legChainUpvRef[1].setAttr("jointOrientZ", self.legChainUpvRef[1].getAttr("jointOrientZ")*-1) - - - #extra neutral pose - t = tra.getTransformFromPos(self.guide.apos[0]) - - self.root_npo = pri.addTransform(self.root, self.getName("root_npo"), t) - self.root_ctl = self.addCtl(self.root_npo, "root_ctl", t, self.color_fk, "circle", w=self.length0/6, tp=self.parentCtlTag) + self.legChainUpvRef = primitive.add2DChain( + self.root, + self.getName("legUpvRef%s_jnt"), + [self.guide.apos[0], self.guide.apos[2]], + self.normal, + False, + self.WIP) + + self.legChainUpvRef[1].setAttr( + "jointOrientZ", + self.legChainUpvRef[1].getAttr("jointOrientZ") * -1) + + # extra neutral pose + t = transform.getTransformFromPos(self.guide.apos[0]) + + self.root_npo = primitive.addTransform(self.root, + self.getName("root_npo"), + t) + self.root_ctl = self.addCtl(self.root_npo, + "root_ctl", + t, + self.color_fk, + "circle", + w=self.length0 / 6, + tp=self.parentCtlTag) # FK Controlers ----------------------------------- - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_npo = pri.addTransform(self.root_ctl, self.getName("fk0_npo"), t) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.root_ctl) - att.setKeyableAttributes(self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) - - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - self.fk1_npo = pri.addTransform(self.fk0_ctl, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length1*self.n_factor,0,0), tp=self.fk0_ctl) - att.setKeyableAttributes(self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) - - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk1_ctl, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk2_ctl) + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + self.fk0_npo = primitive.addTransform(self.root_ctl, + self.getName("fk0_npo"), + t) + po_vec = datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0) + self.fk0_ctl = self.addCtl(self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.root_ctl) + attribute.setKeyableAttributes( + self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + + self.fk1_npo = primitive.addTransform( + self.fk0_ctl, self.getName("fk1_npo"), t) + + po_vec = datatypes.Vector(.5 * self.length1 * self.n_factor, 0, 0) + self.fk1_ctl = self.addCtl(self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.fk0_ctl) + + attribute.setKeyableAttributes( + self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) + + self.fk2_npo = primitive.addTransform( + self.fk1_ctl, self.getName("fk2_npo"), t) + + po_vec = datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0) + self.fk2_ctl = self.addCtl(self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=po_vec, + tp=self.fk1_ctl) + attribute.setKeyableAttributes(self.fk2_ctl) self.fk_ctl = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl] - for x in self.fk_ctl: - att.setInvertMirror(x, ["tx", "ty", "tz"]) + for x in self.fk_ctl: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root_ctl, self.getName("ik_cns"), self.guide.pos["ankle"]) - - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["ankle"]), self.color_ik, "null", w=self.size*.12, tp=self.root_ctl) - att.setInvertMirror(self.ikcns_ctl, ["tx"]) - - m = tra.getTransformLookingAt(self.guide.pos["ankle"], self.guide.pos["eff"], self.x_axis, "zx", False) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", tra.getTransformFromPos(self.guide.pos["ankle"]), self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl) - att.setRotOrder(self.ik_ctl, "XZY") - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + self.ik_cns = primitive.addTransformFromPos(self.root_ctl, + self.getName("ik_cns"), + self.guide.pos["ankle"]) + + self.ikcns_ctl = self.addCtl( + self.ik_cns, + "ikcns_ctl", + transform.getTransformFromPos(self.guide.pos["ankle"]), + self.color_ik, + "null", + w=self.size * .12, + tp=self.root_ctl) + attribute.setInvertMirror(self.ikcns_ctl, ["tx"]) + + m = transform.getTransformLookingAt(self.guide.pos["ankle"], + self.guide.pos["eff"], + self.x_axis, + "zx", + False) + + self.ik_ctl = self.addCtl( + self.ikcns_ctl, + "ik_ctl", + transform.getTransformFromPos(self.guide.pos["ankle"]), + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + attribute.setKeyableAttributes(self.ik_ctl) + attribute.setRotOrder(self.ik_ctl, "XZY") + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] - self.upv_cns = pri.addTransformFromPos(self.ik_ctl, self.getName("upv_cns"), v) - - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.12, tp=self.root_ctl) + self.upv_cns = primitive.addTransformFromPos(self.ik_ctl, + self.getName("upv_cns"), + v) + + self.upv_ctl = self.addCtl( + self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.root_ctl) if self.settings["mirrorMid"]: if self.negate: self.upv_cns.rz.set(180) self.upv_cns.sy.set(-1) else: - att.setInvertMirror(self.upv_ctl, ["tx"]) - att.setKeyableAttributes(self.upv_ctl, self.t_params) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) # References -------------------------------------- - self.ik_ref = pri.addTransform(self.ik_ctl, self.getName("ik_ref"), tra.getTransform(self.ik_ctl)) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), tra.getTransform(self.ik_ctl)) + self.ik_ref = primitive.addTransform( + self.ik_ctl, + self.getName("ik_ref"), + transform.getTransform(self.ik_ctl)) + self.fk_ref = primitive.addTransform( + self.fk_ctl[2], + self.getName("fk_ref"), + transform.getTransform(self.ik_ctl)) # Chain -------------------------------------------- # The outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root_ctl, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root_ctl, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) + self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) self.bone0.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root_ctl, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + self.bone1 = primitive.addLocator( + self.root_ctl, + self.getName("1_bone"), + transform.getTransform(self.fk_ctl[1])) self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) self.bone1.setAttr("visibility", False) - self.ctrn_loc = pri.addTransformFromPos(self.root_ctl, self.getName("ctrn_loc"), self.guide.apos[1]) - self.eff_loc = pri.addTransformFromPos(self.root_ctl, self.getName("eff_loc"), self.guide.apos[2]) + self.ctrn_loc = primitive.addTransformFromPos(self.root_ctl, + self.getName("ctrn_loc"), + self.guide.apos[1]) + self.eff_loc = primitive.addTransformFromPos(self.root_ctl, + self.getName("eff_loc"), + self.guide.apos[2]) # tws_ref - t = tra.getRotationFromAxis(dt.Vector(0,-1,0), self.normal, "xz", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["ankle"]) + t = transform.getRotationFromAxis( + datatypes.Vector(0, -1, 0), self.normal, "xz", self.negate) + t = transform.setMatrixPosition(t, self.guide.pos["ankle"]) - self.tws_ref = pri.addTransform(self.eff_loc, self.getName("tws_ref"), t) + self.tws_ref = primitive.addTransform( + self.eff_loc, self.getName("tws_ref"), t) # Mid Controler ------------------------------------ - t = tra.getTransform(self.ctrn_loc) - self.mid_cns = pri.addTransform(self.ctrn_loc, self.getName("mid_cns"), t) - self.mid_ctl = self.addCtl(self.mid_cns, "mid_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.root_ctl) + t = transform.getTransform(self.ctrn_loc) + self.mid_cns = primitive.addTransform( + self.ctrn_loc, self.getName("mid_cns"), t) + self.mid_ctl = self.addCtl(self.mid_cns, + "mid_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.root_ctl) + if self.settings["mirrorMid"]: if self.negate: self.mid_cns.rz.set(180) self.mid_cns.sz.set(-1) else: - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) # Twist references --------------------------------- - x = dt.Vector(0,-1,0) - x = x * tra.getTransform(self.eff_loc) - z = dt.Vector(self.normal.x,self.normal.y,self.normal.z) - z = z * tra.getTransform(self.eff_loc) - - m = tra.getRotationFromAxis(x, z, "xz", self.negate) - m = tra.setMatrixPosition(m, tra.getTranslation(self.ik_ctl)) - - self.rollRef = pri.add2DChain(self.root, self.getName("rollChain"), self.guide.apos[:2], self.normal, self.negate, self.WIP) - - self.tws0_loc = pri.addTransform(self.rollRef[0], self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.fk_ctl[0])) - - self.tws1_loc = pri.addTransform(self.ctrn_loc, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.ctrn_loc)) + x = datatypes.Vector(0, -1, 0) + x = x * transform.getTransform(self.eff_loc) + z = datatypes.Vector(self.normal.x, self.normal.y, self.normal.z) + z = z * transform.getTransform(self.eff_loc) + + m = transform.getRotationFromAxis(x, z, "xz", self.negate) + m = transform.setMatrixPosition( + m, transform.getTranslation(self.ik_ctl)) + + self.rollRef = primitive.add2DChain(self.root, + self.getName("rollChain"), + self.guide.apos[:2], + self.normal, + self.negate, + self.WIP) + + self.tws0_loc = primitive.addTransform( + self.rollRef[0], + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.fk_ctl[0])) + + self.tws1_loc = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) + + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.ctrn_loc)) + + self.tws2_loc = primitive.addTransform( + self.root_ctl, + self.getName("tws2_loc"), + transform.getTransform(self.tws_ref)) + + self.tws2_rot = primitive.addTransform( + self.tws2_loc, + self.getName("tws2_rot"), + transform.getTransform(self.tws_ref)) - self.tws2_loc = pri.addTransform(self.root_ctl, self.getName("tws2_loc"), tra.getTransform(self.tws_ref)) - self.tws2_rot = pri.addTransform(self.tws2_loc, self.getName("tws2_rot"), tra.getTransform(self.tws_ref)) self.tws2_rot.setAttr("sx", .001) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the elbow. + 2 for knee angle control + # We have at least one division at the start, the end and one for + # the elbow. + 2 for knee angle control self.divisions = self.settings["div0"] + self.settings["div1"] + 3 + 2 self.div_cns = [] for i in range(self.divisions): - div_cns = pri.addTransform(self.root_ctl, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform(self.root_ctl, + self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) self.jnt_pos.append([div_cns, i]) # End reference ------------------------------------ # To help the deformation on the ankle - self.end_ref = pri.addTransform(self.tws2_rot, self.getName("end_ref"), m) + self.end_ref = primitive.addTransform(self.tws2_rot, + self.getName("end_ref"), m) self.jnt_pos.append([self.end_ref, 'end']) - # match IK FK references - self.match_fk0_off = pri.addTransform(self.root, self.getName("matchFk0_npo"), tra.getTransform(self.fk_ctl[1])) - self.match_fk0 = pri.addTransform(self.match_fk0_off, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1_off = pri.addTransform(self.root, self.getName("matchFk1_npo"), tra.getTransform(self.fk_ctl[2])) - self.match_fk1 = pri.addTransform(self.match_fk1_off, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) - self.match_fk2 = pri.addTransform(self.ik_ctl, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) - - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) + self.match_fk0_off = primitive.addTransform( + self.root, + self.getName("matchFk0_npo"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk0 = primitive.addTransform( + self.match_fk0_off, + self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + + self.match_fk1_off = primitive.addTransform( + self.root, + self.getName("matchFk1_npo"), + transform.getTransform(self.fk_ctl[2])) + + self.match_fk1 = primitive.addTransform( + self.match_fk1_off, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk2 = primitive.addTransform( + self.ik_ctl, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) + + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + + self.match_ikUpv = primitive.addTransform( + self.fk0_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) def addAttributes(self): # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", 1.5, 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness_att = self.addAnimParam("roundness", "Roundness", "double", 0, 0, self.size) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + self.scale_att = self.addAnimParam( + "ikscale", "Scale", "double", 1, .001, 99) + self.maxstretch_att = self.addAnimParam( + "maxstretch", "Max Stretch", "double", 1.5, 1, 99) + self.slide_att = self.addAnimParam( + "slide", "Slide", "double", .5, 0, 1) + self.softness_att = self.addAnimParam( + "softness", "Softness", "double", 0, 0, 1) + self.reverse_att = self.addAnimParam( + "reverse", "Reverse", "double", 0, 0, 1) + self.roundness_att = self.addAnimParam( + "roundness", "Roundness", "double", 0, 0, self.size) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) ref_names = ["Auto", "ikFoot"] if self.settings["upvrefarray"]: ref_names = ref_names + self.settings["upvrefarray"].split(",") - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, ref_names) + self.upvref_att = self.addAnimEnumParam( + "upvref", "UpV Ref", 0, ref_names) if self.settings["pinrefarray"]: - ref_names = self.settings["pinrefarray" ].split(",") + ref_names = self.settings["pinrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.pin_att = self.addAnimEnumParam("kneeref", "Knee Ref", 0, ref_names) - + self.pin_att = self.addAnimEnumParam("kneeref", + "Knee Ref", + 0, + ref_names) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) + self.st_value = fcurve.getFCurveValues(self.settings["st_profile"], + self.divisions) + self.sq_value = fcurve.getFCurveValues(self.settings["sq_profile"], + self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", self.st_value[i], -1, 0) + for i in range(self.divisions)] + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], 0, 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam( + "resample", "Resample", "bool", True) + self.absolute_att = self.addSetupParam( + "absolute", "Absolute", "bool", False) - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] + # ===================================================== + # OPERATORS + # ===================================================== + def addOperators(self): + """Create operators and set the relations for the component rig - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. - def addOperators(self): + """ - # 1 bone chain Upv ref ===================================================================================== - self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.legChainUpvRef, "ikSCsolver") + # 1 bone chain Upv ref =========================== + self.ikHandleUpvRef = primitive.addIkHandle( + self.root, + self.getName("ikHandleLegChainUpvRef"), + self.legChainUpvRef, + "ikSCsolver") pm.pointConstraint(self.ik_ctl, self.ikHandleUpvRef) - pm.parentConstraint( self.legChainUpvRef[0], self.ik_ctl, self.upv_cns, mo=True) + pm.parentConstraint(self.legChainUpvRef[0], + self.ik_ctl, + self.upv_cns, + mo=True) # Visibilities ------------------------------------- - #shape.dispGeometry + # shape.dispGeometry # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -281,109 +484,134 @@ def addOperators(self): # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_loc] - node = aop.gear_ikfk2bone_op(out, self.root_ctl, self.ik_ref, self.upv_ctl, self.fk_ctl[0], self.fk_ctl[1], self.fk_ref, self.length0, self.length1, self.negate) - - pm.connectAttr(self.blend_att, node+".blend") + o_node = applyop.gear_ikfk2bone_op(out, + self.root_ctl, + self.ik_ref, + self.upv_ctl, + self.fk_ctl[0], + self.fk_ctl[1], + self.fk_ref, + self.length0, + self.length1, + self.negate) + + pm.connectAttr(self.blend_att, o_node + ".blend") if self.negate: mulVal = -1 else: mulVal = 1 - nod.createMulNode(self.roll_att, mulVal, node+".roll") - # pm.connectAttr(self.roll_att, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") + node.createMulNode(self.roll_att, mulVal, o_node + ".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") # Twist references --------------------------------- - self.ikhArmRef, self.tmpCrv = aop.splineIK(self.getName("legRollRef"), self.rollRef, parent=self.root, cParent=self.bone0 ) - + self.ikhArmRef, self.tmpCrv = applyop.splineIK( + self.getName("legRollRef"), + self.rollRef, + parent=self.root, + cParent=self.bone0) pm.pointConstraint(self.mid_ctl, self.tws1_loc, maintainOffset=False) pm.scaleConstraint(self.mid_ctl, self.tws1_loc, maintainOffset=False) - aop.oriCns(self.mid_ctl, self.tws1_rot, maintainOffset=False) + applyop.oriCns(self.mid_ctl, self.tws1_rot, maintainOffset=False) pm.pointConstraint(self.eff_loc, self.tws2_loc, maintainOffset=False) pm.scaleConstraint(self.eff_loc, self.tws2_loc, maintainOffset=False) - aop.oriCns(self.bone1, self.tws2_loc, maintainOffset=False) + applyop.oriCns(self.bone1, self.tws2_loc, maintainOffset=False) - aop.oriCns(self.tws_ref, self.tws2_rot) + applyop.oriCns(self.tws_ref, self.tws2_rot) self.tws0_loc.setAttr("sx", .001) self.tws2_loc.setAttr("sx", .001) - add_node = nod.createAddNode(self.roundness_att, .001) - pm.connectAttr(add_node+".output", self.tws1_rot.attr("sx")) + add_node = node.createAddNode(self.roundness_att, .001) + pm.connectAttr(add_node + ".output", self.tws1_rot.attr("sx")) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - distB_node = nod.createDistNode(self.tws1_loc, self.tws2_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root_ctl.attr("sx")) - - #comp scaling issue + distA_node = node.createDistNode(self.tws0_loc, self.tws1_loc) + distB_node = node.createDistNode(self.tws1_loc, self.tws2_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root_ctl.attr("sx")) + + # comp scaling issue dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") - - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") - self.volDriver_att = div_node2+".outputX" + self.volDriver_att = div_node2 + ".outputX" # Divisions ---------------------------------------- - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll for i, div_cns in enumerate(self.div_cns): subdiv = False - if i == len(self.div_cns)-1 or i == 0: + if i == len(self.div_cns) - 1 or i == 0: subdiv = 45 else: subdiv = 10 - - if i < (self.settings["div0"]+1): - perc = i*.5 / (self.settings["div0"]+1.0) + if i < (self.settings["div0"] + 1): + perc = i * .5 / (self.settings["div0"] + 1.0) elif i < (self.settings["div0"] + 2): perc = .49 subdiv = 45 - elif i < (self.settings["div0"] + 3 ): + elif i < (self.settings["div0"] + 3): perc = .50 subdiv = 45 - elif i < (self.settings["div0"] + 4 ): + elif i < (self.settings["div0"] + 4): perc = .51 subdiv = 45 else: - perc = .5 + (i-self.settings["div0"]-3.0)*.5 / (self.settings["div1"]+1.0) + perc = (.5 + + (i - self.settings["div0"] - 3.0) + * .5 + / (self.settings["div1"] + 1.0)) perc = max(.001, min(.999, perc)) # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cns, [self.tws2_rot, self.tws1_rot, self.tws0_rot], 1-perc, subdiv) + o_node = applyop.gear_rollsplinekine_op( + div_cns, + [self.tws2_rot, self.tws1_rot, self.tws0_rot], + 1 - perc, + subdiv) else: - node = aop.gear_rollsplinekine_op(div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot], perc, subdiv) + o_node = applyop.gear_rollsplinekine_op( + div_cns, + [self.tws0_rot, self.tws1_rot, self.tws2_rot], + perc, + subdiv) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") # Squash n Stretch - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") - - + o_node = applyop.gear_squashstretch2_op( + div_cns, None, pm.getAttr(self.volDriver_att), "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") # NOTE: next line fix the issue on meters. - # This is special case becasuse the IK solver from mGear use the scale as lenght and we have shear - # TODO: check for a more clean and elegant solution instead of re-match the world matrix again - # tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) - # tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) - # tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0) - # tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1) + # This is special case becasuse the IK solver from mGear use + # the scale as lenght and we have shear + # TODO: check for a more clean and elegant solution instead of + # re-match the world matrix again + # transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) + # transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) + # transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0) + # transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1) # match IK/FK ref pm.parentConstraint(self.bone0, self.match_fk0_off, mo=True) @@ -393,11 +621,10 @@ def addOperators(self): # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.div_cns[0] - self.relatives["knee"] = self.div_cns[self.settings["div0"] + 2] + self.relatives["knee"] = self.div_cns[self.settings["div0"] + 2] self.relatives["ankle"] = self.div_cns[-1] self.relatives["eff"] = self.end_ref @@ -409,19 +636,22 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["knee"] = self.settings["div0"] + 2 self.jointRelatives["ankle"] = len(self.div_cns) - self.jointRelatives["eff"] =len(self.div_cns) + self.jointRelatives["eff"] = len(self.div_cns) - ## standard connection definition. - # @param self def connect_standard(self): self.parent.addChild(self.root) # Set the Ik Reference self.connectRef(self.settings["ikrefarray"], self.ik_cns) if self.settings["upvrefarray"]: - self.connectRef("Auto,ikFoot,"+self.settings["upvrefarray"], self.upv_cns, True) + self.connectRef("Auto,ikFoot," + self.settings["upvrefarray"], + self.upv_cns, True) else: self.connectRef("Auto,ikFoot", self.upv_cns, True) if self.settings["pinrefarray"]: - self.connectRef2("Auto,"+ self.settings["pinrefarray"], self.mid_cns, self.pin_att, [self.ctrn_loc], False) + self.connectRef2("Auto," + self.settings["pinrefarray"], + self.mid_cns, + self.pin_att, + [self.ctrn_loc], + False) diff --git a/scripts/mgear/maya/shifter/component/leg_2jnt_01/guide.py b/scripts/mgear/maya/shifter/component/leg_2jnt_01/guide.py index 72b8e05..175e60b 100644 --- a/scripts/mgear/maya/shifter/component/leg_2jnt_01/guide.py +++ b/scripts/mgear/maya/shifter/component/leg_2jnt_01/guide.py @@ -1,60 +1,33 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide Leg 2jnt 01 module""" from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,3,0] +VERSION = [1, 3, 0] TYPE = "leg_2jnt_01" NAME = "leg" -DESCRIPTION = "2 bones leg with stretch, roundess, ik/fk..., This component add to div near the knee. with knee pin" +DESCRIPTION = "2 bones leg with stretch, roundess, ik/fk..., This component "\ + "add to div near the knee. with knee pin" ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,39 +38,33 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "knee", "ankle", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,-3,0.1]) + vTemp = transform.getOffsetPosition(self.root, [0, -3, 0.1]) self.knee = self.addLoc("knee", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6,0]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, 0]) self.ankle = self.addLoc("ankle", self.knee, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6, .5]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, .5]) self.eff = self.addLoc("eff", self.ankle, vTemp) centers = [self.root, self.knee, self.ankle, self.eff] self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") self.pUpvRefArray = self.addParam("pinrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 1.5 , 1, None) + self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1, None) self.pMirrorMid = self.addParam("mirrorMid", "bool", False) # Divisions @@ -105,34 +72,41 @@ def addParameters(self): self.pDiv1 = self.addParam("div1", "long", 2, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) + + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -140,7 +114,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -150,19 +124,26 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.populateCheck(self.settingsTab.mirrorMid_checkBox, "mirrorMid") self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) @@ -176,7 +157,6 @@ def populate_componentControls(self): for item in pinRefArrayItems: self.settingsTab.pinRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -187,27 +167,82 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - self.settingsTab.mirrorMid_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorMid_checkBox, "mirrorMid")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.mirrorMid_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorMid_checkBox, + "mirrorMid")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArray_listWidget.installEventFilter(self) - self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) + self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + self.settingsTab.pinRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -222,7 +257,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/__init__.py b/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/__init__.py index e391648..0f1d802 100644 --- a/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/__init__.py @@ -1,244 +1,410 @@ -# MGEAR is under the terms of the MIT License +"""Component Leg 2 joints Free Tangents 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): + +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" self.WIP = self.options["mode"] self.normal = self.getNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + self.length0 = vector.getDistance( + self.guide.apos[0], self.guide.apos[1]) + self.length1 = vector.getDistance( + self.guide.apos[1], self.guide.apos[2]) + self.length2 = vector.getDistance( + self.guide.apos[2], self.guide.apos[3]) # 1 bone chain for upv ref - self.legChainUpvRef= pri.add2DChain(self.root, self.getName("legUpvRef%s_jnt"), [self.guide.apos[0],self.guide.apos[2]], self.normal, False, self.WIP) - self.legChainUpvRef[1].setAttr("jointOrientZ", self.legChainUpvRef[1].getAttr("jointOrientZ")*-1) - - - - #extra neutral pose - t = tra.getTransformFromPos(self.guide.apos[0]) - - self.root_npo = pri.addTransform(self.root, self.getName("root_npo"), t) - self.root_ctl = self.addCtl(self.root_npo, "root_ctl", t, self.color_fk, "circle", w=self.length0/6, tp=self.parentCtlTag) + self.legChainUpvRef = primitive.add2DChain( + self.root, + self.getName("legUpvRef%s_jnt"), + [self.guide.apos[0], self.guide.apos[2]], + self.normal, + False, + self.WIP) + self.legChainUpvRef[1].setAttr( + "jointOrientZ", + self.legChainUpvRef[1].getAttr("jointOrientZ") * -1) + + # extra neutral pose + t = transform.getTransformFromPos(self.guide.apos[0]) + + self.root_npo = primitive.addTransform( + self.root, self.getName("root_npo"), t) + self.root_ctl = self.addCtl( + self.root_npo, + "root_ctl", + t, + self.color_fk, + "circle", + w=self.length0 / 6, + tp=self.parentCtlTag) # FK Controlers ----------------------------------- - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_npo = pri.addTransform(self.root_ctl, self.getName("fk0_npo"), t) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.root_ctl) - att.setKeyableAttributes(self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) - - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - self.fk1_npo = pri.addTransform(self.fk0_ctl, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length1*self.n_factor,0,0), tp=self.fk0_ctl) - att.setKeyableAttributes(self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) - - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk1_ctl, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk2_ctl) + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + self.fk0_npo = primitive.addTransform( + self.root_ctl, self.getName("fk0_npo"), t) + self.fk0_ctl = self.addCtl( + self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, d=self.size * .1, + po=datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0), + tp=self.root_ctl) + attribute.setKeyableAttributes( + self.fk0_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + self.fk1_npo = primitive.addTransform( + self.fk0_ctl, self.getName("fk1_npo"), t) + self.fk1_ctl = self.addCtl( + self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length1 * self.n_factor, 0, 0), + tp=self.fk0_ctl) + + attribute.setKeyableAttributes( + self.fk1_ctl, ["tx", "ty", "tz", "ro", "rx", "ry", "rz", "sx"]) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) + + self.fk2_npo = primitive.addTransform( + self.fk1_ctl, self.getName("fk2_npo"), t) + + self.fk2_ctl = self.addCtl( + self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0), + tp=self.fk1_ctl) + attribute.setKeyableAttributes(self.fk2_ctl) self.fk_ctl = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl] - for x in self.fk_ctl: - att.setInvertMirror(x, ["tx", "ty", "tz"]) + for x in self.fk_ctl: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root_ctl, self.getName("ik_cns"), self.guide.pos["ankle"]) - - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["ankle"]), self.color_ik, "null", w=self.size*.12, tp=self.root_ctl) - att.setInvertMirror(self.ikcns_ctl, ["tx"]) - - m = tra.getTransformLookingAt(self.guide.pos["ankle"], self.guide.pos["eff"], self.x_axis, "zx", False) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", tra.getTransformFromPos(self.guide.pos["ankle"]), self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl) - att.setRotOrder(self.ik_ctl, "XZY") - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + self.ik_cns = primitive.addTransformFromPos(self.root_ctl, + self.getName("ik_cns"), + self.guide.pos["ankle"]) + + self.ikcns_ctl = self.addCtl( + self.ik_cns, + "ikcns_ctl", + transform.getTransformFromPos(self.guide.pos["ankle"]), + self.color_ik, + "null", + w=self.size * .12, + tp=self.root_ctl) + attribute.setInvertMirror(self.ikcns_ctl, ["tx"]) + + m = transform.getTransformLookingAt(self.guide.pos["ankle"], + self.guide.pos["eff"], + self.x_axis, + "zx", + False) + + self.ik_ctl = self.addCtl( + self.ikcns_ctl, + "ik_ctl", + transform.getTransformFromPos(self.guide.pos["ankle"]), + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + attribute.setKeyableAttributes(self.ik_ctl) + attribute.setRotOrder(self.ik_ctl, "XZY") + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), v) + self.upv_cns = primitive.addTransformFromPos( + self.ik_ctl, self.getName("upv_cns"), v) + + self.upv_ctl = self.addCtl( + self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.root_ctl) - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.12, tp=self.root_ctl) if self.settings["mirrorMid"]: if self.negate: self.upv_cns.rz.set(180) self.upv_cns.sy.set(-1) else: - att.setInvertMirror(self.upv_ctl, ["tx"]) - att.setKeyableAttributes(self.upv_ctl, self.t_params) - - + attribute.setInvertMirror(self.upv_ctl, ["tx"]) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) # References -------------------------------------- - self.ik_ref = pri.addTransform(self.ik_ctl, self.getName("ik_ref"), tra.getTransform(self.ik_ctl)) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), tra.getTransform(self.ik_ctl)) + self.ik_ref = primitive.addTransform( + self.ik_ctl, + self.getName("ik_ref"), + transform.getTransform(self.ik_ctl)) + self.fk_ref = primitive.addTransform( + self.fk_ctl[2], + self.getName("fk_ref"), + transform.getTransform(self.ik_ctl)) # Chain -------------------------------------------- # The outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root_ctl, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root_ctl, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) + self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) self.bone0.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root_ctl, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + self.bone1 = primitive.addLocator( + self.root_ctl, + self.getName("1_bone"), + transform.getTransform(self.fk_ctl[1])) + self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) self.bone1.setAttr("visibility", False) - tA = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - tA = tra.setMatrixPosition(tA, self.guide.apos[1]) - tB = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - t = tra.getInterpolateTransformMatrix(tA, tB) - self.ctrn_loc = pri.addTransform(self.root, self.getName("ctrn_loc"), t) - self.eff_loc = pri.addTransformFromPos(self.root_ctl, self.getName("eff_loc"), self.guide.apos[2]) + tA = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + tA = transform.setMatrixPosition(tA, self.guide.apos[1]) + tB = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + t = transform.getInterpolateTransformMatrix(tA, tB) + self.ctrn_loc = primitive.addTransform( + self.root, self.getName("ctrn_loc"), t) + self.eff_loc = primitive.addTransformFromPos(self.root_ctl, + self.getName("eff_loc"), + self.guide.apos[2]) # tws_ref - t = tra.getRotationFromAxis(dt.Vector(0,-1,0), self.normal, "xz", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["ankle"]) + t = transform.getRotationFromAxis( + datatypes.Vector(0, -1, 0), self.normal, "xz", self.negate) + t = transform.setMatrixPosition(t, self.guide.pos["ankle"]) - self.tws_ref = pri.addTransform(self.eff_loc, self.getName("tws_ref"), t) + self.tws_ref = primitive.addTransform( + self.eff_loc, self.getName("tws_ref"), t) # Mid Controler ------------------------------------ - t = tra.getTransform(self.ctrn_loc) - self.mid_cns = pri.addTransform(self.ctrn_loc, self.getName("mid_cns"), t) - self.mid_ctl = self.addCtl(self.mid_cns, "mid_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.root_ctl) + t = transform.getTransform(self.ctrn_loc) + self.mid_cns = primitive.addTransform( + self.ctrn_loc, self.getName("mid_cns"), t) + self.mid_ctl = self.addCtl(self.mid_cns, + "mid_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.root_ctl) if self.settings["mirrorMid"]: if self.negate: self.mid_cns.rz.set(180) self.mid_cns.sz.set(-1) else: - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) - att.setKeyableAttributes(self.mid_ctl, self.t_params) + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) + attribute.setKeyableAttributes(self.mid_ctl, self.t_params) # Twist references --------------------------------- - x = dt.Vector(0,-1,0) - x = x * tra.getTransform(self.eff_loc) - z = dt.Vector(self.normal.x,self.normal.y,self.normal.z) - z = z * tra.getTransform(self.eff_loc) - - m = tra.getRotationFromAxis(x, z, "xz", self.negate) - m = tra.setMatrixPosition(m, tra.getTranslation(self.ik_ctl)) - - self.tws0_loc = pri.addTransform(self.root_ctl, self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.fk_ctl[0])) - - self.tws1_loc = pri.addTransform(self.ctrn_loc, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.ctrn_loc)) - - self.tws1A_npo = pri.addTransform(self.mid_ctl, self.getName("tws1A_npo"), tA) - self.tws1A_loc = pri.addTransform(self.tws1A_npo, self.getName("tws1A_loc"), tA) - self.tws1B_npo = pri.addTransform(self.mid_ctl, self.getName("tws1B_npo"), tB) - self.tws1B_loc = pri.addTransform(self.tws1B_npo, self.getName("tws1B_loc"), tB) - - self.tws2_npo = pri.addTransform(self.root, self.getName("tws2_npo"), tra.getTransform(self.fk_ctl[2])) - self.tws2_loc = pri.addTransform(self.tws2_npo, self.getName("tws2_loc"), tra.getTransform(self.fk_ctl[2])) - self.tws2_rot = pri.addTransform(self.tws2_npo, self.getName("tws2_rot"), tra.getTransform(self.fk_ctl[2])) + x = datatypes.Vector(0, -1, 0) + x = x * transform.getTransform(self.eff_loc) + z = datatypes.Vector(self.normal.x, self.normal.y, self.normal.z) + z = z * transform.getTransform(self.eff_loc) + + m = transform.getRotationFromAxis(x, z, "xz", self.negate) + m = transform.setMatrixPosition( + m, transform.getTranslation(self.ik_ctl)) + + self.tws0_loc = primitive.addTransform( + self.root_ctl, + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.fk_ctl[0])) + + self.tws1_loc = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.ctrn_loc)) + + self.tws1A_npo = primitive.addTransform( + self.mid_ctl, self.getName("tws1A_npo"), tA) + self.tws1A_loc = primitive.addTransform( + self.tws1A_npo, self.getName("tws1A_loc"), tA) + self.tws1B_npo = primitive.addTransform( + self.mid_ctl, self.getName("tws1B_npo"), tB) + self.tws1B_loc = primitive.addTransform( + self.tws1B_npo, self.getName("tws1B_loc"), tB) + + self.tws2_npo = primitive.addTransform( + self.root, self.getName("tws2_npo"), + transform.getTransform(self.fk_ctl[2])) + self.tws2_loc = primitive.addTransform( + self.tws2_npo, self.getName("tws2_loc"), + transform.getTransform(self.fk_ctl[2])) + self.tws2_rot = primitive.addTransform( + self.tws2_npo, self.getName("tws2_rot"), + transform.getTransform(self.fk_ctl[2])) # Roll twist chain --------------------------------- - #Arm + # Arm self.uplegChainPos = [] - ii = 1.0/(self.settings["div0"]+1) + ii = 1.0 / (self.settings["div0"] + 1) i = 0.0 - for p in range(self.settings["div0"]+2): - self.uplegChainPos.append(vec.linearlyInterpolate(self.guide.pos["root"], self.guide.pos["knee"], blend=i)) - i=i+ii - - self.uplegTwistChain= pri.add2DChain(self.root, self.getName("uplegTwist%s_jnt"), self.uplegChainPos, self.normal, False, self.WIP) - - #Forearm + for p in range(self.settings["div0"] + 2): + self.uplegChainPos.append( + vector.linearlyInterpolate(self.guide.pos["root"], + self.guide.pos["knee"], + blend=i)) + i = i + ii + + self.uplegTwistChain = primitive.add2DChain( + self.root, + self.getName("uplegTwist%s_jnt"), + self.uplegChainPos, + self.normal, + False, + self.WIP) + + # Forearm self.lowlegChainPos = [] - ii = 1.0/(self.settings["div1"]+1) + ii = 1.0 / (self.settings["div1"] + 1) i = 0.0 - for p in range(self.settings["div1"]+2): - self.lowlegChainPos.append(vec.linearlyInterpolate(self.guide.pos["knee"], self.guide.pos["ankle"], blend=i)) - i=i+ii - - self.lowlegTwistChain= pri.add2DChain(self.root, self.getName("lowlegTwist%s_jnt"), self.lowlegChainPos, self.normal, False, self.WIP) + for p in range(self.settings["div1"] + 2): + self.lowlegChainPos.append( + vector.linearlyInterpolate(self.guide.pos["knee"], + self.guide.pos["ankle"], + blend=i)) + i = i + ii + + self.lowlegTwistChain = primitive.add2DChain( + self.root, + self.getName("lowlegTwist%s_jnt"), + self.lowlegChainPos, + self.normal, + False, + self.WIP) pm.parent(self.lowlegTwistChain[0], self.mid_ctl) - #Hand Aux chain and nonroll + # Hand Aux chain and nonroll self.auxChainPos = [] ii = .5 i = 0.0 for p in range(3): - self.auxChainPos.append(vec.linearlyInterpolate(self.guide.pos["ankle"], self.guide.pos["eff"], blend=i)) - i=i+ii + self.auxChainPos.append( + vector.linearlyInterpolate(self.guide.pos["ankle"], + self.guide.pos["eff"], + blend=i)) + i = i + ii t = self.root.getMatrix(worldSpace=True) - self.aux_npo = pri.addTransform(self.root, self.getName("aux_npo"), t) - self.auxTwistChain = pri.add2DChain(self.aux_npo, self.getName("auxTwist%s_jnt"), self.lowlegChainPos[:3], self.normal, False, self.WIP) - #Non Roll join ref --------------------------------- - self.uplegRollRef = pri.add2DChain(self.root, self.getName("uplegRollRef%s_jnt"), self.uplegChainPos[:2], self.normal, False,self.WIP) - - - self.lowlegRollRef = pri.add2DChain(self.aux_npo, self.getName("lowlegRollRef%s_jnt"), self.lowlegChainPos[:2], self.normal, False, self.WIP) + self.aux_npo = primitive.addTransform( + self.root, self.getName("aux_npo"), t) + self.auxTwistChain = primitive.add2DChain( + self.aux_npo, + self.getName("auxTwist%s_jnt"), + self.lowlegChainPos[:3], + self.normal, + False, + self.WIP) + # Non Roll join ref --------------------------------- + self.uplegRollRef = primitive.add2DChain( + self.root, + self.getName("uplegRollRef%s_jnt"), + self.uplegChainPos[:2], + self.normal, + False, + self.WIP) + + self.lowlegRollRef = primitive.add2DChain( + self.aux_npo, + self.getName("lowlegRollRef%s_jnt"), + self.lowlegChainPos[:2], + self.normal, + False, + self.WIP) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the elbow. + 2 for knee angle control + # We have at least one division at the start, the end and one for the + # elbow. + 2 for knee angle control self.divisions = self.settings["div0"] + self.settings["div1"] + 4 self.div_cns = [] for i in range(self.divisions): - div_cns = pri.addTransform(self.root_ctl, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform( + self.root_ctl, self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) @@ -246,132 +412,268 @@ def addObjects(self): # End reference ------------------------------------ # To help the deformation on the ankle - self.end_ref = pri.addTransform(self.eff_loc, self.getName("end_ref"), m) + self.end_ref = primitive.addTransform( + self.eff_loc, self.getName("end_ref"), m) for a in "xyz": - self.end_ref.attr("s%s"%a).set(1.0) + self.end_ref.attr("s%s" % a).set(1.0) if self.negate: self.end_ref.attr("ry").set(-180.0) self.jnt_pos.append([self.end_ref, 'end']) # Tangent controls - t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], self.tws1A_npo, .5) - self.uplegTangentA_loc = pri.addTransform(self.root_ctl, self.getName("uplegTangentA_loc"), self.fk_ctl[0].getMatrix(worldSpace=True)) - self.uplegTangentA_npo = pri.addTransform(self.uplegTangentA_loc, self.getName("uplegTangentA_npo"), t) - self.uplegTangentA_ctl = self.addCtl(self.uplegTangentA_npo, "uplegTangentA_ctl", t, self.color_ik, "circle", w=self.size*.2, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + t = transform.getInterpolateTransformMatrix( + self.fk_ctl[0], self.tws1A_npo, .5) + self.uplegTangentA_loc = primitive.addTransform( + self.root_ctl, + self.getName("uplegTangentA_loc"), + self.fk_ctl[0].getMatrix(worldSpace=True)) + + self.uplegTangentA_npo = primitive.addTransform( + self.uplegTangentA_loc, self.getName("uplegTangentA_npo"), t) + + self.uplegTangentA_ctl = self.addCtl( + self.uplegTangentA_npo, + "uplegTangentA_ctl", + t, + self.color_ik, + "circle", + w=self.size * .2, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) + if self.negate: self.uplegTangentA_npo.rz.set(180) self.uplegTangentA_npo.sz.set(-1) - att.setKeyableAttributes(self.uplegTangentA_ctl, self.t_params) + attribute.setKeyableAttributes(self.uplegTangentA_ctl, self.t_params) + + t = transform.getInterpolateTransformMatrix( + self.fk_ctl[0], self.tws1A_npo, .9) + self.uplegTangentB_npo = primitive.addTransform( + self.tws1A_loc, self.getName("uplegTangentB_npo"), t) + + self.uplegTangentB_ctl = self.addCtl( + self.uplegTangentB_npo, + "uplegTangentB_ctl", + t, + self.color_ik, + "circle", + w=self.size * .1, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) - t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], self.tws1A_npo, .9) - self.uplegTangentB_npo = pri.addTransform(self.tws1A_loc, self.getName("uplegTangentB_npo"), t) - self.uplegTangentB_ctl = self.addCtl(self.uplegTangentB_npo, "uplegTangentB_ctl", t, self.color_ik, "circle", w=self.size*.1, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) if self.negate: self.uplegTangentB_npo.rz.set(180) self.uplegTangentB_npo.sz.set(-1) - att.setKeyableAttributes(self.uplegTangentB_ctl, self.t_params) + attribute.setKeyableAttributes(self.uplegTangentB_ctl, self.t_params) tC = self.tws1B_npo.getMatrix(worldSpace=True) - tC = tra.setMatrixPosition(tC, self.guide.apos[2]) - t = tra.getInterpolateTransformMatrix(self.tws1B_npo, tC, .1) - self.lowlegTangentA_npo = pri.addTransform(self.tws1B_loc, self.getName("lowlegTangentA_npo"), t) - self.lowlegTangentA_ctl = self.addCtl(self.lowlegTangentA_npo, "lowlegTangentA_ctl", t, self.color_ik, "circle", w=self.size*.1, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + tC = transform.setMatrixPosition(tC, self.guide.apos[2]) + t = transform.getInterpolateTransformMatrix(self.tws1B_npo, tC, .1) + self.lowlegTangentA_npo = primitive.addTransform( + self.tws1B_loc, self.getName("lowlegTangentA_npo"), t) + + self.lowlegTangentA_ctl = self.addCtl( + self.lowlegTangentA_npo, + "lowlegTangentA_ctl", + t, + self.color_ik, + "circle", + w=self.size * .1, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) + if self.negate: self.lowlegTangentA_npo.rz.set(180) self.lowlegTangentA_npo.sz.set(-1) - att.setKeyableAttributes(self.lowlegTangentA_ctl, self.t_params) + attribute.setKeyableAttributes(self.lowlegTangentA_ctl, self.t_params) + + t = transform.getInterpolateTransformMatrix(self.tws1B_npo, tC, .5) + + self.lowlegTangentB_loc = primitive.addTransform( + self.root, self.getName("lowlegTangentB_loc"), tC) + + self.lowlegTangentB_npo = primitive.addTransform( + self.lowlegTangentB_loc, self.getName("lowlegTangentB_npo"), t) + + self.lowlegTangentB_ctl = self.addCtl( + self.lowlegTangentB_npo, + "lowlegTangentB_ctl", + t, + self.color_ik, + "circle", + w=self.size * .2, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) - t = tra.getInterpolateTransformMatrix(self.tws1B_npo, tC, .5) - self.lowlegTangentB_loc = pri.addTransform(self.root, self.getName("lowlegTangentB_loc"), tC) - self.lowlegTangentB_npo = pri.addTransform(self.lowlegTangentB_loc, self.getName("lowlegTangentB_npo"), t) - self.lowlegTangentB_ctl = self.addCtl(self.lowlegTangentB_npo, "lowlegTangentB_ctl", t, self.color_ik, "circle", w=self.size*.2, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) if self.negate: self.lowlegTangentB_npo.rz.set(180) self.lowlegTangentB_npo.sz.set(-1) - att.setKeyableAttributes(self.lowlegTangentB_ctl, self.t_params) + attribute.setKeyableAttributes(self.lowlegTangentB_ctl, self.t_params) t = self.mid_ctl.getMatrix(worldSpace=True) - self.kneeTangent_npo = pri.addTransform(self.mid_ctl, self.getName("kneeTangent_npo"), t) - self.kneeTangent_ctl = self.addCtl(self.kneeTangent_npo, "kneeTangent_ctl", t, self.color_fk, "circle", w=self.size*.25, ro=dt.Vector(0,0,1.570796), tp=self.mid_ctl) + self.kneeTangent_npo = primitive.addTransform( + self.mid_ctl, self.getName("kneeTangent_npo"), t) + + self.kneeTangent_ctl = self.addCtl( + self.kneeTangent_npo, + "kneeTangent_ctl", + t, + self.color_fk, + "circle", + w=self.size * .25, + ro=datatypes.Vector(0, 0, 1.570796), + tp=self.mid_ctl) + if self.negate: self.kneeTangent_npo.rz.set(180) self.kneeTangent_npo.sz.set(-1) - att.setKeyableAttributes(self.kneeTangent_ctl, self.t_params) + attribute.setKeyableAttributes(self.kneeTangent_ctl, self.t_params) # match IK FK references - self.match_fk0_off = pri.addTransform(self.root, self.getName("matchFk0_npo"), tra.getTransform(self.fk_ctl[1])) - self.match_fk0 = pri.addTransform(self.match_fk0_off, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1_off = pri.addTransform(self.root, self.getName("matchFk1_npo"), tra.getTransform(self.fk_ctl[2])) - self.match_fk1 = pri.addTransform(self.match_fk1_off, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) - self.match_fk2 = pri.addTransform(self.ik_ctl, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) - - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) - + self.match_fk0_off = primitive.addTransform( + self.root, + self.getName("matchFk0_npo"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk0 = primitive.addTransform( + self.match_fk0_off, + self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + + self.match_fk1_off = primitive.addTransform( + self.root, + self.getName("matchFk1_npo"), + transform.getTransform(self.fk_ctl[2])) + + self.match_fk1 = primitive.addTransform( + self.match_fk1_off, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) + + self.match_fk2 = primitive.addTransform( + self.ik_ctl, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) + + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + + self.match_ikUpv = primitive.addTransform( + self.fk0_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) def addAttributes(self): # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", 1.5, 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness_att = self.addAnimParam("roundness", "Roundness", "double", 0, 0, 1) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) - self.tangentVis_att = self.addAnimParam("Tangent_vis", "Tangent vis", "bool", False) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + self.scale_att = self.addAnimParam( + "ikscale", "Scale", "double", 1, .001, 99) + self.maxstretch_att = self.addAnimParam( + "maxstretch", "Max Stretch", "double", 1.5, 1, 99) + self.slide_att = self.addAnimParam( + "slide", "Slide", "double", .5, 0, 1) + self.softness_att = self.addAnimParam( + "softness", "Softness", "double", 0, 0, 1) + self.reverse_att = self.addAnimParam( + "reverse", "Reverse", "double", 0, 0, 1) + self.roundness_att = self.addAnimParam( + "roundness", "Roundness", "double", 0, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) + self.tangentVis_att = self.addAnimParam( + "Tangent_vis", "Tangent vis", "bool", False) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) + ref_names = ["Auto", "ikFoot"] if self.settings["upvrefarray"]: - ref_names = self.settings["upvrefarray"].split(",") - ref_names = ["Auto"] + ref_names - if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, ref_names) + ref_names += self.settings["upvrefarray"].split(",") + if len(ref_names) > 1: + self.upvref_att = self.addAnimEnumParam( + "upvref", "UpV Ref", 0, ref_names) if self.settings["pinrefarray"]: - ref_names = self.settings["pinrefarray" ].split(",") + ref_names = self.settings["pinrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.pin_att = self.addAnimEnumParam("kneeref", "Knee Ref", 0, ref_names) - + self.pin_att = self.addAnimEnumParam( + "kneeref", "Knee Ref", 0, ref_names) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) + self.st_value = fcurve.getFCurveValues( + self.settings["st_profile"], self.divisions) + self.sq_value = fcurve.getFCurveValues( + self.settings["sq_profile"], self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], + -1, + 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam( + "resample", "Resample", "bool", True) + self.absolute_att = self.addSetupParam( + "absolute", "Absolute", "bool", False) - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] + # ===================================================== + # OPERATORS + # ===================================================== + def addOperators(self): + """Create operators and set the relations for the component rig - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. - def addOperators(self): + """ - # 1 bone chain Upv ref ===================================================================================== - self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.legChainUpvRef, "ikSCsolver") + # 1 bone chain Upv ref ============================== + self.ikHandleUpvRef = primitive.addIkHandle( + self.root, + self.getName("ikHandleLegChainUpvRef"), + self.legChainUpvRef, + "ikSCsolver") pm.pointConstraint(self.ik_ctl, self.ikHandleUpvRef) - pm.parentConstraint( self.legChainUpvRef[0], self.upv_cns, mo=True) + pm.parentConstraint( + self.legChainUpvRef[0], self.ik_ctl, self.upv_cns, mo=True) # Visibilities ------------------------------------- - #shape.dispGeometry + # shape.dispGeometry # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -383,43 +685,78 @@ def addOperators(self): # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_loc] - node = aop.gear_ikfk2bone_op(out, self.root_ctl, self.ik_ref, self.upv_ctl, self.fk_ctl[0], self.fk_ctl[1], self.fk_ref, self.length0, self.length1, self.negate) - - pm.connectAttr(self.blend_att, node+".blend") + o_node = applyop.gear_ikfk2bone_op(out, + self.root_ctl, + self.ik_ref, + self.upv_ctl, + self.fk_ctl[0], + self.fk_ctl[1], + self.fk_ref, + self.length0, + self.length1, + self.negate) + + pm.connectAttr(self.blend_att, o_node + ".blend") if self.negate: mulVal = -1 else: mulVal = 1 - nod.createMulNode(self.roll_att, mulVal, node+".roll") - # pm.connectAttr(self.roll_att, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") + node.createMulNode(self.roll_att, mulVal, o_node + ".roll") + # pm.connectAttr(self.roll_att, o_node+".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") # Twist references --------------------------------- - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.root.attr("worldInverseMatrix")) - dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.tws2_npo.attr("translate")) - + o_node = applyop.gear_mulmatrix_op( + self.eff_loc.attr("worldMatrix"), + self.root.attr("worldInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.tws2_npo.attr("rotate")) - - #spline IK for twist jnts - self.ikhUpLegTwist, self.uplegTwistCrv = aop.splineIK(self.getName("uplegTwist"), self.uplegTwistChain, parent=self.root, cParent=self.bone0 ) - self.ikhLowLegTwist, self.lowlegTwistCrv = aop.splineIK(self.getName("lowlegTwist"), self.lowlegTwistChain, parent=self.root, cParent=self.bone1 ) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.tws2_npo.attr("translate")) - #references - self.ikhUpLegRef, self.tmpCrv = aop.splineIK(self.getName("uplegRollRef"), self.uplegRollRef, parent=self.root, cParent=self.bone0 ) - self.ikhLowLegRef, self.tmpCrv = aop.splineIK(self.getName("lowlegRollRef"), self.lowlegRollRef, parent=self.root, cParent=self.eff_loc ) - self.ikhAuxTwist, self.tmpCrv = aop.splineIK(self.getName("auxTwist"), self.auxTwistChain, parent=self.root, cParent=self.eff_loc ) - - #setting connexions for ikhUpLegTwist + dm_node = pm.createNode("decomposeMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.tws2_npo.attr("rotate")) + + # spline IK for twist jnts + self.ikhUpLegTwist, self.uplegTwistCrv = applyop.splineIK( + self.getName("uplegTwist"), + self.uplegTwistChain, + parent=self.root, + cParent=self.bone0) + + self.ikhLowLegTwist, self.lowlegTwistCrv = applyop.splineIK( + self.getName("lowlegTwist"), + self.lowlegTwistChain, + parent=self.root, + cParent=self.bone1) + + # references + self.ikhUpLegRef, self.tmpCrv = applyop.splineIK( + self.getName("uplegRollRef"), + self.uplegRollRef, + parent=self.root, + cParent=self.bone0) + + self.ikhLowLegRef, self.tmpCrv = applyop.splineIK( + self.getName("lowlegRollRef"), + self.lowlegRollRef, + parent=self.root, + cParent=self.eff_loc) + + self.ikhAuxTwist, self.tmpCrv = applyop.splineIK( + self.getName("auxTwist"), + self.auxTwistChain, + parent=self.root, + cParent=self.eff_loc) + + # setting connexions for ikhUpLegTwist self.ikhUpLegTwist.attr("dTwistControlEnable").set(True) self.ikhUpLegTwist.attr("dWorldUpType").set(4) self.ikhUpLegTwist.attr("dWorldUpAxis").set(3) @@ -427,10 +764,12 @@ def addOperators(self): self.ikhUpLegTwist.attr("dWorldUpVectorY").set(0.0) self.ikhUpLegTwist.attr("dWorldUpVectorEndZ").set(1.0) self.ikhUpLegTwist.attr("dWorldUpVectorEndY").set(0.0) - pm.connectAttr(self.uplegRollRef[0].attr("worldMatrix[0]"), self.ikhUpLegTwist.attr("dWorldUpMatrix")) - pm.connectAttr(self.bone0.attr("worldMatrix[0]"), self.ikhUpLegTwist.attr("dWorldUpMatrixEnd")) + pm.connectAttr(self.uplegRollRef[0].attr("worldMatrix[0]"), + self.ikhUpLegTwist.attr("dWorldUpMatrix")) + pm.connectAttr(self.bone0.attr("worldMatrix[0]"), + self.ikhUpLegTwist.attr("dWorldUpMatrixEnd")) - #setting connexions for ikhAuxTwist + # setting connexions for ikhAuxTwist self.ikhAuxTwist.attr("dTwistControlEnable").set(True) self.ikhAuxTwist.attr("dWorldUpType").set(4) self.ikhAuxTwist.attr("dWorldUpAxis").set(3) @@ -438,154 +777,218 @@ def addOperators(self): self.ikhAuxTwist.attr("dWorldUpVectorY").set(0.0) self.ikhAuxTwist.attr("dWorldUpVectorEndZ").set(1.0) self.ikhAuxTwist.attr("dWorldUpVectorEndY").set(0.0) - pm.connectAttr(self.lowlegRollRef[0].attr("worldMatrix[0]"), self.ikhAuxTwist.attr("dWorldUpMatrix")) - pm.connectAttr(self.tws_ref.attr("worldMatrix[0]"), self.ikhAuxTwist.attr("dWorldUpMatrixEnd")) - pm.connectAttr(self.auxTwistChain[1].attr("rx"), self.ikhLowLegTwist.attr("twist")) + pm.connectAttr(self.lowlegRollRef[0].attr("worldMatrix[0]"), + self.ikhAuxTwist.attr("dWorldUpMatrix")) + pm.connectAttr(self.tws_ref.attr("worldMatrix[0]"), + self.ikhAuxTwist.attr("dWorldUpMatrixEnd")) + pm.connectAttr(self.auxTwistChain[1].attr("rx"), + self.ikhLowLegTwist.attr("twist")) pm.parentConstraint(self.bone1, self.aux_npo, maintainOffset=True) - #scale arm length for twist chain (not the squash and stretch) + # scale arm length for twist chain (not the squash and stretch) arclen_node = pm.arclen(self.uplegTwistCrv, ch=True) alAttrUpLeg = arclen_node.attr("arcLength") - muldiv_nodeArm = pm.createNode("multiplyDivide") - pm.connectAttr(arclen_node.attr("arcLength"), muldiv_nodeArm.attr("input1X")) + muldiv_nodeArm = pm.createNode("multiplyDivide") + pm.connectAttr(arclen_node.attr("arcLength"), + muldiv_nodeArm.attr("input1X")) muldiv_nodeArm.attr("input2X").set(alAttrUpLeg.get()) muldiv_nodeArm.attr("operation").set(2) for jnt in self.uplegTwistChain: - pm.connectAttr(muldiv_nodeArm.attr("outputX"),jnt.attr("sx")) + pm.connectAttr(muldiv_nodeArm.attr("outputX"), jnt.attr("sx")) - #scale forearm length for twist chain (not the squash and stretch) + # scale forearm length for twist chain (not the squash and stretch) arclen_node = pm.arclen(self.lowlegTwistCrv, ch=True) alAttrLowLeg = arclen_node.attr("arcLength") - muldiv_nodeLowLeg = pm.createNode("multiplyDivide") - pm.connectAttr(arclen_node.attr("arcLength"), muldiv_nodeLowLeg.attr("input1X")) + muldiv_nodeLowLeg = pm.createNode("multiplyDivide") + pm.connectAttr(arclen_node.attr("arcLength"), + muldiv_nodeLowLeg.attr("input1X")) muldiv_nodeLowLeg.attr("input2X").set(alAttrLowLeg.get()) muldiv_nodeLowLeg.attr("operation").set(2) for jnt in self.lowlegTwistChain: - pm.connectAttr(muldiv_nodeLowLeg.attr("outputX"),jnt.attr("sx")) + pm.connectAttr(muldiv_nodeLowLeg.attr("outputX"), jnt.attr("sx")) - #scale compensation for the first twist join + # scale compensation for the first twist join dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix[0]"), dm_node.attr("inputMatrix")) - pm.connectAttr(dm_node.attr("outputScale"), self.uplegTwistChain[0].attr("inverseScale")) - pm.connectAttr(dm_node.attr("outputScale"), self.lowlegTwistChain[0].attr("inverseScale")) - - #tangent controls - muldiv_node = pm.createNode("multiplyDivide") + pm.connectAttr(self.root.attr("worldMatrix[0]"), + dm_node.attr("inputMatrix")) + pm.connectAttr(dm_node.attr("outputScale"), + self.uplegTwistChain[0].attr("inverseScale")) + pm.connectAttr(dm_node.attr("outputScale"), + self.lowlegTwistChain[0].attr("inverseScale")) + + # tangent controls + muldiv_node = pm.createNode("multiplyDivide") muldiv_node.attr("input2X").set(-1) pm.connectAttr(self.tws1A_npo.attr("rz"), muldiv_node.attr("input1X")) - muldiv_nodeBias = pm.createNode("multiplyDivide") - pm.connectAttr(muldiv_node.attr("outputX"), muldiv_nodeBias.attr("input1X")) - pm.connectAttr(self.roundness_att, muldiv_nodeBias.attr("input2X")) - pm.connectAttr(muldiv_nodeBias.attr("outputX"), self.tws1A_loc.attr("rz") ) + muldiv_nodeBias = pm.createNode("multiplyDivide") + pm.connectAttr(muldiv_node.attr("outputX"), + muldiv_nodeBias.attr("input1X")) + pm.connectAttr(self.roundness_att, + muldiv_nodeBias.attr("input2X")) + pm.connectAttr(muldiv_nodeBias.attr("outputX"), + self.tws1A_loc.attr("rz")) if self.negate: axis = "xz" else: axis = "-xz" - aop.aimCns(self.tws1A_npo, self.tws0_loc, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) + applyop.aimCns(self.tws1A_npo, + self.tws0_loc, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) + + applyop.aimCns(self.lowlegTangentB_loc, + self.lowlegTangentA_npo, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) - aop.aimCns(self.lowlegTangentB_loc, self.lowlegTangentA_npo, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) pm.pointConstraint(self.eff_loc, self.lowlegTangentB_loc) - - muldiv_node = pm.createNode("multiplyDivide") + muldiv_node = pm.createNode("multiplyDivide") muldiv_node.attr("input2X").set(-1) pm.connectAttr(self.tws1B_npo.attr("rz"), muldiv_node.attr("input1X")) - muldiv_nodeBias = pm.createNode("multiplyDivide") - pm.connectAttr(muldiv_node.attr("outputX"), muldiv_nodeBias.attr("input1X")) - pm.connectAttr(self.roundness_att, muldiv_nodeBias.attr("input2X")) - pm.connectAttr(muldiv_nodeBias.attr("outputX"), self.tws1B_loc.attr("rz") ) + muldiv_nodeBias = pm.createNode("multiplyDivide") + pm.connectAttr(muldiv_node.attr("outputX"), + muldiv_nodeBias.attr("input1X")) + pm.connectAttr(self.roundness_att, + muldiv_nodeBias.attr("input2X")) + pm.connectAttr(muldiv_nodeBias.attr("outputX"), + self.tws1B_loc.attr("rz")) if self.negate: axis = "-xz" else: axis = "xz" - aop.aimCns(self.tws1B_npo, self.tws2_loc, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) - - aop.aimCns(self.uplegTangentA_loc, self.uplegTangentB_npo, axis=axis, wupType=2, wupVector=[0,0,1], wupObject=self.mid_ctl, maintainOffset=False) - - + applyop.aimCns(self.tws1B_npo, + self.tws2_loc, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) + + applyop.aimCns(self.uplegTangentA_loc, + self.uplegTangentB_npo, + axis=axis, + wupType=2, + wupVector=[0, 0, 1], + wupObject=self.mid_ctl, + maintainOffset=False) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - distB_node = nod.createDistNode(self.tws1_loc, self.tws2_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root_ctl.attr("sx")) - - #comp scaling issue + distA_node = node.createDistNode(self.tws0_loc, self.tws1_loc) + distB_node = node.createDistNode(self.tws1_loc, self.tws2_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root_ctl.attr("sx")) + + # comp scaling issue dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") + self.volDriver_att = div_node2 + ".outputX" - self.volDriver_att = div_node2+".outputX" + # connecting tangent scaele compensation after volume to + # avoid duplicate some nodes + distA_node = node.createDistNode(self.tws0_loc, self.mid_ctl) + distB_node = node.createDistNode(self.mid_ctl, self.tws2_loc) - # connecting tangent scaele compensation after volume to aboid duplicate some nodes ------------------------------ - distA_node = nod.createDistNode(self.tws0_loc, self.mid_ctl) - distB_node = nod.createDistNode(self.mid_ctl, self.tws2_loc) + div_nodeUpLeg = node.createDivNode(distA_node + ".distance", + dm_node.attr("outputScaleX")) + div_node2 = node.createDivNode(div_nodeUpLeg + ".outputX", + distA_node.attr("distance").get()) - div_nodeUpLeg = nod.createDivNode(distA_node+".distance", dm_node.attr("outputScaleX")) - div_node2 = nod.createDivNode(div_nodeUpLeg+".outputX", distA_node.attr("distance").get()) pm.connectAttr(div_node2.attr("outputX"), self.tws1A_loc.attr("sx")) - pm.connectAttr(div_node2.attr("outputX"), self.uplegTangentA_loc.attr("sx")) - div_nodeLowLeg = nod.createDivNode(distB_node+".distance", dm_node.attr("outputScaleX")) - div_node2 = nod.createDivNode(div_nodeLowLeg+".outputX", distB_node.attr("distance").get()) - pm.connectAttr(div_node2.attr("outputX"), self.tws1B_loc.attr("sx")) - pm.connectAttr(div_node2.attr("outputX"), self.lowlegTangentB_loc.attr("sx")) + pm.connectAttr(div_node2.attr("outputX"), + self.uplegTangentA_loc.attr("sx")) + + div_nodeLowLeg = node.createDivNode(distB_node + ".distance", + dm_node.attr("outputScaleX")) + div_node2 = node.createDivNode(div_nodeLowLeg + ".outputX", + distB_node.attr("distance").get()) - #conection curve - aop.gear_curvecns_op(self.uplegTwistCrv, [ self.uplegTangentA_loc, self.uplegTangentA_ctl, self.uplegTangentB_ctl,self.kneeTangent_ctl ]) - aop.gear_curvecns_op(self.lowlegTwistCrv, [ self.kneeTangent_ctl, self.lowlegTangentA_ctl, self.lowlegTangentB_ctl,self.lowlegTangentB_loc ]) + pm.connectAttr(div_node2.attr("outputX"), + self.tws1B_loc.attr("sx")) + pm.connectAttr(div_node2.attr("outputX"), + self.lowlegTangentB_loc.attr("sx")) - #Tangent controls vis + # conection curve + cnts = [self.uplegTangentA_loc, self.uplegTangentA_ctl, + self.uplegTangentB_ctl, self.kneeTangent_ctl] + applyop.gear_curvecns_op(self.uplegTwistCrv, cnts) + + cnts = [self.kneeTangent_ctl, self.lowlegTangentA_ctl, + self.lowlegTangentB_ctl, self.lowlegTangentB_loc] + applyop.gear_curvecns_op(self.lowlegTwistCrv, cnts) + + # Tangent controls vis for shp in self.uplegTangentA_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.uplegTangentB_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.lowlegTangentA_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.lowlegTangentB_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) for shp in self.kneeTangent_ctl.getShapes(): - pm.connectAttr( self.tangentVis_att, shp.attr("visibility")) - + pm.connectAttr(self.tangentVis_att, shp.attr("visibility")) # Divisions ---------------------------------------- - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll for i, div_cns in enumerate(self.div_cns): - if i < (self.settings["div0"]+2): - mulmat_node = aop.gear_mulmatrix_op(self.uplegTwistChain[i]+".worldMatrix", div_cns+".parentInverseMatrix") + if i < (self.settings["div0"] + 2): + mulmat_node = applyop.gear_mulmatrix_op( + self.uplegTwistChain[i] + ".worldMatrix", + div_cns + ".parentInverseMatrix") lastUpLegDiv = div_cns else: - mulmat_node = aop.gear_mulmatrix_op(self.lowlegTwistChain[i-(self.settings["div0"]+2)]+".worldMatrix", div_cns+".parentInverseMatrix") + o_node = self.lowlegTwistChain[i - (self.settings["div0"] + 2)] + mulmat_node = applyop.gear_mulmatrix_op( + o_node + ".worldMatrix", div_cns + ".parentInverseMatrix") lastLowLegDiv = div_cns - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", div_cns+".t") - pm.connectAttr(dm_node+".outputRotate", div_cns+".r") - + dm_node = node.createDecomposeMatrixNode(mulmat_node + ".output") + pm.connectAttr(dm_node + ".outputTranslate", div_cns + ".t") + pm.connectAttr(dm_node + ".outputRotate", div_cns + ".r") # Squash n Stretch - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") - - #force translation for last loc arm and foreamr - aop.gear_mulmatrix_op(self.kneeTangent_ctl.worldMatrix,lastUpLegDiv.parentInverseMatrix, lastUpLegDiv, "t" ) - aop.gear_mulmatrix_op(self.tws2_loc.worldMatrix,lastLowLegDiv.parentInverseMatrix, lastLowLegDiv, "t" ) - + o_node = applyop.gear_squashstretch2_op( + div_cns, None, pm.getAttr(self.volDriver_att), "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") + + # force translation for last loc arm and foreamr + applyop.gear_mulmatrix_op(self.kneeTangent_ctl.worldMatrix, + lastUpLegDiv.parentInverseMatrix, + lastUpLegDiv, + "t") + applyop.gear_mulmatrix_op(self.tws2_loc.worldMatrix, + lastLowLegDiv.parentInverseMatrix, + lastLowLegDiv, + "t") # NOTE: next line fix the issue on meters. - # This is special case becasuse the IK solver from mGear use the scale as lenght and we have shear - # TODO: check for a more clean and elegant solution instead of re-match the world matrix again - tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) - tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) - tra.matchWorldTransform(self.fk_ctl[0], self.match_fk0) - tra.matchWorldTransform(self.fk_ctl[1], self.match_fk1) - + # This is special case becasuse the IK solver from mGear use the + # scale as lenght and we have shear + # TODO: check for a more clean and elegant solution instead of + # re-match the world matrix again + transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0_off) + transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1_off) + transform.matchWorldTransform(self.fk_ctl[0], self.match_fk0) + transform.matchWorldTransform(self.fk_ctl[1], self.match_fk1) # match IK/FK ref pm.parentConstraint(self.bone0, self.match_fk0_off, mo=True) @@ -596,11 +999,10 @@ def addOperators(self): # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.div_cns[0] - self.relatives["knee"] = self.div_cns[self.settings["div0"] + 2] + self.relatives["knee"] = self.div_cns[self.settings["div0"] + 2] self.relatives["ankle"] = self.div_cns[-1] self.relatives["eff"] = self.end_ref @@ -614,14 +1016,21 @@ def setRelation(self): self.jointRelatives["ankle"] = len(self.div_cns) self.jointRelatives["eff"] = len(self.div_cns) - ## standard connection definition. - # @param self def connect_standard(self): self.parent.addChild(self.root) # Set the Ik Reference self.connectRef(self.settings["ikrefarray"], self.ik_cns) if self.settings["upvrefarray"]: - self.connectRef("Auto,"+self.settings["upvrefarray"], self.upv_cns, True) + self.connectRef("Auto,ikFoot," + self.settings["upvrefarray"], + self.upv_cns, + True) + else: + self.connectRef("Auto,ikFoot", self.upv_cns, True) + if self.settings["pinrefarray"]: - self.connectRef2("Auto,"+ self.settings["pinrefarray"], self.mid_cns, self.pin_att, [self.ctrn_loc], False) + self.connectRef2("Auto," + self.settings["pinrefarray"], + self.mid_cns, + self.pin_att, + [self.ctrn_loc], + False) diff --git a/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/guide.py b/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/guide.py index 041bdd8..d5f8b6b 100644 --- a/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/guide.py +++ b/scripts/mgear/maya/shifter/component/leg_2jnt_freeTangents_01/guide.py @@ -1,60 +1,34 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide Leg 2jnt freeTangent 01 module""" from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() + # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,2,0] +VERSION = [1, 2, 0] TYPE = "leg_2jnt_freeTangents_01" NAME = "leg" -DESCRIPTION = "Auto UPV. 2 bones leg with stretch, roundess, ik/fk...with classic maya roll. With Knee pin and only one central tangent" +DESCRIPTION = "Auto UPV. 2 bones leg with stretch, roundess, ik/fk...with "\ + "classic maya roll. With Knee pin and only one central tangent" ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,39 +39,33 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "knee", "ankle", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,-3,0.1]) + vTemp = transform.getOffsetPosition(self.root, [0, -3, 0.1]) self.knee = self.addLoc("knee", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6,0]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, 0]) self.ankle = self.addLoc("ankle", self.knee, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6, .5]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, .5]) self.eff = self.addLoc("eff", self.ankle, vTemp) centers = [self.root, self.knee, self.ankle, self.eff] self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") self.pUpvRefArray = self.addParam("pinrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 1.5 , 1, None) + self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1, None) self.pMirrorMid = self.addParam("mirrorMid", "bool", False) # Divisions @@ -105,34 +73,41 @@ def addParameters(self): self.pDiv1 = self.addParam("div1", "long", 2, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) + + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -140,7 +115,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -150,19 +125,26 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.populateCheck(self.settingsTab.mirrorMid_checkBox, "mirrorMid") self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) @@ -176,7 +158,6 @@ def populate_componentControls(self): for item in pinRefArrayItems: self.settingsTab.pinRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -187,27 +168,83 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - self.settingsTab.mirrorMid_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.mirrorMid_checkBox, "mirrorMid")) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.mirrorMid_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.mirrorMid_checkBox, + "mirrorMid")) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArray_listWidget.installEventFilter(self) - self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) - self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.pinRefArray_listWidget, "pinrefarray")) + self.settingsTab.pinRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + + self.settingsTab.pinRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.pinRefArray_listWidget, + "pinrefarray")) + self.settingsTab.pinRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -222,7 +259,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/leg_3jnt_01/__init__.py b/scripts/mgear/maya/shifter/component/leg_3jnt_01/__init__.py index 515ffdf..daf86b4 100644 --- a/scripts/mgear/maya/shifter/component/leg_3jnt_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/leg_3jnt_01/__init__.py @@ -1,288 +1,599 @@ -# MGEAR is under the terms of the MIT License +"""Component Leg 3 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): + +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" - self.setup = pri.addTransformFromPos(self.setupWS, self.getName("WS")) - att.lockAttribute(self.setup) + self.setup = primitive.addTransformFromPos( + self.setupWS, self.getName("WS")) + attribute.lockAttribute(self.setup) self.WIP = self.options["mode"] self.normal = self.getNormalFromPos(self.guide.apos) - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) - self.length3 = vec.getDistance(self.guide.apos[3], self.guide.apos[4]) + self.length0 = vector.getDistance(self.guide.apos[0], + self.guide.apos[1]) + self.length1 = vector.getDistance(self.guide.apos[1], + self.guide.apos[2]) + self.length2 = vector.getDistance(self.guide.apos[2], + self.guide.apos[3]) + self.length3 = vector.getDistance(self.guide.apos[3], + self.guide.apos[4]) # 3bones chain - self.chain3bones = pri.add2DChain(self.setup, self.getName("chain3bones%s_jnt"), self.guide.apos[0:4], self.normal, False, self.WIP) + self.chain3bones = primitive.add2DChain( + self.setup, + self.getName("chain3bones%s_jnt"), + self.guide.apos[0:4], + self.normal, + False, + self.WIP) # 2bones chain - self.chain2bones = pri.add2DChain(self.setup, self.getName("chain2bones%s_jnt"), self.guide.apos[0:3], self.normal, False, self.WIP) + self.chain2bones = primitive.add2DChain( + self.setup, + self.getName("chain2bones%s_jnt"), + self.guide.apos[0:3], + self.normal, + False, + self.WIP) # Leg chain - self.legBones = pri.add2DChain(self.root, self.getName("legBones%s_jnt"), self.guide.apos[0:4], self.normal, False, self.WIP) + self.legBones = primitive.add2DChain( + self.root, + self.getName("legBones%s_jnt"), + self.guide.apos[0:4], + self.normal, + False, + self.WIP) # Leg chain FK ref - self.legBonesFK = pri.add2DChain(self.root, self.getName("legFK%s_jnt"), self.guide.apos[0:4], self.normal, False, self.WIP) + self.legBonesFK = primitive.add2DChain( + self.root, + self.getName("legFK%s_jnt"), + self.guide.apos[0:4], + self.normal, + False, + self.WIP) # Leg chain IK ref - self.legBonesIK = pri.add2DChain(self.root, self.getName("legIK%s_jnt"), self.guide.apos[0:4], self.normal, False, self.WIP) + self.legBonesIK = primitive.add2DChain( + self.root, + self.getName("legIK%s_jnt"), + self.guide.apos[0:4], + self.normal, + False, + self.WIP) # 1 bone chain for upv ref - self.legChainUpvRef= pri.add2DChain(self.root, self.getName("legUpvRef%s_jnt"), [self.guide.apos[0],self.guide.apos[3]], self.normal, False, self.WIP) + self.legChainUpvRef = primitive.add2DChain( + self.root, + self.getName("legUpvRef%s_jnt"), + [self.guide.apos[0], self.guide.apos[3]], + self.normal, + False, + self.WIP) # mid joints - self.mid1_jnt = pri.addJoint(self.legBones[0], self.getName("mid1_jnt"),self.legBones[1].getMatrix(worldSpace=True), self.WIP ) + self.mid1_jnt = primitive.addJoint( + self.legBones[0], + self.getName("mid1_jnt"), + self.legBones[1].getMatrix(worldSpace=True), + self.WIP) + self.mid1_jnt.attr("radius").set(3) self.mid1_jnt.setAttr("jointOrient", 0, 0, 0) - self.mid2_jnt = pri.addJoint(self.legBones[1], self.getName("mid2_jnt"),self.legBones[2].getMatrix(worldSpace=True), self.WIP ) + + self.mid2_jnt = primitive.addJoint( + self.legBones[1], + self.getName("mid2_jnt"), + self.legBones[2].getMatrix(worldSpace=True), + self.WIP) + self.mid2_jnt.attr("radius").set(3) self.mid2_jnt.setAttr("jointOrient", 0, 0, 0) # base Controlers ----------------------------------- - t = tra.getTransformFromPos(self.guide.apos[0]) - self.root_npo = pri.addTransform(self.root, self.getName("root_npo"), t) - self.root_ctl = self.addCtl(self.root_npo, "root_ctl", t, self.color_fk, "circle", w=self.length0/6, tp=self.parentCtlTag) - att.lockAttribute(self.root_ctl, ["sx", "sy", "sz", "v"]) + t = transform.getTransformFromPos(self.guide.apos[0]) + self.root_npo = primitive.addTransform( + self.root, self.getName("root_npo"), t) + + self.root_ctl = self.addCtl(self.root_npo, + "root_ctl", + t, + self.color_fk, + "circle", + w=self.length0 / 6, + tp=self.parentCtlTag) + attribute.lockAttribute(self.root_ctl, ["sx", "sy", "sz", "v"]) # FK Controlers ----------------------------------- - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_npo = pri.addTransform(self.root_ctl, self.getName("fk0_npo"), t) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.root_ctl) - att.setKeyableAttributes(self.fk0_ctl) - - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - self.fk1_npo = pri.addTransform(self.fk0_ctl, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length1*self.n_factor,0,0), tp=self.fk0_ctl) - att.setKeyableAttributes(self.fk1_ctl) - - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk1_ctl, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk2_ctl) - - t = tra.getTransformLookingAt(self.guide.apos[3], self.guide.apos[4], self.normal, "xz", self.negate) - self.fk3_npo = pri.addTransform(self.fk2_ctl, self.getName("fk3_npo"), t) - self.fk3_ctl = self.addCtl(self.fk3_npo, "fk3_ctl", t, self.color_fk, "cube", w=self.length3, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length3*self.n_factor,0,0), tp=self.fk2_ctl) - att.setKeyableAttributes(self.fk3_ctl) - + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + "xz", + self.negate) + + self.fk0_npo = primitive.addTransform( + self.root_ctl, self.getName("fk0_npo"), t) + + self.fk0_ctl = self.addCtl( + self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0), + tp=self.root_ctl) + attribute.setKeyableAttributes(self.fk0_ctl) + + t = transform.getTransformLookingAt(self.guide.apos[1], + self.guide.apos[2], + self.normal, + "xz", + self.negate) + self.fk1_npo = primitive.addTransform( + self.fk0_ctl, self.getName("fk1_npo"), t) + self.fk1_ctl = self.addCtl( + self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length1 * self.n_factor, 0, 0), + tp=self.fk0_ctl) + attribute.setKeyableAttributes(self.fk1_ctl) + + t = transform.getTransformLookingAt(self.guide.apos[2], + self.guide.apos[3], + self.normal, + "xz", + self.negate) + + self.fk2_npo = primitive.addTransform( + self.fk1_ctl, self.getName("fk2_npo"), t) + + self.fk2_ctl = self.addCtl( + self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0), + tp=self.fk1_ctl) + + attribute.setKeyableAttributes(self.fk2_ctl) + + t = transform.getTransformLookingAt(self.guide.apos[3], + self.guide.apos[4], + self.normal, + "xz", + self.negate) + + self.fk3_npo = primitive.addTransform( + self.fk2_ctl, self.getName("fk3_npo"), t) + + self.fk3_ctl = self.addCtl( + self.fk3_npo, + "fk3_ctl", + t, + self.color_fk, + "cube", + w=self.length3, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length3 * self.n_factor, 0, 0), + tp=self.fk2_ctl) + + attribute.setKeyableAttributes(self.fk3_ctl) self.fk_ctl = [self.fk0_ctl, self.fk1_ctl, self.fk2_ctl, self.fk3_ctl] - for x in self.fk_ctl: - att.setInvertMirror(x, ["tx", "ty", "tz"]) + for x in self.fk_ctl: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) # Mid Controlers ------------------------------------ - self.knee_lvl = pri.addTransform(self.root, self.getName("knee_lvl"), tra.getTransform(self.mid1_jnt)) - self.knee_ctl = self.addCtl(self.knee_lvl, "knee_ctl", tra.getTransform(self.mid1_jnt), self.color_ik, "sphere", w=self.size*.2, tp=self.root_ctl) - att.setInvertMirror(self.knee_ctl, ["tx", "ty", "tz"]) - att.lockAttribute(self.knee_ctl, ["sx", "sy", "sz", "v"]) - self.ankle_lvl = pri.addTransform(self.root, self.getName("ankle_lvl"), tra.getTransform(self.mid2_jnt)) - self.ankle_ctl = self.addCtl(self.ankle_lvl, "ankle_ctl", tra.getTransform(self.mid2_jnt), self.color_ik, "sphere", w=self.size*.2, tp=self.knee_ctl) - att.setInvertMirror(self.ankle_ctl, ["tx", "ty", "tz"]) - att.lockAttribute(self.ankle_ctl, ["sx", "sy", "sz", "v"]) + self.knee_lvl = primitive.addTransform( + self.root, + self.getName("knee_lvl"), + transform.getTransform(self.mid1_jnt)) + + self.knee_ctl = self.addCtl( + self.knee_lvl, + "knee_ctl", + transform.getTransform(self.mid1_jnt), + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.root_ctl) + + attribute.setInvertMirror(self.knee_ctl, ["tx", "ty", "tz"]) + attribute.lockAttribute(self.knee_ctl, ["sx", "sy", "sz", "v"]) + + self.ankle_lvl = primitive.addTransform( + self.root, + self.getName("ankle_lvl"), + transform.getTransform(self.mid2_jnt)) + + self.ankle_ctl = self.addCtl( + self.ankle_lvl, + "ankle_ctl", + transform.getTransform(self.mid2_jnt), + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.knee_ctl) + + attribute.setInvertMirror(self.ankle_ctl, ["tx", "ty", "tz"]) + attribute.lockAttribute(self.ankle_ctl, ["sx", "sy", "sz", "v"]) # IK controls -------------------------------------------------------- - #foot IK + # foot IK if self.settings["ikOri"]: - t = tra.getTransformLookingAt(self.guide.pos["foot"], self.guide.pos["eff"], self.x_axis, "zx", False) + t = transform.getTransformLookingAt(self.guide.pos["foot"], + self.guide.pos["eff"], + self.x_axis, + "zx", + False) else: - t = tra.getTransformLookingAt(self.guide.apos[3], self.guide.apos[4], self.normal, "z-x", False) - - self.ik_cns = pri.addTransform(self.root_ctl, self.getName("ik_cns"), t) - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", t, self.color_ik, "null", w=self.size*.12, tp=self.ankle_ctl) - att.setInvertMirror(self.ikcns_ctl, ["tx"]) - att.lockAttribute(self.ikcns_ctl, ["sx", "sy", "sz", "v"]) - - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", t, self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl) - att.setRotOrder(self.ik_ctl, "XZY") - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) - att.lockAttribute(self.ik_ctl, ["sx", "sy", "sz", "v"]) + t = transform.getTransformLookingAt(self.guide.apos[3], + self.guide.apos[4], + self.normal, + "z-x", + False) + + self.ik_cns = primitive.addTransform( + self.root_ctl, self.getName("ik_cns"), t) + + self.ikcns_ctl = self.addCtl(self.ik_cns, + "ikcns_ctl", + t, + self.color_ik, + "null", + w=self.size * .12, + tp=self.ankle_ctl) + + attribute.setInvertMirror(self.ikcns_ctl, ["tx"]) + attribute.lockAttribute(self.ikcns_ctl, ["sx", "sy", "sz", "v"]) + + self.ik_ctl = self.addCtl(self.ikcns_ctl, + "ik_ctl", + t, + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + attribute.setKeyableAttributes(self.ik_ctl) + attribute.setRotOrder(self.ik_ctl, "XZY") + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + attribute.lockAttribute(self.ik_ctl, ["sx", "sy", "sz", "v"]) # 2 bones ik layer - self.ik2b_ikCtl_ref = pri.addTransform(self.ik_ctl, self.getName("ik2B_A_ref"), t) - self.ik2b_bone_ref = pri.addTransform(self.chain3bones[3], self.getName("ik2B_B_ref"), t) - self.ik2b_blend = pri.addTransform(self.ik_ctl, self.getName("ik2B_blend"), t) - - self.roll_ctl = self.addCtl(self.ik2b_blend, "roll_ctl", t, self.color_ik, "crossarrow", w=self.length2*.5*self.n_factor, tp=self.ik_ctl) - self.ik2b_ik_npo = pri.addTransform(self.roll_ctl, self.getName("ik2B_ik_npo"), tra.getTransform(self.chain3bones[-1])) - self.ik2b_ik_ref = pri.addTransformFromPos(self.ik2b_ik_npo, self.getName("ik2B_ik_ref"), self.guide.pos["ankle"]) - att.lockAttribute(self.roll_ctl, ["tx", "ty", "tz", "sx", "sy", "sz", "v"]) + self.ik2b_ikCtl_ref = primitive.addTransform( + self.ik_ctl, self.getName("ik2B_A_ref"), t) + self.ik2b_bone_ref = primitive.addTransform( + self.chain3bones[3], self.getName("ik2B_B_ref"), t) + self.ik2b_blend = primitive.addTransform( + self.ik_ctl, self.getName("ik2B_blend"), t) + + self.roll_ctl = self.addCtl(self.ik2b_blend, + "roll_ctl", + t, + self.color_ik, + "crossarrow", + w=self.length2 * .5 * self.n_factor, + tp=self.ik_ctl) + + self.ik2b_ik_npo = primitive.addTransform( + self.roll_ctl, + self.getName("ik2B_ik_npo"), + transform.getTransform(self.chain3bones[-1])) + + self.ik2b_ik_ref = primitive.addTransformFromPos( + self.ik2b_ik_npo, + self.getName("ik2B_ik_ref"), + self.guide.pos["ankle"]) + + attribute.lockAttribute( + self.roll_ctl, ["tx", "ty", "tz", "sx", "sy", "sz", "v"]) # upv v = self.guide.apos[2] - self.guide.apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 + v *= self.size * .5 v += self.guide.apos[1] - self.upv_lvl = pri.addTransformFromPos(self.root, self.getName("upv_lvl"), v) - self.upv_cns = pri.addTransformFromPos(self.upv_lvl, self.getName("upv_cns"), v) + self.upv_lvl = primitive.addTransformFromPos( + self.root, self.getName("upv_lvl"), v) + self.upv_cns = primitive.addTransformFromPos( + self.upv_lvl, self.getName("upv_cns"), v) + + self.upv_ctl = self.addCtl(self.upv_cns, + "upv_ctl", + transform.getTransform(self.upv_cns), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.ik_ctl) - self.upv_ctl = self.addCtl(self.upv_cns, "upv_ctl", tra.getTransform(self.upv_cns), self.color_ik, "diamond", w=self.size*.12, tp=self.ik_ctl) - att.setInvertMirror(self.upv_ctl, ["tx"]) - att.setKeyableAttributes(self.upv_ctl, ["tx", "ty", "tz"]) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) + attribute.setKeyableAttributes(self.upv_ctl, ["tx", "ty", "tz"]) - # Soft IK objects 3 bones chain -------------------------------------------------------------------------------------------- - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["foot"], self.x_axis, "zx", False) - self.aim_tra = pri.addTransform(self.root_ctl, self.getName("aimSoftIK"), t) + # Soft IK objects 3 bones chain -------------------------------- + t = transform.getTransformLookingAt(self.guide.pos["root"], + self.guide.pos["foot"], + self.x_axis, + "zx", + False) - t = tra.getTransformFromPos(self.guide.pos["foot"]) - self.wristSoftIK = pri.addTransform(self.aim_tra, self.getName("wristSoftIK"), t) + self.aim_tra = primitive.addTransform( + self.root_ctl, self.getName("aimSoftIK"), t) - self.softblendLoc = pri.addTransform(self.root, self.getName("softblendLoc"), t) + t = transform.getTransformFromPos(self.guide.pos["foot"]) + self.wristSoftIK = primitive.addTransform( + self.aim_tra, self.getName("wristSoftIK"), t) - # Soft IK objects 2 Bones chain -------------------------------------------------------------------------------------------- - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["ankle"], self.x_axis, "zx", False) - self.aim_tra2 = pri.addTransform(self.root_ctl, self.getName("aimSoftIK2"), t) + self.softblendLoc = primitive.addTransform( + self.root, self.getName("softblendLoc"), t) - t = tra.getTransformFromPos(self.guide.pos["ankle"]) - self.ankleSoftIK = pri.addTransform(self.aim_tra2, self.getName("ankleSoftIK"), t) + # Soft IK objects 2 Bones chain ---------------------------- + t = transform.getTransformLookingAt(self.guide.pos["root"], + self.guide.pos["ankle"], + self.x_axis, + "zx", + False) - self.softblendLoc2 = pri.addTransform(self.root, self.getName("softblendLoc2"), t) + self.aim_tra2 = primitive.addTransform( + self.root_ctl, self.getName("aimSoftIK2"), t) + + t = transform.getTransformFromPos(self.guide.pos["ankle"]) + + self.ankleSoftIK = primitive.addTransform( + self.aim_tra2, self.getName("ankleSoftIK"), t) + + self.softblendLoc2 = primitive.addTransform( + self.root, self.getName("softblendLoc2"), t) # References -------------------------------------- - self.ik_ref = pri.addTransform(self.ik_ctl, self.getName("ik_ref"), tra.getTransform(self.ik_ctl)) - self.fk_ref = pri.addTransform(self.fk_ctl[3], self.getName("fk_ref"), tra.getTransform(self.ik_ctl)) + self.ik_ref = primitive.addTransform( + self.ik_ctl, + self.getName("ik_ref"), + transform.getTransform(self.ik_ctl)) + self.fk_ref = primitive.addTransform( + self.fk_ctl[3], + self.getName("fk_ref"), + transform.getTransform(self.ik_ctl)) # twist references -------------------------------------- - self.rollRef = pri.add2DChain(self.root, self.getName("rollChain"), self.guide.apos[:2], self.normal, False, self.WIP) + self.rollRef = primitive.add2DChain(self.root, + self.getName("rollChain"), + self.guide.apos[:2], + self.normal, + False, + self.WIP) + + self.tws0_loc = primitive.addTransform( + self.rollRef[0], + self.getName("tws0_loc"), + transform.getTransform(self.legBones[0])) + + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.legBones[0])) - self.tws0_loc = pri.addTransform(self.rollRef[0], self.getName("tws0_loc"), tra.getTransform(self.legBones[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.legBones[0])) self.tws0_rot.setAttr("sx", .001) - self.tws1_loc = pri.addTransform(self.mid1_jnt, self.getName("tws1_loc"), tra.getTransform(self.mid1_jnt)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.mid1_jnt)) + self.tws1_loc = primitive.addTransform( + self.mid1_jnt, + self.getName("tws1_loc"), + transform.getTransform(self.mid1_jnt)) + + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.mid1_jnt)) + self.tws1_rot.setAttr("sx", .001) - self.tws2_loc = pri.addTransform(self.mid2_jnt, self.getName("tws2_loc"), tra.getTransform(self.mid2_jnt)) - self.tws2_rot = pri.addTransform(self.tws2_loc, self.getName("tws2_rot"), tra.getTransform(self.mid2_jnt)) + self.tws2_loc = primitive.addTransform( + self.mid2_jnt, + self.getName("tws2_loc"), + transform.getTransform(self.mid2_jnt)) + + self.tws2_rot = primitive.addTransform( + self.tws2_loc, + self.getName("tws2_rot"), + transform.getTransform(self.mid2_jnt)) + self.tws2_rot.setAttr("sx", .001) - self.tws3_loc = pri.addTransform(self.legBones[3], self.getName("tws3_loc"), tra.getTransform(self.legBones[3])) - self.tws3_rot = pri.addTransform(self.tws3_loc, self.getName("tws3_rot"), tra.getTransform(self.legBones[3])) + self.tws3_loc = primitive.addTransform( + self.legBones[3], + self.getName("tws3_loc"), + transform.getTransform(self.legBones[3])) + + self.tws3_rot = primitive.addTransform( + self.tws3_loc, + self.getName("tws3_rot"), + transform.getTransform(self.legBones[3])) + self.tws3_rot.setAttr("sx", .001) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the knee and one ankle - self.divisions = self.settings["div0"] + self.settings["div1"] + self.settings["div2"] + 4 + # We have at least one division at the start, the end and one for + # the knee and one ankle + o_set = self.settings + self.divisions = o_set["div0"] + o_set["div1"] + o_set["div2"] + 4 self.div_cns = [] for i in range(self.divisions): - div_cns = pri.addTransform(self.root_ctl, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform(self.root_ctl, + self.getName("div%s_loc" % i)) self.div_cns.append(div_cns) self.jnt_pos.append([div_cns, i]) # End reference ------------------------------------ # To help the deformation on the foot - self.end_ref = pri.addTransform(self.tws3_rot, self.getName("end_ref"), tra.getTransform(self.legBones[3])) + self.end_ref = primitive.addTransform( + self.tws3_rot, + self.getName("end_ref"), + transform.getTransform(self.legBones[3])) self.jnt_pos.append([self.end_ref, 'end']) - def addAttributes(self): - self.blend_att = self.addAnimParam("blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) - self.fullIK_attr = self.addAnimParam("fullIK", "Full 3 bones IK", "double", self.settings["full3BonesIK"],0,1) - self.soft_attr = self.addAnimParam("softIKRange", "Soft IK Range", "double", 0.0001, 0.0001,100) - self.softSpeed_attr = self.addAnimParam("softIKSpeed", "Soft IK Speed", "double", 2.5,1.001,10) - self.stretch_attr = self.addAnimParam("stretch", "Stretch", "double", 0,0,1) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - - self.roundnessKnee_att = self.addAnimParam("roundnessKnee", "Roundness Knee", "double", 0, 0, self.size) - self.roundnessAnkle_att = self.addAnimParam("roundnessAnkle", "Roundness Ankle", "double", 0, 0, self.size) - - self.boneALenghtMult_attr = self.addAnimParam("boneALenMult", "Bone A Mult", "double", 1) - self.boneBLenghtMult_attr = self.addAnimParam("boneBLenMult", "Bone B Mult", "double", 1) - self.boneCLenghtMult_attr = self.addAnimParam("boneCLenMult", "Bone C Mult", "double", 1) - self.boneALenght_attr = self.addAnimParam("boneALen", "Bone A Length", "double", self.length0, keyable=False) - self.boneBLenght_attr = self.addAnimParam("boneBLen", "Bone B Length", "double", self.length1, keyable=False) - self.boneCLenght_attr = self.addAnimParam("boneCLen", "Bone C Length", "double", self.length2, keyable=False) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Blend", "double", self.settings["blend"], 0, 1) + self.fullIK_attr = self.addAnimParam( + "fullIK", + "Full 3 bones IK", + "double", + self.settings["full3BonesIK"], 0, 1) + self.soft_attr = self.addAnimParam( + "softIKRange", "Soft IK Range", "double", 0.0001, 0.0001, 100) + self.softSpeed_attr = self.addAnimParam( + "softIKSpeed", "Soft IK Speed", "double", 2.5, 1.001, 10) + self.stretch_attr = self.addAnimParam( + "stretch", "Stretch", "double", 0, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + + self.roundnessKnee_att = self.addAnimParam( + "roundnessKnee", "Roundness Knee", "double", 0, 0, self.size) + self.roundnessAnkle_att = self.addAnimParam( + "roundnessAnkle", "Roundness Ankle", "double", 0, 0, self.size) + + self.boneALenghtMult_attr = self.addAnimParam( + "boneALenMult", "Bone A Mult", "double", 1) + self.boneBLenghtMult_attr = self.addAnimParam( + "boneBLenMult", "Bone B Mult", "double", 1) + self.boneCLenghtMult_attr = self.addAnimParam( + "boneCLenMult", "Bone C Mult", "double", 1) + self.boneALenght_attr = self.addAnimParam( + "boneALen", "Bone A Length", "double", self.length0, keyable=False) + self.boneBLenght_attr = self.addAnimParam( + "boneBLen", "Bone B Length", "double", self.length1, keyable=False) + self.boneCLenght_attr = self.addAnimParam( + "boneCLen", "Bone C Length", "double", self.length2, keyable=False) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["upvrefarray"]: ref_names = self.settings["upvrefarray"].split(",") ref_names = ["Auto"] + ref_names if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, ref_names) + self.upvref_att = self.addAnimEnumParam("upvref", + "UpV Ref", + 0, + ref_names) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] - - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) - - defValu = self.chain3bones[1].attr("jointOrientZ").get() /2 - self.kneeFlipOffset_att = self.addSetupParam("kneeFlipOffset", "Knee Flip Offset", "double", defValu, -180, 180) - defValu = self.chain3bones[2].attr("jointOrientZ").get()/2 - self.ankleFlipOffset_att = self.addSetupParam("ankleFlipOffset", "Ankle Flip Offset", "double", defValu, -180, 180) - + self.st_value = fcurve.getFCurveValues(self.settings["st_profile"], + self.divisions) + self.sq_value = fcurve.getFCurveValues(self.settings["sq_profile"], + self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], + -1, + 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam( + "resample", "Resample", "bool", True) + self.absolute_att = self.addSetupParam( + "absolute", "Absolute", "bool", False) + + defValu = self.chain3bones[1].attr("jointOrientZ").get() / 2 + self.kneeFlipOffset_att = self.addSetupParam("kneeFlipOffset", + "Knee Flip Offset", + "double", + defValu, + -180, + 180) + defValu = self.chain3bones[2].attr("jointOrientZ").get() / 2 + self.ankleFlipOffset_att = self.addSetupParam("ankleFlipOffset", + "Ankle Flip Offset", + "double", + defValu, + -180, + 180) + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + # Soft condition + soft_cond_node = node.createConditionNode( + self.soft_attr, + 0.0001, + 4, + 0.0001, + self.soft_attr) + self.soft_attr_cond = soft_cond_node.outColorR if self.settings["ikSolver"]: self.ikSolver = "ikRPsolver" @@ -290,226 +601,370 @@ def addOperators(self): pm.mel.eval("ikSpringSolver;") self.ikSolver = "ikSpringSolver" - # 1 bone chain Upv ref ===================================================================================== - self.ikHandleUpvRef = pri.addIkHandle(self.root, self.getName("ikHandleLegChainUpvRef"), self.legChainUpvRef, "ikSCsolver") + # 1 bone chain Upv ref =============================== + self.ikHandleUpvRef = primitive.addIkHandle( + self.root, + self.getName("ikHandleLegChainUpvRef"), + self.legChainUpvRef, + "ikSCsolver") pm.pointConstraint(self.ik_ctl, self.ikHandleUpvRef) - pm.parentConstraint( self.legChainUpvRef[0], self.upv_cns, mo=True) + pm.parentConstraint(self.legChainUpvRef[0], self.upv_cns, mo=True) - # mid joints ===================================================================================== - for xjnt, midJ in zip(self.legBones[1:3], [self.mid1_jnt, self.mid2_jnt]): - nod.createPairBlend(None, xjnt, .5, 1, midJ) - pm.connectAttr(xjnt+".translate", midJ+".translate", f=True) + # mid joints ================================================ + for xjnt, midJ in zip(self.legBones[1:3], + [self.mid1_jnt, self.mid2_jnt]): + node.createPairBlend(None, xjnt, .5, 1, midJ) + pm.connectAttr(xjnt + ".translate", midJ + ".translate", f=True) pm.parentConstraint(self.mid1_jnt, self.knee_lvl) pm.parentConstraint(self.mid2_jnt, self.ankle_lvl) - #joint length multiply - multJnt1_node = nod.createMulNode(self.boneALenght_attr, self.boneALenghtMult_attr) - multJnt2_node = nod.createMulNode(self.boneBLenght_attr, self.boneBLenghtMult_attr) - multJnt3_node = nod.createMulNode(self.boneCLenght_attr, self.boneCLenghtMult_attr) + # joint length multiply + multJnt1_node = node.createMulNode(self.boneALenght_attr, + self.boneALenghtMult_attr) + multJnt2_node = node.createMulNode(self.boneBLenght_attr, + self.boneBLenghtMult_attr) + multJnt3_node = node.createMulNode(self.boneCLenght_attr, + self.boneCLenghtMult_attr) - # # IK 3 bones ====================================================================================================== + # # IK 3 bones =============================================== - self.ikHandle = pri.addIkHandle(self.softblendLoc, self.getName("ik3BonesHandle"), self.chain3bones, self.ikSolver, self.upv_ctl) + self.ikHandle = primitive.addIkHandle(self.softblendLoc, + self.getName("ik3BonesHandle"), + self.chain3bones, + self.ikSolver, + self.upv_ctl) # TwistTest - if [round(elem, 4) for elem in tra.getTranslation(self.chain3bones[1])] != [round(elem, 4) for elem in self.guide.apos[1]]: - add_nodeTwist = nod.createAddNode(180.0, self.roll_att) - # pm.connectAttr(add_nodeTwist+".output", self.ikHandle.attr("twist")) + if [round(elem, 4) + for elem in transform.getTranslation(self.chain3bones[1])] \ + != [round(elem, 4) for elem in self.guide.apos[1]]: + add_nodeTwist = node.createAddNode(180.0, self.roll_att) else: - add_nodeTwist = nod.createAddNode(0, self.roll_att) - # pm.connectAttr(self.roll_att, self.ikHandle.attr("twist")) + add_nodeTwist = node.createAddNode(0, self.roll_att) if self.negate: mulVal = 1 else: mulVal = -1 - nod.createMulNode(add_nodeTwist+".output", mulVal, self.ikHandle.attr("twist")) - # pm.connectAttr(add_nodeTwist+".output", self.ikHandle.attr("twist")) + node.createMulNode( + add_nodeTwist + ".output", mulVal, self.ikHandle.attr("twist")) # stable spring solver doble rotation pm.pointConstraint(self.root_ctl, self.chain3bones[0]) # softIK 3 bones operators - aop.aimCns(self.aim_tra, self.ik_ref, axis="zx", wupType=4, wupVector=[1,0,0], wupObject=self.root_ctl, maintainOffset=False) + applyop.aimCns(self.aim_tra, + self.ik_ref, + axis="zx", + wupType=4, + wupVector=[1, 0, 0], + wupObject=self.root_ctl, + maintainOffset=False) + + plusTotalLength_node = node.createPlusMinusAverage1D( + [multJnt1_node.attr("outputX"), + multJnt2_node.attr("outputX"), + multJnt3_node.attr("outputX")]) + + subtract1_node = node.createPlusMinusAverage1D( + [plusTotalLength_node.attr("output1D"), self.soft_attr_cond], 2) + + distance1_node = node.createDistNode(self.ik_ref, self.aim_tra) + div1_node = node.createDivNode(1.0, self.rig.global_ctl + ".sx") + mult1_node = node.createMulNode(distance1_node + ".distance", + div1_node + ".outputX") + subtract2_node = node.createPlusMinusAverage1D( + [mult1_node.attr("outputX"), subtract1_node.attr("output1D")], 2) + div2_node = node.createDivNode(subtract2_node + ".output1D", + self.soft_attr_cond) + mult2_node = node.createMulNode(-1, div2_node + ".outputX") + power_node = node.createPowNode(self.softSpeed_attr, + mult2_node + ".outputX") + mult3_node = node.createMulNode(self.soft_attr_cond, + power_node + ".outputX") + subtract3_node = node.createPlusMinusAverage1D( + [plusTotalLength_node.attr("output1D"), + mult3_node.attr("outputX")], + 2) + + cond1_node = node.createConditionNode( + self.soft_attr_cond, + 0, + 2, + subtract3_node + ".output1D", + plusTotalLength_node + ".output1D") + + cond2_node = node.createConditionNode(mult1_node + ".outputX", + subtract1_node + ".output1D", + 2, cond1_node + ".outColorR", + mult1_node + ".outputX") + + pm.connectAttr(cond2_node + ".outColorR", self.wristSoftIK + ".tz") + + # soft blend + pc_node = pm.pointConstraint(self.wristSoftIK, + self.ik_ref, + self.softblendLoc) + node.createReverseNode(self.stretch_attr, + pc_node + ".target[0].targetWeight") + pm.connectAttr(self.stretch_attr, + pc_node + ".target[1].targetWeight", + f=True) + + # Stretch + distance2_node = node.createDistNode(self.softblendLoc, + self.wristSoftIK) + mult4_node = node.createMulNode(distance2_node + ".distance", + div1_node + ".outputX") + + # bones + for i, mulNode in enumerate([multJnt1_node, + multJnt2_node, + multJnt3_node]): + + div3_node = node.createDivNode(mulNode + ".outputX", + plusTotalLength_node + ".output1D") + + mult5_node = node.createMulNode(mult4_node + ".outputX", + div3_node + ".outputX") + + mult6_node = node.createMulNode(self.stretch_attr, + mult5_node + ".outputX") + + node.createPlusMinusAverage1D( + [mulNode.attr("outputX"), mult6_node.attr("outputX")], + 1, + self.chain3bones[i + 1] + ".tx") + + # IK 2 bones =============================================== + + self.ikHandle2 = primitive.addIkHandle(self.softblendLoc2, + self.getName("ik2BonesHandle"), + self.chain2bones, + self.ikSolver, + self.upv_ctl) + + node.createMulNode(self.roll_att, mulVal, self.ikHandle2.attr("twist")) - plusTotalLength_node = nod.createPlusMinusAverage1D([multJnt1_node.attr("outputX"), multJnt2_node.attr("outputX"), multJnt3_node.attr("outputX")]) - subtract1_node = nod.createPlusMinusAverage1D([plusTotalLength_node.attr("output1D"), self.soft_attr],2) + # stable spring solver doble rotation + pm.pointConstraint(self.root_ctl, self.chain2bones[0]) - distance1_node = nod.createDistNode(self.ik_ref, self.aim_tra) - div1_node = nod.createDivNode(1.0, self.rig.global_ctl+".sx") - mult1_node = nod.createMulNode(distance1_node+".distance", div1_node+".outputX") - subtract2_node = nod.createPlusMinusAverage1D([mult1_node.attr("outputX"), subtract1_node.attr("output1D")],2) - div2_node = nod.createDivNode(subtract2_node+".output1D", self.soft_attr) - mult2_node = nod.createMulNode(-1, div2_node+".outputX") - power_node = nod.createPowNode( self.softSpeed_attr, mult2_node+".outputX") - mult3_node = nod.createMulNode(self.soft_attr, power_node+".outputX") - subtract3_node = nod.createPlusMinusAverage1D([plusTotalLength_node.attr("output1D"), mult3_node.attr("outputX")],2) + parentc_node = pm.parentConstraint( + self.ik2b_ikCtl_ref, self.ik2b_bone_ref, self.ik2b_blend) - cond1_node = nod.createConditionNode(self.soft_attr, 0, 2,subtract3_node+".output1D", plusTotalLength_node+".output1D") - cond2_node = nod.createConditionNode(mult1_node+".outputX", subtract1_node+".output1D", 2,cond1_node+".outColorR", mult1_node+".outputX") + node.createReverseNode(self.fullIK_attr, + parentc_node + ".target[0].targetWeight") - pm.connectAttr(cond2_node+".outColorR", self.wristSoftIK+".tz") + pm.connectAttr(self.fullIK_attr, + parentc_node + ".target[1].targetWeight", f=True) - #soft blend - pc_node = pm.pointConstraint( self.wristSoftIK, self.ik_ref, self.softblendLoc) - nod.createReverseNode(self.stretch_attr, pc_node+".target[0].targetWeight") - pm.connectAttr(self.stretch_attr, pc_node+".target[1].targetWeight", f=True) + # softIK 2 bones operators + applyop.aimCns(self.aim_tra2, + self.ik2b_ik_ref, + axis="zx", + wupType=4, + wupVector=[1, 0, 0], + wupObject=self.root_ctl, + maintainOffset=False) - #Stretch - distance2_node = nod.createDistNode(self.softblendLoc, self.wristSoftIK) - mult4_node = nod.createMulNode(distance2_node+".distance", div1_node+".outputX") + plusTotalLength_node = node.createPlusMinusAverage1D( + [multJnt1_node.attr("outputX"), multJnt2_node.attr("outputX")]) - #bones - for i, mulNode in enumerate([multJnt1_node, multJnt2_node, multJnt3_node]): - div3_node = nod.createDivNode(mulNode+".outputX", plusTotalLength_node+".output1D") - mult5_node = nod.createMulNode(mult4_node+".outputX", div3_node+".outputX") - mult6_node = nod.createMulNode(self.stretch_attr, mult5_node+".outputX") - nod.createPlusMinusAverage1D([mulNode.attr("outputX"), mult6_node.attr("outputX")],1, self.chain3bones[i+1]+".tx") + subtract1_node = node.createPlusMinusAverage1D( + [plusTotalLength_node.attr("output1D"), self.soft_attr_cond], 2) + distance1_node = node.createDistNode(self.ik2b_ik_ref, self.aim_tra2) + div1_node = node.createDivNode(1, self.rig.global_ctl + ".sx") + mult1_node = node.createMulNode(distance1_node + ".distance", + div1_node + ".outputX") - # IK 2 bones ====================================================================================================== + subtract2_node = node.createPlusMinusAverage1D( + [mult1_node.attr("outputX"), subtract1_node.attr("output1D")], 2) - self.ikHandle2 = pri.addIkHandle(self.softblendLoc2, self.getName("ik2BonesHandle"), self.chain2bones, self.ikSolver, self.upv_ctl) + div2_node = node.createDivNode(subtract2_node + ".output1D", + self.soft_attr_cond) - nod.createMulNode(self.roll_att, mulVal,self.ikHandle2.attr("twist")) - # pm.connectAttr(self.roll_att, self.ikHandle2.attr("twist")) + mult2_node = node.createMulNode(-1, div2_node + ".outputX") - # stable spring solver doble rotation - pm.pointConstraint(self.root_ctl, self.chain2bones[0]) - - parentc_node = pm.parentConstraint( self.ik2b_ikCtl_ref, self.ik2b_bone_ref, self.ik2b_blend) - nod.createReverseNode(self.fullIK_attr, parentc_node+".target[0].targetWeight") - pm.connectAttr(self.fullIK_attr, parentc_node+".target[1].targetWeight", f=True) + power_node = node.createPowNode(self.softSpeed_attr, + mult2_node + ".outputX") - # softIK 2 bones operators - aop.aimCns(self.aim_tra2, self.ik2b_ik_ref, axis="zx", wupType=4, wupVector=[1,0,0], wupObject=self.root_ctl, maintainOffset=False) + mult3_node = node.createMulNode(self.soft_attr_cond, + power_node + ".outputX") - plusTotalLength_node = nod.createPlusMinusAverage1D([multJnt1_node.attr("outputX"), multJnt2_node.attr("outputX")]) - subtract1_node = nod.createPlusMinusAverage1D([plusTotalLength_node.attr("output1D"), self.soft_attr], 2) - distance1_node = nod.createDistNode(self.ik2b_ik_ref, self.aim_tra2) - div1_node = nod.createDivNode(1, self.rig.global_ctl+".sx") + subtract3_node = node.createPlusMinusAverage1D( + [plusTotalLength_node.attr("output1D"), + mult3_node.attr("outputX")], + 2) - mult1_node = nod.createMulNode(distance1_node+".distance", div1_node+".outputX") - subtract2_node = nod.createPlusMinusAverage1D([mult1_node.attr("outputX"), subtract1_node.attr("output1D")], 2) - div2_node = nod.createDivNode(subtract2_node+".output1D", self.soft_attr) - mult2_node = nod.createMulNode(-1, div2_node+".outputX") - power_node = nod.createPowNode(self.softSpeed_attr, mult2_node+".outputX") - mult3_node = nod.createMulNode(self.soft_attr, power_node+".outputX" ) - subtract3_node = nod.createPlusMinusAverage1D([plusTotalLength_node.attr("output1D"),mult3_node.attr("outputX")], 2) + cond1_node = node.createConditionNode( + self.soft_attr_cond, + 0, + 2, + subtract3_node + ".output1D", + plusTotalLength_node + ".output1D") - cond1_node = nod.createConditionNode(self.soft_attr, 0, 2,subtract3_node+".output1D", plusTotalLength_node+".output1D") - cond2_node = nod.createConditionNode(mult1_node+".outputX", subtract1_node+".output1D", 2,cond1_node+".outColorR", mult1_node+".outputX") + cond2_node = node.createConditionNode(mult1_node + ".outputX", + subtract1_node + ".output1D", + 2, + cond1_node + ".outColorR", + mult1_node + ".outputX") - pm.connectAttr(cond2_node+".outColorR", self.ankleSoftIK+".tz") + pm.connectAttr(cond2_node + ".outColorR", self.ankleSoftIK + ".tz") - #soft blend - pc_node = pm.pointConstraint( self.ankleSoftIK, self.ik2b_ik_ref, self.softblendLoc2) - nod.createReverseNode(self.stretch_attr, pc_node+".target[0].targetWeight") - pm.connectAttr(self.stretch_attr, pc_node+".target[1].targetWeight", f=True) + # soft blend + pc_node = pm.pointConstraint(self.ankleSoftIK, + self.ik2b_ik_ref, + self.softblendLoc2) + node.createReverseNode(self.stretch_attr, + pc_node + ".target[0].targetWeight") + pm.connectAttr(self.stretch_attr, + pc_node + ".target[1].targetWeight", + f=True) - #Stretch - distance2_node = nod.createDistNode(self.softblendLoc2, self.ankleSoftIK) - mult4_node = nod.createMulNode(distance2_node+".distance", div1_node+".outputX") + # Stretch + distance2_node = node.createDistNode(self.softblendLoc2, + self.ankleSoftIK) + mult4_node = node.createMulNode(distance2_node + ".distance", + div1_node + ".outputX") for i, mulNode in enumerate([multJnt1_node, multJnt2_node]): - div3_node = nod.createDivNode(mulNode+".outputX", plusTotalLength_node+".output1D") - mult5_node = nod.createMulNode(mult4_node+".outputX", div3_node+".outputX") - mult6_node = nod.createMulNode(self.stretch_attr, mult5_node+".outputX") - nod.createPlusMinusAverage1D([mulNode.attr("outputX"), mult6_node.attr("outputX")],1, self.chain2bones[i+1]+".tx") + div3_node = node.createDivNode(mulNode + ".outputX", + plusTotalLength_node + ".output1D") + + mult5_node = node.createMulNode(mult4_node + ".outputX", + div3_node + ".outputX") + mult6_node = node.createMulNode(self.stretch_attr, + mult5_node + ".outputX") + node.createPlusMinusAverage1D([mulNode.attr("outputX"), + mult6_node.attr("outputX")], + 1, + self.chain2bones[i + 1] + ".tx") - ### IK/FK connections + # IK/FK connections for i, x in enumerate(self.fk_ctl): - pm.parentConstraint( x, self.legBonesFK[i], mo=True) + pm.parentConstraint(x, self.legBonesFK[i], mo=True) - for i, x in enumerate([self.chain2bones[0],self.chain2bones[1]] ): - pm.parentConstraint( x, self.legBonesIK[i], mo=True) + for i, x in enumerate([self.chain2bones[0], self.chain2bones[1]]): + pm.parentConstraint(x, self.legBonesIK[i], mo=True) pm.pointConstraint(self.ik2b_ik_ref, self.legBonesIK[2]) - aop.aimCns(self.legBonesIK[2], self.roll_ctl, axis="xy", wupType=4, wupVector=[0,1,0], wupObject=self.legBonesIK[1], maintainOffset=False) - pm.connectAttr( self.chain3bones[-1].attr("tx"), self.legBonesIK[-1].attr("tx")) + applyop.aimCns(self.legBonesIK[2], + self.roll_ctl, + axis="xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.legBonesIK[1], + maintainOffset=False) + + pm.connectAttr(self.chain3bones[-1].attr("tx"), + self.legBonesIK[-1].attr("tx")) # foot twist roll pm.orientConstraint(self.ik_ref, self.legBonesIK[-1], mo=True) - nod.createMulNode(-1, self.chain3bones[-1].attr("tx"), self.ik2b_ik_ref.attr("tx")) + node.createMulNode( + -1, self.chain3bones[-1].attr("tx"), self.ik2b_ik_ref.attr("tx")) for i, x in enumerate(self.legBones): - nod.createPairBlend(self.legBonesFK[i], self.legBonesIK[i], self.blend_att, 1, x) - + node.createPairBlend( + self.legBonesFK[i], self.legBonesIK[i], self.blend_att, 1, x) # Twist references ---------------------------------------- - self.ikhArmRef, self.tmpCrv = aop.splineIK(self.getName("legRollRef"), self.rollRef, parent=self.root, cParent=self.legBones[0] ) + self.ikhArmRef, self.tmpCrv = applyop.splineIK( + self.getName("legRollRef"), + self.rollRef, + parent=self.root, + cParent=self.legBones[0]) initRound = .001 multVal = 1 - multTangent_node = nod.createMulNode(self.roundnessKnee_att, multVal) - add_node = nod.createAddNode(multTangent_node+".outputX", initRound) - pm.connectAttr(add_node+".output", self.tws1_rot.attr("sx")) + multTangent_node = node.createMulNode(self.roundnessKnee_att, multVal) + add_node = node.createAddNode(multTangent_node + ".outputX", initRound) + pm.connectAttr(add_node + ".output", self.tws1_rot.attr("sx")) for x in ["translate"]: pm.connectAttr(self.knee_ctl.attr(x), self.tws1_loc.attr(x)) for x in "xy": - pm.connectAttr(self.knee_ctl.attr("r"+x), self.tws1_loc.attr("r"+x)) + pm.connectAttr(self.knee_ctl.attr("r" + x), + self.tws1_loc.attr("r" + x)) - multTangent_node = nod.createMulNode(self.roundnessAnkle_att, multVal) - add_node = nod.createAddNode(multTangent_node+".outputX", initRound) - pm.connectAttr(add_node+".output", self.tws2_rot.attr("sx")) + multTangent_node = node.createMulNode(self.roundnessAnkle_att, multVal) + add_node = node.createAddNode(multTangent_node + ".outputX", initRound) + pm.connectAttr(add_node + ".output", self.tws2_rot.attr("sx")) for x in ["translate"]: pm.connectAttr(self.ankle_ctl.attr(x), self.tws2_loc.attr(x)) for x in "xy": - pm.connectAttr(self.ankle_ctl.attr("r"+x), self.tws2_loc.attr("r"+x)) - + pm.connectAttr(self.ankle_ctl.attr("r" + x), + self.tws2_loc.attr("r" + x)) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_loc) - distB_node = nod.createDistNode(self.tws1_loc, self.tws2_loc) - distC_node = nod.createDistNode(self.tws2_loc, self.tws3_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - add_node2 = nod.createAddNode(distC_node+".distance", add_node+".output") - div_node = nod.createDivNode(add_node2+".output", self.root_ctl.attr("sx")) - - #comp scaling - dm_node = nod.createDecomposeMatrixNode(self.root.attr("worldMatrix")) + distA_node = node.createDistNode(self.tws0_loc, self.tws1_loc) + distB_node = node.createDistNode(self.tws1_loc, self.tws2_loc) + distC_node = node.createDistNode(self.tws2_loc, self.tws3_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + add_node2 = node.createAddNode(distC_node + ".distance", + add_node + ".output") + div_node = node.createDivNode(add_node2 + ".output", + self.root_ctl.attr("sx")) - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") + # comp scaling + dm_node = node.createDecomposeMatrixNode(self.root.attr("worldMatrix")) + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") - self.volDriver_att = div_node2+".outputX" + self.volDriver_att = div_node2 + ".outputX" # Flip Offset ---------------------------------------- pm.connectAttr(self.ankleFlipOffset_att, self.tws2_loc.attr("rz")) pm.connectAttr(self.kneeFlipOffset_att, self.tws1_loc.attr("rz")) # Divisions ---------------------------------------- - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll for i, div_cns in enumerate(self.div_cns): subdiv = False - if i == len(self.div_cns)-1 or i == 0: + if i == len(self.div_cns) - 1 or i == 0: subdiv = 45 else: subdiv = 45 - if i < (self.settings["div0"]+1): - perc = i*.333 / (self.settings["div0"]+1.0) + if i < (self.settings["div0"] + 1): + perc = i * .333 / (self.settings["div0"] + 1.0) - elif i < (self.settings["div0"] + self.settings["div1"]+2): - perc = i*.333 / (self.settings["div0"]+1.0) + elif i < (self.settings["div0"] + self.settings["div1"] + 2): + perc = i * .333 / (self.settings["div0"] + 1.0) else: - perc = .5 + (i-self.settings["div0"]-3.0)*.5 / (self.settings["div1"]+1.0) - - if i < (self.settings["div0"]+2): - perc = i*.333 / (self.settings["div0"]+1.0) - - elif i < (self.settings["div0"] + self.settings["div1"]+3): - perc = .333 + (i-self.settings["div0"]-1)*.333 / (self.settings["div1"]+1.0) + perc = (.5 + + (i - self.settings["div0"] - 3.0) + * .5 + / (self.settings["div1"] + 1.0)) + + if i < (self.settings["div0"] + 2): + perc = i * .333 / (self.settings["div0"] + 1.0) + + elif i < (self.settings["div0"] + self.settings["div1"] + 3): + perc = (.333 + + (i - self.settings["div0"] - 1) + * .333 + / (self.settings["div1"] + 1.0)) else: - perc = .666 + (i-self.settings["div1"]-self.settings["div0"]-2.0)*.333 / (self.settings["div2"]+1.0) - - # we neet to offset the ankle and knee point to force the bone orientation to the nex bone span + perc = (.666 + + (i + - self.settings["div1"] + - self.settings["div0"] + - 2.0) + * .333 + / (self.settings["div2"] + 1.0)) + + # we neet to offset the ankle and knee point to force the bone + # orientation to the nex bone span if perc == .333: perc = .3338 elif perc == .666: @@ -518,40 +973,44 @@ def addOperators(self): perc = max(.001, min(.999, perc)) # Roll - node = aop.gear_rollsplinekine_op(div_cns, [self.tws0_rot, self.tws1_rot, self.tws2_rot, self.tws3_rot], perc, subdiv) + cts = [self.tws0_rot, self.tws1_rot, self.tws2_rot, self.tws3_rot] + o_node = applyop.gear_rollsplinekine_op(div_cns, cts, perc, subdiv) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") # Squash n Stretch - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") - + o_node = applyop.gear_squashstretch2_op( + div_cns, None, + pm.getAttr(self.volDriver_att), + "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") # Visibilities ------------------------------------- # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for ctrl in self.fk_ctl: for shp in ctrl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) # ik for ctrl in [self.ik_ctl, self.roll_ctl]: for shp in ctrl.getShapes(): pm.connectAttr(self.blend_att, shp.attr("visibility")) - # setup leg node scale compensate - pm.connectAttr(self.rig.global_ctl+".scale", self.setup+".scale") - + # setup leg o_node scale compensate + pm.connectAttr(self.rig.global_ctl + ".scale", self.setup + ".scale") return + # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n + def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.legBones[0] self.relatives["knee"] = self.legBones[1] self.relatives["ankle"] = self.legBones[2] @@ -566,15 +1025,16 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["knee"] = self.settings["div0"] + 2 - self.jointRelatives["ankle"] = len(self.div_cns)-1 + self.jointRelatives["ankle"] = len(self.div_cns) - 1 self.jointRelatives["foot"] = len(self.div_cns) - self.jointRelatives["eff"] =len(self.div_cns) + self.jointRelatives["eff"] = len(self.div_cns) - ## standard connection definition. + # standard connection definition. def connect_standard(self): self.parent.addChild(self.root) # Set the Ik Reference self.connectRef(self.settings["ikrefarray"], self.ik_cns) if self.settings["upvrefarray"]: - self.connectRef("Auto,"+self.settings["upvrefarray"], self.upv_cns, True) + self.connectRef( + "Auto," + self.settings["upvrefarray"], self.upv_cns, True) diff --git a/scripts/mgear/maya/shifter/component/leg_3jnt_01/guide.py b/scripts/mgear/maya/shifter/component/leg_3jnt_01/guide.py index 07ef032..2b73c43 100644 --- a/scripts/mgear/maya/shifter/component/leg_3jnt_01/guide.py +++ b/scripts/mgear/maya/shifter/component/leg_3jnt_01/guide.py @@ -1,52 +1,21 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide leg 3jnt 01 module""" + from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra -import mgear.maya.attribute as att +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt, attribute +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Miquel Campos" URL = "www.miquel-campos.com" EMAIL = "hello@miquel-campos.com" -VERSION = [1,1,0] +VERSION = [1, 1, 0] TYPE = "leg_3jnt_01" NAME = "leg" DESCRIPTION = "3 bones leg for quadrupeds and other animals" @@ -54,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,47 +37,43 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "knee", "ankle", "foot", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self + def addObjects(self): + """Add the Guide Root, blade and locators""" lockAttrs = ["tx", "ry", "rz"] self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,-3,0.1]) + vTemp = transform.getOffsetPosition(self.root, [0, -3, 0.1]) self.knee = self.addLoc("knee", self.root, vTemp) - att.lockAttribute(self.knee, lockAttrs) - vTemp = tra.getOffsetPosition( self.root, [0,-6,0]) + attribute.lockAttribute(self.knee, lockAttrs) + vTemp = transform.getOffsetPosition(self.root, [0, -6, 0]) self.ankle = self.addLoc("ankle", self.knee, vTemp) - att.lockAttribute(self.ankle, lockAttrs) - vTemp = tra.getOffsetPosition( self.root, [0,-9,.2]) + attribute.lockAttribute(self.ankle, lockAttrs) + vTemp = transform.getOffsetPosition(self.root, [0, -9, .2]) self.foot = self.addLoc("foot", self.ankle, vTemp) - att.lockAttribute(self.foot, lockAttrs) - vTemp = tra.getOffsetPosition( self.root, [0,-9, 1]) + attribute.lockAttribute(self.foot, lockAttrs) + vTemp = transform.getOffsetPosition(self.root, [0, -9, 1]) self.eff = self.addLoc("eff", self.foot, vTemp) centers = [self.root, self.knee, self.ankle, self.foot, self.eff] self.dispcrv = self.addDispCurve("crv1", centers) - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pBlend = self.addParam("blend", "double", 1, 0, 1) self.pFull3BoneIK = self.addParam("full3BonesIK", "double", 1, 0, 1) - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 1.5 , 1, None) - self.pIKSolver = self.addEnumParam("ikSolver", ["IK Spring", "IK Rotation Plane"], 0) - self.pIKOrient = self.addParam("ikOri", "bool", True) + self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1, None) + + self.pIKSolver = self.addEnumParam( + "ikSolver", ["IK Spring", "IK Rotation Plane"], 0) + self.pIKOrient = self.addParam("ikOri", "bool", True) # Divisions self.pDiv0 = self.addParam("div0", "long", 2, 1, None) @@ -113,35 +81,41 @@ def addParameters(self): self.pDiv1 = self.addParam("div2", "long", 2, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -149,7 +123,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -159,22 +133,29 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.full3BonesIK_slider.setValue(int(self.root.attr("full3BonesIK").get()*100)) - self.settingsTab.full3BonesIK_spinBox.setValue(int(self.root.attr("full3BonesIK").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) - self.settingsTab.ikSolver_comboBox.setCurrentIndex(self.root.attr("ikSolver").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + self.settingsTab.full3BonesIK_slider.setValue( + int(self.root.attr("full3BonesIK").get() * 100)) + self.settingsTab.full3BonesIK_spinBox.setValue( + int(self.root.attr("full3BonesIK").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.settingsTab.ikSolver_comboBox.setCurrentIndex( + self.root.attr("ikSolver").get()) self.populateCheck(self.settingsTab.neutralRotation_checkBox, "ikOri") self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) @@ -186,7 +167,6 @@ def populate_componentControls(self): for item in upvRefArrayItems: self.settingsTab.upvRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -197,28 +177,81 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.full3BonesIK_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.full3BonesIK_slider, "full3BonesIK")) - self.settingsTab.full3BonesIK_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.full3BonesIK_spinBox, "full3BonesIK")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.ikSolver_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.settingsTab.ikSolver_comboBox, "ikSolver")) - self.settingsTab.neutralRotation_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.neutralRotation_checkBox, "ikOri")) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.div2_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div2_spinBox, "div2")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.full3BonesIK_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.full3BonesIK_slider, + "full3BonesIK")) + + self.settingsTab.full3BonesIK_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.full3BonesIK_spinBox, + "full3BonesIK")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.ikSolver_comboBox.currentIndexChanged.connect( + partial(self.updateComboBox, + self.settingsTab.ikSolver_comboBox, + "ikSolver")) + + self.settingsTab.neutralRotation_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.neutralRotation_checkBox, + "ikOri")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + self.settingsTab.div2_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div2_spinBox, "div2")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_listWidget.installEventFilter(self) + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) self.settingsTab.upvRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -231,7 +264,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/__init__.py b/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/__init__.py index 72797dd..dd4b4e7 100644 --- a/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/__init__.py @@ -1,357 +1,639 @@ -# MGEAR is under the terms of the MIT License +"""Component Leg MS 2 joints 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -# ms 2jnt feature ----------------------- -# //done//FK isolation -# //done//FK roll ctl -# //done//Independent IK-FK foot ctl -# //done//IK auto up vector(default off) -# //done//T pose centric FK ctl -# //done//knee thickness + seperate upper/lower limb roundness ctl -# //done//knee scl and foot scl(ik/fk) add to jt scl -# //done//addition limb jt layer ctl(optional) -# To Do List ------------------------------- - - -# upper sleeve lower sleeve ctl(optional) -# custom Upper limb 4 pt bezier node with input for rot interpolation - - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt - +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): - def addObjects(self): +class Component(component.Main): + """Shifter component Class""" - self.normal = self.getNormalFromPos(self.guide.apos) - self.binormal = self.getBiNormalFromPos(self.guide.apos) + # ===================================================== + # OBJECTS + # ===================================================== + def addObjects(self): + """Add all the objects needed to create the component.""" - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - self.length1 = vec.getDistance(self.guide.apos[1], self.guide.apos[2]) - self.length2 = vec.getDistance(self.guide.apos[2], self.guide.apos[3]) + g_apos = self.guide.apos - # FK Controlers ----------------------------------- - # *ms* set npo @ Tpose, to make the fk rotation work best with rot order"yzx" + self.normal = self.getNormalFromPos(g_apos) + self.binormal = self.getBiNormalFromPos(g_apos) - self.fk_cns = pri.addTransformFromPos(self.root, self.getName("fk_cns"), self.guide.apos[0]) + self.length0 = vector.getDistance(g_apos[0], + g_apos[1]) + self.length1 = vector.getDistance(g_apos[1], + g_apos[2]) + self.length2 = vector.getDistance(g_apos[2], + g_apos[3]) - tpv = self.guide.apos[0] + ((self.guide.apos[1] - self.guide.apos[0])*[0,1,0]) - t = tra.getTransformLookingAt(self.guide.apos[0], tpv, self.normal, "xz", self.negate) + # FK Controlers ----------------------------------- + # *ms* set npo @ Tpose, to make the fk rotation work best with + # rot order"yzx" + + self.fk_cns = primitive.addTransformFromPos( + self.root, self.getName("fk_cns"), g_apos[0]) + tpv = g_apos[0] + ((g_apos[1] - g_apos[0]) * [0, 1, 0]) + t = transform.getTransformLookingAt( + g_apos[0], tpv, self.normal, "xz", self.negate) # *ms* add FK isolation - self.fk0_npo = pri.addTransform(self.fk_cns, self.getName("fk0_npo"), t) - - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, "xz", self.negate) - self.fk0_ctl = self.addCtl(self.fk0_npo, "fk0_ctl", t, self.color_fk, "cube", w=self.length0*.7, h=self.size*.1, d=self.size*.1, po=dt.Vector(.35*self.length0*self.n_factor,0,0), tp=self.parentCtlTag) - att.setKeyableAttributes(self.fk0_ctl) + self.fk0_npo = primitive.addTransform( + self.fk_cns, self.getName("fk0_npo"), t) + + t = transform.getTransformLookingAt( + g_apos[0], g_apos[1], self.normal, "xz", self.negate) + + self.fk0_ctl = self.addCtl( + self.fk0_npo, + "fk0_ctl", + t, + self.color_fk, + "cube", + w=self.length0 * .7, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.35 * self.length0 * self.n_factor, 0, 0), + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.fk0_ctl) # *ms* add fk roll control Simage style - self.fk0_roll_ctl = self.addCtl(self.fk0_ctl, "fk0_roll_ctl", t, self.color_fk, "cube", w=self.length0*.3, h=self.size*.1, d=self.size*.1, po=dt.Vector(.85*self.length0*self.n_factor,0,0), tp=self.fk0_ctl) - att.setKeyableAttributes(self.fk0_roll_ctl) - self.fk0_mtx = pri.addTransform(self.root, self.getName("fk0_mtx"), t) - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.fk1_ref = pri.addTransform(self.fk0_roll_ctl, self.getName("fk1_ref"), t) - self.fk1_loc = pri.addTransform(self.root, self.getName("fk1_loc"), t) - t = tra.getTransformLookingAt(self.guide.apos[1], self.guide.apos[2], self.normal, "xz", self.negate) - - self.fk1_npo = pri.addTransform(self.fk1_loc, self.getName("fk1_npo"), t) - self.fk1_ctl = self.addCtl(self.fk1_npo, "fk1_ctl", t, self.color_fk, "cube", w=self.length1*.7, h=self.size*.1, d=self.size*.1, po=dt.Vector(.35*self.length1*self.n_factor,0,0), tp=self.fk0_roll_ctl) - att.setKeyableAttributes(self.fk1_ctl) - self.fk1_mtx = pri.addTransform(self.fk1_ctl, self.getName("fk1_mtx"), t) - self.fk1_roll_ctl = self.addCtl(self.fk1_ctl, "fk1_roll_ctl", t, self.color_fk, "cube", w=self.length1*.3, h=self.size*.1, d=self.size*.1, po=dt.Vector(.85*self.length1*self.n_factor,0,0), tp=self.fk1_ctl) - att.setKeyableAttributes(self.fk1_roll_ctl) - - - # t = tra.getTransformFromPos(self.guide.pos["ankle"]) + self.fk0_roll_ctl = self.addCtl( + self.fk0_ctl, + "fk0_roll_ctl", + t, + self.color_fk, + "cube", + w=self.length0 * .3, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.85 * self.length0 * self.n_factor, 0, 0), + tp=self.fk0_ctl) + + attribute.setKeyableAttributes(self.fk0_roll_ctl) + self.fk0_mtx = primitive.addTransform( + self.root, self.getName("fk0_mtx"), t) + + t = transform.setMatrixPosition(t, g_apos[1]) + self.fk1_ref = primitive.addTransform( + self.fk0_roll_ctl, self.getName("fk1_ref"), t) + + self.fk1_loc = primitive.addTransform( + self.root, self.getName("fk1_loc"), t) + + t = transform.getTransformLookingAt( + g_apos[1], g_apos[2], self.normal, "xz", self.negate) + + self.fk1_npo = primitive.addTransform( + self.fk1_loc, self.getName("fk1_npo"), t) + + self.fk1_ctl = self.addCtl( + self.fk1_npo, + "fk1_ctl", + t, + self.color_fk, + "cube", + w=self.length1 * .7, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.35 * self.length1 * self.n_factor, 0, 0), + tp=self.fk0_roll_ctl) + + attribute.setKeyableAttributes(self.fk1_ctl) + + self.fk1_mtx = primitive.addTransform( + self.fk1_ctl, self.getName("fk1_mtx"), t) + + self.fk1_roll_ctl = self.addCtl( + self.fk1_ctl, + "fk1_roll_ctl", + t, + self.color_fk, + "cube", + w=self.length1 * .3, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.85 * self.length1 * self.n_factor, 0, 0), + tp=self.fk1_ctl) + + attribute.setKeyableAttributes(self.fk1_roll_ctl) + + # t = transform.getTransformFromPos(self.guide.pos["ankle"]) # *ms* buffer object to feed into ikfk solver for foot seperation - t= tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "z-x", negate=False) - - self.fk2_mtx = pri.addTransform(self.fk1_roll_ctl, self.getName("fk2_mtx"), t) + t = transform.getTransformLookingAt( + g_apos[2], g_apos[3], self.normal, "z-x", negate=False) + self.fk2_mtx = primitive.addTransform( + self.fk1_roll_ctl, self.getName("fk2_mtx"), t) # fk2_loc is need to take the effector position + bone1 rotation # fk2_npo should get offset rotation from fk2_mtx - t= tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[1], self.normal, "-xz", self.negate) - self.fk2_loc = pri.addTransform(self.root, self.getName("fk2_loc"), t) - t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[3], self.normal, "xz", self.negate) + t = transform.getTransformLookingAt( + g_apos[2], g_apos[1], self.normal, "-xz", self.negate) - self.fk2_npo = pri.addTransform(self.fk2_loc, self.getName("fk2_npo"), t) - self.fk2_ctl = self.addCtl(self.fk2_npo, "fk2_ctl", t, self.color_fk, "cube", w=self.length2, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length2*self.n_factor,0,0), tp=self.fk1_roll_ctl) - att.setKeyableAttributes(self.fk2_ctl) + self.fk2_loc = primitive.addTransform( + self.root, self.getName("fk2_loc"), t) - self.fk_ctl = [self.fk0_roll_ctl, self.fk1_ctl, self.fk2_ctl] - self.fk_ctls = [self.fk0_ctl,self.fk0_roll_ctl, self.fk1_ctl, self.fk1_roll_ctl, self.fk2_ctl] - for x in self.fk_ctls: - att.setInvertMirror(x, ["tx", "ty", "tz"]) + t = transform.getTransformLookingAt( + g_apos[2], g_apos[3], self.normal, "xz", self.negate) + + self.fk2_npo = primitive.addTransform( + self.fk2_loc, self.getName("fk2_npo"), t) + + self.fk2_ctl = self.addCtl( + self.fk2_npo, + "fk2_ctl", + t, + self.color_fk, + "cube", + w=self.length2, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length2 * self.n_factor, 0, 0), + tp=self.fk1_roll_ctl) - # att.setInvertMirror(self.fk0_ctl, ["tx", "ty", "tz"]) + attribute.setKeyableAttributes(self.fk2_ctl) + + self.fk_ctl = [self.fk0_roll_ctl, self.fk1_ctl, self.fk2_ctl] + self.fk_ctls = [self.fk0_ctl, self.fk0_roll_ctl, self.fk1_ctl, + self.fk1_roll_ctl, self.fk2_ctl] + for x in self.fk_ctls: + attribute.setInvertMirror(x, ["tx", "ty", "tz"]) - self.ctrn_loc = pri.addTransformFromPos(self.root, self.getName("ctrn_loc"), self.guide.apos[1]) + self.ctrn_loc = primitive.addTransformFromPos( + self.root, self.getName("ctrn_loc"), g_apos[1]) # eff npo --- take the effector output of gear ik solver - self.eff_npo = pri.addTransformFromPos(self.root, self.getName("eff_npo"), self.guide.apos[2]) + self.eff_npo = primitive.addTransformFromPos( + self.root, self.getName("eff_npo"), g_apos[2]) # eff loc --- take the fk ik blend result - self.eff_loc = pri.addTransformFromPos(self.eff_npo, self.getName("eff_loc"), self.guide.apos[2]) + self.eff_loc = primitive.addTransformFromPos( + self.eff_npo, self.getName("eff_loc"), g_apos[2]) # tws_ref - t = tra.getRotationFromAxis(dt.Vector(0,-1,0), self.normal, "xz", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["ankle"]) - self.tws_ref = pri.addTransform(self.eff_loc, self.getName("tws_ref"), t) + t = transform.getRotationFromAxis( + datatypes.Vector(0, -1, 0), self.normal, "xz", self.negate) + + t = transform.setMatrixPosition(t, self.guide.pos["ankle"]) + + self.tws_ref = primitive.addTransform( + self.eff_loc, self.getName("tws_ref"), t) # Mid Controler ------------------------------------ - self.mid_ctl = self.addCtl(self.ctrn_loc, "mid_ctl", tra.getTransform(self.ctrn_loc), self.color_ik, "sphere", w=self.size*.2, tp=self.parentCtlTag) - att.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) + self.mid_ctl = self.addCtl( + self.ctrn_loc, + "mid_ctl", + transform.getTransform(self.ctrn_loc), + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.parentCtlTag) + + attribute.setInvertMirror(self.mid_ctl, ["tx", "ty", "tz"]) # *ms* add knee thickness # IK Controlers ----------------------------------- - self.ik_cns = pri.addTransformFromPos(self.root, self.getName("ik_cns"), self.guide.pos["ankle"]) - - self.ikcns_ctl = self.addCtl(self.ik_cns, "ikcns_ctl", tra.getTransformFromPos(self.guide.pos["ankle"]), self.color_ik, "null", w=self.size*.12, tp=self.mid_ctl) - att.setInvertMirror(self.ikcns_ctl, ["tx"]) - - m = tra.getTransformFromPos(self.guide.pos["ankle"]) - self.ik_ctl = self.addCtl(self.ikcns_ctl, "ik_ctl", m, self.color_ik, "cube", w=self.size*.12, h=self.size*.12, d=self.size*.12, tp=self.ikcns_ctl) - att.setKeyableAttributes(self.ik_ctl) - # att.setRotOrder(self.ik_ctl, "XZY") - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + self.ik_cns = primitive.addTransformFromPos( + self.root, + self.getName("ik_cns"), + self.guide.pos["ankle"]) + + self.ikcns_ctl = self.addCtl( + self.ik_cns, + "ikcns_ctl", + transform.getTransformFromPos(self.guide.pos["ankle"]), + self.color_ik, + "null", + w=self.size * .12, + tp=self.mid_ctl) + + attribute.setInvertMirror(self.ikcns_ctl, ["tx"]) + + m = transform.getTransformFromPos(self.guide.pos["ankle"]) + self.ik_ctl = self.addCtl( + self.ikcns_ctl, + "ik_ctl", + m, + self.color_ik, + "cube", + w=self.size * .12, + h=self.size * .12, + d=self.size * .12, + tp=self.ikcns_ctl) + + attribute.setKeyableAttributes(self.ik_ctl) + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) # upv - v = self.guide.apos[2] - self.guide.apos[0] + v = g_apos[2] - g_apos[0] v = self.normal ^ v v.normalize() - v *= self.size*.5 - v += self.guide.apos[1] + v *= self.size * .5 + v += g_apos[1] # *ms* auto up vector ------------------------------ - self.upv_cns = pri.addTransformFromPos(self.root, self.getName("upv_cns"), self.guide.apos[0]) - self.upv_auv = pri.addTransformFromPos(self.root, self.getName("upv_auv"), self.guide.apos[0]) - self.upv_mtx = pri.addTransformFromPos(self.upv_cns, self.getName("upv_mtx"), self.guide.apos[0]) - - self.upv_npo = pri.addTransformFromPos(self.upv_mtx, self.getName("upv_npo"), v) - self.upv_ctl = self.addCtl(self.upv_npo, "upv_ctl", tra.getTransform(self.upv_npo), self.color_ik, "diamond", w=self.size*.12, tp=self.ik_ctl) - att.setKeyableAttributes(self.upv_ctl, self.t_params) - att.setInvertMirror(self.upv_ctl, ["tx"]) + self.upv_cns = primitive.addTransformFromPos( + self.root, self.getName("upv_cns"), g_apos[0]) + self.upv_auv = primitive.addTransformFromPos( + self.root, self.getName("upv_auv"), g_apos[0]) + self.upv_mtx = primitive.addTransformFromPos( + self.upv_cns, self.getName("upv_mtx"), g_apos[0]) + self.upv_npo = primitive.addTransformFromPos( + self.upv_mtx, self.getName("upv_npo"), v) + self.upv_ctl = self.addCtl(self.upv_npo, + "upv_ctl", + transform.getTransform(self.upv_npo), + self.color_ik, + "diamond", + w=self.size * .12, + tp=self.ik_ctl) + attribute.setKeyableAttributes(self.upv_ctl, self.t_params) + attribute.setInvertMirror(self.upv_ctl, ["tx"]) # References -------------------------------------- # Calculate again the transfor for the IK ref. This way align with FK - self.ik_ref = pri.addTransform(self.ik_ctl, self.getName("ik_ref"), tra.getTransform(self.ik_ctl)) - self.fk_ref = pri.addTransform(self.fk_ctl[2], self.getName("fk_ref"), tra.getTransform(self.ik_ctl)) + self.ik_ref = primitive.addTransform( + self.ik_ctl, + self.getName("ik_ref"), + transform.getTransform(self.ik_ctl)) + self.fk_ref = primitive.addTransform( + self.fk_ctl[2], + self.getName("fk_ref"), + transform.getTransform(self.ik_ctl)) # auto up vector foot solver - self.upv1_auv = pri.addTransform(self.ik_ref, self.getName("upv1_auv"), tra.getTransform(self.ik_ctl)) - self.upv2_auv = pri.addTransform(self.upv1_auv, self.getName("upv2_auv"), tra.getTransform(self.ik_ctl)) - self.upv2_auv.setAttr("tz",1) + self.upv1_auv = primitive.addTransform( + self.ik_ref, + self.getName("upv1_auv"), + transform.getTransform(self.ik_ctl)) + + self.upv2_auv = primitive.addTransform( + self.upv1_auv, + self.getName("upv2_auv"), + transform.getTransform(self.ik_ctl)) + self.upv2_auv.setAttr("tz", 1) # Chain -------------------------------------------- # take outputs of the ikfk2bone solver - self.bone0 = pri.addLocator(self.root, self.getName("0_bone"), tra.getTransform(self.fk_ctl[0])) + self.bone0 = primitive.addLocator( + self.root, + self.getName("0_bone"), + transform.getTransform(self.fk_ctl[0])) + self.bone0_shp = self.bone0.getShape() - self.bone0_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone0_shp.setAttr("localPositionX", self.n_factor * .5) self.bone0_shp.setAttr("localScale", .5, 0, 0) self.bone0.setAttr("sx", self.length0) self.bone0.setAttr("visibility", False) - self.bone1 = pri.addLocator(self.root, self.getName("1_bone"), tra.getTransform(self.fk_ctl[1])) + self.bone1 = primitive.addLocator( + self.root, + self.getName("1_bone"), + transform.getTransform(self.fk_ctl[1])) + self.bone1_shp = self.bone1.getShape() - self.bone1_shp.setAttr("localPositionX", self.n_factor*.5) + self.bone1_shp.setAttr("localPositionX", self.n_factor * .5) self.bone1_shp.setAttr("localScale", .5, 0, 0) self.bone1.setAttr("sx", self.length1) self.bone1.setAttr("visibility", False) + # Roll join ref + + self.tws0_npo = primitive.addTransform( + self.root, + self.getName("tws0_npo"), + transform.getTransform(self.fk_ctl[0])) + + self.tws0_loc = primitive.addTransform( + self.tws0_npo, + self.getName("tws0_loc"), + transform.getTransform(self.fk_ctl[0])) + self.tws0_rot = primitive.addTransform( + self.tws0_loc, + self.getName("tws0_rot"), + transform.getTransform(self.fk_ctl[0])) + self.tws1_npo = primitive.addTransform( + self.ctrn_loc, + self.getName("tws1_npo"), + transform.getTransform(self.ctrn_loc)) - #Roll join ref + self.tws1_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws1_loc"), + transform.getTransform(self.ctrn_loc)) - self.tws0_npo = pri.addTransform(self.root, self.getName("tws0_npo"), tra.getTransform(self.fk_ctl[0])) - self.tws0_loc = pri.addTransform(self.tws0_npo, self.getName("tws0_loc"), tra.getTransform(self.fk_ctl[0])) - self.tws0_rot = pri.addTransform(self.tws0_loc, self.getName("tws0_rot"), tra.getTransform(self.fk_ctl[0])) + self.tws1_rot = primitive.addTransform( + self.tws1_loc, + self.getName("tws1_rot"), + transform.getTransform(self.ctrn_loc)) - self.tws1_npo = pri.addTransform(self.ctrn_loc, self.getName("tws1_npo"), tra.getTransform(self.ctrn_loc)) - self.tws1_loc = pri.addTransform(self.tws1_npo, self.getName("tws1_loc"), tra.getTransform(self.ctrn_loc)) - self.tws1_rot = pri.addTransform(self.tws1_loc, self.getName("tws1_rot"), tra.getTransform(self.ctrn_loc)) + self.tws2_loc = primitive.addTransform( + self.tws1_npo, + self.getName("tws2_loc"), + transform.getTransform(self.ctrn_loc)) - self.tws2_loc = pri.addTransform(self.tws1_npo, self.getName("tws2_loc"), tra.getTransform(self.ctrn_loc)) - self.tws2_rot = pri.addTransform(self.tws2_loc, self.getName("tws2_rot"), tra.getTransform(self.ctrn_loc)) + self.tws2_rot = primitive.addTransform( + self.tws2_loc, + self.getName("tws2_rot"), + transform.getTransform(self.ctrn_loc)) - # self.tws3_npo = pri.addTransform(self.root, self.getName("tws3_npo"), tra.getTransform(self.fk_ctl[2])) - # self.tws3_loc = pri.addTransform(self.tws3_npo, self.getName("tws3_loc"), tra.getTransform(self.fk_ctl[2])) - # self.tws3_rot = pri.addTransform(self.tws3_loc, self.getName("tws3_rot"), tra.getTransform(self.fk_ctl[2])) - t = t = tra.getTransformLookingAt(self.guide.apos[2], self.guide.apos[1], self.normal, "-xz", self.negate) - self.tws3_npo = pri.addTransform(self.root, self.getName("tws3_npo"), t) - self.tws3_loc = pri.addTransform(self.tws3_npo, self.getName("tws3_loc"), t) - self.tws3_rot = pri.addTransform(self.tws3_loc, self.getName("tws3_rot"), t) + t = transform.getTransformLookingAt( + g_apos[2], g_apos[1], self.normal, "-xz", self.negate) + self.tws3_npo = primitive.addTransform( + self.root, self.getName("tws3_npo"), t) + + self.tws3_loc = primitive.addTransform( + self.tws3_npo, self.getName("tws3_loc"), t) + + self.tws3_rot = primitive.addTransform( + self.tws3_loc, self.getName("tws3_rot"), t) # Divisions ---------------------------------------- - # We have at least one division at the start, the end and one for the knee. + 2 for knee angle control + # We have at least one division at the start, the end and one for + # the knee. + 2 for knee angle control # separate up and dn limb self.divisions = self.settings["div0"] + self.settings["div1"] + 3 + 2 - self.divisions0 = self.settings["div0"] +2 - self.divisions1 = self.settings["div1"] +2 + self.divisions0 = self.settings["div0"] + 2 + self.divisions1 = self.settings["div1"] + 2 self.div_cns = [] self.div_cnsUp = [] self.div_cnsDn = [] self.div_ctls = [] - self.div_org = pri.addTransform(self.root, self.getName("div_org"), tra.getTransform(self.root)) + self.div_org = primitive.addTransform( + self.root, + self.getName("div_org"), + transform.getTransform(self.root)) self.previousCtlTag = self.parentCtlTag for i in range(self.divisions0): - div_cns = pri.addTransform(self.div_org, self.getName("div%s_loc" % i)) + div_cns = primitive.addTransform( + self.div_org, self.getName("div%s_loc" % i)) + if self.negate: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % i), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05,w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % i), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) else: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % i), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05,w=self.size*.1,po=dt.Vector(0,self.size*0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % i), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) + self.previousCtlTag = div_ctl self.div_cns.append(div_cns) self.div_cnsUp.append(div_cns) - self.jnt_pos.append([div_ctl,i]) + self.jnt_pos.append([div_ctl, i]) self.div_ctls.append(div_ctl) # mid division d = self.divisions0 - self.div_mid = pri.addTransform(self.div_org, self.getName("div%s_loc" % d), tra.getTransform(self.mid_ctl)) + self.div_mid = primitive.addTransform( + self.div_org, + self.getName("div%s_loc" % d), + transform.getTransform(self.mid_ctl)) + if self.negate: - self.div_mid_ctl = self.addCtl(self.div_mid, self.getName("div%s_ctl" % d), tra.getTransform(self.div_mid), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0), ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + self.div_mid_ctl = self.addCtl( + self.div_mid, + self.getName("div%s_ctl" % d), + transform.getTransform(self.div_mid), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) else: - self.div_mid_ctl = self.addCtl(self.div_mid, self.getName("div%s_ctl" % d), tra.getTransform(self.div_mid), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*0.05,0), ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + self.div_mid_ctl = self.addCtl( + self.div_mid, + self.getName("div%s_ctl" % d), + transform.getTransform(self.div_mid), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) + self.previousCtlTag = div_ctl self.div_cns.append(self.div_mid) - self.jnt_pos.append([self.div_mid_ctl,self.divisions0]) + self.jnt_pos.append([self.div_mid_ctl, self.divisions0]) self.div_ctls.append(self.div_mid_ctl) # down division for i in range(self.divisions1): - dd = i +self.divisions1+1 - div_cns = pri.addTransform(self.div_org, self.getName("div%s_loc" % dd)) + dd = i + self.divisions1 + 1 + div_cns = primitive.addTransform( + self.div_org, self.getName("div%s_loc" % dd)) + if self.negate: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % dd), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*-0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % dd), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * -0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) else: - div_ctl = self.addCtl(div_cns, self.getName("div%s_ctl" % dd), tra.getTransform(div_cns), self.color_fk, "square",d=self.size*.05, w=self.size*.1,po=dt.Vector(0,self.size*0.05,0),ro=dt.Vector(0,0,dt.radians(90)), tp=self.previousCtlTag) + div_ctl = self.addCtl( + div_cns, + self.getName("div%s_ctl" % dd), + transform.getTransform(div_cns), + self.color_fk, + "square", + d=self.size * .05, + w=self.size * .1, + po=datatypes.Vector(0, self.size * 0.05, 0), + ro=datatypes.Vector(0, 0, datatypes.radians(90)), + tp=self.previousCtlTag) + self.previousCtlTag = div_ctl self.div_cns.append(div_cns) self.div_cnsDn.append(div_cns) - self.jnt_pos.append([div_ctl,i+self.divisions0+1]) + self.jnt_pos.append([div_ctl, i + self.divisions0 + 1]) self.div_ctls.append(div_ctl) # End reference ------------------------------------ # To help the deformation on the ankle self.jnt_pos.append([self.eff_loc, 'end']) - #match IK FK references + # match IK FK references + + self.match_fk0 = primitive.addTransform( + self.root, + self.getName("fk0_mth"), + transform.getTransform(self.fk_ctl[0])) + + self.match_fk1 = primitive.addTransform( + self.root, + self.getName("fk1_mth"), + transform.getTransform(self.fk_ctl[1])) - self.match_fk0 = pri.addTransform(self.root, self.getName("fk0_mth"), tra.getTransform(self.fk_ctl[0])) - self.match_fk1 = pri.addTransform(self.root, self.getName("fk1_mth"), tra.getTransform(self.fk_ctl[1])) - self.match_fk2 = pri.addTransform(self.ik_ref, self.getName("fk2_mth"), tra.getTransform(self.fk_ctl[2])) + self.match_fk2 = primitive.addTransform( + self.ik_ref, + self.getName("fk2_mth"), + transform.getTransform(self.fk_ctl[2])) - self.match_ik = pri.addTransform(self.fk2_ctl, self.getName("ik_mth"), tra.getTransform(self.ik_ctl)) - self.match_ikUpv = pri.addTransform(self.fk0_roll_ctl, self.getName("upv_mth"), tra.getTransform(self.upv_ctl)) + self.match_ik = primitive.addTransform( + self.fk2_ctl, + self.getName("ik_mth"), + transform.getTransform(self.ik_ctl)) + + self.match_ikUpv = primitive.addTransform( + self.fk0_roll_ctl, + self.getName("upv_mth"), + transform.getTransform(self.upv_ctl)) def addAttributes(self): # Anim ------------------------------------------- - self.blend_att = self.addAnimParam("blend", "Fk/Ik Leg", "double", self.settings["blend"], 0, 1) - self.blend2_att = self.addAnimParam("blend_foot", "Fk/Ik Foot", "double", self.settings["blend"], 0, 1) - self.auv_att = self.addAnimParam("auv", "Auto Upvector", "double", 0, 0, 1) - self.roll_att = self.addAnimParam("roll", "Roll", "double", 0, -180, 180) - - self.scale_att = self.addAnimParam("ikscale", "Scale", "double", 1, .001, 99) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1, 99) - self.slide_att = self.addAnimParam("slide", "Slide", "double", .5, 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", 0, 0, 1) - self.reverse_att = self.addAnimParam("reverse", "Reverse", "double", 0, 0, 1) - self.roundness0_att = self.addAnimParam("roundness_up", "Roundness Up", "double", 0, 0, self.size) - self.roundness1_att = self.addAnimParam("roundness_dn", "Roundness Dn", "double", 0, 0, self.size) - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) - self.knee_thickness_att = self.addAnimParam("kneethickness", "Knee Thickness", "double", self.settings["knee"], 0, 5) - self.jntctl_vis_att = self.addAnimParam("jntct_vis", "Joint Ctl Vis", "bool", 0,1,1) + self.blend_att = self.addAnimParam( + "blend", "Fk/Ik Leg", "double", self.settings["blend"], 0, 1) + self.blend2_att = self.addAnimParam( + "blend_foot", "Fk/Ik Foot", "double", self.settings["blend"], 0, 1) + self.auv_att = self.addAnimParam( + "auv", "Auto Upvector", "double", 0, 0, 1) + self.roll_att = self.addAnimParam( + "roll", "Roll", "double", 0, -180, 180) + self.scale_att = self.addAnimParam( + "ikscale", "Scale", "double", 1, .001, 99) + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1, + 99) + self.slide_att = self.addAnimParam( + "slide", "Slide", "double", .5, 0, 1) + self.softness_att = self.addAnimParam( + "softness", "Softness", "double", 0, 0, 1) + self.reverse_att = self.addAnimParam( + "reverse", "Reverse", "double", 0, 0, 1) + self.roundness0_att = self.addAnimParam( + "roundness_up", "Roundness Up", "double", 0, 0, self.size) + self.roundness1_att = self.addAnimParam( + "roundness_dn", "Roundness Dn", "double", 0, 0, self.size) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) + self.knee_thickness_att = self.addAnimParam("kneethickness", + "Knee Thickness", + "double", + self.settings["knee"], + 0, + 5) + self.jntctl_vis_att = self.addAnimParam( + "jntct_vis", "Joint Ctl Vis", "bool", 0, 1, 1) # Ref if self.settings["fkrefarray"]: ref_names = self.settings["fkrefarray"].split(",") if len(ref_names) > 1: - self.ref_att = self.addAnimEnumParam("fkref", "Fk Ref", 0, self.settings["fkrefarray"].split(",")) + self.ref_att = self.addAnimEnumParam( + "fkref", + "Fk Ref", + 0, + self.settings["fkrefarray"].split(",")) if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["upvrefarray"]: ref_names = self.settings["upvrefarray"].split(",") if len(ref_names) > 1: - self.upvref_att = self.addAnimEnumParam("upvref", "UpV Ref", 0, self.settings["upvrefarray"].split(",")) + self.upvref_att = self.addAnimEnumParam( + "upvref", + "UpV Ref", + 0, + self.settings["upvrefarray"].split(",")) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.divisions) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.divisions) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.divisions) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.divisions) ] - - self.resample_att = self.addSetupParam("resample", "Resample", "bool", True) - self.absolute_att = self.addSetupParam("absolute", "Absolute", "bool", False) + self.st_value = fcurve.getFCurveValues( + self.settings["st_profile"], self.divisions) + self.sq_value = fcurve.getFCurveValues( + self.settings["sq_profile"], self.divisions) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], -1, 0) + for i in range(self.divisions)] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.divisions)] + + self.resample_att = self.addSetupParam( + "resample", "Resample", "bool", True) + self.absolute_att = self.addSetupParam( + "absolute", "Absolute", "bool", False) + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Visibilities ------------------------------------- # fk - fkvis_node = nod.createReverseNode(self.blend_att) + fkvis_node = node.createReverseNode(self.blend_att) for shp in self.fk0_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk0_roll_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) for shp in self.fk1_roll_ctl.getShapes(): - pm.connectAttr(fkvis_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis_node + ".outputX", shp.attr("visibility")) - fkvis2_node = nod.createReverseNode(self.blend2_att) + fkvis2_node = node.createReverseNode(self.blend2_att) for shp in self.fk2_ctl.getShapes(): - pm.connectAttr(fkvis2_node+".outputX", shp.attr("visibility")) + pm.connectAttr(fkvis2_node + ".outputX", shp.attr("visibility")) # ik for shp in self.upv_ctl.getShapes(): @@ -365,175 +647,262 @@ def addOperators(self): for ctl in (self.div_ctls): for shp in ctl.getShapes(): pm.connectAttr(self.jntctl_vis_att, shp.attr("visibility")) - # Controls ROT order ----------------------------------- - - att.setRotOrder(self.ik_ctl, "XZY") + # Controls ROT order ----------------------------------- + attribute.setRotOrder(self.ik_ctl, "XZY") # IK Solver ----------------------------------------- out = [self.bone0, self.bone1, self.ctrn_loc, self.eff_npo] - #self.fk_ctl = [self.fk0_roll_ctl, self.fk1_ctl, self.fk2_mtx] - node = aop.gear_ikfk2bone_op(out, self.root, self.ik_ref, self.upv_ctl, self.fk0_mtx, self.fk1_mtx, self.fk2_mtx, self.length0, self.length1, self.negate) - - pm.connectAttr(self.blend_att, node+".blend") + o_node = applyop.gear_ikfk2bone_op(out, + self.root, + self.ik_ref, + self.upv_ctl, + self.fk0_mtx, + self.fk1_mtx, + self.fk2_mtx, + self.length0, + self.length1, + self.negate) + + pm.connectAttr(self.blend_att, o_node + ".blend") if self.negate: mulVal = -1 else: mulVal = 1 - nod.createMulNode(self.roll_att, mulVal, node+".roll") - # pm.connectAttr(self.roll_att, node+".roll") - pm.connectAttr(self.scale_att, node+".scaleA") - pm.connectAttr(self.scale_att, node+".scaleB") - pm.connectAttr(self.maxstretch_att, node+".maxstretch") - pm.connectAttr(self.slide_att, node+".slide") - pm.connectAttr(self.softness_att, node+".softness") - pm.connectAttr(self.reverse_att, node+".reverse") - # update issue on effector scale interpolation, disconnect for stability + node.createMulNode(self.roll_att, mulVal, o_node + ".roll") + pm.connectAttr(self.scale_att, o_node + ".scaleA") + pm.connectAttr(self.scale_att, o_node + ".scaleB") + pm.connectAttr(self.maxstretch_att, o_node + ".maxstretch") + pm.connectAttr(self.slide_att, o_node + ".slide") + pm.connectAttr(self.softness_att, o_node + ".softness") + pm.connectAttr(self.reverse_att, o_node + ".reverse") + # update issue on effector scale interpolation, disconnect + # for stability pm.disconnectAttr(self.eff_npo.scale) - # auto upvector ------------------------------------- - + # auto upvector ------------------------------------- # leg aim - node = aop.aimCns(self.upv_auv, self.ik_ctl, axis="-yz", wupType=1, wupVector=[0,1,0], wupObject=self.upv2_auv, maintainOffset=False) - + o_node = applyop.aimCns(self.upv_auv, + self.ik_ctl, + axis="-yz", + wupType=1, + wupVector=[0, 1, 0], + wupObject=self.upv2_auv, + maintainOffset=False) # foot aim - node = aop.aimCns(self.upv1_auv, self.root, axis="yz", wupType=4, wupVector=[0,1,0], wupObject=self.root, maintainOffset=False) - + o_node = applyop.aimCns(self.upv1_auv, + self.root, + axis="yz", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.root, + maintainOffset=False) # auto upvector connection - node = aop.gear_mulmatrix_op(self.upv_auv.attr("worldMatrix"), self.upv_mtx.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.upv_auv.attr("worldMatrix"), + self.upv_mtx.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") pb_node = pm.createNode("pairBlend") - pb_node.attr("rotInterpolation").set (1) - pm.connectAttr(dm_node+".outputTranslate", pb_node+".inTranslate2") - pm.connectAttr(dm_node+".outputRotate", pb_node+".inRotate2") - pm.connectAttr(pb_node+".outRotate", self.upv_mtx.attr("rotate")) - pm.connectAttr(pb_node+".outTranslate", self.upv_mtx.attr("translate")) - pm.connectAttr(self.auv_att, pb_node+".weight") + pb_node.attr("rotInterpolation").set(1) + pm.connectAttr(dm_node + ".outputTranslate", pb_node + ".inTranslate2") + pm.connectAttr(dm_node + ".outputRotate", pb_node + ".inRotate2") + pm.connectAttr(pb_node + ".outRotate", self.upv_mtx.attr("rotate")) + pm.connectAttr(pb_node + ".outTranslate", + self.upv_mtx.attr("translate")) + pm.connectAttr(self.auv_att, pb_node + ".weight") # fk0 mtx parent constraint - node = aop.gear_mulmatrix_op(self.fk0_roll_ctl.attr("worldMatrix"), self.fk0_mtx.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.fk0_roll_ctl.attr("worldMatrix"), + self.fk0_mtx.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk0_mtx.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.fk0_mtx.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk0_mtx.attr("translate")) + + pm.connectAttr(dm_node + ".outputRotate", self.fk0_mtx.attr("rotate")) # fk1 loc to fk1 ref parent constraint - node = aop.gear_mulmatrix_op(self.fk1_ref.attr("worldMatrix"), self.fk1_loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.fk1_ref.attr("worldMatrix"), + self.fk1_loc.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk1_loc.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.fk1_loc.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk1_loc.attr("translate")) + + pm.connectAttr(dm_node + ".outputRotate", self.fk1_loc.attr("rotate")) # fk1 mtx orient cns to fk1 roll - pm.connectAttr(self.fk1_roll_ctl.attr("rotate"), self.fk1_mtx.attr("rotate")) + pm.connectAttr(self.fk1_roll_ctl.attr("rotate"), + self.fk1_mtx.attr("rotate")) + # fk2_loc position constraint to effector------------------------ - node = aop.gear_mulmatrix_op(self.eff_npo.attr("worldMatrix"), self.fk2_loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.eff_npo.attr("worldMatrix"), + self.fk2_loc.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.fk2_loc.attr("translate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk2_loc.attr("translate")) # fk2_loc rotation constraint to bone1 ------------------------ - node = aop.gear_mulmatrix_op(self.bone1.attr("worldMatrix"), self.fk2_loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.bone1.attr("worldMatrix"), + self.fk2_loc.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.fk2_loc.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.fk2_loc.attr("rotate")) + # foot ikfk blending from fk ref to ik ref (serious bugfix)---- + o_node = applyop.gear_mulmatrix_op( + self.fk_ref.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) - # foot ikfk blending from fk ref to ik ref (serious bugfix)-------------------------------- - node = aop.gear_mulmatrix_op(self.fk_ref.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") pb_node = pm.createNode("pairBlend") - pb_node.attr("rotInterpolation").set (1) - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", pb_node+".inRotate1") - pm.connectAttr(self.blend2_att, pb_node+".weight") - pm.connectAttr(pb_node+".outRotate", self.eff_loc.attr("rotate")) - node = aop.gear_mulmatrix_op(self.ik_ref.attr("worldMatrix"), self.eff_loc.attr("parentInverseMatrix")) + pb_node.attr("rotInterpolation").set(1) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", pb_node + ".inRotate1") + pm.connectAttr(self.blend2_att, pb_node + ".weight") + pm.connectAttr(pb_node + ".outRotate", self.eff_loc.attr("rotate")) + + o_node = applyop.gear_mulmatrix_op( + self.ik_ref.attr("worldMatrix"), + self.eff_loc.attr("parentInverseMatrix")) + dm_node1 = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node1+".inputMatrix") - pm.connectAttr(dm_node1+".outputRotate", pb_node+".inRotate2") + pm.connectAttr(o_node + ".output", dm_node1 + ".inputMatrix") + pm.connectAttr(dm_node1 + ".outputRotate", pb_node + ".inRotate2") # use blendcolors to blend scale bc_node = pm.createNode("blendColors") - pm.connectAttr(self.blend_att, bc_node+".blender") - pm.connectAttr(dm_node+".outputScale", bc_node+".color2") - pm.connectAttr(dm_node1+".outputScale", bc_node+".color1") - pm.connectAttr(bc_node+".output", self.eff_loc.attr("scale")) + pm.connectAttr(self.blend_att, bc_node + ".blender") + pm.connectAttr(dm_node + ".outputScale", bc_node + ".color2") + pm.connectAttr(dm_node1 + ".outputScale", bc_node + ".color1") + pm.connectAttr(bc_node + ".output", self.eff_loc.attr("scale")) # Twist references --------------------------------- - pm.connectAttr(self.mid_ctl.attr("translate"), self.tws1_npo.attr("translate")) - pm.connectAttr(self.mid_ctl.attr("rotate"), self.tws1_npo.attr("rotate")) - pm.connectAttr(self.mid_ctl.attr("scale"), self.tws1_npo.attr("scale")) + pm.connectAttr(self.mid_ctl.attr("translate"), + self.tws1_npo.attr("translate")) + pm.connectAttr(self.mid_ctl.attr("rotate"), + self.tws1_npo.attr("rotate")) + pm.connectAttr(self.mid_ctl.attr("scale"), + self.tws1_npo.attr("scale")) + o_node = applyop.gear_mulmatrix_op( + self.eff_loc.attr("worldMatrix"), + self.tws3_npo.attr("parentInverseMatrix")) - node = aop.gear_mulmatrix_op(self.eff_loc.attr("worldMatrix"), self.tws3_npo.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.tws3_npo.attr("translate")) - node = aop.gear_mulmatrix_op(self.bone1.attr("worldMatrix"), self.tws3_npo.attr("parentInverseMatrix")) - dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.tws3_npo.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + + pm.connectAttr(dm_node + ".outputTranslate", + self.tws3_npo.attr("translate")) + + o_node = applyop.gear_mulmatrix_op( + self.bone1.attr("worldMatrix"), + self.tws3_npo.attr("parentInverseMatrix")) - node = aop.gear_mulmatrix_op(self.tws_ref.attr("worldMatrix"), self.tws3_rot.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputRotate", self.tws3_rot.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.tws3_npo.attr("rotate")) + o_node = applyop.gear_mulmatrix_op( + self.tws_ref.attr("worldMatrix"), + self.tws3_rot.attr("parentInverseMatrix")) + + dm_node = pm.createNode("decomposeMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + pm.connectAttr(dm_node + ".outputRotate", self.tws3_rot.attr("rotate")) # knee thickness connection if self.negate: - node = nod.createMulNode([self.knee_thickness_att,self.knee_thickness_att], [0.5,-0.5,0], [self.tws1_loc+".translateX",self.tws2_loc+".translateX"]) + o_node = node.createMulNode( + [self.knee_thickness_att, self.knee_thickness_att], + [0.5, -0.5, 0], + [self.tws1_loc + ".translateX", self.tws2_loc + ".translateX"]) else: - node = nod.createMulNode([self.knee_thickness_att,self.knee_thickness_att], [-0.5,0.5,0], [self.tws1_loc+".translateX",self.tws2_loc+".translateX"]) + o_node = node.createMulNode( + [self.knee_thickness_att, self.knee_thickness_att], + [-0.5, 0.5, 0], + [self.tws1_loc + ".translateX", self.tws2_loc + ".translateX"]) # connect both tws1 and tws2 (mid tws) self.tws0_rot.setAttr("sx", .001) self.tws3_rot.setAttr("sx", .001) - add_node = nod.createAddNode(self.roundness0_att, .001) - pm.connectAttr(add_node+".output", self.tws1_rot.attr("sx")) + add_node = node.createAddNode(self.roundness0_att, .001) + pm.connectAttr(add_node + ".output", self.tws1_rot.attr("sx")) - add_node = nod.createAddNode(self.roundness1_att, .001) - pm.connectAttr(add_node+".output", self.tws2_rot.attr("sx")) + add_node = node.createAddNode(self.roundness1_att, .001) + pm.connectAttr(add_node + ".output", self.tws2_rot.attr("sx")) - #Roll Shoulder--use aimconstraint withour uovwctor to solve the stable twist + # Roll Shoulder--use aimconstraint withour uovwctor to solve the + # stable twist if self.negate: - node = aop.aimCns(self.tws0_loc, self.mid_ctl, axis="-xy", wupType=4, wupVector=[0,1,0], wupObject=self.tws0_npo, maintainOffset=False) + o_node = applyop.aimCns(self.tws0_loc, + self.mid_ctl, + axis="-xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.tws0_npo, + maintainOffset=False) else: - node = aop.aimCns(self.tws0_loc, self.mid_ctl, axis="xy", wupType=4, wupVector=[0,1,0], wupObject=self.tws0_npo, maintainOffset=False) - + o_node = applyop.aimCns(self.tws0_loc, + self.mid_ctl, + axis="xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.tws0_npo, + maintainOffset=False) # Volume ------------------------------------------- - distA_node = nod.createDistNode(self.tws0_loc, self.tws1_npo) - distB_node = nod.createDistNode(self.tws1_npo, self.tws3_loc) - add_node = nod.createAddNode(distA_node+".distance", distB_node+".distance") - div_node = nod.createDivNode(add_node+".output", self.root.attr("sx")) + distA_node = node.createDistNode(self.tws0_loc, self.tws1_npo) + distB_node = node.createDistNode(self.tws1_npo, self.tws3_loc) + add_node = node.createAddNode(distA_node + ".distance", + distB_node + ".distance") + div_node = node.createDivNode(add_node + ".output", + self.root.attr("sx")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(self.root.attr("worldMatrix"), dm_node+".inputMatrix") + pm.connectAttr(self.root.attr("worldMatrix"), dm_node + ".inputMatrix") - div_node2 = nod.createDivNode(div_node+".outputX", dm_node+".outputScaleX") - self.volDriver_att = div_node2+".outputX" + div_node2 = node.createDivNode(div_node + ".outputX", + dm_node + ".outputScaleX") + self.volDriver_att = div_node2 + ".outputX" # Divisions ---------------------------------------- # div mid constraint to mid ctl - node = aop.gear_mulmatrix_op(self.mid_ctl.attr("worldMatrix"), self.div_mid.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.mid_ctl.attr("worldMatrix"), + self.div_mid.attr("parentInverseMatrix")) + dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") - pm.connectAttr(dm_node+".outputTranslate", self.div_mid.attr("translate")) - pm.connectAttr(dm_node+".outputRotate", self.div_mid.attr("rotate")) + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") + + pm.connectAttr(dm_node + ".outputTranslate", + self.div_mid.attr("translate")) - # at 0 or 1 the division will follow exactly the rotation of the controler.. and we wont have this nice tangent + roll + pm.connectAttr(dm_node + ".outputRotate", + self.div_mid.attr("rotate")) + + # at 0 or 1 the division will follow exactly the rotation of the + # controler.. and we wont have this nice tangent + roll scl_1_perc = [] scl_2_perc = [] for i, div_cnsUp in enumerate(self.div_cnsUp): - if i < (self.settings["div0"]+1): - perc = i/ (self.settings["div0"]+1.0) + if i < (self.settings["div0"] + 1): + perc = i / (self.settings["div0"] + 1.0) elif i < (self.settings["div0"] + 2): perc = .95 @@ -541,14 +910,16 @@ def addOperators(self): # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cnsUp, [self.tws1_rot, self.tws0_rot], 1-perc, 20) + o_node = applyop.gear_rollsplinekine_op( + div_cnsUp, [self.tws1_rot, self.tws0_rot], 1 - perc, 20) else: - node = aop.gear_rollsplinekine_op(div_cnsUp, [self.tws0_rot, self.tws1_rot], perc, 20) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + o_node = applyop.gear_rollsplinekine_op( + div_cnsUp, [self.tws0_rot, self.tws1_rot], perc, 20) + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") - scl_1_perc.append(perc/2) + scl_1_perc.append(perc / 2) scl_2_perc.append(perc) scl_1_perc.append(0.5) scl_2_perc.append(1) @@ -556,8 +927,8 @@ def addOperators(self): if i == (0): perc = .05 - elif i < (self.settings["div1"]+1): - perc = i/ (self.settings["div1"]+1.0) + elif i < (self.settings["div1"] + 1): + perc = i / (self.settings["div1"] + 1.0) elif i < (self.settings["div1"] + 2): perc = .95 @@ -565,58 +936,63 @@ def addOperators(self): # Roll if self.negate: - node = aop.gear_rollsplinekine_op(div_cnsDn, [self.tws3_rot, self.tws2_rot], 1-perc, 20) + o_node = applyop.gear_rollsplinekine_op( + div_cnsDn, [self.tws3_rot, self.tws2_rot], 1 - perc, 20) else: - node = aop.gear_rollsplinekine_op(div_cnsDn, [self.tws2_rot, self.tws3_rot], perc, 20) - pm.connectAttr(self.resample_att, node+".resample") - pm.connectAttr(self.absolute_att, node+".absolute") + o_node = applyop.gear_rollsplinekine_op( + div_cnsDn, [self.tws2_rot, self.tws3_rot], perc, 20) + pm.connectAttr(self.resample_att, o_node + ".resample") + pm.connectAttr(self.absolute_att, o_node + ".absolute") - scl_1_perc.append(perc/2+0.5) - scl_2_perc.append(1-perc) + scl_1_perc.append(perc / 2 + 0.5) + scl_2_perc.append(1 - perc) # Squash n Stretch for i, div_cns in enumerate(self.div_cns): - node = aop.gear_squashstretch2_op(div_cns, None, pm.getAttr(self.volDriver_att), "x") - pm.connectAttr(self.volume_att, node+".blend") - pm.connectAttr(self.volDriver_att, node+".driver") - pm.connectAttr(self.st_att[i], node+".stretch") - pm.connectAttr(self.sq_att[i], node+".squash") + o_node = applyop.gear_squashstretch2_op( + div_cns, None, pm.getAttr(self.volDriver_att), "x") + pm.connectAttr(self.volume_att, o_node + ".blend") + pm.connectAttr(self.volDriver_att, o_node + ".driver") + pm.connectAttr(self.st_att[i], o_node + ".stretch") + pm.connectAttr(self.sq_att[i], o_node + ".squash") # get the first mult_node after sq op - mult_node = pm.listHistory(node, future=True )[1] + mult_node = pm.listHistory(o_node, future=True)[1] # linear blend effector scale bc_node = pm.createNode("blendColors") bc_node.setAttr("color2R", 1) bc_node.setAttr("color2G", 1) bc_node.setAttr("blender", scl_1_perc[i]) - pm.connectAttr(self.eff_loc.attr("scale"), bc_node+".color1") + pm.connectAttr(self.eff_loc.attr("scale"), bc_node + ".color1") # linear blend mid scale bc_node2 = pm.createNode("blendColors") bc_node2.setAttr("color2R", 1) bc_node2.setAttr("color2G", 1) bc_node2.setAttr("blender", scl_2_perc[i]) - pm.connectAttr(self.mid_ctl.attr("scale"), bc_node2+".color1") + pm.connectAttr(self.mid_ctl.attr("scale"), bc_node2 + ".color1") # mid_ctl scale * effector scale mult_node2 = pm.createNode("multiplyDivide") - pm.connectAttr(bc_node2+".output", mult_node2+".input1") - pm.connectAttr(bc_node+".output", mult_node2+".input2") + pm.connectAttr(bc_node2 + ".output", mult_node2 + ".input1") + pm.connectAttr(bc_node + ".output", mult_node2 + ".input2") # plug to sq scale - pm.connectAttr(mult_node2+".output", mult_node+".input2") + pm.connectAttr(mult_node2 + ".output", mult_node + ".input2") # match IK/FK ref - pm.connectAttr(self.bone0.attr("rotate"), self.match_fk0.attr("rotate")) - pm.connectAttr(self.bone0.attr("translate"), self.match_fk0.attr("translate")) - pm.connectAttr(self.bone1.attr("rotate"), self.match_fk1.attr("rotate")) - pm.connectAttr(self.bone1.attr("translate"), self.match_fk1.attr("translate")) + pm.connectAttr(self.bone0.attr("rotate"), + self.match_fk0.attr("rotate")) + pm.connectAttr(self.bone0.attr("translate"), + self.match_fk0.attr("translate")) + pm.connectAttr(self.bone1.attr("rotate"), + self.match_fk1.attr("rotate")) + pm.connectAttr(self.bone1.attr("translate"), + self.match_fk1.attr("translate")) return # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self - # TODO: replace bone0 and control objects by loc connections def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.div_cns[0] self.relatives["knee"] = self.div_cns[self.settings["div0"] + 2] self.relatives["ankle"] = self.div_cns[-1] @@ -631,9 +1007,9 @@ def setRelation(self): self.jointRelatives["knee"] = self.settings["div0"] + 2 self.jointRelatives["ankle"] = len(self.div_cns) self.jointRelatives["eff"] = len(self.div_cns) - ## standard connection definition. - # @param self + def connect_standard(self): self.connect_standardWithIkRef() # fk isolation connection - self.connect_standardWithRotRef(self.settings["fkrefarray"], self.fk_cns) + self.connect_standardWithRotRef(self.settings["fkrefarray"], + self.fk_cns) diff --git a/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/guide.py b/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/guide.py index 7fb2c18..7013727 100644 --- a/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/guide.py +++ b/scripts/mgear/maya/shifter/component/leg_ms_2jnt_01/guide.py @@ -1,59 +1,33 @@ -# MGEAR is under the terms of the MIT License +"""Guide Leg MS 2jnt 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos, Miles Cheng" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com , miles@simage.com.hk" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "leg_ms_2jnt_01" NAME = "leg" -DESCRIPTION = "2 bones leg with Maya nodes for roll bones + Simage specification" +DESCRIPTION = "2 bones leg with Maya nodes for roll bones + Simage " \ + "specification" ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -64,52 +38,50 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "knee", "ankle", "eff"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,-3,0.1]) + vTemp = transform.getOffsetPosition(self.root, [0, -3, 0.1]) self.knee = self.addLoc("knee", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6,0]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, 0]) self.ankle = self.addLoc("ankle", self.knee, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-6,0.5]) + vTemp = transform.getOffsetPosition(self.root, [0, -6, 0.5]) self.eff = self.addLoc("eff", self.ankle, vTemp) centers = [self.root, self.knee, self.ankle, self.eff] self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default Values - self.pBlend = self.addParam("blend", "double", 1, 0, 1) - self.pFkRefArray = self.addParam("fkrefarray", "string", "") - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pBlend = self.addParam("blend", "double", 1, 0, 1) + self.pFkRefArray = self.addParam("fkrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") self.pUpvRefArray = self.addParam("upvrefarray", "string", "") - self.pMaxStretch = self.addParam("maxstretch", "double", 2 , 1, None) - self.pKneeThickness = self.addParam("knee","double",0,0,None) + self.pMaxStretch = self.addParam("maxstretch", "double", 2, 1, None) + self.pKneeThickness = self.addParam("knee", "double", 0, 0, None) # Divisions self.pDiv0 = self.addParam("div0", "long", 3, 1, None) self.pDiv1 = self.addParam("div1", "long", 3, 1, None) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-.5],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,.5],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -.5], [1, 0]]) + + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, .5], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -117,23 +89,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -141,7 +114,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -151,19 +124,26 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.ikfk_slider.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.ikfk_spinBox.setValue(int(self.root.attr("blend").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) + # populate component settings + self.settingsTab.ikfk_slider.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.ikfk_spinBox.setValue( + int(self.root.attr("blend").get() * 100)) + + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.settingsTab.knee_spinBox.setValue(self.root.attr("knee").get()) self.settingsTab.div0_spinBox.setValue(self.root.attr("div0").get()) self.settingsTab.div1_spinBox.setValue(self.root.attr("div1").get()) @@ -178,7 +158,6 @@ def populate_componentControls(self): for item in upvRefArrayItems: self.settingsTab.upvRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -189,29 +168,81 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.ikfk_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) - self.settingsTab.ikfk_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.knee_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.knee_spinBox, "knee")) + self.settingsTab.ikfk_slider.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_slider, "blend")) + + self.settingsTab.ikfk_spinBox.valueChanged.connect( + partial(self.updateSlider, self.settingsTab.ikfk_spinBox, "blend")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.knee_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.knee_spinBox, "knee")) + + self.settingsTab.div0_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) + + self.settingsTab.div1_spinBox.valueChanged.connect( + partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) - self.settingsTab.div0_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div0_spinBox, "div0")) - self.settingsTab.div1_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.div1_spinBox, "div1")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) + self.settingsTab.fkRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) + self.settingsTab.fkRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) + + self.settingsTab.fkRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.fkRefArray_listWidget, + "fkrefarray")) - self.settingsTab.fkRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) - self.settingsTab.fkRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) - self.settingsTab.fkRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.fkRefArray_listWidget, "fkrefarray")) self.settingsTab.fkRefArray_listWidget.installEventFilter(self) - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.upvRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.upvRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) - self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.upvRefArray_listWidget, "upvrefarray")) + self.settingsTab.upvRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + + self.settingsTab.upvRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.upvRefArray_listWidget, + "upvrefarray")) + self.settingsTab.upvRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -226,6 +257,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/mainSettingsUI.py b/scripts/mgear/maya/shifter/component/mainSettingsUI.py index 7dba75d..b03353d 100644 --- a/scripts/mgear/maya/shifter/component/mainSettingsUI.py +++ b/scripts/mgear/maya/shifter/component/mainSettingsUI.py @@ -1,33 +1,9 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import mgear.maya.pyqt as gqt -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from mgear.vendor.Qt import QtCore, QtWidgets + class Ui_Form(object): + def setupUi(self, Form): Form.setObjectName("Form") Form.resize(286, 527) @@ -42,54 +18,73 @@ def setupUi(self, Form): self.formLayout.setObjectName("formLayout") self.name_label = QtWidgets.QLabel(self.mainSettings_groupBox) self.name_label.setObjectName("name_label") - self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.name_label) + self.formLayout.setWidget( + 0, QtWidgets.QFormLayout.LabelRole, self.name_label) self.name_lineEdit = QtWidgets.QLineEdit(self.mainSettings_groupBox) self.name_lineEdit.setObjectName("name_lineEdit") - self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.name_lineEdit) + self.formLayout.setWidget( + 0, QtWidgets.QFormLayout.FieldRole, self.name_lineEdit) self.side_label = QtWidgets.QLabel(self.mainSettings_groupBox) self.side_label.setObjectName("side_label") - self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.side_label) + self.formLayout.setWidget( + 1, QtWidgets.QFormLayout.LabelRole, self.side_label) self.side_comboBox = QtWidgets.QComboBox(self.mainSettings_groupBox) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.side_comboBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.side_comboBox.sizePolicy().hasHeightForWidth()) self.side_comboBox.setSizePolicy(sizePolicy) self.side_comboBox.setObjectName("side_comboBox") self.side_comboBox.addItem("") self.side_comboBox.addItem("") self.side_comboBox.addItem("") - self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.side_comboBox) - self.componentIndex_label = QtWidgets.QLabel(self.mainSettings_groupBox) + self.formLayout.setWidget( + 1, QtWidgets.QFormLayout.FieldRole, self.side_comboBox) + self.componentIndex_label = QtWidgets.QLabel( + self.mainSettings_groupBox) self.componentIndex_label.setObjectName("componentIndex_label") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.componentIndex_label) - self.componentIndex_spinBox = QtWidgets.QSpinBox(self.mainSettings_groupBox) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) + self.formLayout.setWidget( + 2, QtWidgets.QFormLayout.LabelRole, self.componentIndex_label) + self.componentIndex_spinBox = QtWidgets.QSpinBox( + self.mainSettings_groupBox) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.componentIndex_spinBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.componentIndex_spinBox.sizePolicy().hasHeightForWidth()) self.componentIndex_spinBox.setSizePolicy(sizePolicy) self.componentIndex_spinBox.setObjectName("componentIndex_spinBox") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.componentIndex_spinBox) + self.formLayout.setWidget( + 2, QtWidgets.QFormLayout.FieldRole, self.componentIndex_spinBox) self.conector_label = QtWidgets.QLabel(self.mainSettings_groupBox) self.conector_label.setObjectName("conector_label") - self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.conector_label) - self.connector_comboBox = QtWidgets.QComboBox(self.mainSettings_groupBox) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) + self.formLayout.setWidget( + 3, QtWidgets.QFormLayout.LabelRole, self.conector_label) + self.connector_comboBox = QtWidgets.QComboBox( + self.mainSettings_groupBox) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.connector_comboBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.connector_comboBox.sizePolicy().hasHeightForWidth()) self.connector_comboBox.setSizePolicy(sizePolicy) self.connector_comboBox.setObjectName("connector_comboBox") self.connector_comboBox.addItem("") - self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.connector_comboBox) + self.formLayout.setWidget( + 3, QtWidgets.QFormLayout.FieldRole, self.connector_comboBox) self.gridLayout_4.addLayout(self.formLayout, 0, 0, 1, 1) self.gridLayout.addWidget(self.mainSettings_groupBox, 0, 0, 1, 1) self.groupBox = QtWidgets.QGroupBox(Form) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.groupBox.sizePolicy().hasHeightForWidth()) self.groupBox.setSizePolicy(sizePolicy) self.groupBox.setObjectName("groupBox") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) @@ -108,29 +103,38 @@ def setupUi(self, Form): self.gridLayout_2.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) self.gridLayout.addWidget(self.groupBox, 2, 0, 1, 1) self.jointConnexionSettings_groupBox = QtWidgets.QGroupBox(Form) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.jointConnexionSettings_groupBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.jointConnexionSettings_groupBox.sizePolicy().hasHeightForWidth()) self.jointConnexionSettings_groupBox.setSizePolicy(sizePolicy) - self.jointConnexionSettings_groupBox.setObjectName("jointConnexionSettings_groupBox") - self.gridLayout_3 = QtWidgets.QGridLayout(self.jointConnexionSettings_groupBox) + self.jointConnexionSettings_groupBox.setObjectName( + "jointConnexionSettings_groupBox") + self.gridLayout_3 = QtWidgets.QGridLayout( + self.jointConnexionSettings_groupBox) self.gridLayout_3.setObjectName("gridLayout_3") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") - self.useJointIndex_checkBox = QtWidgets.QCheckBox(self.jointConnexionSettings_groupBox) + self.useJointIndex_checkBox = QtWidgets.QCheckBox( + self.jointConnexionSettings_groupBox) self.useJointIndex_checkBox.setObjectName("useJointIndex_checkBox") self.verticalLayout.addWidget(self.useJointIndex_checkBox) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") - self.parentJointIndex_label = QtWidgets.QLabel(self.jointConnexionSettings_groupBox) + self.parentJointIndex_label = QtWidgets.QLabel( + self.jointConnexionSettings_groupBox) self.parentJointIndex_label.setObjectName("parentJointIndex_label") self.horizontalLayout.addWidget(self.parentJointIndex_label) - self.parentJointIndex_spinBox = QtWidgets.QSpinBox(self.jointConnexionSettings_groupBox) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) + self.parentJointIndex_spinBox = QtWidgets.QSpinBox( + self.jointConnexionSettings_groupBox) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.parentJointIndex_spinBox.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.parentJointIndex_spinBox.sizePolicy().hasHeightForWidth()) self.parentJointIndex_spinBox.setSizePolicy(sizePolicy) self.parentJointIndex_spinBox.setMinimum(-1) self.parentJointIndex_spinBox.setMaximum(999999) @@ -139,14 +143,19 @@ def setupUi(self, Form): self.horizontalLayout.addWidget(self.parentJointIndex_spinBox) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout_3.addLayout(self.verticalLayout, 0, 0, 1, 1) - self.gridLayout.addWidget(self.jointConnexionSettings_groupBox, 1, 0, 1, 1) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout.addWidget( + self.jointConnexionSettings_groupBox, 1, 0, 1, 1) + spacerItem = QtWidgets.QSpacerItem( + 20, 40, QtWidgets.QSizePolicy.Minimum, + QtWidgets.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem, 4, 0, 1, 1) self.groupBox_2 = QtWidgets.QGroupBox(Form) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.groupBox_2.sizePolicy().hasHeightForWidth()) self.groupBox_2.setSizePolicy(sizePolicy) self.groupBox_2.setObjectName("groupBox_2") self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2) @@ -166,18 +175,28 @@ def retranslateUi(self, Form): Form.setWindowTitle(gqt.fakeTranslate("Form", "Form", None, -1)) self.name_label.setText(gqt.fakeTranslate("Form", "Name:", None, -1)) self.side_label.setText(gqt.fakeTranslate("Form", "Side:", None, -1)) - self.side_comboBox.setItemText(0, gqt.fakeTranslate("Form", "Center", None, -1)) - self.side_comboBox.setItemText(1, gqt.fakeTranslate("Form", "Left", None, -1)) - self.side_comboBox.setItemText(2, gqt.fakeTranslate("Form", "Right", None, -1)) - self.componentIndex_label.setText(gqt.fakeTranslate("Form", "Component Index:", None, -1)) - self.conector_label.setText(gqt.fakeTranslate("Form", "Connector:", None, -1)) - self.connector_comboBox.setItemText(0, gqt.fakeTranslate("Form", "standard", None, -1)) - self.groupBox.setTitle(gqt.fakeTranslate("Form", "Channels Host Settings", None, -1)) + self.side_comboBox.setItemText( + 0, gqt.fakeTranslate("Form", "Center", None, -1)) + self.side_comboBox.setItemText( + 1, gqt.fakeTranslate("Form", "Left", None, -1)) + self.side_comboBox.setItemText( + 2, gqt.fakeTranslate("Form", "Right", None, -1)) + self.componentIndex_label.setText( + gqt.fakeTranslate("Form", "Component Index:", None, -1)) + self.conector_label.setText( + gqt.fakeTranslate("Form", "Connector:", None, -1)) + self.connector_comboBox.setItemText( + 0, gqt.fakeTranslate("Form", "standard", None, -1)) + self.groupBox.setTitle(gqt.fakeTranslate( + "Form", "Channels Host Settings", None, -1)) self.host_label.setText(gqt.fakeTranslate("Form", "Host:", None, -1)) self.host_pushButton.setText(gqt.fakeTranslate("Form", "<<", None, -1)) - self.jointConnexionSettings_groupBox.setTitle(gqt.fakeTranslate("Form", "Joint Connexion Settings", None, -1)) - self.useJointIndex_checkBox.setText(gqt.fakeTranslate("Form", "Use Joint Index", None, -1)) - self.parentJointIndex_label.setText(gqt.fakeTranslate("Form", "Parent Joint Index:", None, -1)) - self.groupBox_2.setTitle(gqt.fakeTranslate("Form", "Custom Controllers Group", None, -1)) + self.jointConnexionSettings_groupBox.setTitle( + gqt.fakeTranslate("Form", "Joint Connexion Settings", None, -1)) + self.useJointIndex_checkBox.setText( + gqt.fakeTranslate("Form", "Use Joint Index", None, -1)) + self.parentJointIndex_label.setText( + gqt.fakeTranslate("Form", "Parent Joint Index:", None, -1)) + self.groupBox_2.setTitle(gqt.fakeTranslate( + "Form", "Custom Controllers Group", None, -1)) self.subGroup_lineEdit.setToolTip(gqt.fakeTranslate("Form", "

Name for a custom controllers Group (Maya set) for the component controllers.

i.e: Setting the name "arm" will create a sub group (sub set in Mayas terminology) with the name "rig_arm_grp". This group will be under the "rig_controllers_grp"

Leave this option empty for the default behaviour.

", None, -1)) - diff --git a/scripts/mgear/maya/shifter/component/meta_01/__init__.py b/scripts/mgear/maya/shifter/component/meta_01/__init__.py index f9cb414..f62b5a4 100644 --- a/scripts/mgear/maya/shifter/component/meta_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/meta_01/__init__.py @@ -1,55 +1,24 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya +"""Component Meta 01 module""" import pymel.core as pm -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.node as nod +from mgear.maya import transform, primitive, node -########################################################## +############################################# # COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +############################################# + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" self.normal = self.guide.blades["blade"].z self.binormal = self.guide.blades["blade"].x @@ -60,65 +29,83 @@ def addObjects(self): parent = self.root self.jointList = [] - for i, t in enumerate(tra.getChainTransform2(self.guide.apos, self.normal, self.negate)): - lvl = pri.addTransform(parent, self.getName("%s_lvl"%i), t) - npo = pri.addTransform(lvl, self.getName("%s_npo"%i), t) - loc = pri.addTransform(npo, self.getName("%s_loc"%i), t) + for i, t in enumerate(transform.getChainTransform2(self.guide.apos, + self.normal, + self.negate)): + + lvl = primitive.addTransform(parent, self.getName("%s_lvl" % i), t) + npo = primitive.addTransform(lvl, self.getName("%s_npo" % i), t) + loc = primitive.addTransform(npo, self.getName("%s_loc" % i), t) self.jnt_pos.append([loc, i]) self.locList.append(loc) self.npoList.append(npo) - if i == len(self.guide.apos) -1: - ctl_npo = pri.addTransform(self.root, self.getName("ctl_npo"), t) - self.meta_ctl = self.addCtl(ctl_npo, "ctl", t, self.color_fk, "cube", w=self.size*.5, h=self.size*.5, d=self.size*.5, tp=self.parentCtlTag) - + if i == len(self.guide.apos) - 1: + ctl_npo = primitive.addTransform(self.root, + self.getName("ctl_npo"), + t) + + self.meta_ctl = self.addCtl(ctl_npo, + "ctl", + t, + self.color_fk, + "cube", + w=self.size * .5, + h=self.size * .5, + d=self.size * .5, + tp=self.parentCtlTag) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" return - # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): - inc = 1.0 / (len(self.guide.apos)-1) + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + inc = 1.0 / (len(self.guide.apos) - 1) val = 0.0 - for i, l in enumerate(self.locList): - blendNode = nod.createPairBlend( self.npoList[i], self.meta_ctl, blender=val) + for i, loc in enumerate(self.locList): + blendNode = node.createPairBlend( + self.npoList[i], self.meta_ctl, blender=val) if self.settings["intRotation"]: - pm.connectAttr(blendNode.attr("outRotate"), l.attr("rotate")) + pm.connectAttr(blendNode.attr("outRotate"), loc.attr("rotate")) if self.settings["intTranslation"]: - pm.connectAttr(blendNode.attr("outTranslate"), l.attr("translate")) + pm.connectAttr(blendNode.attr("outTranslate"), + loc.attr("translate")) if self.settings["intScale"]: - scaleA = [self.meta_ctl.attr("sx"),self.meta_ctl.attr("sy"), self.meta_ctl.attr("sz")] - scaleB = [self.npoList[i].attr("sx"),self.npoList[i].attr("sy"), self.npoList[i].attr("sz")] - scaleBlend = nod.createBlendNode(scaleA, scaleB, val) - pm.connectAttr(scaleBlend.attr("output"), l.attr("scale")) - val += inc - + scaleA = [self.meta_ctl.attr("sx"), + self.meta_ctl.attr("sy"), + self.meta_ctl.attr("sz")] + scaleB = [self.npoList[i].attr("sx"), + self.npoList[i].attr("sy"), + self.npoList[i].attr("sz")] + scaleBlend = node.createBlendNode(scaleA, scaleB, val) + pm.connectAttr(scaleBlend.attr("output"), loc.attr("scale")) + val += inc # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.locList[0] self.jointRelatives["root"] = 0 self.controlRelatives["root"] = self.meta_ctl - for i in range(len(self.locList)-1): - self.relatives["%s_loc"%i] = self.locList[i+1] - self.controlRelatives["%s_loc"%i] = self.meta_ctl - self.jointRelatives["%s_loc"%i] = i+1 + for i in range(len(self.locList) - 1): + self.relatives["%s_loc" % i] = self.locList[i + 1] + self.controlRelatives["%s_loc" % i] = self.meta_ctl + self.jointRelatives["%s_loc" % i] = i + 1 diff --git a/scripts/mgear/maya/shifter/component/meta_01/guide.py b/scripts/mgear/maya/shifter/component/meta_01/guide.py index c9d0eee..3a4e046 100644 --- a/scripts/mgear/maya/shifter/component/meta_01/guide.py +++ b/scripts/mgear/maya/shifter/component/meta_01/guide.py @@ -1,50 +1,21 @@ -# MGEAR is under the terms of the MIT License +"""Guide Meta 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide +from mgear.maya.shifter.component import guide +from mgear.maya import pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "meta_01" NAME = "meta" DESCRIPTION = "metacarpal finger spread." @@ -52,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -63,19 +37,14 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "#_loc"] self.save_blade = ["blade"] self.addMinMax("#_loc", 1, -1) - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() self.locs = self.addLocMulti("#_loc", self.root) @@ -85,38 +54,39 @@ def addObjects(self): centers.extend(self.locs) self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): - self.pScale = self.addParam("intScale", "bool", True) - self.pRotate = self.addParam("intRotation", "bool", True) - self.pTranslation = self.addParam("intTranslation", "bool", True) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + """Add the configurations settings""" + self.pScale = self.addParam("intScale", "bool", True) + self.pRotate = self.addParam("intRotation", "bool", True) + self.pTranslation = self.addParam("intTranslation", "bool", True) + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -124,7 +94,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -134,21 +104,24 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - - self.populateCheck(self.settingsTab.intScale_checkBox, "intScale") - self.populateCheck(self.settingsTab.intRotation_checkBox, "intRotation") - self.populateCheck(self.settingsTab.intTranslation_checkBox, "intTranslation") + # populate component settings + self.populateCheck(self.settingsTab.intScale_checkBox, + "intScale") + self.populateCheck(self.settingsTab.intRotation_checkBox, + "intRotation") + self.populateCheck(self.settingsTab.intTranslation_checkBox, + "intTranslation") def create_componentLayout(self): @@ -160,9 +133,19 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.intScale_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.intScale_checkBox, "intScale")) - self.settingsTab.intRotation_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.intRotation_checkBox, "intRotation")) - self.settingsTab.intTranslation_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.intTranslation_checkBox, "intTranslation")) + self.settingsTab.intScale_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.intScale_checkBox, + "intScale")) + + self.settingsTab.intRotation_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.intRotation_checkBox, + "intRotation")) + self.settingsTab.intTranslation_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.intTranslation_checkBox, + "intTranslation")) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/mouth_01/__init__.py b/scripts/mgear/maya/shifter/component/mouth_01/__init__.py index 1fb8e4e..bc54507 100644 --- a/scripts/mgear/maya/shifter/component/mouth_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/mouth_01/__init__.py @@ -1,136 +1,179 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya +"""Component Mouth 01 module""" + import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att +from mgear.maya import attribute, transform, primitive -########################################################## +############################################# # COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +############################################# + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - - ## Add all the objects needed to create the component. - # @param self def addObjects(self): - - #jaw control - t = tra.getTransformFromPos(self.guide.pos["jaw"]) - self.ctl_npo = pri.addTransform(self.root, self.getName("ctl_npo"), t) - self.jaw_ctl = self.addCtl(self.ctl_npo, "jaw_ctl", t, self.color_fk, "circle", w=1*self.size, ro=dt.Vector([1.5708,0,0]), tp=self.parentCtlTag) - att.setKeyableAttributes(self.jaw_ctl, ["tx", "ty", "tz", "rz"]) - - #mouth center - t = tra.getTransformFromPos(self.guide.pos["rotcenter"]) - self.mouthCenter_npo = pri.addTransform(self.root, self.getName("mouthCenter_npo"), t) - self.mouthCenter = pri.addTransform(self.mouthCenter_npo, self.getName("mouthCenter"), t) - - #jaw "UPPER" - t = tra.getTransformFromPos(self.guide.pos["root"]) - self.jawUp_npo = pri.addTransform(self.mouthCenter, self.getName("jawUpper_npo"), t) - self.jawUp_pos = pri.addTransform(self.jawUp_npo, self.getName("jawUpper_pos"), t) - self.jawUp_rot = pri.addTransform(self.jawUp_pos, self.getName("jawUpper_rot"), t) - - #jaw "LOWER" - t = tra.getTransformFromPos(self.guide.pos["root"]) - self.jawLow_npo = pri.addTransform(self.mouthCenter, self.getName("jaw_npo"), t) - self.jawLow_pos = pri.addTransform(self.jawLow_npo, self.getName("jawLow_pos"), t) - self.jawLow_rot = pri.addTransform(self.jawLow_pos, self.getName("jawLow_rot"), t) - - #lips - t = tra.getTransformFromPos(self.guide.pos["lipup"]) - self.lipup_npo = pri.addTransform(self.jawUp_rot, self.getName("lipup_npo"), t) - self.lipup_ctl = self.addCtl(self.lipup_npo, "lipup_ctl", t, self.color_fk, "square", d=.15*self.size, w=1*self.size, ro=dt.Vector([1.5708,0,0]), tp=self.jaw_ctl) - - t = tra.getTransformFromPos(self.guide.pos["liplow"]) - self.liplow_npo = pri.addTransform(self.jawLow_rot, self.getName("liplow_npo"), t) - self.liplow_ctl = self.addCtl(self.liplow_npo, "liplow_ctl", t, self.color_fk, "square", d=.15*self.size, w=1*self.size, ro=dt.Vector([1.5708,0,0]), tp=self.jaw_ctl) - - #teeth - t = tra.getTransformFromPos(self.guide.pos["lipup"]) - self.teethup_npo = pri.addTransform(self.jawUp_rot, self.getName("teethup_npo"), t) - self.teethup_ctl = self.addCtl(self.teethup_npo, "teethup_ctl", t, self.color_ik, "square", d=.1*self.size, w=.7*self.size, ro=dt.Vector([1.5708,0,0]), tp=self.lipup_ctl) - - t = tra.getTransformFromPos(self.guide.pos["liplow"]) - self.teethlow_npo = pri.addTransform(self.jawLow_rot, self.getName("teethlow_npo"), t) - self.teethlow_ctl = self.addCtl(self.teethlow_npo, "teethlow_ctl", t, self.color_ik, "square", d=.1*self.size, w=.7*self.size, ro=dt.Vector([1.5708,0,0]), tp=self.liplow_ctl) - - - self.jnt_pos.append([self.jawLow_rot, "jaw", "parent_relative_jnt", False]) - self.jnt_pos.append([self.lipup_ctl, "lipup", "parent_relative_jnt", False]) - self.jnt_pos.append([self.liplow_ctl, "liplow", "jaw", False]) # relative 0 is the jaw jnt - self.jnt_pos.append([self.teethup_ctl, "teethup", "parent_relative_jnt", False]) - self.jnt_pos.append([self.teethlow_ctl, "teethlow", "jaw", False]) - - + """Add all the objects needed to create the component.""" + + # jaw control + t = transform.getTransformFromPos(self.guide.pos["jaw"]) + + self.ctl_npo = primitive.addTransform( + self.root, self.getName("ctl_npo"), t) + + self.jaw_ctl = self.addCtl( + self.ctl_npo, + "jaw_ctl", + t, + self.color_fk, + "circle", + w=1 * self.size, + ro=datatypes.Vector([1.5708, 0, 0]), + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.jaw_ctl, ["tx", "ty", "tz", "rz"]) + + # mouth center + t = transform.getTransformFromPos(self.guide.pos["rotcenter"]) + self.mouthCenter_npo = primitive.addTransform( + self.root, self.getName("mouthCenter_npo"), t) + self.mouthCenter = primitive.addTransform( + self.mouthCenter_npo, self.getName("mouthCenter"), t) + + # jaw "UPPER" + t = transform.getTransformFromPos(self.guide.pos["root"]) + self.jawUp_npo = primitive.addTransform( + self.mouthCenter, self.getName("jawUpper_npo"), t) + self.jawUp_pos = primitive.addTransform( + self.jawUp_npo, self.getName("jawUpper_pos"), t) + self.jawUp_rot = primitive.addTransform( + self.jawUp_pos, self.getName("jawUpper_rot"), t) + + # jaw "LOWER" + t = transform.getTransformFromPos(self.guide.pos["root"]) + self.jawLow_npo = primitive.addTransform( + self.mouthCenter, self.getName("jaw_npo"), t) + self.jawLow_pos = primitive.addTransform( + self.jawLow_npo, self.getName("jawLow_pos"), t) + self.jawLow_rot = primitive.addTransform( + self.jawLow_pos, self.getName("jawLow_rot"), t) + + # lips + t = transform.getTransformFromPos(self.guide.pos["lipup"]) + + self.lipup_npo = primitive.addTransform( + self.jawUp_rot, self.getName("lipup_npo"), t) + + self.lipup_ctl = self.addCtl( + self.lipup_npo, + "lipup_ctl", + t, + self.color_fk, + "square", + d=.15 * self.size, + w=1 * self.size, + ro=datatypes.Vector([1.5708, 0, 0]), + tp=self.jaw_ctl) + + t = transform.getTransformFromPos(self.guide.pos["liplow"]) + + self.liplow_npo = primitive.addTransform( + self.jawLow_rot, self.getName("liplow_npo"), t) + + self.liplow_ctl = self.addCtl( + self.liplow_npo, + "liplow_ctl", + t, self.color_fk, + "square", + d=.15 * self.size, + w=1 * self.size, + ro=datatypes.Vector([1.5708, 0, 0]), + tp=self.jaw_ctl) + + # teeth + t = transform.getTransformFromPos(self.guide.pos["lipup"]) + self.teethup_npo = primitive.addTransform( + self.jawUp_rot, self.getName("teethup_npo"), t) + + self.teethup_ctl = self.addCtl(self.teethup_npo, + "teethup_ctl", + t, + self.color_ik, + "square", + d=.1 * self.size, + w=.7 * self.size, + ro=datatypes.Vector([1.5708, 0, 0]), + tp=self.lipup_ctl) + + t = transform.getTransformFromPos(self.guide.pos["liplow"]) + + self.teethlow_npo = primitive.addTransform( + self.jawLow_rot, self.getName("teethlow_npo"), t) + + self.teethlow_ctl = self.addCtl(self.teethlow_npo, + "teethlow_ctl", + t, + self.color_ik, + "square", + d=.1 * self.size, + w=.7 * self.size, + ro=datatypes.Vector([1.5708, 0, 0]), + tp=self.liplow_ctl) + + self.jnt_pos.append( + [self.jawLow_rot, "jaw", "parent_relative_jnt", False]) + self.jnt_pos.append( + [self.lipup_ctl, "lipup", "parent_relative_jnt", False]) + # relative 0 is the jaw jnt + self.jnt_pos.append( + [self.liplow_ctl, "liplow", "jaw", False]) + self.jnt_pos.append( + [self.teethup_ctl, "teethup", "parent_relative_jnt", False]) + self.jnt_pos.append( + [self.teethlow_ctl, "teethlow", "jaw", False]) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): - - self.sideRotation_att = self.addAnimParam("siderot", "Sides Rotation", "double", 20, 0, 100) - self.vertRotation_att = self.addAnimParam("vertrot", "Vertical Rotation", "double", 40, 0, 100) - self.frontalTranslation_att = self.addAnimParam("fronttrans", "Frontal Translation", "double", 1, 0, 1) - self.verticalTranslation_att = self.addAnimParam("verttrans", "Vertical Translation", "double", 0.2, 0, 1) - self.followLips_att = self.addAnimParam("floowlips", "FollowLips", "double", 0.05, 0, 1) - self.lipsAlignSpeed_att = self.addAnimParam("lipsAlignSpeed", "Lips Align Speed", "double", 10, 0, 100) - - + """Create the anim and setupr rig attributes for the component""" + + self.sideRotation_att = self.addAnimParam( + "siderot", "Sides Rotation", "double", 20, 0, 100) + self.vertRotation_att = self.addAnimParam( + "vertrot", "Vertical Rotation", "double", 40, 0, 100) + self.frontalTranslation_att = self.addAnimParam( + "fronttrans", "Frontal Translation", "double", 1, 0, 1) + self.verticalTranslation_att = self.addAnimParam( + "verttrans", "Vertical Translation", "double", 0.2, 0, 1) + self.followLips_att = self.addAnimParam( + "floowlips", "FollowLips", "double", 0.05, 0, 1) + self.lipsAlignSpeed_att = self.addAnimParam( + "lipsAlignSpeed", "Lips Align Speed", "double", 10, 0, 100) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # mouth center rotation - pm.connectAttr(self.jaw_ctl+".rotateZ", self.mouthCenter+".rotateZ") + pm.connectAttr(self.jaw_ctl + ".rotateZ", + self.mouthCenter + ".rotateZ") - #Node Creation ######## + # Node Creation ######## # Mut Div nodes md_node_1 = pm.createNode("multiplyDivide") @@ -142,7 +185,7 @@ def addOperators(self): md_node_7 = pm.createNode("multiplyDivide") md_node_8 = pm.createNode("multiplyDivide") - # Clamp node + # Clamp o_node clamp_node = pm.createNode("clamp") # Condition nodes @@ -151,100 +194,100 @@ def addOperators(self): cond_node_3 = pm.createNode("condition") # Blend nodes - blend_node_1 = pm.createNode("blendColors") - blend_node_2 = pm.createNode("blendColors") + blend_node_1 = pm.createNode("blendColors") + blend_node_2 = pm.createNode("blendColors") - #Node Conexions ######## + # Node Conexions ######## # md_node_1 - pm.connectAttr(self.jaw_ctl+".translateY", md_node_1+".input1X") - pm.connectAttr(self.vertRotation_att, md_node_1+".input2X") + pm.connectAttr(self.jaw_ctl + ".translateY", md_node_1 + ".input1X") + pm.connectAttr(self.vertRotation_att, md_node_1 + ".input2X") # md_node_2 - pm.connectAttr(self.jaw_ctl+".translateX", md_node_2+".input1X") - pm.connectAttr(self.sideRotation_att, md_node_2+".input2X") + pm.connectAttr(self.jaw_ctl + ".translateX", md_node_2 + ".input1X") + pm.connectAttr(self.sideRotation_att, md_node_2 + ".input2X") # md_node_3 - pm.connectAttr(self.jaw_ctl+".translateY", md_node_3+".input1X") - pm.connectAttr(self.lipsAlignSpeed_att, md_node_3+".input2X") + pm.connectAttr(self.jaw_ctl + ".translateY", md_node_3 + ".input1X") + pm.connectAttr(self.lipsAlignSpeed_att, md_node_3 + ".input2X") # md_node_4 - pm.connectAttr(self.jaw_ctl+".translateY", md_node_4+".input1X") - pm.connectAttr(self.verticalTranslation_att, md_node_4+".input2X") + pm.connectAttr(self.jaw_ctl + ".translateY", md_node_4 + ".input1X") + pm.connectAttr(self.verticalTranslation_att, md_node_4 + ".input2X") # md_node_5 - pm.connectAttr(self.jaw_ctl+".translateZ", md_node_5+".input1X") - pm.connectAttr(self.frontalTranslation_att, md_node_5+".input2X") + pm.connectAttr(self.jaw_ctl + ".translateZ", md_node_5 + ".input1X") + pm.connectAttr(self.frontalTranslation_att, md_node_5 + ".input2X") # md_node_6 - pm.connectAttr( md_node_1+".outputX", md_node_6+".input1X") - pm.setAttr( md_node_6+".input2X", -1.0) + pm.connectAttr(md_node_1 + ".outputX", md_node_6 + ".input1X") + pm.setAttr(md_node_6 + ".input2X", -1.0) # md_node_7 - pm.connectAttr(md_node_5+".outputX", md_node_7+".input1X") - pm.connectAttr(clamp_node+".outputR", md_node_7+".input2X") + pm.connectAttr(md_node_5 + ".outputX", md_node_7 + ".input1X") + pm.connectAttr(clamp_node + ".outputR", md_node_7 + ".input2X") # md_node_8 - pm.connectAttr(cond_node_2+".outColorR", md_node_8+".input1X") - pm.connectAttr(clamp_node+".outputR", md_node_8+".input2X") + pm.connectAttr(cond_node_2 + ".outColorR", md_node_8 + ".input1X") + pm.connectAttr(clamp_node + ".outputR", md_node_8 + ".input2X") # clamp_node - pm.connectAttr(md_node_3+".outputX", clamp_node+".inputR") - pm.setAttr( clamp_node+".maxR", 1.0) + pm.connectAttr(md_node_3 + ".outputX", clamp_node + ".inputR") + pm.setAttr(clamp_node + ".maxR", 1.0) # cond_node_1 - pm.connectAttr(md_node_6+".outputX", cond_node_1+".colorIfTrueR") - pm.connectAttr(md_node_6+".outputX", cond_node_1+".firstTerm") - pm.setAttr( cond_node_1+".operation", 4) - pm.setAttr( cond_node_1+".colorIfFalseR", 0) + pm.connectAttr(md_node_6 + ".outputX", cond_node_1 + ".colorIfTrueR") + pm.connectAttr(md_node_6 + ".outputX", cond_node_1 + ".firstTerm") + pm.setAttr(cond_node_1 + ".operation", 4) + pm.setAttr(cond_node_1 + ".colorIfFalseR", 0) # cond_node_2 - pm.connectAttr(md_node_2+".outputX", cond_node_2+".colorIfFalseR") - pm.connectAttr(md_node_6+".outputX", cond_node_2+".firstTerm") - pm.setAttr( cond_node_2+".operation", 2) + pm.connectAttr(md_node_2 + ".outputX", cond_node_2 + ".colorIfFalseR") + pm.connectAttr(md_node_6 + ".outputX", cond_node_2 + ".firstTerm") + pm.setAttr(cond_node_2 + ".operation", 2) # cond_node_3 - pm.connectAttr(md_node_4+".outputX", cond_node_3+".colorIfTrueR") - pm.connectAttr(md_node_4+".outputX", cond_node_3+".firstTerm") - pm.setAttr( cond_node_3+".operation", 4) - pm.setAttr( cond_node_3+".colorIfFalseR", 0) + pm.connectAttr(md_node_4 + ".outputX", cond_node_3 + ".colorIfTrueR") + pm.connectAttr(md_node_4 + ".outputX", cond_node_3 + ".firstTerm") + pm.setAttr(cond_node_3 + ".operation", 4) + pm.setAttr(cond_node_3 + ".colorIfFalseR", 0) # blend_node_1 - pm.connectAttr(self.followLips_att, blend_node_1+".blender") - pm.connectAttr(md_node_6+".outputX", blend_node_1+".color1R") - pm.connectAttr(md_node_2+".outputX", blend_node_1+".color1G") - pm.connectAttr(cond_node_1+".outColorR", blend_node_1+".color2R") - pm.connectAttr(md_node_8+".outputX", blend_node_1+".color2G") + pm.connectAttr(self.followLips_att, blend_node_1 + ".blender") + pm.connectAttr(md_node_6 + ".outputX", blend_node_1 + ".color1R") + pm.connectAttr(md_node_2 + ".outputX", blend_node_1 + ".color1G") + pm.connectAttr(cond_node_1 + ".outColorR", blend_node_1 + ".color2R") + pm.connectAttr(md_node_8 + ".outputX", blend_node_1 + ".color2G") # blend_node_2 - pm.connectAttr(self.followLips_att, blend_node_2+".blender") - pm.connectAttr(cond_node_3+".outColorR", blend_node_2+".color1R") - pm.connectAttr(md_node_5+".outputX", blend_node_2+".color1G") - pm.connectAttr(md_node_7+".outputX", blend_node_2+".color2G") + pm.connectAttr(self.followLips_att, blend_node_2 + ".blender") + pm.connectAttr(cond_node_3 + ".outColorR", blend_node_2 + ".color1R") + pm.connectAttr(md_node_5 + ".outputX", blend_node_2 + ".color1G") + pm.connectAttr(md_node_7 + ".outputX", blend_node_2 + ".color2G") # inputs to transforms - pm.connectAttr(md_node_6+".outputX", self.jawLow_rot+".rotateX") - pm.connectAttr(md_node_2+".outputX", self.jawLow_rot+".rotateY") - - pm.connectAttr(blend_node_1+".outputR", self.jawUp_rot+".rotateX") - pm.connectAttr(blend_node_1+".outputG", self.jawUp_rot+".rotateY") - - pm.connectAttr(cond_node_3+".outColorR", self.jawLow_pos+".translateY") - pm.connectAttr(md_node_5+".outputX", self.jawLow_pos+".translateZ") - - pm.connectAttr(blend_node_2+".outputR", self.jawUp_pos+".translateY") - pm.connectAttr(blend_node_2+".outputG", self.jawUp_pos+".translateZ") + pm.connectAttr(md_node_6 + ".outputX", self.jawLow_rot + ".rotateX") + pm.connectAttr(md_node_2 + ".outputX", self.jawLow_rot + ".rotateY") + pm.connectAttr(blend_node_1 + ".outputR", self.jawUp_rot + ".rotateX") + pm.connectAttr(blend_node_1 + ".outputG", self.jawUp_rot + ".rotateY") + pm.connectAttr(cond_node_3 + ".outColorR", + self.jawLow_pos + ".translateY") + pm.connectAttr(md_node_5 + ".outputX", + self.jawLow_pos + ".translateZ") + pm.connectAttr(blend_node_2 + ".outputR", + self.jawUp_pos + ".translateY") + pm.connectAttr(blend_node_2 + ".outputG", + self.jawUp_pos + ".translateZ") # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.root self.relatives["jaw"] = self.jawLow_rot self.relatives["rotcenter"] = self.jawLow_rot diff --git a/scripts/mgear/maya/shifter/component/mouth_01/guide.py b/scripts/mgear/maya/shifter/component/mouth_01/guide.py index 4584275..d410d24 100644 --- a/scripts/mgear/maya/shifter/component/mouth_01/guide.py +++ b/scripts/mgear/maya/shifter/component/mouth_01/guide.py @@ -1,49 +1,17 @@ -# MGEAR is under the terms of the MIT License +"""Guide Mouth 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## - -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "mouth_01" NAME = "mouth" DESCRIPTION = "mouth lips and jaw" @@ -51,7 +19,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -62,29 +33,22 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "rotcenter", "lipup", "liplow", "jaw"] - - - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" - #eye guide + # eye guide self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,0,1]) + vTemp = transform.getOffsetPosition(self.root, [0, 0, 1]) self.rotcenter = self.addLoc("rotcenter", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,.3,1.3]) + vTemp = transform.getOffsetPosition(self.root, [0, .3, 1.3]) self.lipup = self.addLoc("lipup", self.rotcenter, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-.3,1.3]) + vTemp = transform.getOffsetPosition(self.root, [0, -.3, 1.3]) self.liplow = self.addLoc("liplow", self.rotcenter, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,-2,2]) + vTemp = transform.getOffsetPosition(self.root, [0, -2, 2]) self.jaw = self.addLoc("jaw", self.root, vTemp) centers = [self.root, self.rotcenter] @@ -99,16 +63,12 @@ def addObjects(self): centers = [self.root, self.jaw] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) - + self.pUseIndex = self.addParam("useIndex", "bool", False) + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) return @@ -118,14 +78,15 @@ def addParameters(self): ########################################################## -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.setup_componentSettingWindow() self.create_componentControls() @@ -134,7 +95,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -144,10 +105,11 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ return @@ -164,4 +126,4 @@ def create_componentConnections(self): return def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/neck_ik_01/__init__.py b/scripts/mgear/maya/shifter/component/neck_ik_01/__init__.py index 343356b..7a4f2b0 100644 --- a/scripts/mgear/maya/shifter/component/neck_ik_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/neck_ik_01/__init__.py @@ -1,105 +1,138 @@ -# MGEAR is under the terms of the MIT License +"""Component Neck IK 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +import pymel.core as pm +from pymel.core import datatypes -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: +from mgear.maya.shifter import component -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +from mgear.maya import node, fcurve, applyop, vector, curve +from mgear.maya import attribute, transform, primitive -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +############################################# +# COMPONENT +############################################# -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 -########################################################## -# GLOBAL -########################################################## -# Maya +class Component(component.Main): + """Shifter component Class""" -import pymel.core as pm + # ===================================================== + # OBJECTS + # ===================================================== + def addObjects(self): + """Add all the objects needed to create the component.""" -import pymel.core.datatypes as dt + self.normal = self.guide.blades["blade"].z * -1 + # Ik Controlers ------------------------------------ + t = transform.getTransformLookingAt(self.guide.pos["tan1"], + self.guide.pos["neck"], + self.normal, + "yx", + self.negate) -# mgear -from mgear.maya.shifter.component import MainComponent + t = transform.setMatrixPosition(t, self.guide.pos["neck"]) -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.curve as cur -import mgear.maya.fcurve as fcu + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t) -########################################################## -# COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): + self.ik_ctl = self.addCtl(self.ik_cns, + "ik_ctl", + t, + self.color_ik, + "compas", + w=self.size * .5, + tp=self.parentCtlTag) + attribute.setKeyableAttributes(self.ik_ctl, self.tr_params) + attribute.setRotOrder(self.ik_ctl, "ZXY") + attribute.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) - ## Add all the objects needed to create the component. - # @param self - def addObjects(self): + # Tangents ----------------------------------------- + if self.settings["tangentControls"]: + t = transform.setMatrixPosition(t, self.guide.pos["tan1"]) - self.normal = self.guide.blades["blade"].z*-1 + self.tan1_loc = primitive.addTransform( + self.ik_ctl, self.getName("tan1_loc"), t) - # Ik Controlers ------------------------------------ - t = tra.getTransformLookingAt(self.guide.pos["tan1"], self.guide.pos["neck"], self.normal, "yx", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["neck"]) - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t) + self.tan1_ctl = self.addCtl(self.tan1_loc, + "tan1_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik_ctl) - self.ik_ctl = self.addCtl(self.ik_cns, "ik_ctl", t, self.color_ik, "compas", w=self.size*.5, tp=self.parentCtlTag) - att.setKeyableAttributes(self.ik_ctl, self.tr_params) - att.setRotOrder(self.ik_ctl, "ZXY") - att.setInvertMirror(self.ik_ctl, ["tx", "ry", "rz"]) + attribute.setKeyableAttributes(self.tan1_ctl, self.t_params) + attribute.setInvertMirror(self.tan1_ctl, ["tx"]) - # Tangents ----------------------------------------- - if self.settings["tangentControls"]: - t = tra.setMatrixPosition(t, self.guide.pos["tan1"]) - self.tan1_loc = pri.addTransform(self.ik_ctl, self.getName("tan1_loc"), t) - self.tan1_ctl = self.addCtl(self.tan1_loc, "tan1_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik_ctl) - att.setKeyableAttributes(self.tan1_ctl, self.t_params) - att.setInvertMirror(self.tan1_ctl, ["tx"]) - - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["tan0"], self.normal, "yx", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["tan0"]) - self.tan0_loc = pri.addTransform(self.root, self.getName("tan0_loc"), t) - self.tan0_ctl = self.addCtl(self.tan0_loc, "tan0_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik_ctl) - att.setKeyableAttributes(self.tan0_ctl, self.t_params) - att.setInvertMirror(self.tan0_ctl, ["tx"]) + t = transform.getTransformLookingAt(self.guide.pos["root"], + self.guide.pos["tan0"], + self.normal, + "yx", + self.negate) + + t = transform.setMatrixPosition(t, self.guide.pos["tan0"]) + + self.tan0_loc = primitive.addTransform( + self.root, self.getName("tan0_loc"), t) + + self.tan0_ctl = self.addCtl(self.tan0_loc, + "tan0_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik_ctl) + + attribute.setKeyableAttributes(self.tan0_ctl, + self.t_params) + attribute.setInvertMirror(self.tan0_ctl, ["tx"]) # Curves ------------------------------------------- - self.mst_crv = cur.addCnsCurve(self.root, self.getName("mst_crv"), [self.root, self.tan0_ctl, self.tan1_ctl, self.ik_ctl], 3) - self.slv_crv = cur.addCurve(self.root, self.getName("slv_crv"), [dt.Vector()]*10, False, 3) + self.mst_crv = curve.addCnsCurve( + self.root, + self.getName("mst_crv"), + [self.root, self.tan0_ctl, self.tan1_ctl, self.ik_ctl], + 3) + + self.slv_crv = curve.addCurve(self.root, + self.getName("slv_crv"), + [datatypes.Vector()] * 10, + False, + 3) + self.mst_crv.setAttr("visibility", False) else: - t = tra.setMatrixPosition(t, self.guide.pos["tan1"]) - self.tan1_loc = pri.addTransform(self.ik_ctl, self.getName("tan1_loc"), t) + t = transform.setMatrixPosition(t, self.guide.pos["tan1"]) + self.tan1_loc = primitive.addTransform( + self.ik_ctl, self.getName("tan1_loc"), t) + + t = transform.getTransformLookingAt(self.guide.pos["root"], + self.guide.pos["tan0"], + self.normal, + "yx", + self.negate) - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["tan0"], self.normal, "yx", self.negate) - t = tra.setMatrixPosition(t, self.guide.pos["tan0"]) - self.tan0_loc = pri.addTransform(self.root, self.getName("tan0_loc"), t) + t = transform.setMatrixPosition(t, self.guide.pos["tan0"]) + + self.tan0_loc = primitive.addTransform( + self.root, self.getName("tan0_loc"), t) # Curves ------------------------------------------- - self.mst_crv = cur.addCnsCurve(self.root, self.getName("mst_crv"), [self.root, self.tan0_loc, self.tan1_loc, self.ik_ctl], 3) - self.slv_crv = cur.addCurve(self.root, self.getName("slv_crv"), [dt.Vector()]*10, False, 3) + self.mst_crv = curve.addCnsCurve( + self.root, + self.getName("mst_crv"), + [self.root, self.tan0_loc, self.tan1_loc, self.ik_ctl], + 3) + + self.slv_crv = curve.addCurve(self.root, + self.getName("slv_crv"), + [datatypes.Vector()] * 10, + False, + 3) + self.mst_crv.setAttr("visibility", False) self.slv_crv.setAttr("visibility", False) @@ -116,138 +149,242 @@ def addObjects(self): self.twister = [] self.ref_twist = [] - parent_twistRef = pri.addTransform(self.root, self.getName("reference"), tra.getTransform(self.root)) - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["neck"], self.normal, "yx", self.negate) - self.intMRef = pri.addTransform(self.root, self.getName("intMRef"), t) + parent_twistRef = primitive.addTransform( + self.root, + self.getName("reference"), + transform.getTransform(self.root)) + + t = transform.getTransformLookingAt(self.guide.pos["root"], + self.guide.pos["neck"], + self.normal, + "yx", + self.negate) + + self.intMRef = primitive.addTransform( + self.root, self.getName("intMRef"), t) + self.previousCtlTag = self.parentCtlTag for i in range(self.settings["division"]): # References - div_cns = pri.addTransform(parentdiv, self.getName("%s_cns"%i), t) - pm.setAttr(div_cns+".inheritsTransform", False) + div_cns = primitive.addTransform( + parentdiv, self.getName("%s_cns" % i), t) + + pm.setAttr(div_cns + ".inheritsTransform", False) self.div_cns.append(div_cns) parentdiv = div_cns - scl_npo = pri.addTransform(parentctl, self.getName("%s_scl_npo"%i), tra.getTransform(parentctl)) + scl_npo = primitive.addTransform(parentctl, + self.getName("%s_scl_npo" % i), + transform.getTransform(parentctl)) # Controlers (First and last one are fake) - if i in [ self.settings["division"] - 1]: # 0, - fk_ctl = pri.addTransform(scl_npo, self.getName("%s_loc"%i), tra.getTransform(parentctl)) + if i in [self.settings["division"] - 1]: # 0, + fk_ctl = primitive.addTransform( + scl_npo, + self.getName("%s_loc" % i), + transform.getTransform(parentctl)) + fk_npo = fk_ctl else: - fk_npo = pri.addTransform(scl_npo, self.getName("fk%s_npo"%i), tra.getTransform(parentctl)) - fk_ctl = self.addCtl(fk_npo, "fk%s_ctl"%i, tra.getTransform(parentctl), self.color_fk, "cube", w=self.size*.2, h=self.size*.05, d=self.size*.2, tp=self.previousCtlTag) - att.setKeyableAttributes(self.fk_ctl) - att.setRotOrder(fk_ctl, "ZXY") + fk_npo = primitive.addTransform( + scl_npo, + self.getName("fk%s_npo" % i), + transform.getTransform(parentctl)) + + fk_ctl = self.addCtl(fk_npo, + "fk%s_ctl" % i, + transform.getTransform(parentctl), + self.color_fk, + "cube", + w=self.size * .2, + h=self.size * .05, + d=self.size * .2, + tp=self.previousCtlTag) + + attribute.setKeyableAttributes(self.fk_ctl) + attribute.setRotOrder(fk_ctl, "ZXY") self.previousCtlTag = fk_ctl self.fk_ctl.append(fk_ctl) - self.scl_npo.append(scl_npo) self.fk_npo.append(fk_npo) parentctl = fk_ctl self.jnt_pos.append([fk_ctl, i]) - t = tra.getTransformLookingAt(self.guide.pos["root"], self.guide.pos["neck"], self.guide.blades["blade"].z*-1, "yx", self.negate) - twister = pri.addTransform(parent_twistRef, self.getName("%s_rot_ref"%i), t) - ref_twist = pri.addTransform(parent_twistRef, self.getName("%s_pos_ref"%i), t) - ref_twist.setTranslation(dt.Vector(0.0,0,1.0), space="preTransform") + t = transform.getTransformLookingAt( + self.guide.pos["root"], + self.guide.pos["neck"], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + twister = primitive.addTransform( + parent_twistRef, self.getName("%s_rot_ref" % i), t) + + ref_twist = primitive.addTransform( + parent_twistRef, self.getName("%s_pos_ref" % i), t) + + ref_twist.setTranslation( + datatypes.Vector(0.0, 0, 1.0), space="preTransform") self.twister.append(twister) self.ref_twist.append(ref_twist) - for x in self.fk_ctl[:-1]: - att.setInvertMirror(x, ["tx", "rz", "ry"]) + for x in self.fk_ctl[:-1]: + attribute.setInvertMirror(x, ["tx", "rz", "ry"]) # Head --------------------------------------------- - t = tra.getTransformLookingAt(self.guide.pos["head"], self.guide.pos["eff"], self.normal, "yx", self.negate) - self.head_cns = pri.addTransform(self.root, self.getName("head_cns"), t) - - dist = vec.getDistance(self.guide.pos["head"], self.guide.pos["eff"]) - self.head_ctl = self.addCtl(self.head_cns, "head_ctl", t, self.color_fk, "cube", w=self.size*.5, h=dist, d=self.size*.5, po=dt.Vector(0,dist*.5,0), tp=self.previousCtlTag) - att.setRotOrder(self.head_ctl, "ZXY") - att.setInvertMirror(self.head_ctl, ["tx", "rz", "ry"]) + t = transform.getTransformLookingAt(self.guide.pos["head"], + self.guide.pos["eff"], + self.normal, + "yx", + self.negate) + + self.head_cns = primitive.addTransform( + self.root, self.getName("head_cns"), t) + + dist = vector.getDistance(self.guide.pos["head"], + self.guide.pos["eff"]) + + self.head_ctl = self.addCtl(self.head_cns, + "head_ctl", + t, + self.color_fk, + "cube", + w=self.size * .5, + h=dist, d=self.size * .5, + po=datatypes.Vector(0, dist * .5, 0), + tp=self.previousCtlTag) + + attribute.setRotOrder(self.head_ctl, "ZXY") + attribute.setInvertMirror(self.head_ctl, ["tx", "rz", "ry"]) self.jnt_pos.append([self.head_ctl, "head"]) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1) - self.maxsquash_att = self.addAnimParam("maxsquash", "MaxSquash", "double", self.settings["maxsquash"], 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", self.settings["softness"], 0, 1) - - self.lock_ori_att = self.addAnimParam("lock_ori", "Lock Ori", "double", 1, 0, 1) + self.maxstretch_att = self.addAnimParam( + "maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1) + + self.maxsquash_att = self.addAnimParam("maxsquash", + "MaxSquash", + "double", + self.settings["maxsquash"], + 0, + 1) + + self.softness_att = self.addAnimParam("softness", + "Softness", + "double", + self.settings["softness"], + 0, + 1) + + self.lock_ori_att = self.addAnimParam( + "lock_ori", "Lock Ori", "double", 1, 0, 1) self.tan0_att = self.addAnimParam("tan0", "Tangent 0", "double", 1, 0) self.tan1_att = self.addAnimParam("tan1", "Tangent 1", "double", 1, 0) # Volume - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) if self.settings["headrefarray"]: ref_names = self.settings["headrefarray"].split(",") if len(ref_names) > 1: ref_names.insert(0, "self") - self.headref_att = self.addAnimEnumParam("headref", "Head Ref", 0, ref_names) + self.headref_att = self.addAnimEnumParam( + "headref", "Head Ref", 0, ref_names) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.settings["division"]) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.settings["division"]) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.settings["division"]) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.settings["division"]) ] + self.st_value = fcurve.getFCurveValues( + self.settings["st_profile"], self.settings["division"]) + self.sq_value = fcurve.getFCurveValues( + self.settings["sq_profile"], self.settings["division"]) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], -1, 0) + for i in range(self.settings["division"])] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.settings["division"])] # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + """ # Tangent position --------------------------------- # common part - d = vec.getDistance(self.guide.pos["root"], self.guide.pos["neck"]) - dist_node = nod.createDistNode(self.root, self.ik_ctl) - rootWorld_node = nod.createDecomposeMatrixNode(self.root.attr("worldMatrix")) - div_node = nod.createDivNode(dist_node+".distance", rootWorld_node+".outputScaleX") - div_node = nod.createDivNode(div_node+".outputX", d) + d = vector.getDistance(self.guide.pos["root"], self.guide.pos["neck"]) + dist_node = node.createDistNode(self.root, self.ik_ctl) + rootWorld_node = node.createDecomposeMatrixNode( + self.root.attr("worldMatrix")) + div_node = node.createDivNode(dist_node + ".distance", + rootWorld_node + ".outputScaleX") + div_node = node.createDivNode(div_node + ".outputX", d) # tan0 - mul_node = nod.createMulNode(self.tan0_att, self.tan0_loc.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan0_loc+".ty") + mul_node = node.createMulNode(self.tan0_att, + self.tan0_loc.getAttr("ty")) + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + pm.connectAttr(res_node + ".outputX", self.tan0_loc + ".ty") # tan1 - mul_node = nod.createMulNode(self.tan1_att, self.tan1_loc.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan1_loc.attr("ty")) + mul_node = node.createMulNode(self.tan1_att, + self.tan1_loc.getAttr("ty")) + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + pm.connectAttr(res_node + ".outputX", self.tan1_loc.attr("ty")) # Curves ------------------------------------------- - op = aop.gear_curveslide2_op(self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) - pm.connectAttr(self.maxstretch_att, op+".maxstretch") - pm.connectAttr(self.maxsquash_att, op+".maxsquash") - pm.connectAttr(self.softness_att, op+".softness") + op = applyop.gear_curveslide2_op( + self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) + pm.connectAttr(self.maxstretch_att, op + ".maxstretch") + pm.connectAttr(self.maxsquash_att, op + ".maxsquash") + pm.connectAttr(self.softness_att, op + ".softness") # Volume driver ------------------------------------ - crv_node = nod.createCurveInfoNode(self.slv_crv) + crv_node = node.createCurveInfoNode(self.slv_crv) # Division ----------------------------------------- for i in range(self.settings["division"]): @@ -255,69 +392,92 @@ def addOperators(self): # References u = i / (self.settings["division"] - 1.0) - cns = aop.pathCns(self.div_cns[i], self.slv_crv, False, u, True) - cns.setAttr("frontAxis", 1)# front axis is 'Y' - cns.setAttr("upAxis", 2)# front axis is 'Z' + cns = applyop.pathCns( + self.div_cns[i], self.slv_crv, False, u, True) + cns.setAttr("frontAxis", 1) # front axis is 'Y' + cns.setAttr("upAxis", 2) # front axis is 'Z' # Roll - intMatrix = aop.gear_intmatrix_op(self.intMRef+".worldMatrix", self.ik_ctl+".worldMatrix", u) - dm_node = nod.createDecomposeMatrixNode(intMatrix+".output") - pm.connectAttr(dm_node+".outputRotate", self.twister[i].attr("rotate")) - - pm.parentConstraint(self.twister[i], self.ref_twist[i], maintainOffset=True) - - - pm.connectAttr(self.ref_twist[i]+".translate", cns+".worldUpVector") - + intMatrix = applyop.gear_intmatrix_op( + self.intMRef + ".worldMatrix", self.ik_ctl + ".worldMatrix", u) + dm_node = node.createDecomposeMatrixNode(intMatrix + ".output") + pm.connectAttr(dm_node + ".outputRotate", + self.twister[i].attr("rotate")) + pm.parentConstraint(self.twister[i], + self.ref_twist[i], + maintainOffset=True) + pm.connectAttr(self.ref_twist[i] + ".translate", + cns + ".worldUpVector") # Squash n Stretch - op = aop.gear_squashstretch2_op(self.fk_npo[i], self.root, pm.arclen(self.slv_crv), "y") - pm.connectAttr(self.volume_att, op+".blend") - pm.connectAttr(crv_node+".arcLength", op+".driver") - pm.connectAttr(self.st_att[i], op+".stretch") - pm.connectAttr(self.sq_att[i], op+".squash") + op = applyop.gear_squashstretch2_op(self.fk_npo[i], + self.root, + pm.arclen(self.slv_crv), + "y") + + pm.connectAttr(self.volume_att, op + ".blend") + pm.connectAttr(crv_node + ".arcLength", op + ".driver") + pm.connectAttr(self.st_att[i], op + ".stretch") + pm.connectAttr(self.sq_att[i], op + ".squash") op.setAttr("driver_min", .1) # scl compas if i != 0: - div_node = nod.createDivNode([1,1,1], [self.fk_npo[i-1]+".sx", self.fk_npo[i-1]+".sy", self.fk_npo[i-1]+".sz"]) - pm.connectAttr(div_node+".output", self.scl_npo[i]+".scale") + div_node = node.createDivNode( + [1, 1, 1], + [self.fk_npo[i - 1] + ".sx", + self.fk_npo[i - 1] + ".sy", + self.fk_npo[i - 1] + ".sz"]) + + pm.connectAttr(div_node + ".output", + self.scl_npo[i] + ".scale") # Controlers if i == 0: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.root.attr("worldInverseMatrix")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.root.attr("worldInverseMatrix")) else: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.div_cns[i - 1].attr("worldInverseMatrix")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.div_cns[i - 1].attr("worldInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", self.fk_npo[i].attr("t")) - pm.connectAttr(dm_node+".outputRotate", self.fk_npo[i].attr("r")) + dm_node = node.createDecomposeMatrixNode(mulmat_node + ".output") + pm.connectAttr(dm_node + ".outputTranslate", + self.fk_npo[i].attr("t")) + pm.connectAttr(dm_node + ".outputRotate", + self.fk_npo[i].attr("r")) # Orientation Lock - if i == self.settings["division"] - 1 : - dm_node = nod.createDecomposeMatrixNode(self.ik_ctl+".worldMatrix") - blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori_att) + if i == self.settings["division"] - 1: + dm_node = node.createDecomposeMatrixNode( + self.ik_ctl + ".worldMatrix") + blend_node = node.createBlendNode( + [dm_node + ".outputRotate%s" % s for s in "XYZ"], + [cns + ".rotate%s" % s for s in "XYZ"], + self.lock_ori_att) self.div_cns[i].attr("rotate").disconnect() - pm.connectAttr(blend_node+".output", self.div_cns[i]+".rotate") + pm.connectAttr(blend_node + ".output", + self.div_cns[i] + ".rotate") # Head --------------------------------------------- self.fk_ctl[-1].addChild(self.head_cns) - #scale compensation - dm_node = nod.createDecomposeMatrixNode(self.scl_npo[0]+".parentInverseMatrix") - pm.connectAttr(dm_node+".outputScale", self.scl_npo[0]+".scale") + # scale compensation + dm_node = node.createDecomposeMatrixNode( + self.scl_npo[0] + ".parentInverseMatrix") + + pm.connectAttr(dm_node + ".outputScale", + self.scl_npo[0] + ".scale") # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.root self.relatives["tan1"] = self.root self.relatives["tan2"] = self.head_ctl @@ -334,25 +494,20 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["tan1"] = 0 - self.jointRelatives["tan2"] = len(self.jnt_pos)-1 - self.jointRelatives["neck"] = len(self.jnt_pos)-1 - self.jointRelatives["head"] = len(self.jnt_pos)-1 - self.jointRelatives["eff"] = len(self.jnt_pos)-1 + self.jointRelatives["tan2"] = len(self.jnt_pos) - 1 + self.jointRelatives["neck"] = len(self.jnt_pos) - 1 + self.jointRelatives["head"] = len(self.jnt_pos) - 1 + self.jointRelatives["eff"] = len(self.jnt_pos) - 1 - ## standard connection definition. - # @param self def connect_standard(self): self.connect_standardWithIkRef() - ## standard connection definition with ik and upv references. - # @param self def connect_standardWithIkRef(self): self.parent.addChild(self.root) self.connectRef(self.settings["ikrefarray"], self.ik_cns) - if self.settings["headrefarray"]: ref_names = self.settings["headrefarray"].split(",") @@ -361,17 +516,22 @@ def connect_standardWithIkRef(self): ref.append(self.rig.findRelative(ref_name)) ref.append(self.head_cns) - cns_node = pm.parentConstraint(*ref, skipTranslate="none", maintainOffset=True) - cns_attr = pm.parentConstraint(cns_node, query=True, weightAliasList=True) + cns_node = pm.parentConstraint(*ref, + skipTranslate="none", + maintainOffset=True) + + cns_attr = pm.parentConstraint(cns_node, + query=True, + weightAliasList=True) self.head_cns.attr("tx").disconnect() self.head_cns.attr("ty").disconnect() self.head_cns.attr("tz").disconnect() for i, attr in enumerate(cns_attr): node_name = pm.createNode("condition") - pm.connectAttr(self.headref_att, node_name+".firstTerm") - pm.setAttr(node_name+".secondTerm", i+1) - pm.setAttr(node_name+".operation", 0) - pm.setAttr(node_name+".colorIfTrueR", 1) - pm.setAttr(node_name+".colorIfFalseR", 0) - pm.connectAttr(node_name+".outColorR", attr) + pm.connectAttr(self.headref_att, node_name + ".firstTerm") + pm.setAttr(node_name + ".secondTerm", i + 1) + pm.setAttr(node_name + ".operation", 0) + pm.setAttr(node_name + ".colorIfTrueR", 1) + pm.setAttr(node_name + ".colorIfFalseR", 0) + pm.connectAttr(node_name + ".outColorR", attr) diff --git a/scripts/mgear/maya/shifter/component/neck_ik_01/guide.py b/scripts/mgear/maya/shifter/component/neck_ik_01/guide.py index 940ae55..3679fc4 100644 --- a/scripts/mgear/maya/shifter/component/neck_ik_01/guide.py +++ b/scripts/mgear/maya/shifter/component/neck_ik_01/guide.py @@ -1,52 +1,21 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide Squash 01 module""" + from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra -import mgear.maya.vector as vec +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt, vector +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [2,0,0] +VERSION = [2, 0, 0] TYPE = "neck_ik_01" NAME = "neck" DESCRIPTION = "Neck ik and FK with optional tangent controls" @@ -54,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,29 +37,33 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "tan0", "tan1", "neck", "head", "eff"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,1,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 1, 0]) self.neck = self.addLoc("neck", self.root, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,1.1,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 1.1, 0]) self.head = self.addLoc("head", self.neck, vTemp) - vTemp = tra.getOffsetPosition( self.root, [0,2,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 2, 0]) self.eff = self.addLoc("eff", self.head, vTemp) - v0 = vec.linearlyInterpolate(self.root.getTranslation(space="world"), self.neck.getTranslation(space="world"), .333) + v0 = vector.linearlyInterpolate( + self.root.getTranslation(space="world"), + self.neck.getTranslation(space="world"), + .333) + self.tan0 = self.addLoc("tan0", self.root, v0) - v1 = vec.linearlyInterpolate(self.root.getTranslation(space="world"), self.neck.getTranslation(space="world"), .666) + v1 = vector.linearlyInterpolate( + self.root.getTranslation(space="world"), + self.neck.getTranslation(space="world"), + .666) + self.tan1 = self.addLoc("tan1", self.neck, v1) self.blade = self.addBlade("blade", self.root, self.tan0) @@ -98,14 +74,12 @@ def addObjects(self): centers = [self.neck, self.head, self.eff] self.dispcrv = self.addDispCurve("head_crv", centers, 1) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Ik - self.pHeadRefArray = self.addParam("headrefarray", "string", "") - self.pIkRefArray = self.addParam("ikrefarray", "string", "") + self.pHeadRefArray = self.addParam("headrefarray", "string", "") + self.pIkRefArray = self.addParam("ikrefarray", "string", "") # Default values self.pMaxStretch = self.addParam("maxstretch", "double", 1.5, 1) @@ -116,13 +90,17 @@ def addParameters(self): self.pDivision = self.addParam("division", "long", 5, 3) self.pTangentControls = self.addParam("tangentControls", "bool", False) - # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) + + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -130,23 +108,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -154,7 +133,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -164,22 +143,34 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.softness_slider.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.softness_spinBox.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) - self.settingsTab.maxSquash_spinBox.setValue(self.root.attr("maxsquash").get()) - self.settingsTab.division_spinBox.setValue(self.root.attr("division").get()) - self.populateCheck(self.settingsTab.tangentControls_checkBox, "tangentControls") + # populate component settings + self.settingsTab.softness_slider.setValue( + int(self.root.attr("softness").get() * 100)) + + self.settingsTab.softness_spinBox.setValue( + int(self.root.attr("softness").get() * 100)) + + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + + self.settingsTab.maxSquash_spinBox.setValue( + self.root.attr("maxsquash").get()) + + self.settingsTab.division_spinBox.setValue( + self.root.attr("division").get()) + + self.populateCheck(self.settingsTab.tangentControls_checkBox, + "tangentControls") ikRefArrayItems = self.root.attr("ikrefarray").get().split(",") for item in ikRefArrayItems: @@ -188,7 +179,6 @@ def populate_componentControls(self): for item in headRefArrayItems: self.settingsTab.headRefArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -199,22 +189,73 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.softness_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_slider, "softness")) - self.settingsTab.softness_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_spinBox, "softness")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.maxSquash_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxSquash_spinBox, "maxsquash")) - self.settingsTab.division_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.division_spinBox, "division")) - self.settingsTab.tangentControls_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.tangentControls_checkBox, "tangentControls")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - - self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) - self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.headRefArray_listWidget, self.settingsTab.ikRefArray_listWidget, "ikrefarray")) + self.settingsTab.softness_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_slider, + "softness")) + + self.settingsTab.softness_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_spinBox, + "softness")) + + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + + self.settingsTab.maxSquash_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxSquash_spinBox, + "maxsquash")) + + self.settingsTab.division_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.division_spinBox, + "division")) + + self.settingsTab.tangentControls_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.tangentControls_checkBox, + "tangentControls")) + + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) + + self.settingsTab.ikRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + + self.settingsTab.ikRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.headRefArray_listWidget, + self.settingsTab.ikRefArray_listWidget, + "ikrefarray")) + self.settingsTab.ikRefArray_listWidget.installEventFilter(self) - self.settingsTab.headRefArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.headRefArray_listWidget, "headrefarray")) - self.settingsTab.headRefArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.headRefArray_listWidget, "headrefarray")) - self.settingsTab.headRefArray_copyRef_pushButton.clicked.connect(partial(self.copyFromListWidget, self.settingsTab.ikRefArray_listWidget, self.settingsTab.headRefArray_listWidget, "headrefarray")) + self.settingsTab.headRefArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.headRefArray_listWidget, + "headrefarray")) + + self.settingsTab.headRefArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.headRefArray_listWidget, + "headrefarray")) + + self.settingsTab.headRefArray_copyRef_pushButton.clicked.connect( + partial(self.copyFromListWidget, + self.settingsTab.ikRefArray_listWidget, + self.settingsTab.headRefArray_listWidget, + "headrefarray")) + self.settingsTab.headRefArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -227,7 +268,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/shoulder_01/__init__.py b/scripts/mgear/maya/shifter/component/shoulder_01/__init__.py index 8b760a1..c7ca19d 100644 --- a/scripts/mgear/maya/shifter/component/shoulder_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/shoulder_01/__init__.py @@ -1,103 +1,104 @@ -# MGEAR is under the terms of the MIT License +"""Component Shoulder 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from pymel.core import datatypes -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: +from mgear.maya.shifter import component -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. +from mgear.maya import transform, primitive, vector -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya -import pymel.core.datatypes as dt - -# mgear -from mgear.maya.shifter.component import MainComponent - -import mgear.maya.primitive as pri -import mgear.maya.transform as tra +############################################# +# COMPONENT +############################################# -import mgear.maya.vector as vec -########################################################## -# COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - self.normal = self.guide.blades["blade"].z*-1 + self.normal = self.guide.blades["blade"].z * -1 self.binormal = self.guide.blades["blade"].x - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, axis="xy", negate=self.negate) - self.ctl_npo = pri.addTransform(self.root, self.getName("ctl_npo"), t) - self.ctl = self.addCtl(self.ctl_npo, "ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.parentCtlTag) - t = tra.getTransformFromPos(self.guide.apos[1]) - self.orbit_ref1 = pri.addTransform(self.ctl, self.getName("orbit_ref1"), t) - self.orbit_ref2 = pri.addTransform(self.root, self.getName("orbit_ref2"), t) - - self.orbit_cns = pri.addTransform(self.ctl, self.getName("orbit_cns"), t) - - self.orbit_npo = pri.addTransform(self.orbit_cns, self.getName("orbit_npo"), t) - self.orbit_ctl = self.addCtl(self.orbit_npo, "orbit_ctl", t, self.color_fk, "sphere", w=self.length0/4, tp=self.ctl) + self.length0 = vector.getDistance(self.guide.apos[0], + self.guide.apos[1]) + + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + axis="xy", + negate=self.negate) + + self.ctl_npo = primitive.addTransform( + self.root, self.getName("ctl_npo"), t) + + self.ctl = self.addCtl( + self.ctl_npo, + "ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0), + tp=self.parentCtlTag) + + t = transform.getTransformFromPos(self.guide.apos[1]) + self.orbit_ref1 = primitive.addTransform( + self.ctl, self.getName("orbit_ref1"), t) + self.orbit_ref2 = primitive.addTransform( + self.root, self.getName("orbit_ref2"), t) + self.orbit_cns = primitive.addTransform( + self.ctl, self.getName("orbit_cns"), t) + + self.orbit_npo = primitive.addTransform( + self.orbit_cns, self.getName("orbit_npo"), t) + + self.orbit_ctl = self.addCtl(self.orbit_npo, + "orbit_ctl", + t, + self.color_fk, + "sphere", + w=self.length0 / 4, + tp=self.ctl) self.jnt_pos.append([self.ctl, "shoulder"]) + # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Ref if self.settings["refArray"]: ref_names = self.settings["refArray"].split(",") if len(ref_names) >= 1: - self.ref_att = self.addAnimEnumParam("rotRef", "Ref", 0, self.settings["refArray"].split(",")) + self.ref_att = self.addAnimEnumParam( + "rotRef", "Ref", 0, self.settings["refArray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ return # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.ctl self.relatives["tip"] = self.orbit_ctl @@ -107,8 +108,7 @@ def setRelation(self): self.jointRelatives["root"] = 0 self.jointRelatives["tip"] = 0 - ## standard connection definition. - # @param self def connect_standard(self): self.parent.addChild(self.root) - self.connect_standardWithRotRef(self.settings["refArray"], self.orbit_cns ) + self.connect_standardWithRotRef(self.settings["refArray"], + self.orbit_cns) diff --git a/scripts/mgear/maya/shifter/component/shoulder_01/guide.py b/scripts/mgear/maya/shifter/component/shoulder_01/guide.py index 9266172..56adaab 100644 --- a/scripts/mgear/maya/shifter/component/shoulder_01/guide.py +++ b/scripts/mgear/maya/shifter/component/shoulder_01/guide.py @@ -1,60 +1,33 @@ -# MGEAR is under the terms of the MIT License +"""Guide Squash 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra - +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "shoulder_01" NAME = "shoulder" -DESCRIPTION = "Simple shoulder with space switch for\n the arm, and Orbit layer for the arm " +DESCRIPTION = "Simple shoulder with space switch for\n the arm, and Orbit " \ + "layer for the arm " ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -65,37 +38,30 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "tip"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [2,0,0]) + vTemp = transform.getOffsetPosition(self.root, [2, 0, 0]) self.loc = self.addLoc("tip", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.loc) centers = [self.root, self.loc] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pRefArray = self.addParam("refArray", "string", "") + self.pRefArray = self.addParam("refArray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -103,23 +69,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -127,7 +94,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -137,21 +104,21 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings + # populate component settings refArrayItems = self.root.attr("refArray").get().split(",") for item in refArrayItems: self.settingsTab.refArray_listWidget.addItem(item) - def create_componentLayout(self): self.settings_layout = QtWidgets.QVBoxLayout() @@ -162,8 +129,16 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.refArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.refArray_listWidget, "refArray")) - self.settingsTab.refArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.refArray_listWidget, "refArray")) + self.settingsTab.refArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.refArray_listWidget, + "refArray")) + + self.settingsTab.refArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.refArray_listWidget, + "refArray")) + self.settingsTab.refArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -174,6 +149,5 @@ def eventFilter(self, sender, event): else: return QtWidgets.QDialog.eventFilter(self, sender, event) - def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/shoulder_ms_01/__init__.py b/scripts/mgear/maya/shifter/component/shoulder_ms_01/__init__.py index 5496d8c..57447e6 100644 --- a/scripts/mgear/maya/shifter/component/shoulder_ms_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/shoulder_ms_01/__init__.py @@ -1,129 +1,126 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya +"""Component Shoulder MS 01 module""" + import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes + +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent -import mgear.maya.attribute as att -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.applyop as aop -import mgear.maya.vector as vec +from mgear.maya import applyop, vector +from mgear.maya import attribute, transform, primitive -########################################################## +############################################# # COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +############################################# + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - self.normal = self.guide.blades["blade"].z*-1 + self.normal = self.guide.blades["blade"].z * -1 self.binormal = self.guide.blades["blade"].x - self.length0 = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) + self.length0 = vector.getDistance(self.guide.apos[0], + self.guide.apos[1]) + + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + axis="xy", + negate=self.negate) + + self.npo = primitive.addTransform(self.root, self.getName("npo"), t) + + self.ctl = self.addCtl( + self.npo, + "ctl", + t, + self.color_fk, + "cube", + w=self.length0, + h=self.size * .1, + d=self.size * .1, + po=datatypes.Vector(.5 * self.length0 * self.n_factor, 0, 0), + tp=self.parentCtlTag) - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, axis="xy", negate=self.negate) - self.npo = pri.addTransform(self.root, self.getName("npo"), t) - self.ctl = self.addCtl(self.npo, "ctl", t, self.color_fk, "cube", w=self.length0, h=self.size*.1, d=self.size*.1, po=dt.Vector(.5*self.length0*self.n_factor,0,0), tp=self.parentCtlTag) - self.mtx = pri.addTransform(self.npo, self.getName("mtx"), t) + self.mtx = primitive.addTransform(self.npo, self.getName("mtx"), t) - t1 = tra.setMatrixPosition(t,self.guide.apos[1]) - t2 = tra.getInterpolateTransformMatrix(t, t1, blend=0.98 ) - self.loc = pri.addTransform(self.mtx, self.getName("loc"), t2) + t1 = transform.setMatrixPosition(t, self.guide.apos[1]) + t2 = transform.getInterpolateTransformMatrix(t, t1, blend=0.98) + self.loc = primitive.addTransform(self.mtx, self.getName("loc"), t2) - self.end = pri.addTransform(self.ctl, self.getName("end"), t1) + self.end = primitive.addTransform(self.ctl, self.getName("end"), t1) self.jnt_pos.append([self.mtx, "root"]) self.jnt_pos.append([self.loc, 'end']) - att.setKeyableAttributes(self.ctl) - att.setInvertMirror(self.ctl, ["tx","ty", "tz"]) + attribute.setKeyableAttributes(self.ctl) + attribute.setInvertMirror(self.ctl, ["tx", "ty", "tz"]) # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" return - # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ if self.negate: - node = aop.aimCns(self.mtx, self.end, axis="-xy", wupType=4, wupVector=[0,1,0], wupObject=self.mtx, maintainOffset=False) + o_node = applyop.aimCns(self.mtx, + self.end, + axis="-xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.mtx, + maintainOffset=False) else: - node = aop.aimCns(self.mtx, self.end, axis="xy", wupType=4, wupVector=[0,1,0], wupObject=self.mtx, maintainOffset=False) + o_node = applyop.aimCns(self.mtx, + self.end, + axis="xy", + wupType=4, + wupVector=[0, 1, 0], + wupObject=self.mtx, + maintainOffset=False) + # position constrint loc to ref - node = aop.gear_mulmatrix_op(self.end.attr("worldMatrix"), self.loc.attr("parentInverseMatrix")) + o_node = applyop.gear_mulmatrix_op( + self.end.attr("worldMatrix"), self.loc.attr("parentInverseMatrix")) dm_node = pm.createNode("decomposeMatrix") - pm.connectAttr(node+".output", dm_node+".inputMatrix") + pm.connectAttr(o_node + ".output", dm_node + ".inputMatrix") pb_node = pm.createNode("pairBlend") # move back a little bit to avoid overlapping with limb jts - pm.setAttr(pb_node+".weight", 0.98) - pm.connectAttr(dm_node+".outputTranslate", pb_node+".inTranslate2") - pm.connectAttr(pb_node+".outTranslate", self.loc.attr("translate")) - return - + pm.setAttr(pb_node + ".weight", 0.98) + pm.connectAttr(dm_node + ".outputTranslate", pb_node + ".inTranslate2") + pm.connectAttr(pb_node + ".outTranslate", self.loc.attr("translate")) # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.root self.relatives["tip"] = self.loc self.controlRelatives["root"] = self.ctl self.controlRelatives["tip"] = self.ctl - self.jointRelatives["root"] = 0 self.jointRelatives["tip"] = 1 - ## standard connection definition. - # @param self def connect_standard(self): self.parent.addChild(self.root) diff --git a/scripts/mgear/maya/shifter/component/shoulder_ms_01/guide.py b/scripts/mgear/maya/shifter/component/shoulder_ms_01/guide.py index cded9ed..4f9cbf8 100644 --- a/scripts/mgear/maya/shifter/component/shoulder_ms_01/guide.py +++ b/scripts/mgear/maya/shifter/component/shoulder_ms_01/guide.py @@ -1,49 +1,17 @@ -# MGEAR is under the terms of the MIT License +"""Guide Shoulder MS 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra - - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos,Miles Cheng" URL = "www.jeremiepasserin.com, www.miquletd.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com,milesckt@gmail.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "shoulder_ms_01" NAME = "shoulder" DESCRIPTION = "shoulder / limb connector use in conjuction with ms_arm/leg " @@ -51,7 +19,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -62,52 +33,44 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "tip"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [2,0,0]) + vTemp = transform.getOffsetPosition(self.root, [2, 0, 0]) self.loc = self.addLoc("tip", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.loc) centers = [self.root, self.loc] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - # self.pRefArray = self.addParam("refArray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) - - super(self.__class__, self).__init__(parent = parent) + pyqt.deleteInstances(self, MayaQDockWidget) + super(self.__class__, self).__init__(parent=parent) self.setup_componentSettingWindow() self.create_componentControls() @@ -116,7 +79,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -126,10 +89,11 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ return @@ -146,4 +110,4 @@ def create_componentConnections(self): return def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/spine_ik_01/__init__.py b/scripts/mgear/maya/shifter/component/spine_ik_01/__init__.py index 77b1706..6b3127b 100644 --- a/scripts/mgear/maya/shifter/component/spine_ik_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/spine_ik_01/__init__.py @@ -1,126 +1,226 @@ -# MGEAR is under the terms of the MIT License +"""Component Spine IK 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.curve as cur -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector, curve +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): + +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" - # Auto bend with position controls ------------------------------------ + # Auto bend with position controls -------------------- if self.settings["autoBend"]: - self.autoBendChain= pri.add2DChain(self.root, self.getName("autoBend%s_jnt"), [self.guide.apos[0],self.guide.apos[1]], self.guide.blades["blade"].z*-1, False, True) + self.autoBendChain = primitive.add2DChain( + self.root, + self.getName("autoBend%s_jnt"), + [self.guide.apos[0], self.guide.apos[1]], + self.guide.blades["blade"].z * -1, + False, + True) + for j in self.autoBendChain: j.drawStyle.set(2) # Ik Controlers ------------------------------------ - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - self.ik0_npo = pri.addTransform(self.root, self.getName("ik0_npo"), t) - self.ik0_ctl = self.addCtl(self.ik0_npo, "ik0_ctl", t, self.color_ik, "compas", w=self.size, tp=self.parentCtlTag) - att.setKeyableAttributes(self.ik0_ctl, self.tr_params) - att.setRotOrder(self.ik0_ctl, "ZXY") - att.setInvertMirror(self.ik0_ctl, ["tx", "ry", "rz"]) - - t = tra.setMatrixPosition(t, self.guide.apos[1]) + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + self.ik0_npo = primitive.addTransform( + self.root, self.getName("ik0_npo"), t) + + self.ik0_ctl = self.addCtl(self.ik0_npo, + "ik0_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.ik0_ctl, self.tr_params) + attribute.setRotOrder(self.ik0_ctl, "ZXY") + attribute.setInvertMirror(self.ik0_ctl, ["tx", "ry", "rz"]) + + t = transform.setMatrixPosition(t, self.guide.apos[1]) if self.settings["autoBend"]: - self.autoBend_npo = pri.addTransform(self.root, self.getName("spinePosition_npo"), t) - self.autoBend_ctl = self.addCtl(self.autoBend_npo, "spinePosition_ctl", t, self.color_ik, "square", w=self.size, d=.3*self.size, tp=self.parentCtlTag) - att.setKeyableAttributes(self.autoBend_ctl, ["tx", "ty", "tz", "ry"]) - att.setInvertMirror(self.autoBend_ctl, ["tx", "ry"]) - - self.ik1_npo = pri.addTransform(self.autoBendChain[0], self.getName("ik1_npo"), t) - self.ik1autoRot_lvl = pri.addTransform(self.ik1_npo, self.getName("ik1autoRot_lvl"), t) - self.ik1_ctl = self.addCtl(self.ik1autoRot_lvl, "ik1_ctl", t, self.color_ik, "compas", w=self.size, tp=self.autoBend_ctl) + self.autoBend_npo = primitive.addTransform( + self.root, self.getName("spinePosition_npo"), t) + + self.autoBend_ctl = self.addCtl(self.autoBend_npo, + "spinePosition_ctl", + t, + self.color_ik, + "square", + w=self.size, + d=.3 * self.size, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.autoBend_ctl, + ["tx", "ty", "tz", "ry"]) + + attribute.setInvertMirror(self.autoBend_ctl, ["tx", "ry"]) + + self.ik1_npo = primitive.addTransform( + self.autoBendChain[0], self.getName("ik1_npo"), t) + + self.ik1autoRot_lvl = primitive.addTransform( + self.ik1_npo, self.getName("ik1autoRot_lvl"), t) + + self.ik1_ctl = self.addCtl(self.ik1autoRot_lvl, + "ik1_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.autoBend_ctl) else: - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.ik1_npo = pri.addTransform(self.root, self.getName("ik1_npo"), t) - self.ik1_ctl = self.addCtl(self.ik1_npo, "ik1_ctl", t, self.color_ik, "compas", w=self.size, tp=self.ik0_ctl) - - att.setKeyableAttributes(self.ik1_ctl, self.tr_params) - att.setRotOrder(self.ik1_ctl, "ZXY") - att.setInvertMirror(self.ik1_ctl, ["tx", "ry", "rz"]) + t = transform.setMatrixPosition(t, self.guide.apos[1]) + self.ik1_npo = primitive.addTransform( + self.root, self.getName("ik1_npo"), t) + self.ik1_ctl = self.addCtl(self.ik1_npo, + "ik1_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.ik1_ctl, self.tr_params) + attribute.setRotOrder(self.ik1_ctl, "ZXY") + attribute.setInvertMirror(self.ik1_ctl, ["tx", "ry", "rz"]) # Tangent controllers ------------------------------- if self.settings["centralTangent"]: - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .33)) - self.tan0_npo = pri.addTransform(self.ik0_ctl, self.getName("tan0_npo"), t) - self.tan0_off = pri.addTransform(self.tan0_npo, self.getName("tan0_off"), t) - self.tan0_ctl = self.addCtl(self.tan0_off, "tan0_ctl", t, self.color_ik, "sphere", w=self.size*.1, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan0_ctl, self.t_params) - - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .66)) - self.tan1_npo = pri.addTransform(self.ik1_ctl, self.getName("tan1_npo"), t) - self.tan1_off = pri.addTransform(self.tan1_npo, self.getName("tan1_off"), t) - self.tan1_ctl = self.addCtl(self.tan1_off, "tan1_ctl", t, self.color_ik, "sphere", w=self.size*.1, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan1_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .33) + t = transform.setMatrixPosition(t, vec_pos) + + self.tan0_npo = primitive.addTransform( + self.ik0_ctl, self.getName("tan0_npo"), t) + + self.tan0_off = primitive.addTransform( + self.tan0_npo, self.getName("tan0_off"), t) + + self.tan0_ctl = self.addCtl(self.tan0_off, + "tan0_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .1, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.tan0_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .66) + + t = transform.setMatrixPosition(t, vec_pos) + + self.tan1_npo = primitive.addTransform( + self.ik1_ctl, self.getName("tan1_npo"), t) + + self.tan1_off = primitive.addTransform( + self.tan1_npo, self.getName("tan1_off"), t) + + self.tan1_ctl = self.addCtl(self.tan1_off, + "tan1_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .1, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.tan1_ctl, self.t_params) # Tangent mid control - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .5)) - self.tan_npo = pri.addTransform(self.tan0_npo, self.getName("tan_npo"), t) - self.tan_ctl = self.addCtl(self.tan_npo, "tan_ctl", t, self.color_fk, "sphere", w=self.size*.2, tp=self.ik1_ctl) - att.setKeyableAttributes(self.tan_ctl, self.t_params) - att.setInvertMirror(self.tan_ctl, ["tx"]) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .5) + t = transform.setMatrixPosition(t, vec_pos) + + self.tan_npo = primitive.addTransform( + self.tan0_npo, self.getName("tan_npo"), t) + + self.tan_ctl = self.addCtl(self.tan_npo, + "tan_ctl", + t, + self.color_fk, + "sphere", + w=self.size * .2, + tp=self.ik1_ctl) + + attribute.setKeyableAttributes(self.tan_ctl, self.t_params) + attribute.setInvertMirror(self.tan_ctl, ["tx"]) else: - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .33)) - self.tan0_npo = pri.addTransform(self.ik0_ctl, self.getName("tan0_npo"), t) - self.tan0_ctl = self.addCtl(self.tan0_npo, "tan0_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan0_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .33) + + t = transform.setMatrixPosition(t, vec_pos) - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .66)) - self.tan1_npo = pri.addTransform(self.ik1_ctl, self.getName("tan1_npo"), t) - self.tan1_ctl = self.addCtl(self.tan1_npo, "tan1_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik1_ctl) - att.setKeyableAttributes(self.tan1_ctl, self.t_params) + self.tan0_npo = primitive.addTransform( + self.ik0_ctl, self.getName("tan0_npo"), t) - att.setInvertMirror(self.tan0_ctl, ["tx"]) - att.setInvertMirror(self.tan1_ctl, ["tx"]) + self.tan0_ctl = self.addCtl(self.tan0_npo, + "tan0_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.tan0_ctl, self.t_params) + + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .66) + + t = transform.setMatrixPosition(t, vec_pos) + + self.tan1_npo = primitive.addTransform( + self.ik1_ctl, self.getName("tan1_npo"), t) + + self.tan1_ctl = self.addCtl(self.tan1_npo, + "tan1_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik1_ctl) + + attribute.setKeyableAttributes(self.tan1_ctl, self.t_params) + + attribute.setInvertMirror(self.tan0_ctl, ["tx"]) + attribute.setInvertMirror(self.tan1_ctl, ["tx"]) # Curves ------------------------------------------- - self.mst_crv = cur.addCnsCurve(self.root, self.getName("mst_crv"), [self.ik0_ctl, self.tan0_ctl, self.tan1_ctl, self.ik1_ctl], 3) - self.slv_crv = cur.addCurve(self.root, self.getName("slv_crv"), [dt.Vector()]*10, False, 3) + self.mst_crv = curve.addCnsCurve( + self.root, + self.getName("mst_crv"), + [self.ik0_ctl, self.tan0_ctl, self.tan1_ctl, self.ik1_ctl], + 3) + self.slv_crv = curve.addCurve(self.root, self.getName("slv_crv"), + [datatypes.Vector()] * 10, + False, + 3) self.mst_crv.setAttr("visibility", False) self.slv_crv.setAttr("visibility", False) @@ -136,138 +236,271 @@ def addObjects(self): self.twister = [] self.ref_twist = [] - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - parent_twistRef = pri.addTransform(self.root, self.getName("reference"), tra.getTransform(self.root)) + t = transform.getTransformLookingAt( + self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + parent_twistRef = primitive.addTransform( + self.root, + self.getName("reference"), + transform.getTransform(self.root)) self.jointList = [] self.preiviousCtlTag = self.parentCtlTag for i in range(self.settings["division"]): # References - div_cns = pri.addTransform(parentdiv, self.getName("%s_cns"%i)) - pm.setAttr(div_cns+".inheritsTransform", False) + div_cns = primitive.addTransform(parentdiv, + self.getName("%s_cns" % i)) + + pm.setAttr(div_cns + ".inheritsTransform", False) self.div_cns.append(div_cns) parentdiv = div_cns # Controlers (First and last one are fake) # if i in [0]: - # TODO: add option setting to add or not the first and last controller for the fk + # TODO: add option setting to add or not the first and last + # controller for the fk # if i in [0, self.settings["division"] - 1] and False: if i in [0, self.settings["division"] - 1]: - fk_ctl = pri.addTransform(parentctl, self.getName("%s_loc"%i), tra.getTransform(parentctl)) + fk_ctl = primitive.addTransform( + parentctl, + self.getName("%s_loc" % i), + transform.getTransform(parentctl)) + fk_npo = fk_ctl - if i in [ self.settings["division"] - 1]: + if i in [self.settings["division"] - 1]: self.fk_ctl.append(fk_ctl) else: - fk_npo = pri.addTransform(parentctl, self.getName("fk%s_npo"%(i-1)), tra.getTransform(parentctl)) - fk_ctl = self.addCtl(fk_npo, "fk%s_ctl"%(i-1), tra.getTransform(parentctl), self.color_fk, "cube", w=self.size, h=self.size*.05, d=self.size, tp=self.preiviousCtlTag) - att.setKeyableAttributes(self.fk_ctl) - att.setRotOrder(fk_ctl, "ZXY") + fk_npo = primitive.addTransform( + parentctl, + self.getName("fk%s_npo" % (i - 1)), + transform.getTransform(parentctl)) + + fk_ctl = self.addCtl(fk_npo, + "fk%s_ctl" % (i - 1), + transform.getTransform(parentctl), + self.color_fk, + "cube", + w=self.size, + h=self.size * .05, + d=self.size, + tp=self.preiviousCtlTag) + + attribute.setKeyableAttributes(self.fk_ctl) + attribute.setRotOrder(fk_ctl, "ZXY") self.fk_ctl.append(fk_ctl) self.preiviousCtlTag = fk_ctl # setAttr(fk_npo+".inheritsTransform", False) self.fk_npo.append(fk_npo) parentctl = fk_ctl - scl_ref = pri.addTransform(parentctl, self.getName("%s_scl_ref"%i), tra.getTransform(parentctl)) + scl_ref = primitive.addTransform(parentctl, + self.getName("%s_scl_ref" % i), + transform.getTransform(parentctl)) + self.scl_transforms.append(scl_ref) # Deformers (Shadow) self.jnt_pos.append([scl_ref, i]) - #Twist references (This objects will replace the spinlookup slerp solver behavior) - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - twister = pri.addTransform(parent_twistRef, self.getName("%s_rot_ref"%i), t) - ref_twist = pri.addTransform(parent_twistRef, self.getName("%s_pos_ref"%i), t) - ref_twist.setTranslation(dt.Vector(1.0,0,0), space="preTransform") + # Twist references (This objects will replace the spinlookup slerp + # solver behavior) + t = transform.getTransformLookingAt( + self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + twister = primitive.addTransform( + parent_twistRef, self.getName("%s_rot_ref" % i), t) + ref_twist = primitive.addTransform( + parent_twistRef, self.getName("%s_pos_ref" % i), t) + ref_twist.setTranslation( + datatypes.Vector(1.0, 0, 0), space="preTransform") self.twister.append(twister) self.ref_twist.append(ref_twist) - #TODO: update this part with the optiona FK controls update - for x in self.fk_ctl[:-1]: - att.setInvertMirror(x, ["tx", "rz", "ry"]) + # TODO: update this part with the optiona FK controls update + for x in self.fk_ctl[:-1]: + attribute.setInvertMirror(x, ["tx", "rz", "ry"]) # Connections (Hooks) ------------------------------ - self.cnx0 = pri.addTransform(self.root, self.getName("0_cnx")) - self.cnx1 = pri.addTransform(self.root, self.getName("1_cnx")) + self.cnx0 = primitive.addTransform(self.root, self.getName("0_cnx")) + self.cnx1 = primitive.addTransform(self.root, self.getName("1_cnx")) + # ===================================================== + # ATTRIBUTES + # ===================================================== def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Anim ------------------------------------------- - self.position_att = self.addAnimParam("position", "Position", "double", self.settings["position"], 0, 1) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1) - self.maxsquash_att = self.addAnimParam("maxsquash", "Max Squash", "double", self.settings["maxsquash"], 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", self.settings["softness"], 0, 1) - - self.lock_ori0_att = self.addAnimParam("lock_ori0", "Lock Ori 0", "double", self.settings["lock_ori"], 0, 1) - self.lock_ori1_att = self.addAnimParam("lock_ori1", "Lock Ori 1", "double", self.settings["lock_ori"], 0, 1) + self.position_att = self.addAnimParam("position", + "Position", + "double", + self.settings["position"], + 0, + 1) + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1) + self.maxsquash_att = self.addAnimParam("maxsquash", + "Max Squash", + "double", + self.settings["maxsquash"], + 0, + 1) + self.softness_att = self.addAnimParam("softness", + "Softness", + "double", + self.settings["softness"], + 0, + 1) + + self.lock_ori0_att = self.addAnimParam("lock_ori0", + "Lock Ori 0", + "double", + self.settings["lock_ori"], + 0, + 1) + self.lock_ori1_att = self.addAnimParam("lock_ori1", + "Lock Ori 1", + "double", + self.settings["lock_ori"], + 0, + 1) self.tan0_att = self.addAnimParam("tan0", "Tangent 0", "double", 1, 0) self.tan1_att = self.addAnimParam("tan1", "Tangent 1", "double", 1, 0) # Volume - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) if self.settings["autoBend"]: - self.sideBend_att = self.addAnimParam("sideBend", "Side Bend", "double", .5, 0, 2) - self.frontBend_att = self.addAnimParam("frontBend", "Front Bend", "double", .5, 0, 2) + self.sideBend_att = self.addAnimParam( + "sideBend", "Side Bend", "double", .5, 0, 2) + self.frontBend_att = self.addAnimParam( + "frontBend", "Front Bend", "double", .5, 0, 2) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.settings["division"]) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.settings["division"]) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.settings["division"]) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.settings["division"]) ] + self.st_value = fcurve.getFCurveValues( + self.settings["st_profile"], self.settings["division"]) + self.sq_value = fcurve.getFCurveValues( + self.settings["sq_profile"], self.settings["division"]) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], + -1, + 0) + for i in range(self.settings["division"])] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.settings["division"])] + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Auto bend ---------------------------- if self.settings["autoBend"]: - mul_node = nod.createMulNode([self.autoBendChain[0].ry, self.autoBendChain[0].rz ], [self.sideBend_att, self.frontBend_att]) + mul_node = node.createMulNode( + [self.autoBendChain[0].ry, self.autoBendChain[0].rz], + [self.sideBend_att, self.frontBend_att]) + mul_node.outputX >> self.ik1autoRot_lvl.rz mul_node.outputY >> self.ik1autoRot_lvl.rx - self.ikHandleAutoBend = pri.addIkHandle(self.autoBend_ctl, self.getName("ikHandleAutoBend"), self.autoBendChain, "ikSCsolver") - + self.ikHandleAutoBend = primitive.addIkHandle( + self.autoBend_ctl, + self.getName("ikHandleAutoBend"), + self.autoBendChain, "ikSCsolver") # Tangent position --------------------------------- # common part - d = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - dist_node = nod.createDistNode(self.ik0_ctl, self.ik1_ctl) - rootWorld_node = nod.createDecomposeMatrixNode(self.root.attr("worldMatrix")) - div_node = nod.createDivNode(dist_node+".distance", rootWorld_node+".outputScaleX") - div_node = nod.createDivNode(div_node+".outputX", d) + d = vector.getDistance(self.guide.apos[0], self.guide.apos[1]) + dist_node = node.createDistNode(self.ik0_ctl, self.ik1_ctl) + + rootWorld_node = node.createDecomposeMatrixNode( + self.root.attr("worldMatrix")) + + div_node = node.createDivNode(dist_node + ".distance", + rootWorld_node + ".outputScaleX") + + div_node = node.createDivNode(div_node + ".outputX", d) # tan0 - mul_node = nod.createMulNode(self.tan0_att, self.tan0_npo.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan0_npo.attr("ty")) + mul_node = node.createMulNode(self.tan0_att, + self.tan0_npo.getAttr("ty")) + + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + + pm.connectAttr(res_node + ".outputX", + self.tan0_npo.attr("ty")) # tan1 - mul_node = nod.createMulNode(self.tan1_att, self.tan1_npo.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan1_npo.attr("ty")) + mul_node = node.createMulNode(self.tan1_att, + self.tan1_npo.getAttr("ty")) + + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + + pm.connectAttr(res_node + ".outputX", self.tan1_npo.attr("ty")) # Tangent Mid -------------------------------------- if self.settings["centralTangent"]: - tanIntMat = aop.gear_intmatrix_op(self.tan0_npo.attr("worldMatrix"), self.tan1_npo.attr("worldMatrix"), .5) - aop.gear_mulmatrix_op(tanIntMat.attr("output"), self.tan_npo.attr("parentInverseMatrix[0]"), self.tan_npo) - pm.connectAttr(self.tan_ctl.attr("translate"), self.tan0_off.attr("translate")) - pm.connectAttr(self.tan_ctl.attr("translate"), self.tan1_off.attr("translate")) + tanIntMat = applyop.gear_intmatrix_op( + self.tan0_npo.attr("worldMatrix"), + self.tan1_npo.attr("worldMatrix"), + .5) + + applyop.gear_mulmatrix_op( + tanIntMat.attr("output"), + self.tan_npo.attr("parentInverseMatrix[0]"), + self.tan_npo) + pm.connectAttr(self.tan_ctl.attr("translate"), + self.tan0_off.attr("translate")) + + pm.connectAttr(self.tan_ctl.attr("translate"), + self.tan1_off.attr("translate")) # Curves ------------------------------------------- - op = aop.gear_curveslide2_op(self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) + op = applyop.gear_curveslide2_op( + self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) - pm.connectAttr(self.position_att, op+".position") - pm.connectAttr(self.maxstretch_att, op+".maxstretch") - pm.connectAttr(self.maxsquash_att, op+".maxsquash") - pm.connectAttr(self.softness_att, op+".softness") + pm.connectAttr(self.position_att, op + ".position") + pm.connectAttr(self.maxstretch_att, op + ".maxstretch") + pm.connectAttr(self.maxsquash_att, op + ".maxsquash") + pm.connectAttr(self.softness_att, op + ".softness") # Volume driver ------------------------------------ - crv_node = nod.createCurveInfoNode(self.slv_crv) + crv_node = node.createCurveInfoNode(self.slv_crv) # Division ----------------------------------------- for i in range(self.settings["division"]): @@ -275,61 +508,101 @@ def addOperators(self): # References u = i / (self.settings["division"] - 1.0) - cns = aop.pathCns(self.div_cns[i], self.slv_crv, False, u, True) - cns.setAttr("frontAxis", 1)# front axis is 'Y' - cns.setAttr("upAxis", 0)# front axis is 'X' + cns = applyop.pathCns( + self.div_cns[i], self.slv_crv, False, u, True) + cns.setAttr("frontAxis", 1) # front axis is 'Y' + cns.setAttr("upAxis", 0) # front axis is 'X' # Roll - intMatrix = aop.gear_intmatrix_op(self.ik0_ctl+".worldMatrix", self.ik1_ctl+".worldMatrix", u) - dm_node = nod.createDecomposeMatrixNode(intMatrix+".output") - pm.connectAttr(dm_node+".outputRotate", self.twister[i].attr("rotate")) - + intMatrix = applyop.gear_intmatrix_op( + self.ik0_ctl + ".worldMatrix", + self.ik1_ctl + ".worldMatrix", + u) - pm.parentConstraint(self.twister[i], self.ref_twist[i], maintainOffset=True) + dm_node = node.createDecomposeMatrixNode(intMatrix + ".output") + pm.connectAttr(dm_node + ".outputRotate", + self.twister[i].attr("rotate")) + pm.parentConstraint(self.twister[i], + self.ref_twist[i], + maintainOffset=True) - pm.connectAttr(self.ref_twist[i]+".translate", cns+".worldUpVector") - - #compensate scale reference - div_node = nod.createDivNode([1,1,1], [rootWorld_node+".outputScaleX", rootWorld_node+".outputScaleY", rootWorld_node+".outputScaleZ"]) + pm.connectAttr(self.ref_twist[i] + ".translate", + cns + ".worldUpVector") + # compensate scale reference + div_node = node.createDivNode([1, 1, 1], + [rootWorld_node + ".outputScaleX", + rootWorld_node + ".outputScaleY", + rootWorld_node + ".outputScaleZ"]) # Squash n Stretch - op = aop.gear_squashstretch2_op(self.scl_transforms[i], self.root, pm.arclen(self.slv_crv), "y", div_node+".output" ) - pm.connectAttr(self.volume_att, op+".blend") - pm.connectAttr(crv_node+".arcLength", op+".driver") - pm.connectAttr(self.st_att[i], op+".stretch") - pm.connectAttr(self.sq_att[i], op+".squash") + op = applyop.gear_squashstretch2_op( + self.scl_transforms[i], + self.root, + pm.arclen(self.slv_crv), + "y", + div_node + ".output") + + pm.connectAttr(self.volume_att, op + ".blend") + pm.connectAttr(crv_node + ".arcLength", op + ".driver") + pm.connectAttr(self.st_att[i], op + ".stretch") + pm.connectAttr(self.sq_att[i], op + ".squash") # Controlers if i == 0: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.root.attr("worldInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", self.fk_npo[i].attr("t")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.root.attr("worldInverseMatrix")) + + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".output") + + pm.connectAttr(dm_node + ".outputTranslate", + self.fk_npo[i].attr("t")) else: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.div_cns[i - 1].attr("worldInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - mul_node = nod.createMulNode(div_node+".output", dm_node+".outputTranslate") - pm.connectAttr(mul_node+".output", self.fk_npo[i].attr("t")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.div_cns[i - 1].attr("worldInverseMatrix")) + + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".output") - pm.connectAttr(dm_node+".outputRotate", self.fk_npo[i].attr("r")) + mul_node = node.createMulNode(div_node + ".output", + dm_node + ".outputTranslate") + pm.connectAttr(mul_node + ".output", + self.fk_npo[i].attr("t")) + pm.connectAttr(dm_node + ".outputRotate", self.fk_npo[i].attr("r")) # Orientation Lock - if i == 0 : - dm_node = nod.createDecomposeMatrixNode(self.ik0_ctl+".worldMatrix") - blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori0_att) + if i == 0: + dm_node = node.createDecomposeMatrixNode( + self.ik0_ctl + ".worldMatrix") + + blend_node = node.createBlendNode( + [dm_node + ".outputRotate%s" % s for s in "XYZ"], + [cns + ".rotate%s" % s for s in "XYZ"], + self.lock_ori0_att) + self.div_cns[i].attr("rotate").disconnect() - pm.connectAttr(blend_node+".output", self.div_cns[i]+".rotate") - elif i == self.settings["division"] - 1 : - dm_node = nod.createDecomposeMatrixNode(self.ik1_ctl+".worldMatrix") - blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori1_att) + pm.connectAttr(blend_node + ".output", + self.div_cns[i] + ".rotate") + + elif i == self.settings["division"] - 1: + dm_node = node.createDecomposeMatrixNode( + self.ik1_ctl + ".worldMatrix") + + blend_node = node.createBlendNode( + [dm_node + ".outputRotate%s" % s for s in "XYZ"], + [cns + ".rotate%s" % s for s in "XYZ"], + self.lock_ori1_att) + self.div_cns[i].attr("rotate").disconnect() - pm.connectAttr(blend_node+".output", self.div_cns[i]+".rotate") + pm.connectAttr(blend_node + ".output", + self.div_cns[i] + ".rotate") # Connections (Hooks) ------------------------------ @@ -341,9 +614,8 @@ def addOperators(self): # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.cnx0 self.relatives["eff"] = self.cnx1 diff --git a/scripts/mgear/maya/shifter/component/spine_ik_01/guide.py b/scripts/mgear/maya/shifter/component/spine_ik_01/guide.py index 22ce3c1..363f0d5 100644 --- a/scripts/mgear/maya/shifter/component/spine_ik_01/guide.py +++ b/scripts/mgear/maya/shifter/component/spine_ik_01/guide.py @@ -1,51 +1,21 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide Spine IK 01 module""" + from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [2,0,0] +VERSION = [2, 0, 0] TYPE = "spine_ik_01" NAME = "spine" DESCRIPTION = """An ik spine with an over top layer of fk controllers @@ -56,7 +26,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -67,30 +40,24 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "eff"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,4,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 4, 0]) self.eff = self.addLoc("eff", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.eff) centers = [self.root, self.eff] self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default values self.pPosition = self.addParam("position", "double", 0, 0, 1) @@ -105,35 +72,41 @@ def addParameters(self): self.pCentralTangent = self.addParam("centralTangent", "bool", False) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -141,7 +114,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -151,28 +124,40 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.softness_slider.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.position_spinBox.setValue(int(self.root.attr("position").get()*100)) - self.settingsTab.position_slider.setValue(int(self.root.attr("position").get()*100)) - self.settingsTab.lockOri_spinBox.setValue(int(self.root.attr("lock_ori").get()*100)) - self.settingsTab.lockOri_slider.setValue(int(self.root.attr("lock_ori").get()*100)) - self.settingsTab.softness_spinBox.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) - self.settingsTab.maxSquash_spinBox.setValue(self.root.attr("maxsquash").get()) - self.settingsTab.division_spinBox.setValue(self.root.attr("division").get()) + # populate component settings + self.settingsTab.softness_slider.setValue( + int(self.root.attr("softness").get() * 100)) + self.settingsTab.position_spinBox.setValue( + int(self.root.attr("position").get() * 100)) + self.settingsTab.position_slider.setValue( + int(self.root.attr("position").get() * 100)) + self.settingsTab.lockOri_spinBox.setValue( + int(self.root.attr("lock_ori").get() * 100)) + self.settingsTab.lockOri_slider.setValue( + int(self.root.attr("lock_ori").get() * 100)) + self.settingsTab.softness_spinBox.setValue( + int(self.root.attr("softness").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.settingsTab.maxSquash_spinBox.setValue( + self.root.attr("maxsquash").get()) + self.settingsTab.division_spinBox.setValue( + self.root.attr("division").get()) + self.populateCheck(self.settingsTab.autoBend_checkBox, "autoBend") - self.populateCheck(self.settingsTab.centralTangent_checkBox, "centralTangent") + self.populateCheck(self.settingsTab.centralTangent_checkBox, + "centralTangent") def create_componentLayout(self): @@ -184,20 +169,52 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.softness_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_slider, "softness")) - self.settingsTab.softness_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_spinBox, "softness")) - self.settingsTab.position_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.position_slider, "position")) - self.settingsTab.position_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.position_spinBox, "position")) - self.settingsTab.lockOri_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.lockOri_slider, "lock_ori")) - self.settingsTab.lockOri_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.lockOri_spinBox, "lock_ori")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.maxSquash_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxSquash_spinBox, "maxsquash")) - self.settingsTab.division_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.division_spinBox, "division")) - self.settingsTab.autoBend_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.autoBend_checkBox, "autoBend")) - self.settingsTab.centralTangent_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.centralTangent_checkBox, "centralTangent")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - - + self.settingsTab.softness_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_slider, + "softness")) + self.settingsTab.softness_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_spinBox, + "softness")) + self.settingsTab.position_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.position_slider, + "position")) + self.settingsTab.position_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.position_spinBox, + "position")) + self.settingsTab.lockOri_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.lockOri_slider, + "lock_ori")) + self.settingsTab.lockOri_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.lockOri_spinBox, + "lock_ori")) + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + self.settingsTab.maxSquash_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxSquash_spinBox, + "maxsquash")) + self.settingsTab.division_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.division_spinBox, + "division")) + self.settingsTab.autoBend_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.autoBend_checkBox, + "autoBend")) + self.settingsTab.centralTangent_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.centralTangent_checkBox, + "centralTangent")) + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/spine_ik_02/__init__.py b/scripts/mgear/maya/shifter/component/spine_ik_02/__init__.py index 5fb567a..47c74f7 100644 --- a/scripts/mgear/maya/shifter/component/spine_ik_02/__init__.py +++ b/scripts/mgear/maya/shifter/component/spine_ik_02/__init__.py @@ -1,132 +1,234 @@ -# MGEAR is under the terms of the MIT License +"""Component Spine IK 02 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# -# Maya import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya.shifter import component -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec -import mgear.maya.applyop as aop -import mgear.maya.curve as cur -import mgear.maya.fcurve as fcu +from mgear.maya import node, fcurve, applyop, vector, curve +from mgear.maya import attribute, transform, primitive ############################################# # COMPONENT ############################################# -class Component(MainComponent): + +class Component(component.Main): + """Shifter component Class""" + + # ===================================================== + # OBJECTS + # ===================================================== def addObjects(self): + """Add all the objects needed to create the component.""" - # Auto bend with position controls ------------------------------------ + # Auto bend with position controls ------------------- if self.settings["autoBend"]: - self.autoBendChain= pri.add2DChain(self.root, self.getName("autoBend%s_jnt"), [self.guide.apos[0],self.guide.apos[1]], self.guide.blades["blade"].z*-1, False, True) + self.autoBendChain = primitive.add2DChain( + self.root, + self.getName("autoBend%s_jnt"), + [self.guide.apos[0], self.guide.apos[1]], + self.guide.blades["blade"].z * -1, + False, + True) + for j in self.autoBendChain: j.drawStyle.set(2) # Ik Controlers ------------------------------------ - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - self.ik0_npo = pri.addTransform(self.root, self.getName("ik0_npo"), t) - self.ik0_ctl = self.addCtl(self.ik0_npo, "ik0_ctl", t, self.color_ik, "compas", w=self.size, tp=self.parentCtlTag) - att.setKeyableAttributes(self.ik0_ctl, self.tr_params) - att.setRotOrder(self.ik0_ctl, "ZXY") - att.setInvertMirror(self.ik0_ctl, ["tx", "ry", "rz"]) + t = transform.getTransformLookingAt( + self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + self.ik0_npo = primitive.addTransform( + self.root, self.getName("ik0_npo"), t) + self.ik0_ctl = self.addCtl(self.ik0_npo, + "ik0_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.ik0_ctl, self.tr_params) + attribute.setRotOrder(self.ik0_ctl, "ZXY") + attribute.setInvertMirror(self.ik0_ctl, ["tx", "ry", "rz"]) # hip base joint # TODO: add option in setting for on/off if True: - self.hip_lvl = pri.addTransform(self.ik0_ctl, self.getName("hip_lvl"), t) + self.hip_lvl = primitive.addTransform( + self.ik0_ctl, self.getName("hip_lvl"), t) self.jnt_pos.append([self.hip_lvl, "hip"]) - t = tra.setMatrixPosition(t, self.guide.apos[1]) + t = transform.setMatrixPosition(t, self.guide.apos[1]) if self.settings["autoBend"]: - self.autoBend_npo = pri.addTransform(self.root, self.getName("spinePosition_npo"), t) - self.autoBend_ctl = self.addCtl(self.autoBend_npo, "spinePosition_ctl", t, self.color_ik, "square", w=self.size, d=.3*self.size, tp=self.parentCtlTag) - att.setKeyableAttributes(self.autoBend_ctl, ["tx", "ty", "tz", "ry"]) - att.setInvertMirror(self.autoBend_ctl, ["tx", "ry"]) - - self.ik1_npo = pri.addTransform(self.autoBendChain[0], self.getName("ik1_npo"), t) - self.ik1autoRot_lvl = pri.addTransform(self.ik1_npo, self.getName("ik1autoRot_lvl"), t) - self.ik1_ctl = self.addCtl(self.ik1autoRot_lvl, "ik1_ctl", t, self.color_ik, "compas", w=self.size, tp=self.autoBend_ctl) + self.autoBend_npo = primitive.addTransform( + self.root, self.getName("spinePosition_npo"), t) + + self.autoBend_ctl = self.addCtl(self.autoBend_npo, + "spinePosition_ctl", + t, + self.color_ik, + "square", + w=self.size, + d=.3 * self.size, + tp=self.parentCtlTag) + + attribute.setKeyableAttributes(self.autoBend_ctl, + ["tx", "ty", "tz", "ry"]) + + attribute.setInvertMirror(self.autoBend_ctl, ["tx", "ry"]) + + self.ik1_npo = primitive.addTransform( + self.autoBendChain[0], self.getName("ik1_npo"), t) + + self.ik1autoRot_lvl = primitive.addTransform( + self.ik1_npo, self.getName("ik1autoRot_lvl"), t) + + self.ik1_ctl = self.addCtl(self.ik1autoRot_lvl, + "ik1_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.autoBend_ctl) else: - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.ik1_npo = pri.addTransform(self.root, self.getName("ik1_npo"), t) - self.ik1_ctl = self.addCtl(self.ik1_npo, "ik1_ctl", t, self.color_ik, "compas", w=self.size, tp=self.ik0_ctl) - - att.setKeyableAttributes(self.ik1_ctl, self.tr_params) - att.setRotOrder(self.ik1_ctl, "ZXY") - att.setInvertMirror(self.ik1_ctl, ["tx", "ry", "rz"]) + t = transform.setMatrixPosition(t, self.guide.apos[1]) + self.ik1_npo = primitive.addTransform( + self.root, self.getName("ik1_npo"), t) + + self.ik1_ctl = self.addCtl(self.ik1_npo, + "ik1_ctl", + t, + self.color_ik, + "compas", + w=self.size, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.ik1_ctl, self.tr_params) + attribute.setRotOrder(self.ik1_ctl, "ZXY") + attribute.setInvertMirror(self.ik1_ctl, ["tx", "ry", "rz"]) # Tangent controllers ------------------------------- if self.settings["centralTangent"]: - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .33)) - self.tan0_npo = pri.addTransform(self.ik0_ctl, self.getName("tan0_npo"), t) - self.tan0_off = pri.addTransform(self.tan0_npo, self.getName("tan0_off"), t) - self.tan0_ctl = self.addCtl(self.tan0_off, "tan0_ctl", t, self.color_ik, "sphere", w=self.size*.1, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan0_ctl, self.t_params) - - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .66)) - self.tan1_npo = pri.addTransform(self.ik1_ctl, self.getName("tan1_npo"), t) - self.tan1_off = pri.addTransform(self.tan1_npo, self.getName("tan1_off"), t) - self.tan1_ctl = self.addCtl(self.tan1_off, "tan1_ctl", t, self.color_ik, "sphere", w=self.size*.1, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan1_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .33) + t = transform.setMatrixPosition(t, vec_pos) + + self.tan0_npo = primitive.addTransform( + self.ik0_ctl, self.getName("tan0_npo"), t) + + self.tan0_off = primitive.addTransform( + self.tan0_npo, self.getName("tan0_off"), t) + + self.tan0_ctl = self.addCtl(self.tan0_off, + "tan0_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .1, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.tan0_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .66) + + t = transform.setMatrixPosition(t, vec_pos) + + self.tan1_npo = primitive.addTransform( + self.ik1_ctl, self.getName("tan1_npo"), t) + + self.tan1_off = primitive.addTransform( + self.tan1_npo, self.getName("tan1_off"), t) + + self.tan1_ctl = self.addCtl(self.tan1_off, + "tan1_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .1, + tp=self.ik0_ctl) + + attribute.setKeyableAttributes(self.tan1_ctl, self.t_params) # Tangent mid control - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .5)) - self.tan_npo = pri.addTransform(self.tan0_npo, self.getName("tan_npo"), t) - self.tan_ctl = self.addCtl(self.tan_npo, "tan_ctl", t, self.color_fk, "sphere", w=self.size*.2, tp=self.ik1_ctl) - att.setKeyableAttributes(self.tan_ctl, self.t_params) - att.setInvertMirror(self.tan_ctl, ["tx"]) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .5) + t = transform.setMatrixPosition(t, vec_pos) + + self.tan_npo = primitive.addTransform( + self.tan0_npo, self.getName("tan_npo"), t) + + self.tan_ctl = self.addCtl(self.tan_npo, + "tan_ctl", + t, + self.color_fk, + "sphere", + w=self.size * .2, + tp=self.ik1_ctl) + + attribute.setKeyableAttributes(self.tan_ctl, self.t_params) + attribute.setInvertMirror(self.tan_ctl, ["tx"]) else: - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .33)) - self.tan0_npo = pri.addTransform(self.ik0_ctl, self.getName("tan0_npo"), t) - self.tan0_ctl = self.addCtl(self.tan0_npo, "tan0_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik0_ctl) - att.setKeyableAttributes(self.tan0_ctl, self.t_params) + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .33) + + t = transform.setMatrixPosition(t, vec_pos) + + self.tan0_npo = primitive.addTransform( + self.ik0_ctl, self.getName("tan0_npo"), t) - t = tra.setMatrixPosition(t, vec.linearlyInterpolate(self.guide.apos[0], self.guide.apos[1], .66)) - self.tan1_npo = pri.addTransform(self.ik1_ctl, self.getName("tan1_npo"), t) - self.tan1_ctl = self.addCtl(self.tan1_npo, "tan1_ctl", t, self.color_ik, "sphere", w=self.size*.2, tp=self.ik1_ctl) - att.setKeyableAttributes(self.tan1_ctl, self.t_params) + self.tan0_ctl = self.addCtl(self.tan0_npo, + "tan0_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik0_ctl) - att.setInvertMirror(self.tan0_ctl, ["tx"]) - att.setInvertMirror(self.tan1_ctl, ["tx"]) + attribute.setKeyableAttributes(self.tan0_ctl, self.t_params) + + vec_pos = vector.linearlyInterpolate(self.guide.apos[0], + self.guide.apos[1], + .66) + + t = transform.setMatrixPosition(t, vec_pos) + + self.tan1_npo = primitive.addTransform( + self.ik1_ctl, self.getName("tan1_npo"), t) + + self.tan1_ctl = self.addCtl(self.tan1_npo, + "tan1_ctl", + t, + self.color_ik, + "sphere", + w=self.size * .2, + tp=self.ik1_ctl) + + attribute.setKeyableAttributes(self.tan1_ctl, self.t_params) + + attribute.setInvertMirror(self.tan0_ctl, ["tx"]) + attribute.setInvertMirror(self.tan1_ctl, ["tx"]) # Curves ------------------------------------------- - self.mst_crv = cur.addCnsCurve(self.root, self.getName("mst_crv"), [self.ik0_ctl, self.tan0_ctl, self.tan1_ctl, self.ik1_ctl], 3) - self.slv_crv = cur.addCurve(self.root, self.getName("slv_crv"), [dt.Vector()]*10, False, 3) + self.mst_crv = curve.addCnsCurve( + self.root, + self.getName("mst_crv"), + [self.ik0_ctl, self.tan0_ctl, self.tan1_ctl, self.ik1_ctl], + 3) + self.slv_crv = curve.addCurve(self.root, self.getName("slv_crv"), + [datatypes.Vector()] * 10, + False, + 3) self.mst_crv.setAttr("visibility", False) self.slv_crv.setAttr("visibility", False) @@ -142,213 +244,372 @@ def addObjects(self): self.twister = [] self.ref_twist = [] - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - parent_twistRef = pri.addTransform(self.root, self.getName("reference"), tra.getTransform(self.root)) + t = transform.getTransformLookingAt( + self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + parent_twistRef = primitive.addTransform( + self.root, + self.getName("reference"), + transform.getTransform(self.root)) self.jointList = [] self.preiviousCtlTag = self.parentCtlTag for i in range(self.settings["division"]): # References - div_cns = pri.addTransform(parentdiv, self.getName("%s_cns"%i)) - pm.setAttr(div_cns+".inheritsTransform", False) + div_cns = primitive.addTransform(parentdiv, + self.getName("%s_cns" % i)) + pm.setAttr(div_cns + ".inheritsTransform", False) self.div_cns.append(div_cns) parentdiv = div_cns # Controlers (First and last one are fake) # if i in [0]: - # TODO: add option setting to add or not the first and last controller for the fk + # TODO: add option setting to add or not the first and + # last controller for the fk if i in [0, self.settings["division"] - 1] and False: - # if i in [0, self.settings["division"] - 1]: - fk_ctl = pri.addTransform(parentctl, self.getName("%s_loc"%i), tra.getTransform(parentctl)) + # if i in [0, self.settings["division"] - 1]: + fk_ctl = primitive.addTransform( + parentctl, + self.getName("%s_loc" % i), + transform.getTransform(parentctl)) + fk_npo = fk_ctl - if i in [ self.settings["division"] - 1]: + if i in [self.settings["division"] - 1]: self.fk_ctl.append(fk_ctl) else: - # fk_npo = pri.addTransform(parentctl, self.getName("fk%s_npo"%(i-1)), tra.getTransform(parentctl)) - fk_npo = pri.addTransform(parentctl, self.getName("fk%s_npo"%(i)), tra.getTransform(parentctl)) - fk_ctl = self.addCtl(fk_npo, "fk%s_ctl"%(i), tra.getTransform(parentctl), self.color_fk, "cube", w=self.size, h=self.size*.05, d=self.size, tp=self.preiviousCtlTag) - # fk_ctl = self.addCtl(fk_npo, "fk%s_ctl"%(i-1), tra.getTransform(parentctl), self.color_fk, "cube", w=self.size, h=self.size*.05, d=self.size, tp=self.preiviousCtlTag) - att.setKeyableAttributes(self.fk_ctl) - att.setRotOrder(fk_ctl, "ZXY") + fk_npo = primitive.addTransform( + parentctl, + self.getName("fk%s_npo" % (i)), + transform.getTransform(parentctl)) + + fk_ctl = self.addCtl(fk_npo, + "fk%s_ctl" % (i), + transform.getTransform(parentctl), + self.color_fk, + "cube", + w=self.size, + h=self.size * .05, + d=self.size, + tp=self.preiviousCtlTag) + + attribute.setKeyableAttributes(self.fk_ctl) + attribute.setRotOrder(fk_ctl, "ZXY") self.fk_ctl.append(fk_ctl) self.preiviousCtlTag = fk_ctl # setAttr(fk_npo+".inheritsTransform", False) self.fk_npo.append(fk_npo) parentctl = fk_ctl - scl_ref = pri.addTransform(parentctl, self.getName("%s_scl_ref"%i), tra.getTransform(parentctl)) + scl_ref = primitive.addTransform(parentctl, + self.getName("%s_scl_ref" % i), + transform.getTransform(parentctl)) + self.scl_transforms.append(scl_ref) # Deformers (Shadow) self.jnt_pos.append([scl_ref, i]) - #Twist references (This objects will replace the spinlookup slerp solver behavior) - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.guide.blades["blade"].z*-1, "yx", self.negate) - twister = pri.addTransform(parent_twistRef, self.getName("%s_rot_ref"%i), t) - ref_twist = pri.addTransform(parent_twistRef, self.getName("%s_pos_ref"%i), t) - ref_twist.setTranslation(dt.Vector(1.0,0,0), space="preTransform") + # Twist references (This objects will replace the spinlookup + # slerp solver behavior) + t = transform.getTransformLookingAt( + self.guide.apos[0], + self.guide.apos[1], + self.guide.blades["blade"].z * -1, + "yx", + self.negate) + + twister = primitive.addTransform( + parent_twistRef, self.getName("%s_rot_ref" % i), t) + + ref_twist = primitive.addTransform( + parent_twistRef, self.getName("%s_pos_ref" % i), t) + + ref_twist.setTranslation( + datatypes.Vector(1.0, 0, 0), space="preTransform") self.twister.append(twister) self.ref_twist.append(ref_twist) - #TODO: update this part with the optiona FK controls update - for x in self.fk_ctl[:-1]: - att.setInvertMirror(x, ["tx", "rz", "ry"]) + # TODO: update this part with the optiona FK controls update + for x in self.fk_ctl[:-1]: + attribute.setInvertMirror(x, ["tx", "rz", "ry"]) # Connections (Hooks) ------------------------------ - self.cnx0 = pri.addTransform(self.root, self.getName("0_cnx")) - self.cnx1 = pri.addTransform(self.root, self.getName("1_cnx")) + self.cnx0 = primitive.addTransform(self.root, self.getName("0_cnx")) + self.cnx1 = primitive.addTransform(self.root, self.getName("1_cnx")) def addAttributes(self): # Anim ------------------------------------------- - self.position_att = self.addAnimParam("position", "Position", "double", self.settings["position"], 0, 1) - self.maxstretch_att = self.addAnimParam("maxstretch", "Max Stretch", "double", self.settings["maxstretch"], 1) - self.maxsquash_att = self.addAnimParam("maxsquash", "Max Squash", "double", self.settings["maxsquash"], 0, 1) - self.softness_att = self.addAnimParam("softness", "Softness", "double", self.settings["softness"], 0, 1) - - self.lock_ori0_att = self.addAnimParam("lock_ori0", "Lock Ori 0", "double", self.settings["lock_ori"], 0, 1) - self.lock_ori1_att = self.addAnimParam("lock_ori1", "Lock Ori 1", "double", self.settings["lock_ori"], 0, 1) + self.position_att = self.addAnimParam( + "position", "Position", "double", self.settings["position"], 0, 1) + + self.maxstretch_att = self.addAnimParam("maxstretch", + "Max Stretch", + "double", + self.settings["maxstretch"], + 1) + + self.maxsquash_att = self.addAnimParam("maxsquash", + "Max Squash", + "double", + self.settings["maxsquash"], + 0, + 1) + + self.softness_att = self.addAnimParam( + "softness", "Softness", "double", self.settings["softness"], 0, 1) + + self.lock_ori0_att = self.addAnimParam("lock_ori0", + "Lock Ori 0", + "double", + self.settings["lock_ori"], + 0, + 1) + + self.lock_ori1_att = self.addAnimParam("lock_ori1", + "Lock Ori 1", + "double", + self.settings["lock_ori"], + 0, + 1) self.tan0_att = self.addAnimParam("tan0", "Tangent 0", "double", 1, 0) self.tan1_att = self.addAnimParam("tan1", "Tangent 1", "double", 1, 0) # Volume - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) if self.settings["autoBend"]: - self.sideBend_att = self.addAnimParam("sideBend", "Side Bend", "double", .5, 0, 2) - self.frontBend_att = self.addAnimParam("frontBend", "Front Bend", "double", .5, 0, 2) + self.sideBend_att = self.addAnimParam( + "sideBend", "Side Bend", "double", .5, 0, 2) + + self.frontBend_att = self.addAnimParam( + "frontBend", "Front Bend", "double", .5, 0, 2) # Setup ------------------------------------------ # Eval Fcurve - self.st_value = fcu.getFCurveValues(self.settings["st_profile"], self.settings["division"]) - self.sq_value = fcu.getFCurveValues(self.settings["sq_profile"], self.settings["division"]) - - self.st_att = [ self.addSetupParam("stretch_%s"%i, "Stretch %s"%i, "double", self.st_value[i], -1, 0) for i in range(self.settings["division"]) ] - self.sq_att = [ self.addSetupParam("squash_%s"%i, "Squash %s"%i, "double", self.sq_value[i], 0, 1) for i in range(self.settings["division"]) ] + self.st_value = fcurve.getFCurveValues( + self.settings["st_profile"], self.settings["division"]) + + self.sq_value = fcurve.getFCurveValues( + self.settings["sq_profile"], self.settings["division"]) + + self.st_att = [self.addSetupParam("stretch_%s" % i, + "Stretch %s" % i, + "double", + self.st_value[i], + -1, + 0) + for i in range(self.settings["division"])] + + self.sq_att = [self.addSetupParam("squash_%s" % i, + "Squash %s" % i, + "double", + self.sq_value[i], + 0, + 1) + for i in range(self.settings["division"])] + # ===================================================== + # OPERATORS + # ===================================================== def addOperators(self): + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ # Auto bend ---------------------------- if self.settings["autoBend"]: - mul_node = nod.createMulNode([self.autoBendChain[0].ry, self.autoBendChain[0].rz ], [self.sideBend_att, self.frontBend_att]) + mul_node = node.createMulNode( + [self.autoBendChain[0].ry, self.autoBendChain[0].rz], + [self.sideBend_att, self.frontBend_att]) + mul_node.outputX >> self.ik1autoRot_lvl.rz mul_node.outputY >> self.ik1autoRot_lvl.rx - self.ikHandleAutoBend = pri.addIkHandle(self.autoBend_ctl, self.getName("ikHandleAutoBend"), self.autoBendChain, "ikSCsolver") - + self.ikHandleAutoBend = primitive.addIkHandle( + self.autoBend_ctl, + self.getName("ikHandleAutoBend"), + self.autoBendChain, + "ikSCsolver") # Tangent position --------------------------------- # common part - d = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - dist_node = nod.createDistNode(self.ik0_ctl, self.ik1_ctl) - rootWorld_node = nod.createDecomposeMatrixNode(self.root.attr("worldMatrix")) - div_node = nod.createDivNode(dist_node+".distance", rootWorld_node+".outputScaleX") - div_node = nod.createDivNode(div_node+".outputX", d) + d = vector.getDistance(self.guide.apos[0], self.guide.apos[1]) + dist_node = node.createDistNode(self.ik0_ctl, self.ik1_ctl) + rootWorld_node = node.createDecomposeMatrixNode( + self.root.attr("worldMatrix")) + + div_node = node.createDivNode(dist_node + ".distance", + rootWorld_node + ".outputScaleX") + + div_node = node.createDivNode(div_node + ".outputX", d) # tan0 - mul_node = nod.createMulNode(self.tan0_att, self.tan0_npo.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan0_npo.attr("ty")) + mul_node = node.createMulNode(self.tan0_att, + self.tan0_npo.getAttr("ty")) + + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + + pm.connectAttr(res_node + ".outputX", self.tan0_npo.attr("ty")) # tan1 - mul_node = nod.createMulNode(self.tan1_att, self.tan1_npo.getAttr("ty")) - res_node = nod.createMulNode(mul_node+".outputX", div_node+".outputX") - pm.connectAttr( res_node+".outputX", self.tan1_npo.attr("ty")) + mul_node = node.createMulNode(self.tan1_att, + self.tan1_npo.getAttr("ty")) + + res_node = node.createMulNode(mul_node + ".outputX", + div_node + ".outputX") + + pm.connectAttr(res_node + ".outputX", self.tan1_npo.attr("ty")) # Tangent Mid -------------------------------------- if self.settings["centralTangent"]: - tanIntMat = aop.gear_intmatrix_op(self.tan0_npo.attr("worldMatrix"), self.tan1_npo.attr("worldMatrix"), .5) - aop.gear_mulmatrix_op(tanIntMat.attr("output"), self.tan_npo.attr("parentInverseMatrix[0]"), self.tan_npo) - pm.connectAttr(self.tan_ctl.attr("translate"), self.tan0_off.attr("translate")) - pm.connectAttr(self.tan_ctl.attr("translate"), self.tan1_off.attr("translate")) + tanIntMat = applyop.gear_intmatrix_op( + self.tan0_npo.attr("worldMatrix"), + self.tan1_npo.attr("worldMatrix"), + .5) + applyop.gear_mulmatrix_op( + tanIntMat.attr("output"), + self.tan_npo.attr("parentInverseMatrix[0]"), + self.tan_npo) + + pm.connectAttr(self.tan_ctl.attr("translate"), + self.tan0_off.attr("translate")) + + pm.connectAttr(self.tan_ctl.attr("translate"), + self.tan1_off.attr("translate")) # Curves ------------------------------------------- - op = aop.gear_curveslide2_op(self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) + op = applyop.gear_curveslide2_op( + self.slv_crv, self.mst_crv, 0, 1.5, .5, .5) - pm.connectAttr(self.position_att, op+".position") - pm.connectAttr(self.maxstretch_att, op+".maxstretch") - pm.connectAttr(self.maxsquash_att, op+".maxsquash") - pm.connectAttr(self.softness_att, op+".softness") + pm.connectAttr(self.position_att, op + ".position") + pm.connectAttr(self.maxstretch_att, op + ".maxstretch") + pm.connectAttr(self.maxsquash_att, op + ".maxsquash") + pm.connectAttr(self.softness_att, op + ".softness") # Volume driver ------------------------------------ - crv_node = nod.createCurveInfoNode(self.slv_crv) + crv_node = node.createCurveInfoNode(self.slv_crv) # Division ----------------------------------------- for i in range(self.settings["division"]): # References u = i / (self.settings["division"] - 1.0) - if i == 0: # we add extra 10% to the first vertebra - u =( 1.0 / (self.settings["division"] - 1.0)) /10 + if i == 0: # we add extra 10% to the first vertebra + u = (1.0 / (self.settings["division"] - 1.0)) / 10 - cns = aop.pathCns(self.div_cns[i], self.slv_crv, False, u, True) - cns.setAttr("frontAxis", 1)# front axis is 'Y' - cns.setAttr("upAxis", 0)# front axis is 'X' + cns = applyop.pathCns( + self.div_cns[i], self.slv_crv, False, u, True) - # Roll - intMatrix = aop.gear_intmatrix_op(self.ik0_ctl+".worldMatrix", self.ik1_ctl+".worldMatrix", u) - dm_node = nod.createDecomposeMatrixNode(intMatrix+".output") - pm.connectAttr(dm_node+".outputRotate", self.twister[i].attr("rotate")) + cns.setAttr("frontAxis", 1) # front axis is 'Y' + cns.setAttr("upAxis", 0) # front axis is 'X' + # Roll + intMatrix = applyop.gear_intmatrix_op( + self.ik0_ctl + ".worldMatrix", + self.ik1_ctl + ".worldMatrix", + u) - pm.parentConstraint(self.twister[i], self.ref_twist[i], maintainOffset=True) - + dm_node = node.createDecomposeMatrixNode(intMatrix + ".output") + pm.connectAttr(dm_node + ".outputRotate", + self.twister[i].attr("rotate")) - pm.connectAttr(self.ref_twist[i]+".translate", cns+".worldUpVector") + pm.parentConstraint(self.twister[i], + self.ref_twist[i], + maintainOffset=True) - #compensate scale reference - div_node = nod.createDivNode([1,1,1], [rootWorld_node+".outputScaleX", rootWorld_node+".outputScaleY", rootWorld_node+".outputScaleZ"]) + pm.connectAttr(self.ref_twist[i] + ".translate", + cns + ".worldUpVector") + # compensate scale reference + div_node = node.createDivNode([1, 1, 1], + [rootWorld_node + ".outputScaleX", + rootWorld_node + ".outputScaleY", + rootWorld_node + ".outputScaleZ"]) # Squash n Stretch - op = aop.gear_squashstretch2_op(self.scl_transforms[i], self.root, pm.arclen(self.slv_crv), "y", div_node+".output" ) - pm.connectAttr(self.volume_att, op+".blend") - pm.connectAttr(crv_node+".arcLength", op+".driver") - pm.connectAttr(self.st_att[i], op+".stretch") - pm.connectAttr(self.sq_att[i], op+".squash") + op = applyop.gear_squashstretch2_op(self.scl_transforms[i], + self.root, + pm.arclen(self.slv_crv), + "y", + div_node + ".output") + + pm.connectAttr(self.volume_att, op + ".blend") + pm.connectAttr(crv_node + ".arcLength", op + ".driver") + pm.connectAttr(self.st_att[i], op + ".stretch") + pm.connectAttr(self.sq_att[i], op + ".squash") # Controlers if i == 0: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.root.attr("worldInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - pm.connectAttr(dm_node+".outputTranslate", self.fk_npo[i].attr("t")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.root.attr("worldInverseMatrix")) + + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".output") + + pm.connectAttr(dm_node + ".outputTranslate", + self.fk_npo[i].attr("t")) else: - mulmat_node = aop.gear_mulmatrix_op(self.div_cns[i].attr("worldMatrix"), - self.div_cns[i - 1].attr("worldInverseMatrix")) - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".output") - mul_node = nod.createMulNode(div_node+".output", dm_node+".outputTranslate") - pm.connectAttr(mul_node+".output", self.fk_npo[i].attr("t")) + mulmat_node = applyop.gear_mulmatrix_op( + self.div_cns[i].attr("worldMatrix"), + self.div_cns[i - 1].attr("worldInverseMatrix")) + + dm_node = node.createDecomposeMatrixNode( + mulmat_node + ".output") - pm.connectAttr(dm_node+".outputRotate", self.fk_npo[i].attr("r")) + mul_node = node.createMulNode(div_node + ".output", + dm_node + ".outputTranslate") + pm.connectAttr(mul_node + ".output", self.fk_npo[i].attr("t")) + pm.connectAttr(dm_node + ".outputRotate", self.fk_npo[i].attr("r")) # Orientation Lock - if i == 0 : - dm_node = nod.createDecomposeMatrixNode(self.ik0_ctl+".worldMatrix") - blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori0_att) - self.div_cns[i].attr("rotate").disconnect() - pm.connectAttr(blend_node+".output", self.div_cns[i]+".rotate") - elif i == self.settings["division"] - 1 : - dm_node = nod.createDecomposeMatrixNode(self.ik1_ctl+".worldMatrix") - blend_node = nod.createBlendNode([dm_node+".outputRotate%s"%s for s in "XYZ"], [cns+".rotate%s"%s for s in "XYZ"], self.lock_ori1_att) + if i == 0: + dm_node = node.createDecomposeMatrixNode( + self.ik0_ctl + ".worldMatrix") + + blend_node = node.createBlendNode( + [dm_node + ".outputRotate%s" % s for s in "XYZ"], + [cns + ".rotate%s" % s for s in "XYZ"], + self.lock_ori0_att) + self.div_cns[i].attr("rotate").disconnect() - pm.connectAttr(blend_node+".output", self.div_cns[i]+".rotate") - # hip lvl position - # pm.pointConstraint(self.scl_transforms[0], self.hip_lvl, mo) + pm.connectAttr(blend_node + ".output", + self.div_cns[i] + ".rotate") - # Connections (Hooks) ------------------------------ + elif i == self.settings["division"] - 1: + dm_node = node.createDecomposeMatrixNode( + self.ik1_ctl + ".worldMatrix") - # pm.parentConstraint(self.scl_transforms[0], self.cnx0) + blend_node = node.createBlendNode( + [dm_node + ".outputRotate%s" % s for s in "XYZ"], + [cns + ".rotate%s" % s for s in "XYZ"], + self.lock_ori1_att) + + self.div_cns[i].attr("rotate").disconnect() + pm.connectAttr(blend_node + ".output", + self.div_cns[i] + ".rotate") + + # Connections (Hooks) ------------------------------ pm.parentConstraint(self.hip_lvl, self.cnx0) - # pm.scaleConstraint(self.scl_transforms[0], self.cnx0) pm.scaleConstraint(self.hip_lvl, self.cnx0) pm.parentConstraint(self.scl_transforms[-1], self.cnx1) pm.scaleConstraint(self.scl_transforms[-1], self.cnx1) @@ -356,9 +617,8 @@ def addOperators(self): # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.cnx0 self.relatives["eff"] = self.cnx1 diff --git a/scripts/mgear/maya/shifter/component/spine_ik_02/guide.py b/scripts/mgear/maya/shifter/component/spine_ik_02/guide.py index ad360dc..ef98b3e 100644 --- a/scripts/mgear/maya/shifter/component/spine_ik_02/guide.py +++ b/scripts/mgear/maya/shifter/component/spine_ik_02/guide.py @@ -1,54 +1,25 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -############################################# -# GLOBAL -############################################# +"""Guide Spine IK 02 module""" + from functools import partial -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget + import settingsUI as sui -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() # guide info AUTHOR = "Jeremie Passerin, Miquel Campos" URL = "www.jeremiepasserin.com, www.miquel-campos.com" EMAIL = "geerem@hotmail.com, hello@miquel-campos.com" -VERSION = [2,0,0] +VERSION = [2, 0, 0] TYPE = "spine_ik_02" NAME = "spine" -DESCRIPTION = """This version have an extra hip joint. An ik spine with an over top layer of fk controllers +DESCRIPTION = """This version have an extra hip joint. An ik spine with an +over top layer of fk controllers that follow the ik position. Optional auto bend ik control and central tangent control. """ @@ -56,7 +27,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -67,30 +41,24 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "eff"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,4,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 4, 0]) self.eff = self.addLoc("eff", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.eff) centers = [self.root, self.eff] self.dispcrv = self.addDispCurve("crv", centers) - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" # Default values self.pPosition = self.addParam("position", "double", 0, 0, 1) @@ -105,11 +73,16 @@ def addParameters(self): self.pCentralTangent = self.addParam("centralTangent", "bool", False) # FCurves - self.pSt_profile = self.addFCurveParam("st_profile", [[0,0],[.5,-1],[1,0]]) - self.pSq_profile = self.addFCurveParam("sq_profile", [[0,0],[.5,1],[1,0]]) + self.pSt_profile = self.addFCurveParam( + "st_profile", [[0, 0], [.5, -1], [1, 0]]) - self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pSq_profile = self.addFCurveParam( + "sq_profile", [[0, 0], [.5, 1], [1, 0]]) + + self.pUseIndex = self.addParam("useIndex", "bool", False) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) ########################################################## @@ -117,23 +90,24 @@ def addParameters(self): ########################################################## class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -141,7 +115,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -151,28 +125,39 @@ def setup_componentSettingWindow(self): def create_componentControls(self): return - def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") - #populate component settings - self.settingsTab.softness_slider.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.position_spinBox.setValue(int(self.root.attr("position").get()*100)) - self.settingsTab.position_slider.setValue(int(self.root.attr("position").get()*100)) - self.settingsTab.lockOri_spinBox.setValue(int(self.root.attr("lock_ori").get()*100)) - self.settingsTab.lockOri_slider.setValue(int(self.root.attr("lock_ori").get()*100)) - self.settingsTab.softness_spinBox.setValue(int(self.root.attr("softness").get()*100)) - self.settingsTab.maxStretch_spinBox.setValue(self.root.attr("maxstretch").get()) - self.settingsTab.maxSquash_spinBox.setValue(self.root.attr("maxsquash").get()) - self.settingsTab.division_spinBox.setValue(self.root.attr("division").get()) + # populate component settings + self.settingsTab.softness_slider.setValue( + int(self.root.attr("softness").get() * 100)) + self.settingsTab.position_spinBox.setValue( + int(self.root.attr("position").get() * 100)) + self.settingsTab.position_slider.setValue( + int(self.root.attr("position").get() * 100)) + self.settingsTab.lockOri_spinBox.setValue( + int(self.root.attr("lock_ori").get() * 100)) + self.settingsTab.lockOri_slider.setValue( + int(self.root.attr("lock_ori").get() * 100)) + self.settingsTab.softness_spinBox.setValue( + int(self.root.attr("softness").get() * 100)) + self.settingsTab.maxStretch_spinBox.setValue( + self.root.attr("maxstretch").get()) + self.settingsTab.maxSquash_spinBox.setValue( + self.root.attr("maxsquash").get()) + self.settingsTab.division_spinBox.setValue( + self.root.attr("division").get()) self.populateCheck(self.settingsTab.autoBend_checkBox, "autoBend") - self.populateCheck(self.settingsTab.centralTangent_checkBox, "centralTangent") + self.populateCheck(self.settingsTab.centralTangent_checkBox, + "centralTangent") def create_componentLayout(self): @@ -184,20 +169,52 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.softness_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_slider, "softness")) - self.settingsTab.softness_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.softness_spinBox, "softness")) - self.settingsTab.position_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.position_slider, "position")) - self.settingsTab.position_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.position_spinBox, "position")) - self.settingsTab.lockOri_slider.valueChanged.connect(partial(self.updateSlider, self.settingsTab.lockOri_slider, "lock_ori")) - self.settingsTab.lockOri_spinBox.valueChanged.connect(partial(self.updateSlider, self.settingsTab.lockOri_spinBox, "lock_ori")) - self.settingsTab.maxStretch_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxStretch_spinBox, "maxstretch")) - self.settingsTab.maxSquash_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.maxSquash_spinBox, "maxsquash")) - self.settingsTab.division_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.settingsTab.division_spinBox, "division")) - self.settingsTab.autoBend_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.autoBend_checkBox, "autoBend")) - self.settingsTab.centralTangent_checkBox.stateChanged.connect(partial(self.updateCheck, self.settingsTab.centralTangent_checkBox, "centralTangent")) - self.settingsTab.squashStretchProfile_pushButton.clicked.connect(self.setProfile) - - + self.settingsTab.softness_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_slider, + "softness")) + self.settingsTab.softness_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.softness_spinBox, + "softness")) + self.settingsTab.position_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.position_slider, + "position")) + self.settingsTab.position_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.position_spinBox, + "position")) + self.settingsTab.lockOri_slider.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.lockOri_slider, + "lock_ori")) + self.settingsTab.lockOri_spinBox.valueChanged.connect( + partial(self.updateSlider, + self.settingsTab.lockOri_spinBox, + "lock_ori")) + self.settingsTab.maxStretch_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxStretch_spinBox, + "maxstretch")) + self.settingsTab.maxSquash_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.maxSquash_spinBox, + "maxsquash")) + self.settingsTab.division_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + self.settingsTab.division_spinBox, + "division")) + self.settingsTab.autoBend_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.autoBend_checkBox, + "autoBend")) + self.settingsTab.centralTangent_checkBox.stateChanged.connect( + partial(self.updateCheck, + self.settingsTab.centralTangent_checkBox, + "centralTangent")) + self.settingsTab.squashStretchProfile_pushButton.clicked.connect( + self.setProfile) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/squash4Sides_01/__init__.py b/scripts/mgear/maya/shifter/component/squash4Sides_01/__init__.py index 5a11220..3e2c6a8 100644 --- a/scripts/mgear/maya/shifter/component/squash4Sides_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/squash4Sides_01/__init__.py @@ -1,138 +1,165 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya +"""Component Squash 4 Sides 01 module""" + import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent +from mgear.maya import attribute, transform, primitive, node, vector -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.applyop as aop -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec +############################################# +# COMPONENT +############################################# -########################################################## -# COMPONENT -########################################################## -## The main component class. -class Component(MainComponent): +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - ctlSize = vec.getDistance(self.guide.apos[0], self.guide.apos[1])/3.0 + ctlSize = vector.getDistance( + self.guide.apos[0], self.guide.apos[1]) / 3.0 t_root = self.guide.tra["root"] - t_root = tra.setMatrixScale(t_root) + t_root = transform.setMatrixScale(t_root) + + self.ik_cns = primitive.addTransform( + self.root, self.getName("ik_cns"), t_root) + + t = transform.setMatrixPosition(t_root, self.guide.pos["top"]) - self.ik_cns = pri.addTransform(self.root, self.getName("ik_cns"), t_root) + self.top_npo = primitive.addTransform( + self.ik_cns, self.getName("top_npo"), t) - t = tra.setMatrixPosition(t_root, self.guide.pos["top"]) + self.top_ctl = self.addCtl(self.top_npo, + "top_ctl", + t, + self.color_ik, + "arrow", + w=ctlSize, + ro=datatypes.Vector(1.5708, 1.5708, 0), + tp=self.parentCtlTag) - self.top_npo = pri.addTransform(self.ik_cns, self.getName("top_npo"), t) - self.top_ctl = self.addCtl(self.top_npo, "top_ctl", t, self.color_ik, "arrow", w=ctlSize, ro=dt.Vector(1.5708,1.5708,0), tp=self.parentCtlTag) - att.setKeyableAttributes(self.top_ctl, ["ty"] ) + attribute.setKeyableAttributes(self.top_ctl, ["ty"]) + + t = transform.setMatrixPosition(t_root, self.guide.pos["bottom"]) + self.bottom_npo = primitive.addTransform( + self.top_npo, self.getName("bottom_npo"), t) - t = tra.setMatrixPosition(t_root, self.guide.pos["bottom"]) - self.bottom_npo = pri.addTransform(self.top_npo, self.getName("bottom_npo"), t) self.bottom_npo.rz.set(180) - self.bottom_ctl = self.addCtl(self.bottom_npo, "bottom_ctl", t, self.color_ik, "arrow", w=ctlSize, ro=dt.Vector(1.5708,1.5708,0), tp=self.parentCtlTag) + self.bottom_ctl = self.addCtl(self.bottom_npo, + "bottom_ctl", + t, + self.color_ik, + "arrow", + w=ctlSize, + ro=datatypes.Vector(1.5708, 1.5708, 0), + tp=self.parentCtlTag) + self.bottom_ctl.rz.set(0) - att.setKeyableAttributes(self.bottom_ctl, ["ty"] ) - self.bottom_pivot = pri.addTransform(self.bottom_npo, self.getName("bottom_pivot"), tra.getTransform(self.top_ctl)) + attribute.setKeyableAttributes(self.bottom_ctl, ["ty"]) + self.bottom_pivot = primitive.addTransform( + self.bottom_npo, + self.getName("bottom_pivot"), + transform.getTransform(self.top_ctl)) + + t = transform.setMatrixPosition(t_root, self.guide.pos["ext"]) + self.ext_npo = primitive.addTransform( + self.bottom_pivot, self.getName("ext_npo"), t) - t = tra.setMatrixPosition(t_root, self.guide.pos["ext"]) - self.ext_npo = pri.addTransform(self.bottom_pivot, self.getName("ext_npo"), t) self.ext_npo.rz.set(-90) - self.ext_ctl = self.addCtl(self.ext_npo, "ext_ctl", t, self.color_ik, "arrow", w=ctlSize, ro=dt.Vector(1.5708,1.5708,0), tp=self.parentCtlTag) + self.ext_ctl = self.addCtl(self.ext_npo, + "ext_ctl", + t, + self.color_ik, + "arrow", + w=ctlSize, + ro=datatypes.Vector(1.5708, 1.5708, 0), + tp=self.parentCtlTag) + self.ext_ctl.rz.set(0) - att.setKeyableAttributes(self.ext_ctl, ["ty"] ) + attribute.setKeyableAttributes(self.ext_ctl, ["ty"]) + + t = transform.setMatrixPosition(t_root, self.guide.pos["int"]) + self.int_npo = primitive.addTransform( + self.ext_npo, self.getName("int_npo"), t) - t = tra.setMatrixPosition(t_root, self.guide.pos["int"]) - self.int_npo = pri.addTransform(self.ext_npo, self.getName("int_npo"), t) self.int_npo.rz.set(180) - self.int_ctl = self.addCtl(self.int_npo, "int_ctl", t, self.color_ik, "arrow", w=ctlSize, ro=dt.Vector(1.5708,1.5708,0), tp=self.parentCtlTag) + self.int_ctl = self.addCtl(self.int_npo, + "int_ctl", + t, + self.color_ik, + "arrow", + w=ctlSize, + ro=datatypes.Vector(1.5708, 1.5708, 0), + tp=self.parentCtlTag) + self.int_ctl.rz.set(0) - att.setKeyableAttributes(self.int_ctl, ["ty"] ) - self.int_pivot = pri.addTransform(self.int_npo, self.getName("int_pivot"), tra.getTransform(self.ext_ctl)) + attribute.setKeyableAttributes(self.int_ctl, ["ty"]) - self.anchor = pri.addTransform(self.int_pivot, self.getName("int_npo"), tra.getTransform(self.ik_cns)) + self.int_pivot = primitive.addTransform( + self.int_npo, + self.getName("int_pivot"), + transform.getTransform(self.ext_ctl)) + self.anchor = primitive.addTransform( + self.int_pivot, + self.getName("int_npo"), + transform.getTransform(self.ik_cns)) if self.settings["joint"]: self.jnt_pos.append([self.anchor, 0, None, False]) - # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" - self.volume_att = self.addAnimParam("volume", "Volume", "double", 1, 0, 1) + self.volume_att = self.addAnimParam( + "volume", "Volume", "double", 1, 0, 1) # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): - pairs = [ [self.top_ctl, self.bottom_npo, 1, 2], - [self.bottom_ctl, self.bottom_pivot, 2, 1], - [self.ext_ctl, self.int_npo, 3, 4], - [self.int_ctl, self.int_pivot, 4, 3]] + """Create operators and set the relations for the component rig + + Apply operators, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + pairs = [[self.top_ctl, self.bottom_npo, 1, 2], + [self.bottom_ctl, self.bottom_pivot, 2, 1], + [self.ext_ctl, self.int_npo, 3, 4], + [self.int_ctl, self.int_pivot, 4, 3]] for pair in pairs: - d = vec.getDistance(self.guide.apos[pair[2]], self.guide.apos[pair[3]]) - sum_node = nod.createPlusMinusAverage1D([d, pair[0].ty]) - mul_node = nod.createMulNode(pair[0].ty, self.volume_att) - sum2_node = nod.createPlusMinusAverage1D([d, mul_node.outputX]) - mul2_node = nod.createDivNode([sum2_node.output1D, sum_node.output1D, sum2_node.output1D], [d, d, d]) + d = vector.getDistance(self.guide.apos[pair[2]], + self.guide.apos[pair[3]]) + + sum_node = node.createPlusMinusAverage1D([d, pair[0].ty]) + mul_node = node.createMulNode(pair[0].ty, self.volume_att) + sum2_node = node.createPlusMinusAverage1D([d, mul_node.outputX]) + mul2_node = node.createDivNode( + [sum2_node.output1D, sum_node.output1D, sum2_node.output1D], + [d, d, d]) + sum3D_node = pm.createNode("plusMinusAverage") sum3D_node.attr("operation").set(2) sum3D_node.input3D[0].input3Dx.set(2) @@ -143,15 +170,11 @@ def addOperators(self): mul2_node.outputY >> pair[1].sy sum3D_node.output3D.output3Dx >> pair[1].sz - - - # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.anchor self.relatives["top"] = self.anchor self.relatives["bottom"] = self.anchor @@ -164,7 +187,6 @@ def setRelation(self): self.controlRelatives["int"] = self.int_ctl self.controlRelatives["ext"] = self.ext_ctl - if self.settings["joint"]: self.jointRelatives["root"] = 0 self.jointRelatives["top"] = 0 @@ -172,7 +194,5 @@ def setRelation(self): self.jointRelatives["int"] = 0 self.jointRelatives["ext"] = 0 - ## standard connection definition. - # @param self def connect_standard(self): self.connect_standardWithSimpleIkRef() diff --git a/scripts/mgear/maya/shifter/component/squash4Sides_01/guide.py b/scripts/mgear/maya/shifter/component/squash4Sides_01/guide.py index 63977d6..57458c4 100644 --- a/scripts/mgear/maya/shifter/component/squash4Sides_01/guide.py +++ b/scripts/mgear/maya/shifter/component/squash4Sides_01/guide.py @@ -1,61 +1,33 @@ -# MGEAR is under the terms of the MIT License +"""Guide Squash 4 Sides 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra -import settingsUI as sui - - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() + +import settingsUI as sui # guide info AUTHOR = "Miquel Campos" URL = "www.miquel-campos.com" EMAIL = "hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "squash4Sides_01" NAME = "squash4Sides" -DESCRIPTION = "Squash4Sides component. NOTE: this component use the full rotation of the root." +DESCRIPTION = "Squash4Sides component. NOTE: this component use the full " \ + "rotation of the root." ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -66,73 +38,69 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" self.save_transform = ["root", "top", "bottom", "ext", "int"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [0,1,0]) + vTemp = transform.getOffsetPosition(self.root, [0, 1, 0]) self.top_loc = self.addLoc("top", self.root, vTemp) centers = [self.root, self.top_loc] self.dispcrv = self.addDispCurve("crv", centers) - vTemp = tra.getOffsetPosition( self.root, [0,-1,0]) + vTemp = transform.getOffsetPosition(self.root, [0, -1, 0]) self.bottom_loc = self.addLoc("bottom", self.root, vTemp) centers = [self.root, self.bottom_loc] self.dispcrv = self.addDispCurve("crv", centers) - vTemp = tra.getOffsetPosition( self.root, [1,0,0]) + vTemp = transform.getOffsetPosition(self.root, [1, 0, 0]) self.ext_loc = self.addLoc("ext", self.root, vTemp) centers = [self.root, self.ext_loc] self.dispcrv = self.addDispCurve("crv", centers) - vTemp = tra.getOffsetPosition( self.root, [-1,0,0]) + vTemp = transform.getOffsetPosition(self.root, [-1, 0, 0]) self.int_loc = self.addLoc("int", self.root, vTemp) centers = [self.root, self.int_loc] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pRefArray = self.addParam("ikrefarray", "string", "") + self.pRefArray = self.addParam("ikrefarray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + + self.pParentJointIndex = self.addParam( + "parentJointIndex", "long", -1, None, None) + self.pJoint = self.addParam("joint", "bool", True) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -140,7 +108,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -151,11 +119,13 @@ def create_componentControls(self): return def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") refArrayItems = self.root.attr("ikrefarray").get().split(",") @@ -172,8 +142,14 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.refArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) - self.settingsTab.refArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) + self.settingsTab.refArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) + self.settingsTab.refArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) self.settingsTab.refArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -185,4 +161,4 @@ def eventFilter(self, sender, event): return QtWidgets.QDialog.eventFilter(self, sender, event) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/component/squash_01/__init__.py b/scripts/mgear/maya/shifter/component/squash_01/__init__.py index 4e99421..caec27a 100644 --- a/scripts/mgear/maya/shifter/component/squash_01/__init__.py +++ b/scripts/mgear/maya/shifter/component/squash_01/__init__.py @@ -1,126 +1,145 @@ -# MGEAR is under the terms of the MIT License +"""Component Squash 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Maya import pymel.core as pm import pymel.core.datatypes as dt +from mgear.maya.shifter import component -# mgear -from mgear.maya.shifter.component import MainComponent - -import mgear.maya.primitive as pri -import mgear.maya.transform as tra -import mgear.maya.applyop as aop -import mgear.maya.attribute as att -import mgear.maya.node as nod -import mgear.maya.vector as vec - +from mgear.maya import primitive, transform, applyop, attribute, node, vector ########################################################## # COMPONENT ########################################################## -## The main component class. -class Component(MainComponent): + + +class Component(component.Main): + """Shifter component Class""" # ===================================================== # OBJECTS # ===================================================== - ## Add all the objects needed to create the component. - # @param self def addObjects(self): + """Add all the objects needed to create the component.""" - self.normal = self.guide.blades["blade"].z*-1 + self.normal = self.guide.blades["blade"].z * -1 self.binormal = self.guide.blades["blade"].x - t = tra.getTransformLookingAt(self.guide.apos[0], self.guide.apos[1], self.normal, axis="yx", negate=self.negate) - - self.ctl_npo = pri.addTransform(self.root, self.getName("ctl_npo"), t) - self.ctl = self.addCtl(self.ctl_npo, "base_ctl", t, self.color_ik, "square", w=1.0, tp=self.parentCtlTag) - - self.ref_base = pri.addTransform(self.ctl, self.getName("ref_base"), t) - - t = tra.setMatrixPosition(t, self.guide.apos[1]) - self.ik_cns = pri.addTransform(self.ctl, self.getName("ik_cns"), t) - self.squash_npo = pri.addTransform(self.ik_cns, self.getName("squash_npo"), t) - self.squash_ctl = self.addCtl(self.squash_npo, "squash_ctl", t, self.color_ik, "crossarrow", w=1.0, ro=dt.Vector(1.5708,0,0), tp=self.ctl) - att.setKeyableAttributes(self.squash_ctl, ["tx", "ty", "tz"] ) - - self.ref_squash = pri.addTransform(self.squash_ctl, self.getName("ref_squash"), t) + t = transform.getTransformLookingAt(self.guide.apos[0], + self.guide.apos[1], + self.normal, + axis="yx", + negate=self.negate) + self.ctl_npo = primitive.addTransform(self.root, + self.getName("ctl_npo"), t) + self.ctl = self.addCtl(self.ctl_npo, + "base_ctl", + t, + self.color_ik, + "square", + w=1.0, + tp=self.parentCtlTag) + + self.ref_base = primitive.addTransform(self.ctl, + self.getName("ref_base"), + t) + + t = transform.setMatrixPosition(t, self.guide.apos[1]) + + self.ik_cns = primitive.addTransform(self.ctl, + self.getName("ik_cns"), + t) + self.squash_npo = primitive.addTransform(self.ik_cns, + self.getName("squash_npo"), + t) + self.squash_ctl = self.addCtl(self.squash_npo, + "squash_ctl", + t, + self.color_ik, + "crossarrow", + w=1.0, + ro=dt.Vector(1.5708, 0, 0), + tp=self.ctl) + + attribute.setKeyableAttributes(self.squash_ctl, ["tx", "ty", "tz"]) + + self.ref_squash = primitive.addTransform(self.squash_ctl, + self.getName("ref_squash"), + t) self.div_cns = [] - div_cns = pri.addTransform(self.root, self.getName("div0_loc")) + div_cns = primitive.addTransform(self.root, self.getName("div0_loc")) self.div_cns.append(div_cns) self.jnt_pos.append([div_cns, 0, None, False]) - # ===================================================== - # PROPERTY + # ATTRIBUTES # ===================================================== - ## Add parameters to the anim and setup properties to control the component. - # @param self def addAttributes(self): + """Create the anim and setupr rig attributes for the component""" # Ref if self.settings["ikrefarray"]: ref_names = self.settings["ikrefarray"].split(",") if len(ref_names) > 1: - self.ikref_att = self.addAnimEnumParam("ikref", "Ik Ref", 0, self.settings["ikrefarray"].split(",")) + self.ikref_att = self.addAnimEnumParam( + "ikref", + "Ik Ref", + 0, + self.settings["ikrefarray"].split(",")) # ===================================================== # OPERATORS # ===================================================== - ## Apply operators, constraints, expressions to the hierarchy.\n - # In order to keep the code clean and easier to debug, - # we shouldn't create any new object in this method. - # @param self def addOperators(self): - aop.aimCns(self.ref_base, self.squash_ctl, axis="yx", wupType=2, wupVector=[1,0,0], wupObject=self.ctl, maintainOffset=False) - aop.aimCns(self.ref_squash, self.ctl, axis="-yx", wupType=2, wupVector=[1,0,0], wupObject=self.squash_ctl, maintainOffset=False) + """Create operators and set the relations for the component rig + + Apply operators/Solvers, constraints, expressions to the hierarchy. + In order to keep the code clean and easier to debug, + we shouldn't create any new object in this method. + + """ + applyop.aimCns(self.ref_base, + self.squash_ctl, + axis="yx", + wupType=2, + wupVector=[1, 0, 0], + wupObject=self.ctl, + maintainOffset=False) + applyop.aimCns(self.ref_squash, + self.ctl, + axis="-yx", + wupType=2, + wupVector=[1, 0, 0], + wupObject=self.squash_ctl, + maintainOffset=False) bIncrement = 1.0 - blend=0 + blend = 0 for i, div_cns in enumerate(self.div_cns): - intMatrix = aop.gear_intmatrix_op(self.ref_base.attr("worldMatrix"), self.ref_squash.attr("worldMatrix"), blend) - aop.gear_mulmatrix_op(intMatrix.attr("output"), div_cns.attr("parentInverseMatrix[0]"), div_cns) + intMatrix = applyop.gear_intmatrix_op( + self.ref_base.attr("worldMatrix"), + self.ref_squash.attr("worldMatrix"), + blend) - blend = blend+bIncrement + applyop.gear_mulmatrix_op(intMatrix.attr("output"), + div_cns.attr("parentInverseMatrix[0]"), + div_cns) - d = vec.getDistance(self.guide.apos[0], self.guide.apos[1]) - dist_node = nod.createDistNode(self.squash_ctl, self.ctl) - rootWorld_node = nod.createDecomposeMatrixNode(self.ctl.attr("worldMatrix")) - div_node = nod.createDivNode(dist_node+".distance", rootWorld_node+".outputScaleY") - div_node = nod.createDivNode(div_node+".outputX", d) - rev_node = nod.createReverseNode(div_node+".outputX") - add_node = pm.createNode("plusMinusAverage") + blend = blend + bIncrement + d = vector.getDistance(self.guide.apos[0], self.guide.apos[1]) + dist_node = node.createDistNode(self.squash_ctl, self.ctl) + + rootWorld_node = node.createDecomposeMatrixNode( + self.ctl.attr("worldMatrix")) + + div_node = node.createDivNode(dist_node + ".distance", + rootWorld_node + ".outputScaleY") + + div_node = node.createDivNode(div_node + ".outputX", d) + rev_node = node.createReverseNode(div_node + ".outputX") + add_node = pm.createNode("plusMinusAverage") add_node.input1D[0].set(1.0) rev_node.outputX >> add_node.input1D[1] @@ -129,26 +148,24 @@ def addOperators(self): add_node.output1D >> self.ref_base.scaleX add_node.output1D >> self.ref_base.scaleZ - # ===================================================== # CONNECTOR # ===================================================== - ## Set the relation beetween object from guide to rig.\n - # @param self def setRelation(self): + """Set the relation beetween object from guide to rig""" self.relatives["root"] = self.ref_base self.relatives["squash"] = self.ref_squash self.controlRelatives["root"] = self.ctl self.controlRelatives["squash"] = self.squash_ctl - for i in range(0, len(self.div_cns)-1): - self.relatives["%s_loc"%i] = self.div_cns[i+1] - self.jointRelatives["%s_loc"%i] = i+1 - self.relatives["%s_loc"%(len(self.div_cns)-1)] = self.div_cns[-1] - self.jointRelatives["%s_loc"%(len(self.div_cns)-1)] = len(self.div_cns)-1 + for i in range(0, len(self.div_cns) - 1): + self.relatives["%s_loc" % i] = self.div_cns[i + 1] + self.jointRelatives["%s_loc" % i] = i + 1 + self.relatives["%s_loc" % (len(self.div_cns) - 1)] = self.div_cns[-1] + jnt_rel_len = len(self.div_cns) - 1 + self.jointRelatives["%s_loc" % (len(self.div_cns) - 1)] = jnt_rel_len - ## standard connection definition. - # @param self def connect_standard(self): + """standard connection definition for the component""" self.connect_standardWithSimpleIkRef() diff --git a/scripts/mgear/maya/shifter/component/squash_01/guide.py b/scripts/mgear/maya/shifter/component/squash_01/guide.py index 5c2ccc6..f26f712 100644 --- a/scripts/mgear/maya/shifter/component/squash_01/guide.py +++ b/scripts/mgear/maya/shifter/component/squash_01/guide.py @@ -1,53 +1,21 @@ -# MGEAR is under the terms of the MIT License +"""Guide Squash 01 module""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## from functools import partial +from mgear.maya.shifter.component import guide +from mgear.maya import transform, pyqt +from mgear.vendor.Qt import QtWidgets, QtCore -# mgear -from mgear.maya.shifter.component.guide import ComponentGuide -import mgear.maya.transform as tra -import settingsUI as sui - - -#Pyside -from mgear.maya.shifter.component.guide import componentMainSettings -import mgear.maya.pyqt as gqt from maya.app.general.mayaMixin import MayaQWidgetDockableMixin from maya.app.general.mayaMixin import MayaQDockWidget -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() + +import settingsUI as sui # guide info AUTHOR = "Miquel Campos" URL = "www.miquel-campos.com" EMAIL = "hello@miquel-campos.com" -VERSION = [1,0,0] +VERSION = [1, 0, 0] TYPE = "squash_01" NAME = "squash" DESCRIPTION = "Linear squash component" @@ -55,7 +23,10 @@ ########################################################## # CLASS ########################################################## -class Guide(ComponentGuide): + + +class Guide(guide.ComponentGuide): + """Component Guide Class""" compType = TYPE compName = NAME @@ -66,60 +37,58 @@ class Guide(ComponentGuide): email = EMAIL version = VERSION - - # ===================================================== - ## - # @param self def postInit(self): + """Initialize the position for the guide""" + self.save_transform = ["root", "tip"] self.save_blade = ["blade"] - # ===================================================== - ## Add more object to the object definition list. - # @param self def addObjects(self): + """Add the Guide Root, blade and locators""" self.root = self.addRoot() - vTemp = tra.getOffsetPosition( self.root, [2,0,0]) + vTemp = transform.getOffsetPosition(self.root, [2, 0, 0]) self.loc = self.addLoc("tip", self.root, vTemp) self.blade = self.addBlade("blade", self.root, self.loc) centers = [self.root, self.loc] self.dispcrv = self.addDispCurve("crv", centers) - - - # ===================================================== - ## Add more parameter to the parameter definition list. - # @param self def addParameters(self): + """Add the configurations settings""" - self.pRefArray = self.addParam("ikrefarray", "string", "") + self.pRefArray = self.addParam("ikrefarray", "string", "") self.pUseIndex = self.addParam("useIndex", "bool", False) - self.pParentJointIndex = self.addParam("parentJointIndex", "long", -1, None, None) + self.pParentJointIndex = self.addParam("parentJointIndex", + "long", + -1, + None, + None) ########################################################## # Setting Page ########################################################## + class settingsTab(QtWidgets.QDialog, sui.Ui_Form): + """The Component settings UI""" def __init__(self, parent=None): super(settingsTab, self).__init__(parent) self.setupUi(self) -class componentSettings(MayaQWidgetDockableMixin, componentMainSettings): +class componentSettings(MayaQWidgetDockableMixin, guide.componentMainSettings): + """Create the component setting window""" - def __init__(self, parent = None): + def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) - super(self.__class__, self).__init__(parent = parent) + super(self.__class__, self).__init__(parent=parent) self.settingsTab = settingsTab() - self.setup_componentSettingWindow() self.create_componentControls() self.populate_componentControls() @@ -127,7 +96,7 @@ def __init__(self, parent = None): self.create_componentConnections() def setup_componentSettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -138,11 +107,13 @@ def create_componentControls(self): return def populate_componentControls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values. + + Populate the controls values from the custom attributes of the + component. """ - #populate tab + # populate tab self.tabs.insertTab(1, self.settingsTab, "Component Settings") refArrayItems = self.root.attr("ikrefarray").get().split(",") @@ -159,8 +130,14 @@ def create_componentLayout(self): def create_componentConnections(self): - self.settingsTab.refArrayAdd_pushButton.clicked.connect(partial(self.addItem2listWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) - self.settingsTab.refArrayRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.settingsTab.refArray_listWidget, "ikrefarray")) + self.settingsTab.refArrayAdd_pushButton.clicked.connect( + partial(self.addItem2listWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) + self.settingsTab.refArrayRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + self.settingsTab.refArray_listWidget, + "ikrefarray")) self.settingsTab.refArray_listWidget.installEventFilter(self) def eventFilter(self, sender, event): @@ -172,4 +149,4 @@ def eventFilter(self, sender, event): return QtWidgets.QDialog.eventFilter(self, sender, event) def dockCloseEventTriggered(self): - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) diff --git a/scripts/mgear/maya/shifter/customStep.py b/scripts/mgear/maya/shifter/customStep.py index 111ce79..0fee9f8 100644 --- a/scripts/mgear/maya/shifter/customStep.py +++ b/scripts/mgear/maya/shifter/customStep.py @@ -1,43 +1,17 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -#maya import pymel.core as pm - class customShifterMainStep(object): ''' Main Class for shifter custom steps ''' + def run(self, storedDic): """This function mus be re implemented for each custom step. Args: - storedDic (dic): We have to pass the stored dictionary from the previous pass + storedDic (dic): We have to pass the stored dictionary from the + previous pass Raises: Exception: Description @@ -49,8 +23,8 @@ def dup(self, source, name=None): Args: source (PyNode): The Source object to duplicate - name (None, string): The name for the new object. If the value is None - the name will be set by using the custom step name + name (None, string): The name for the new object. If the value + is None the name will be set by using the custom step name Returns: PyNode: The new duplicated object. diff --git a/scripts/mgear/maya/shifter/customStepUI.py b/scripts/mgear/maya/shifter/customStepUI.py index b0ff6da..1182736 100644 --- a/scripts/mgear/maya/shifter/customStepUI.py +++ b/scripts/mgear/maya/shifter/customStepUI.py @@ -1,31 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import mgear.maya.pyqt as gqt -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from mgear.vendor.Qt import QtCore, QtWidgets + class Ui_Form(object): def setupUi(self, Form): @@ -45,51 +20,81 @@ def setupUi(self, Form): self.preCustomStep_checkBox.setObjectName("preCustomStep_checkBox") self.verticalLayout.addWidget(self.preCustomStep_checkBox) self.preCustomStep_horizontalLayout = QtWidgets.QHBoxLayout() - self.preCustomStep_horizontalLayout.setObjectName("preCustomStep_horizontalLayout") + self.preCustomStep_horizontalLayout.setObjectName( + "preCustomStep_horizontalLayout") self.preCustomStep_verticalLayout_1 = QtWidgets.QVBoxLayout() - self.preCustomStep_verticalLayout_1.setObjectName("preCustomStep_verticalLayout_1") + self.preCustomStep_verticalLayout_1.setObjectName( + "preCustomStep_verticalLayout_1") self.preCustomStep_listWidget = QtWidgets.QListWidget(self.groupBox) self.preCustomStep_listWidget.setDragDropOverwriteMode(True) - self.preCustomStep_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) - self.preCustomStep_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction) + self.preCustomStep_listWidget.setDragDropMode( + QtWidgets.QAbstractItemView.InternalMove) + self.preCustomStep_listWidget.setDefaultDropAction( + QtCore.Qt.MoveAction) self.preCustomStep_listWidget.setAlternatingRowColors(True) - self.preCustomStep_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.preCustomStep_listWidget.setSelectionMode( + QtWidgets.QAbstractItemView.ExtendedSelection) self.preCustomStep_listWidget.setProperty("isWrapping", False) self.preCustomStep_listWidget.setViewMode(QtWidgets.QListView.ListMode) self.preCustomStep_listWidget.setObjectName("preCustomStep_listWidget") - self.preCustomStep_verticalLayout_1.addWidget(self.preCustomStep_listWidget) - self.preCustomStep_horizontalLayout.addLayout(self.preCustomStep_verticalLayout_1) + self.preCustomStep_verticalLayout_1.addWidget( + self.preCustomStep_listWidget) + self.preCustomStep_horizontalLayout.addLayout( + self.preCustomStep_verticalLayout_1) self.preCustomStep_verticalLayout_2 = QtWidgets.QVBoxLayout() - self.preCustomStep_verticalLayout_2.setObjectName("preCustomStep_verticalLayout_2") + self.preCustomStep_verticalLayout_2.setObjectName( + "preCustomStep_verticalLayout_2") self.preCustomStepAdd_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepAdd_pushButton.setObjectName("preCustomStepAdd_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepAdd_pushButton) + self.preCustomStepAdd_pushButton.setObjectName( + "preCustomStepAdd_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepAdd_pushButton) self.preCustomStepNew_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepNew_pushButton.setObjectName("preCustomStepNew_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepNew_pushButton) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.preCustomStep_verticalLayout_2.addItem(spacerItem) - self.preCustomStepDuplicate_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepDuplicate_pushButton.setObjectName("preCustomStepDuplicate_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepDuplicate_pushButton) - self.preCustomStepRemove_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepRemove_pushButton.setObjectName("preCustomStepRemove_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepRemove_pushButton) + self.preCustomStepNew_pushButton.setObjectName( + "preCustomStepNew_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepNew_pushButton) + self.preCustomStepDuplicate_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.preCustomStepDuplicate_pushButton.setObjectName( + "preCustomStepDuplicate_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepDuplicate_pushButton) + self.preCustomStepRemove_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.preCustomStepRemove_pushButton.setObjectName( + "preCustomStepRemove_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepRemove_pushButton) self.preCustomStepRun_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepRun_pushButton.setObjectName("preCustomStepRun_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepRun_pushButton) - self.preCustomStepEdit_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepEdit_pushButton.setObjectName("preCustomStepEdit_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepEdit_pushButton) - self.preCustomStepExport_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepExport_pushButton.setObjectName("preCustomStepExport_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepExport_pushButton) - self.preCustomStepImport_pushButton = QtWidgets.QPushButton(self.groupBox) - self.preCustomStepImport_pushButton.setObjectName("preCustomStepImport_pushButton") - self.preCustomStep_verticalLayout_2.addWidget(self.preCustomStepImport_pushButton) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.preCustomStepRun_pushButton.setObjectName( + "preCustomStepRun_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepRun_pushButton) + self.preCustomStepEdit_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.preCustomStepEdit_pushButton.setObjectName( + "preCustomStepEdit_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepEdit_pushButton) + self.preCustomStepExport_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.preCustomStepExport_pushButton.setObjectName( + "preCustomStepExport_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepExport_pushButton) + self.preCustomStepImport_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.preCustomStepImport_pushButton.setObjectName( + "preCustomStepImport_pushButton") + self.preCustomStep_verticalLayout_2.addWidget( + self.preCustomStepImport_pushButton) + spacerItem1 = QtWidgets.QSpacerItem( + 20, 40, QtWidgets.QSizePolicy.Minimum, + QtWidgets.QSizePolicy.Expanding) self.preCustomStep_verticalLayout_2.addItem(spacerItem1) - self.preCustomStep_horizontalLayout.addLayout(self.preCustomStep_verticalLayout_2) + self.preCustomStep_horizontalLayout.addLayout( + self.preCustomStep_verticalLayout_2) self.verticalLayout.addLayout(self.preCustomStep_horizontalLayout) self.verticalLayout_3.addLayout(self.verticalLayout) self.line = QtWidgets.QFrame(self.groupBox) @@ -105,50 +110,87 @@ def setupUi(self, Form): self.postCustomStep_checkBox.setObjectName("postCustomStep_checkBox") self.verticalLayout_2.addWidget(self.postCustomStep_checkBox) self.preCustomStep_horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.preCustomStep_horizontalLayout_2.setObjectName("preCustomStep_horizontalLayout_2") + self.preCustomStep_horizontalLayout_2.setObjectName( + "preCustomStep_horizontalLayout_2") self.preCustomStep_verticalLayout_3 = QtWidgets.QVBoxLayout() - self.preCustomStep_verticalLayout_3.setObjectName("preCustomStep_verticalLayout_3") + self.preCustomStep_verticalLayout_3.setObjectName( + "preCustomStep_verticalLayout_3") self.postCustomStep_listWidget = QtWidgets.QListWidget(self.groupBox) self.postCustomStep_listWidget.setDragDropOverwriteMode(True) - self.postCustomStep_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) - self.postCustomStep_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction) + self.postCustomStep_listWidget.setDragDropMode( + QtWidgets.QAbstractItemView.InternalMove) + self.postCustomStep_listWidget.setDefaultDropAction( + QtCore.Qt.MoveAction) self.postCustomStep_listWidget.setAlternatingRowColors(True) - self.postCustomStep_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - self.postCustomStep_listWidget.setViewMode(QtWidgets.QListView.ListMode) + self.postCustomStep_listWidget.setSelectionMode( + QtWidgets.QAbstractItemView.ExtendedSelection) + self.postCustomStep_listWidget.setViewMode( + QtWidgets.QListView.ListMode) self.postCustomStep_listWidget.setWordWrap(False) self.postCustomStep_listWidget.setSelectionRectVisible(False) - self.postCustomStep_listWidget.setObjectName("postCustomStep_listWidget") - self.preCustomStep_verticalLayout_3.addWidget(self.postCustomStep_listWidget) - self.preCustomStep_horizontalLayout_2.addLayout(self.preCustomStep_verticalLayout_3) + self.postCustomStep_listWidget.setObjectName( + "postCustomStep_listWidget") + self.preCustomStep_verticalLayout_3.addWidget( + self.postCustomStep_listWidget) + self.preCustomStep_horizontalLayout_2.addLayout( + self.preCustomStep_verticalLayout_3) self.preCustomStep_verticalLayout_4 = QtWidgets.QVBoxLayout() - self.preCustomStep_verticalLayout_4.setObjectName("preCustomStep_verticalLayout_4") - self.postCustomStepAdd_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepAdd_pushButton.setObjectName("postCustomStepAdd_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepAdd_pushButton) - self.postCustomStepNew_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepNew_pushButton.setObjectName("postCustomStepNew_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepNew_pushButton) - self.postCustomStepDuplicate_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepDuplicate_pushButton.setObjectName("postCustomStepDuplicate_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepDuplicate_pushButton) - self.postCustomStepRemove_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepRemove_pushButton.setObjectName("postCustomStepRemove_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepRemove_pushButton) - self.postCustomStepRun_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepRun_pushButton.setObjectName("postCustomStepRun_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepRun_pushButton) - self.postCustomStepEdit_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepEdit_pushButton.setObjectName("postCustomStepEdit_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepEdit_pushButton) - self.postCustomStepExport_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepExport_pushButton.setObjectName("postCustomStepExport_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepExport_pushButton) - self.postCustomStepImport_pushButton = QtWidgets.QPushButton(self.groupBox) - self.postCustomStepImport_pushButton.setObjectName("postCustomStepImport_pushButton") - self.preCustomStep_verticalLayout_4.addWidget(self.postCustomStepImport_pushButton) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.preCustomStep_verticalLayout_4.setObjectName( + "preCustomStep_verticalLayout_4") + self.postCustomStepAdd_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepAdd_pushButton.setObjectName( + "postCustomStepAdd_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepAdd_pushButton) + self.postCustomStepNew_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepNew_pushButton.setObjectName( + "postCustomStepNew_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepNew_pushButton) + self.postCustomStepDuplicate_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepDuplicate_pushButton.setObjectName( + "postCustomStepDuplicate_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepDuplicate_pushButton) + self.postCustomStepRemove_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepRemove_pushButton.setObjectName( + "postCustomStepRemove_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepRemove_pushButton) + self.postCustomStepRun_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepRun_pushButton.setObjectName( + "postCustomStepRun_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepRun_pushButton) + self.postCustomStepEdit_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepEdit_pushButton.setObjectName( + "postCustomStepEdit_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepEdit_pushButton) + self.postCustomStepExport_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepExport_pushButton.setObjectName( + "postCustomStepExport_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepExport_pushButton) + self.postCustomStepImport_pushButton = QtWidgets.QPushButton( + self.groupBox) + self.postCustomStepImport_pushButton.setObjectName( + "postCustomStepImport_pushButton") + self.preCustomStep_verticalLayout_4.addWidget( + self.postCustomStepImport_pushButton) + spacerItem2 = QtWidgets.QSpacerItem( + 20, 40, QtWidgets.QSizePolicy.Minimum, + QtWidgets.QSizePolicy.Expanding) self.preCustomStep_verticalLayout_4.addItem(spacerItem2) - self.preCustomStep_horizontalLayout_2.addLayout(self.preCustomStep_verticalLayout_4) + self.preCustomStep_horizontalLayout_2.addLayout( + self.preCustomStep_verticalLayout_4) self.verticalLayout_2.addLayout(self.preCustomStep_horizontalLayout_2) self.verticalLayout_3.addLayout(self.verticalLayout_2) self.gridLayout_2.addLayout(self.verticalLayout_3, 0, 0, 1, 1) @@ -159,23 +201,41 @@ def setupUi(self, Form): def retranslateUi(self, Form): Form.setWindowTitle(gqt.fakeTranslate("Form", "Form", None, -1)) - self.groupBox.setTitle(gqt.fakeTranslate("Form", "Custom Steps", None, -1)) - self.preCustomStep_checkBox.setText(gqt.fakeTranslate("Form", "Pre Custom Step", None, -1)) - self.preCustomStepAdd_pushButton.setText(gqt.fakeTranslate("Form", "Add", None, -1)) - self.preCustomStepNew_pushButton.setText(gqt.fakeTranslate("Form", "New", None, -1)) - self.preCustomStepDuplicate_pushButton.setText(gqt.fakeTranslate("Form", "Duplicate", None, -1)) - self.preCustomStepRemove_pushButton.setText(gqt.fakeTranslate("Form", "Remove", None, -1)) - self.preCustomStepRun_pushButton.setText(gqt.fakeTranslate("Form", "Run Sel.", None, -1)) - self.preCustomStepEdit_pushButton.setText(gqt.fakeTranslate("Form", "Edit", None, -1)) - self.preCustomStepExport_pushButton.setText(gqt.fakeTranslate("Form", "Export", None, -1)) - self.preCustomStepImport_pushButton.setText(gqt.fakeTranslate("Form", "Import", None, -1)) - self.postCustomStep_checkBox.setText(gqt.fakeTranslate("Form", "Post Custom Step", None, -1)) - self.postCustomStepAdd_pushButton.setText(gqt.fakeTranslate("Form", "Add", None, -1)) - self.postCustomStepNew_pushButton.setText(gqt.fakeTranslate("Form", "New", None, -1)) - self.postCustomStepDuplicate_pushButton.setText(gqt.fakeTranslate("Form", "Duplicate", None, -1)) - self.postCustomStepRemove_pushButton.setText(gqt.fakeTranslate("Form", "Remove", None, -1)) - self.postCustomStepRun_pushButton.setText(gqt.fakeTranslate("Form", "Run Sel.", None, -1)) - self.postCustomStepEdit_pushButton.setText(gqt.fakeTranslate("Form", "Edit", None, -1)) - self.postCustomStepExport_pushButton.setText(gqt.fakeTranslate("Form", "Export", None, -1)) - self.postCustomStepImport_pushButton.setText(gqt.fakeTranslate("Form", "Import", None, -1)) - + self.groupBox.setTitle(gqt.fakeTranslate( + "Form", "Custom Steps", None, -1)) + self.preCustomStep_checkBox.setText( + gqt.fakeTranslate("Form", "Pre Custom Step", None, -1)) + self.preCustomStepAdd_pushButton.setText( + gqt.fakeTranslate("Form", "Add", None, -1)) + self.preCustomStepNew_pushButton.setText( + gqt.fakeTranslate("Form", "New", None, -1)) + self.preCustomStepDuplicate_pushButton.setText( + gqt.fakeTranslate("Form", "Duplicate", None, -1)) + self.preCustomStepRemove_pushButton.setText( + gqt.fakeTranslate("Form", "Remove", None, -1)) + self.preCustomStepRun_pushButton.setText( + gqt.fakeTranslate("Form", "Run Sel.", None, -1)) + self.preCustomStepEdit_pushButton.setText( + gqt.fakeTranslate("Form", "Edit", None, -1)) + self.preCustomStepExport_pushButton.setText( + gqt.fakeTranslate("Form", "Export", None, -1)) + self.preCustomStepImport_pushButton.setText( + gqt.fakeTranslate("Form", "Import", None, -1)) + self.postCustomStep_checkBox.setText( + gqt.fakeTranslate("Form", "Post Custom Step", None, -1)) + self.postCustomStepAdd_pushButton.setText( + gqt.fakeTranslate("Form", "Add", None, -1)) + self.postCustomStepNew_pushButton.setText( + gqt.fakeTranslate("Form", "New", None, -1)) + self.postCustomStepDuplicate_pushButton.setText( + gqt.fakeTranslate("Form", "Duplicate", None, -1)) + self.postCustomStepRemove_pushButton.setText( + gqt.fakeTranslate("Form", "Remove", None, -1)) + self.postCustomStepRun_pushButton.setText( + gqt.fakeTranslate("Form", "Run Sel.", None, -1)) + self.postCustomStepEdit_pushButton.setText( + gqt.fakeTranslate("Form", "Edit", None, -1)) + self.postCustomStepExport_pushButton.setText( + gqt.fakeTranslate("Form", "Export", None, -1)) + self.postCustomStepImport_pushButton.setText( + gqt.fakeTranslate("Form", "Import", None, -1)) diff --git a/scripts/mgear/maya/shifter/customStepUI.ui b/scripts/mgear/maya/shifter/customStepUI.ui index bd8ca23..d4df848 100644 --- a/scripts/mgear/maya/shifter/customStepUI.ui +++ b/scripts/mgear/maya/shifter/customStepUI.ui @@ -6,8 +6,8 @@ 0 0 - 344 - 593 + 312 + 587
@@ -78,19 +78,6 @@
- - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/scripts/mgear/maya/shifter/gameTools.py b/scripts/mgear/maya/shifter/gameTools.py new file mode 100644 index 0000000..8563a09 --- /dev/null +++ b/scripts/mgear/maya/shifter/gameTools.py @@ -0,0 +1,355 @@ +import pymel.core as pm +import json +from functools import partial +import traceback +import os.path + +import mgear.maya.utils as mutils +import mgear.string as string + +import mgear.maya.shifter.gameToolsUI as gtUI + +from maya.app.general.mayaMixin import MayaQWidgetDockableMixin +import mgear.maya.pyqt as gqt +from mgear.vendor.Qt import QtCore, QtWidgets + + +@mutils.one_undo +def disconnect(cnxDict): + for i, jnt in enumerate(cnxDict["joints"]): + # we don't need to disconnect blended joint since the connection is + # from other joints + if not jnt.startswith("blend_"): + oJnt = pm.PyNode(jnt) + + for e, plug in enumerate([oJnt.translate, oJnt.rotate, oJnt.scale, + oJnt.scale.scaleX, oJnt.scale.scaleY, + oJnt.scale.scaleZ, oJnt.shear]): + if cnxDict["attrs"][i][e]: + pm.disconnectAttr(cnxDict["attrs"][i][e], plug) + if cnxDict["attrs"][i][7]: + pm.disconnectAttr( + oJnt.parentInverseMatrix[0], cnxDict["attrs"][i][7]) + + +def connect(cnxDict, nsRig=None, nsSkin=None): + for i, jnt in enumerate(cnxDict["joints"]): + try: + if nsSkin: + oJnt = pm.PyNode(nsSkin + ":" + jnt) + else: + oJnt = pm.PyNode(jnt) + for e, plug in enumerate([oJnt.translate, oJnt.rotate, oJnt.scale, + oJnt.scale.scaleX, oJnt.scale.scaleY, + oJnt.scale.scaleZ, oJnt.shear]): + if cnxDict["attrs"][i][e]: + if nsRig: + pm.connectAttr( + nsRig + ":" + cnxDict["attrs"][i][e], plug, f=True) + else: + pm.connectAttr(cnxDict["attrs"][i][e], plug, f=True) + + if cnxDict["attrs"][i][7]: + if nsRig: + pm.connectAttr( + oJnt.parentInverseMatrix[0], nsRig + ":" + + cnxDict["attrs"][i][7], f=True) + else: + pm.connectAttr( + oJnt.parentInverseMatrix[0], + cnxDict["attrs"][i][7], + f=True) + + except Exception: + pm.displayError("{} is not found in the scene".format(jnt)) + + +def connectCns(cnxDict, nsRig=None, nsSkin=None): + for i, jnt in enumerate(cnxDict["joints"]): + if nsSkin: + oJnt = pm.PyNode(nsSkin + ":" + jnt) + else: + oJnt = pm.PyNode(jnt) + + if cnxDict["attrs"][i][0]: + if nsRig: + oAttr = pm.PyNode(nsRig + ":" + cnxDict["attrs"][i][0]) + else: + oAttr = pm.PyNode(cnxDict["attrs"][i][0]) + + oNode = oAttr.node() + oTrans = pm.listConnections( + pm.listConnections(oNode.inputMatrix)[0].matrixIn[0]) + pm.parentConstraint(oTrans, oJnt, mo=True) + pm.scaleConstraint(oTrans, oJnt, mo=True) + + +def exportConnections(source=None, filePath=None, disc=False): + connections = {} + connections["joints"] = [] + connections["attrs"] = [] + if not source: + source = pm.selected() + for x in source: + if not x.name().startswith("blend_"): + connections["joints"].append(x.name()) + trans_attr = pm.listConnections( + x.translate, p=True, type="decomposeMatrix") + rot_attr = pm.listConnections( + x.rotate, p=True, type="decomposeMatrix") + scl_attr = pm.listConnections( + x.scale, p=True, type="decomposeMatrix") + sclX_attr = pm.listConnections( + x.scale.scaleX, p=True, type="decomposeMatrix") + sclY_attr = pm.listConnections( + x.scale.scaleY, p=True, type="decomposeMatrix") + sclZ_attr = pm.listConnections( + x.scale.scaleZ, p=True, type="decomposeMatrix") + shear_attr = pm.listConnections( + x.shear, p=True, type="decomposeMatrix") + parentInv_attr = pm.listConnections( + x.parentInverseMatrix[0], d=True, p=True) + + attrs_list = [trans_attr, rot_attr, scl_attr, sclX_attr, + sclY_attr, sclZ_attr, shear_attr, parentInv_attr] + attrs_list_checked = [] + for at in attrs_list: + if at: + attrs_list_checked.append(at[0].name()) + else: + attrs_list_checked.append(None) + + connections["attrs"].append(attrs_list_checked) + + data_string = json.dumps(connections, indent=4, sort_keys=True) + if not filePath: + filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, + fileFilter=' Shifter joint cnx maya matrix' + ' .jmm (*%s)' % ".jmm") + if not filePath: + return + if not isinstance(filePath, basestring): + filePath = filePath[0] + + if os.path.isfile(filePath) and connections["joints"]: + with open(filePath, 'w') as f: + f.write(data_string) + + if disc: + disconnect(connections) + + +def importConnections(filePath=None, nsRig=None, nsSkin=None, useMtx=True): + if not filePath: + startDir = pm.workspace(q=True, rootDirectory=True) + filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, + startingDirectory=startDir, + fileFilter=' Shifter joint cnx maya matrix ' + ' .jmm (*%s)' % ".jmm") + if not filePath: + return + if not isinstance(filePath, basestring): + filePath = filePath[0] + with open(filePath) as fp: + configDict = json.load(fp) + + if useMtx: + connect(configDict, nsRig=nsRig, nsSkin=nsSkin) + else: + connectCns(configDict, nsRig=nsRig, nsSkin=nsSkin) + + +def getRigTopNode(node=None): + if not node and pm.selected(): + node = pm.selected()[0] + if not node.hasAttr("is_rig"): + pm.displayWarning( + "Please select a valid rig top node!. '{}' " + "is not a rig top node".format(node.name())) + return False + return node.name() + else: + pm.displayWarning("Please select a rig top node!") + return False + + +def runScript(path=None): + if path: + execfile(path) + + +@mutils.one_undo +def exportAssetAssembly(name, rigTopNode, meshTopNode, path, postScript=None): + if pm.ls(rigTopNode): + rigTopNode = pm.PyNode(rigTopNode) + else: + pm.displayError( + "{} doesn't exist or duplicated. Please check your " + "scene".format(rigTopNode)) + return + + if pm.ls(meshTopNode): + meshTopNode = pm.PyNode(meshTopNode) + else: + pm.displayError( + "{} doesn't exist or duplicated. Please check " + "your scene".format(meshTopNode)) + return + # check the folder and script + # if the target name exist abort and request another name + + deformer_jnts = rigTopNode.rigGroups[3].connections()[0].members() + if not deformer_jnts: + pm.displayError( + "{} is empty. The tool can't find any joint".format(meshTopNode)) + + # export connections and cut joint connections + + # cut al possible remaining connection and adjust hierarchy + + # pot script + if postScript: + try: + execfile(postScript) + except Exception as ex: + template = "An exception of type {0} occured. Arguments:\n{1!r}" + message = template.format(type(ex).__name__, ex.args) + pm.displayError(message) + cont = pm.confirmBox("FAIL: Script Fail", + "Do you want to export anyway?" + "\n\n" + + message + "\n\n" + traceback.format_exc(), + "Continue", "Cancel") + if not cont: + pm.undo() + return + + # export rig model + + # export mesh and joints + + +def _importAssetAssembly(paht=None, reference=False): + return + + +def importAssetAssembly(path=None): + return + + +def referenceAssetAssembly(path=None): + return + + +#################################### +# Soft tweaks Manager dialog +#################################### + +class gameToolsUI(QtWidgets.QDialog, gtUI.Ui_gameTools): + + def __init__(self, parent=None): + super(gameToolsUI, self).__init__(parent) + self.setupUi(self) + + +class gameTools(MayaQWidgetDockableMixin, QtWidgets.QDialog): + + def __init__(self, parent=None): + self.toolName = "shifterGameTools" + super(self.__class__, self).__init__(parent=parent) + self.gtUIInst = gameToolsUI() + + self.startDir = pm.workspace(q=True, rootDirectory=True) + + self.gameTools_window() + self.gameTools_layout() + self.createConnections() + + self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) + + def gameTools_window(self): + + self.setObjectName(self.toolName) + self.setWindowFlags(QtCore.Qt.Window) + self.setWindowTitle("Shifter Game Tools") + self.resize(300, 330) + + def gameTools_layout(self): + + self.gt_layout = QtWidgets.QVBoxLayout() + self.gt_layout.addWidget(self.gtUIInst) + + self.setLayout(self.gt_layout) + + # Slots + @staticmethod + def _validCharacters(lEdit): + name = string.removeInvalidCharacter(lEdit.text()) + lEdit.setText(name) + + def populateRigTopNode(self): + topNode = getRigTopNode() + if topNode: + self.gtUIInst.rigNode_lineEdit.setText(topNode) + + def populateMeshTopNode(self): + if pm.selected(): + node = pm.selected()[0] + self.gtUIInst.meshNode_lineEdit.setText(node.name()) + else: + pm.displayWarning("Please select a Mesh top node!") + return False + + def populateOutputFolder(self): + filePath = pm.fileDialog2(dialogStyle=2, fileMode=2, + startingDirectory=self.startDir, + fileFilter=' Shifter Game Assembly folder') + if not filePath: + return + if not isinstance(filePath, basestring): + filePath = filePath[0] + self.gtUIInst.path_lineEdit.setText(filePath) + + def populateScript(self): + filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, + startingDirectory=self.startDir, + fileFilter=' Post Script .py (*%s)' % ".py") + if not filePath: + return + if not isinstance(filePath, basestring): + filePath = filePath[0] + self.gtUIInst.script_lineEdit.setText(filePath) + + def disconnectExport(self): + name = self.gtUIInst.assetName_lineEdit.text() + rigTopNode = self.gtUIInst.rigNode_lineEdit.text() + meshTopNode = self.gtUIInst.meshNode_lineEdit.text() + path = self.gtUIInst.path_lineEdit.text() + postScript = self.gtUIInst.script_lineEdit.text() + + if name and rigTopNode and meshTopNode and path: + exportAssetAssembly( + name, rigTopNode, meshTopNode, path, postScript) + else: + pm.displayWarning( + "Name, Rig Top Node, Mesh Top Node and path " + "are mandatory fields. Please check it.") + + # Connect slots + def createConnections(self): + self.gtUIInst.assetName_lineEdit.editingFinished.connect( + partial(gameTools._validCharacters, + self.gtUIInst.assetName_lineEdit)) + self.gtUIInst.rigNode_pushButton.clicked.connect( + self.populateRigTopNode) + self.gtUIInst.meshNode_pushButton.clicked.connect( + self.populateMeshTopNode) + self.gtUIInst.path_pushButton.clicked.connect( + self.populateOutputFolder) + self.gtUIInst.script_pushButton.clicked.connect(self.populateScript) + self.gtUIInst.disconnectExport_pushButton.clicked.connect( + self.disconnectExport) + + +if __name__ == "__main__": + + gqt.showDialog(gameTools) diff --git a/scripts/mgear/maya/shifter/gameToolsUI.py b/scripts/mgear/maya/shifter/gameToolsUI.py new file mode 100644 index 0000000..dcf25a4 --- /dev/null +++ b/scripts/mgear/maya/shifter/gameToolsUI.py @@ -0,0 +1,110 @@ + +from mgear.vendor.Qt import QtCore, QtWidgets + + +class Ui_gameTools(object): + + def setupUi(self, gameTools): + gameTools.setObjectName("gameTools") + gameTools.resize(284, 332) + self.gridLayout_4 = QtWidgets.QGridLayout(gameTools) + self.gridLayout_4.setObjectName("gridLayout_4") + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.gameTools_groupBox = QtWidgets.QGroupBox(gameTools) + self.gameTools_groupBox.setObjectName("gameTools_groupBox") + self.gridLayout_2 = QtWidgets.QGridLayout(self.gameTools_groupBox) + self.gridLayout_2.setObjectName("gridLayout_2") + self.assetName_frame = QtWidgets.QFrame(self.gameTools_groupBox) + self.assetName_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.assetName_frame.setFrameShadow(QtWidgets.QFrame.Raised) + self.assetName_frame.setObjectName("assetName_frame") + self.gridLayout = QtWidgets.QGridLayout(self.assetName_frame) + self.gridLayout.setObjectName("gridLayout") + self.assetName_lineEdit = QtWidgets.QLineEdit(self.assetName_frame) + self.assetName_lineEdit.setObjectName("assetName_lineEdit") + self.gridLayout.addWidget(self.assetName_lineEdit, 0, 2, 1, 1) + self.assetName_label = QtWidgets.QLabel(self.assetName_frame) + self.assetName_label.setObjectName("assetName_label") + self.gridLayout.addWidget(self.assetName_label, 0, 1, 1, 1) + self.gridLayout_2.addWidget(self.assetName_frame, 0, 0, 1, 2) + self.rigNode_lineEdit = QtWidgets.QLineEdit(self.gameTools_groupBox) + self.rigNode_lineEdit.setObjectName("rigNode_lineEdit") + self.gridLayout_2.addWidget(self.rigNode_lineEdit, 1, 0, 1, 1) + self.rigNode_pushButton = QtWidgets.QPushButton( + self.gameTools_groupBox) + self.rigNode_pushButton.setObjectName("rigNode_pushButton") + self.gridLayout_2.addWidget(self.rigNode_pushButton, 1, 1, 1, 1) + self.meshNode_lineEdit = QtWidgets.QLineEdit(self.gameTools_groupBox) + self.meshNode_lineEdit.setObjectName("meshNode_lineEdit") + self.gridLayout_2.addWidget(self.meshNode_lineEdit, 2, 0, 1, 1) + self.meshNode_pushButton = QtWidgets.QPushButton( + self.gameTools_groupBox) + self.meshNode_pushButton.setObjectName("meshNode_pushButton") + self.gridLayout_2.addWidget(self.meshNode_pushButton, 2, 1, 1, 1) + self.path_lineEdit = QtWidgets.QLineEdit(self.gameTools_groupBox) + self.path_lineEdit.setObjectName("path_lineEdit") + self.gridLayout_2.addWidget(self.path_lineEdit, 3, 0, 1, 1) + self.path_pushButton = QtWidgets.QPushButton(self.gameTools_groupBox) + self.path_pushButton.setObjectName("path_pushButton") + self.gridLayout_2.addWidget(self.path_pushButton, 3, 1, 1, 1) + self.script_lineEdit = QtWidgets.QLineEdit(self.gameTools_groupBox) + self.script_lineEdit.setObjectName("script_lineEdit") + self.gridLayout_2.addWidget(self.script_lineEdit, 4, 0, 1, 1) + self.script_pushButton = QtWidgets.QPushButton(self.gameTools_groupBox) + self.script_pushButton.setObjectName("script_pushButton") + self.gridLayout_2.addWidget(self.script_pushButton, 4, 1, 1, 1) + self.disconnectExport_pushButton = QtWidgets.QPushButton( + self.gameTools_groupBox) + self.disconnectExport_pushButton.setObjectName( + "disconnectExport_pushButton") + self.gridLayout_2.addWidget( + self.disconnectExport_pushButton, 5, 0, 1, 2) + self.verticalLayout.addWidget(self.gameTools_groupBox) + self.assembly_groupBox = QtWidgets.QGroupBox(gameTools) + self.assembly_groupBox.setObjectName("assembly_groupBox") + self.gridLayout_3 = QtWidgets.QGridLayout(self.assembly_groupBox) + self.gridLayout_3.setObjectName("gridLayout_3") + self.importConnect_pushButton = QtWidgets.QPushButton( + self.assembly_groupBox) + self.importConnect_pushButton.setObjectName("importConnect_pushButton") + self.gridLayout_3.addWidget(self.importConnect_pushButton, 0, 0, 1, 1) + self.referenceConnect_pushButton = QtWidgets.QPushButton( + self.assembly_groupBox) + self.referenceConnect_pushButton.setObjectName( + "referenceConnect_pushButton") + self.gridLayout_3.addWidget( + self.referenceConnect_pushButton, 1, 0, 1, 1) + self.verticalLayout.addWidget(self.assembly_groupBox) + self.gridLayout_4.addLayout(self.verticalLayout, 0, 0, 1, 1) + + self.retranslateUi(gameTools) + QtCore.QMetaObject.connectSlotsByName(gameTools) + + def retranslateUi(self, gameTools): + gameTools.setWindowTitle(QtWidgets.QApplication.translate( + "gameTools", "SHIFTER Game Tools", None, -1)) + self.gameTools_groupBox.setTitle( + QtWidgets.QApplication.translate("gameTools", "EXPORT", None, -1)) + self.assetName_label.setText(QtWidgets.QApplication.translate( + "gameTools", "Asset Name", None, -1)) + self.rigNode_pushButton.setText(QtWidgets.QApplication.translate( + "gameTools", "<<< Rig Top Node", None, -1)) + self.meshNode_pushButton.setText(QtWidgets.QApplication.translate( + "gameTools", "<<< Mesh Top Node", None, -1)) + self.path_pushButton.setText(QtWidgets.QApplication.translate( + "gameTools", "set Output Folder", None, -1)) + self.script_pushButton.setText(QtWidgets.QApplication.translate( + "gameTools", "set Custom Script", None, -1)) + self.disconnectExport_pushButton.setText( + QtWidgets.QApplication.translate( + "gameTools", "Disconnect and Export", None, -1)) + self.assembly_groupBox.setTitle( + QtWidgets.QApplication.translate( + "gameTools", "ASSEMBLY", None, -1)) + self.importConnect_pushButton.setText( + QtWidgets.QApplication.translate( + "gameTools", "Import and Connect", None, -1)) + self.referenceConnect_pushButton.setText( + QtWidgets.QApplication.translate( + "gameTools", "Reference and Connect", None, -1)) diff --git a/scripts/mgear/maya/shifter/gameToolsUI.ui b/scripts/mgear/maya/shifter/gameToolsUI.ui new file mode 100644 index 0000000..10bc3a7 --- /dev/null +++ b/scripts/mgear/maya/shifter/gameToolsUI.ui @@ -0,0 +1,126 @@ + + + gameTools + + + + 0 + 0 + 284 + 332 + + + + SHIFTER Game Tools + + + + + + + + EXPORT + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + Asset Name + + + + + + + + + + + + + <<< Rig Top Node + + + + + + + + + + <<< Mesh Top Node + + + + + + + + + + set Output Folder + + + + + + + + + + set Custom Script + + + + + + + Disconnect and Export + + + + + + + + + + ASSEMBLY + + + + + + Import and Connect + + + + + + + Reference and Connect + + + + + + + + + + + + + diff --git a/scripts/mgear/maya/shifter/gui.py b/scripts/mgear/maya/shifter/gui.py index 52cb2d9..05f7184 100644 --- a/scripts/mgear/maya/shifter/gui.py +++ b/scripts/mgear/maya/shifter/gui.py @@ -1,33 +1,3 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -########################################################## -# GLOBAL -########################################################## -# Built-in import os from functools import partial @@ -37,9 +7,7 @@ # mgear import mgear -import mgear.maya.shifter as shifter -import mgear.maya.skin as skin -import mgear.maya.pyqt as gqt +from mgear.maya import shifter, skin, pyqt, utils GUIDE_UI_WINDOW_NAME = "guide_UI_window" GUIDE_DOCK_NAME = "Guide_Components" @@ -57,8 +25,7 @@ def __init__(self): print "deleting win" pm.deleteUI(GUIDE_UI_WINDOW_NAME) - - if pm.dockControl( GUIDE_DOCK_NAME, exists=True): + if pm.dockControl(GUIDE_DOCK_NAME, exists=True): print "deleting dock" pm.deleteUI(GUIDE_DOCK_NAME) @@ -66,31 +33,50 @@ def __init__(self): scrollHight = 600 # Create Window and main tab - self.ui_window = pm.window(GUIDE_UI_WINDOW_NAME, width=panelWeight, title="Guide Tools", sizeable=True) - self.ui_topLevelColumn = pm.columnLayout(adjustableColumn=True, columnAlign="center") + self.ui_window = pm.window( + GUIDE_UI_WINDOW_NAME, width=panelWeight, title="Guide Tools", + sizeable=True) + self.ui_topLevelColumn = pm.columnLayout( + adjustableColumn=True, columnAlign="center") # pm.columnLayout() - pm.rowLayout( numberOfColumns=1, columnWidth=[(1, panelWeight)] ) - pm.button(label="Settings", w=panelWeight, h=30, bgc=[.042, .351, .615], command=partial(self.inspectSettings) ) - pm.setParent( '..' ) - pm.rowLayout( numberOfColumns=3, columnWidth=[(1, (panelWeight/3)-1), (2, (panelWeight/3)-1), (3, (panelWeight/3)-1)] ) - pm.button(label="Dupl.", w=(panelWeight/3)-1, h=23, bgc=[.311, .635, 0], command=partial(self.duplicate, False) ) - pm.button(label="Dupl. Sym", w=(panelWeight/3)-1, h=23, bgc=[.465, .785, .159], command=partial(self.duplicate, True) ) - pm.button(label="Extr. Ctl", w=(panelWeight/3)-1, h=23, bgc=[.835, .792, .042], command=partial(self.extractControls) ) - pm.setParent( '..' ) - pm.rowLayout( numberOfColumns=1, columnWidth=[(1, panelWeight)] ) - pm.button(label="Build from selection", w=panelWeight, h=30, bgc=[.912, .427, .176], command=partial(self.buildFromSelection) ) - pm.setParent( '..' ) - - self.ui_tabs = pm.tabLayout(width=panelWeight, innerMarginWidth=5, innerMarginHeight=5) + pm.rowLayout(numberOfColumns=1, columnWidth=[(1, panelWeight)]) + pm.button(label="Settings", w=panelWeight, h=30, + bgc=[.042, .351, .615], + command=partial(self.inspectSettings)) + pm.setParent('..') + pm.rowLayout(numberOfColumns=3, columnWidth=[ + (1, (panelWeight / 3) - 1), + (2, (panelWeight / 3) - 1), + (3, (panelWeight / 3) - 1)]) + pm.button(label="Dupl.", w=(panelWeight / 3) - 1, h=23, + bgc=[.311, .635, 0], command=partial(self.duplicate, False)) + pm.button(label="Dupl. Sym", w=(panelWeight / 3) - 1, h=23, + bgc=[.465, .785, .159], + command=partial(self.duplicate, True)) + pm.button(label="Extr. Ctl", w=(panelWeight / 3) - 1, h=23, + bgc=[.835, .792, .042], + command=partial(self.extractControls)) + pm.setParent('..') + pm.rowLayout(numberOfColumns=1, columnWidth=[(1, panelWeight)]) + pm.button(label="Build from selection", w=panelWeight, h=30, + bgc=[.912, .427, .176], + command=partial(self.buildFromSelection)) + pm.setParent('..') + + self.ui_tabs = pm.tabLayout( + width=panelWeight, innerMarginWidth=5, innerMarginHeight=5) pm.tabLayout(self.ui_tabs, q=True, width=True) # self.ui_compColumn = pm.columnLayout(adj=True, rs=3) - self.ui_compFrameLayout = pm.frameLayout(height=scrollHight, collapsable=False, borderVisible=False, labelVisible=False) + self.ui_compFrameLayout = pm.frameLayout( + height=scrollHight, collapsable=False, borderVisible=False, + labelVisible=False) self.ui_compList_Scroll = pm.scrollLayout(hst=0) - self.ui_compList_column = pm.columnLayout(columnWidth=panelWeight, adj=True, rs=2) + self.ui_compList_column = pm.columnLayout( + columnWidth=panelWeight, adj=True, rs=2) pm.separator() # List of components @@ -103,42 +89,58 @@ def __init__(self): pm.separator() for comp_name in comps: - if comp_name in trackLoadComponent: - pm.displayWarning("Custom component name: %s, already in default components. Names should be unique. This component is not loaded"%comp_name) + if comp_name in trackLoadComponent: + pm.displayWarning( + "Custom component name: %s, already in default " + "components. Names should be unique. This component is" + " not loaded" % comp_name) continue else: trackLoadComponent.append(comp_name) - if not os.path.exists(os.path.join(path, comp_name, "__init__.py")): + if not os.path.exists(os.path.join(path, + comp_name, "__init__.py")): continue - # module = __import__("mgear.maya.rig.component."+comp_name, globals(), locals(), ["*"], -1) module = shifter.importComponentGuide(comp_name) - # print module - # print dir(module) + reload(module) image = os.path.join(path, comp_name, "icon.jpg") buttonSize = 25 - textDesc = "Name: "+module.NAME+"\nType:: "+module.TYPE+"\n===========\nAuthor: "+module.AUTHOR+"\nWeb: "+module.URL+\ - "\nEmail: "+module.EMAIL+"\n===========\nDescription:\n"+module.DESCRIPTION - - pm.rowLayout(numberOfColumns=2, columnWidth=([1, buttonSize]), adjustableColumn=2, columnAttach=([1, "both", 0], [2, "both", 5])) - pm.symbolButton(ann=textDesc, width=buttonSize, height=buttonSize, bgc=[0,0,0], ebg=False, i=image, command=partial(self.drawComp, module.TYPE)) + textDesc = "Name: " + module.NAME + "\nType:: " + \ + module.TYPE + "\n===========\nAuthor: " + \ + module.AUTHOR + "\nWeb: " + module.URL + \ + "\nEmail: " + module.EMAIL + \ + "\n===========\nDescription:\n" + module.DESCRIPTION + + pm.rowLayout(numberOfColumns=2, + columnWidth=([1, buttonSize]), + adjustableColumn=2, + columnAttach=([1, "both", 0], [2, "both", 5])) + pm.symbolButton(ann=textDesc, + width=buttonSize, + height=buttonSize, + bgc=[0, 0, 0], + ebg=False, i=image, + command=partial(self.drawComp, module.TYPE)) pm.columnLayout(columnAlign="center") - pm.text(align="center", width=panelWeight*.6, label=module.TYPE, ann=textDesc, fn="plainLabelFont") + pm.text(align="center", width=panelWeight * .6, + label=module.TYPE, ann=textDesc, fn="plainLabelFont") pm.setParent(self.ui_compList_column) pm.separator() # Display the window - pm.tabLayout(self.ui_tabs, edit=True, tabLabelIndex=([1, "Components"])) + pm.tabLayout(self.ui_tabs, edit=True, + tabLabelIndex=([1, "Components"])) allowedAreas = ['right', 'left'] - pm.dockControl( GUIDE_DOCK_NAME, area='right', content=self.ui_window, allowedArea=allowedAreas, width=panelWeight , s=True) + pm.dockControl(GUIDE_DOCK_NAME, area='right', content=self.ui_window, + allowedArea=allowedAreas, width=panelWeight, s=True) def drawComp(self, compType, *args): - guide = shifter.RigGuide() + guide = shifter.guide.Rig() if pm.selected(): parent = pm.selected()[0] @@ -147,21 +149,32 @@ def drawComp(self, compType, *args): guide.drawNewComponent(parent, compType) - + # @utils.one_undo + @classmethod def buildFromSelection(self, *args): - print mgear.logInfos() + logWin = pm.window(title="Shifter Build Log", iconName='Shifter Log') + pm.columnLayout(adjustableColumn=True) + pm.cmdScrollFieldReporter(width=800, height=500, clr=True) + pm.button(label='Close', command=( + 'import pymel.core as pm\npm.deleteUI(\"' + logWin + + '\", window=True)')) + pm.setParent('..') + pm.showWindow(logWin) + mgear.logInfos() rg = shifter.Rig() rg.buildFromSelection() + @classmethod def duplicate(self, sym, *args): oSel = pm.selected() if oSel: root = oSel[0] - guide = shifter.RigGuide() + guide = shifter.guide.Rig() guide.duplicate(root, sym) else: - mgear.log("Select one component root to edit properties", mgear.sev_error) + mgear.log("Select one component root to edit properties", + mgear.sev_error) return @classmethod @@ -171,7 +184,8 @@ def inspectSettings(self, *args): if oSel: root = oSel[0] else: - pm.displayWarning("please select one object from the componenet guide") + pm.displayWarning( + "please select one object from the componenet guide") return comp_type = False @@ -186,29 +200,28 @@ def inspectSettings(self, *args): root = root.getParent() pm.select(root) - if comp_type: guide = shifter.importComponentGuide(comp_type) - gqt.showDialog(guide.componentSettings) + pyqt.showDialog(guide.componentSettings) elif guide_root: module_name = "mgear.maya.shifter.guide" guide = __import__(module_name, globals(), locals(), ["*"], -1) - gqt.showDialog(guide.guideSettings) - + pyqt.showDialog(guide.guideSettings) else: - pm.displayError("The selected object is not part of component guide") + pm.displayError( + "The selected object is not part of component guide") @classmethod def inspectProperties(self, *args): modeSet = ["FK", "IK", "IK/FK"] - rotOrderSet = ["XYZ","YZX", "ZXY", "XZY", "YXZ", "ZYX"] + rotOrderSet = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"] guideModeSet = ["Final", "WIP"] # apply changes - def applyCloseGuide( root, *args): + def applyCloseGuide(root, *args): if pm.attributeQuery("mode", node=root, ex=True): root.attr("mode").set(guideModeSet.index(pMode.getValue())) pm.select(root, r=True) @@ -217,8 +230,11 @@ def applyCloseGuide( root, *args): def skinLoad(root, *args): startDir = root.attr("skin").get() - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, - fileFilter='mGear skin (*%s)' % skin.FILE_EXT) + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + fileFilter='mGear skin (*%s)' % skin.FILE_EXT) if not filePath: return if not isinstance(filePath, basestring): @@ -226,16 +242,17 @@ def skinLoad(root, *args): root.attr("skin").set(filePath) - def applyCloseComp( root, *args): + def applyCloseComp(root, *args): newName = pName.getText() newSide = pSide.getValue() newIndex = pIndex.getValue1() if pm.attributeQuery("mode", node=root, ex=True): root.attr("mode").set(modeSet.index(pMode.getValue())) if pm.attributeQuery("default_rotorder", node=root, ex=True): - root.attr("default_rotorder").set(rotOrderSet.index(pRotOrder.getValue())) + root.attr("default_rotorder").set( + rotOrderSet.index(pRotOrder.getValue())) - guide = shifter.RigGuide() + guide = shifter.guide.Rig() guide.updateProperties(root, newName, newSide, newIndex) pm.select(root, r=True) @@ -244,58 +261,58 @@ def applyCloseComp( root, *args): if pm.window("compProperties", exists=True): pm.deleteUI("compProperties") - oSel = pm.selected() if oSel: root = oSel[0] else: - mgear.log("Select one root Guide or component to edit properties", mgear.sev_error) + mgear.log( + "Select one root Guide or component to edit properties", + mgear.sev_error) return - if pm.attributeQuery("comp_type", node=root, ex=True): - #property window constructor - customAttr = pm.listAttr( root, ud=True) + # property window constructor + customAttr = pm.listAttr(root, ud=True) - window = pm.window( title=root.name() ) - pm.columnLayout( adjustableColumn=True, cal="right" ) + window = pm.window(title=root.name()) + pm.columnLayout(adjustableColumn=True, cal="right") for attr in customAttr: if attr == "comp_name": fl = pm.formLayout() oriVal = root.attr("comp_name").get() - pName = pm.textFieldGrp(l="comp_name") - pm.setParent( '..' ) + pName = pm.textFieldGrp(label="comp_name") + pm.setParent('..') pm.formLayout(fl, e=True, af=(pName, "left", 0)) pName.setText(oriVal) elif attr == "comp_side": sideSet = ["C", "L", "R"] fl = pm.formLayout() - pSide = pm.optionMenu(l="comp_side") + pSide = pm.optionMenu(label="comp_side") pSide.addMenuItems(sideSet) pSide.setWidth(120) - pm.setParent( '..' ) + pm.setParent('..') pm.formLayout(fl, e=1, af=(pSide, "left", 90)) oriVal = root.attr("comp_side").get() - pSide.setValue(oriVal ) + pSide.setValue(oriVal) elif attr == "mode": fl = pm.formLayout() - pMode = pm.optionMenu(l="mode") + pMode = pm.optionMenu(label="mode") pMode.addMenuItems(modeSet) pMode.setWidth(120) - pm.setParent( '..' ) + pm.setParent('..') pm.formLayout(fl, e=1, af=(pMode, "left", 115)) oriVal = root.attr("mode").get() pMode.setValue(modeSet[oriVal]) elif attr == "default_rotorder": fl = pm.formLayout() - pRotOrder = pm.optionMenu(l="default_rotorder") + pRotOrder = pm.optionMenu(label="default_rotorder") pRotOrder.addMenuItems(rotOrderSet) pRotOrder.setWidth(140) - pm.setParent( '..' ) + pm.setParent('..') pm.formLayout(fl, e=1, af=(pRotOrder, "left", 60)) oriVal = root.attr("default_rotorder").get() pRotOrder.setValue(rotOrderSet[oriVal]) @@ -303,57 +320,63 @@ def applyCloseComp( root, *args): elif attr == "comp_index": fl = pm.formLayout() oriVal = root.attr("comp_index").get() - pIndex = pm.intFieldGrp(v1=oriVal, l="comp_index") - pm.setParent( '..' ) + pIndex = pm.intFieldGrp(v1=oriVal, label="comp_index") + pm.setParent('..') pm.formLayout(fl, e=True, af=(pIndex, "left", 0)) else: editable = True if attr == "comp_type": editable = False - pm.columnLayout( cal="right" ) - pm.attrControlGrp( attribute= root.attr(attr), po=True, en=editable) - pm.setParent( '..' ) + pm.columnLayout(cal="right") + pm.attrControlGrp(attribute=root.attr( + attr), po=True, en=editable) + pm.setParent('..') - pm.button( label='Apply', command=partial(applyCloseComp, root), h=100) - pm.setParent( '..' ) - pm.showWindow( window ) + pm.button(label='Apply', command=partial( + applyCloseComp, root), h=100) + pm.setParent('..') + pm.showWindow(window) elif pm.attributeQuery("ismodel", node=root, ex=True): - #property window constructor - customAttr = pm.listAttr( root, ud=True) + # property window constructor + customAttr = pm.listAttr(root, ud=True) - window = pm.window( title=root.name() ) - pm.columnLayout( adjustableColumn=True, cal="right" ) + window = pm.window(title=root.name()) + pm.columnLayout(adjustableColumn=True, cal="right") for attr in customAttr: if attr.split("_")[-1] not in ["r", "g", "b"]: if attr == "mode": fl = pm.formLayout() - pMode = pm.optionMenu(l="mode") + pMode = pm.optionMenu(label="mode") pMode.addMenuItems(guideModeSet) pMode.setWidth(120) - pm.setParent( '..' ) + pm.setParent('..') pm.formLayout(fl, e=1, af=(pMode, "left", 115)) oriVal = root.attr("mode").get() pMode.setValue(guideModeSet[oriVal]) elif attr == "skin": - pm.columnLayout( cal="right" ) - pm.attrControlGrp( attribute= root.attr(attr), po=True) - pm.setParent( '..' ) - pm.button( label='Load Skin ', command=partial(skinLoad, root)) + pm.columnLayout(cal="right") + pm.attrControlGrp(attribute=root.attr(attr), po=True) + pm.setParent('..') + pm.button(label='Load Skin ', + command=partial(skinLoad, root)) else: - pm.columnLayout( cal="right" ) - pm.attrControlGrp( attribute= root.attr(attr), po=True) - pm.setParent( '..' ) + pm.columnLayout(cal="right") + pm.attrControlGrp(attribute=root.attr(attr), po=True) + pm.setParent('..') - pm.button( label='Apply', command=partial(applyCloseGuide, root ), h=50) - pm.setParent( '..' ) - pm.showWindow( window ) + pm.button(label='Apply', command=partial( + applyCloseGuide, root), h=50) + pm.setParent('..') + pm.showWindow(window) else: - mgear.log("Select a root Guide or component to edit properties", mgear.sev_error) + mgear.log( + "Select a root Guide or component to edit properties", + mgear.sev_error) return def extractControls(self, *args): @@ -362,21 +385,24 @@ def extractControls(self, *args): try: cGrp = pm.PyNode("controllers_org") - except: + except TypeError: cGrp = False - mgear.log("Not controller group in the scene or the group is not unique", mgear.sev_error ) + mgear.log( + "Not controller group in the scene or the group is not unique", + mgear.sev_error) for x in oSel: try: - old = pm.PyNode(cGrp.name() + "|" + x.name().split("|")[-1] +"_controlBuffer") + old = pm.PyNode(cGrp.name() + "|" + + x.name().split("|")[-1] + "_controlBuffer") pm.delete(old) - except: + except TypeError: pass new = pm.duplicate(x)[0] pm.parent(new, cGrp, a=True) - pm.rename(new, x.name() +"_controlBuffer") + pm.rename(new, x.name() + "_controlBuffer") toDel = new.getChildren(type="transform") pm.delete(toDel) try: - pm.sets( "rig_controllers_grp", remove=new ) - except: + pm.sets("rig_controllers_grp", remove=new) + except TypeError: pass diff --git a/scripts/mgear/maya/shifter/guide.py b/scripts/mgear/maya/shifter/guide.py index dddc27d..a5c4c9a 100644 --- a/scripts/mgear/maya/shifter/guide.py +++ b/scripts/mgear/maya/shifter/guide.py @@ -1,70 +1,31 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Shifter's MainGuide class and RigGuide class. -""" - -########################################################## -# GLOBAL -########################################################## # Built-in import os -import shutil import sys +import imp import json -import subprocess -from functools import partial -import datetime +import shutil import getpass +import datetime import traceback -import imp - +import subprocess +from functools import partial # pymel import pymel.core as pm -import pymel.core.datatypes as dt +from pymel.core import datatypes # mgear import mgear -import mgear.maya.attribute as att -import mgear.maya.dag as dag -import mgear.maya.vector as vec -import mgear.string -import mgear.maya.pyqt as gqt -import mgear.string as string -import mgear.maya.skin as skin +from .. import attribute, dag, vector, pyqt, skin +from ... import string +from ...vendor.Qt import QtCore, QtWidgets -import guideUI as guui -import customStepUI as csui +from . import guideUI as guui +from . import customStepUI as csui # pyside from maya.app.general.mayaMixin import MayaQDockWidget from maya.app.general.mayaMixin import MayaQWidgetDockableMixin -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() GUIDE_UI_WINDOW_NAME = "guide_UI_window" GUIDE_DOCK_NAME = "Guide_Components" @@ -73,24 +34,24 @@ MGEAR_SHIFTER_CUSTOMSTEP_KEY = "MGEAR_SHIFTER_CUSTOMSTEP_PATH" -########################################################## -# GUIDE -########################################################## -class MainGuide(object): - """ - The main guide class. - Provide the methods to add parameters, set parameter values, create property... +class Main(object): + """The main guide class + + Provide the methods to add parameters, set parameter values, + create property... Attributes: - paramNames (list): List of parameter name cause it's actually important to keep them sorted. - paramDefs (dic): Dictionary of parameter definition. - values (dic): Dictionary of options values. - valid (bool): We will check a few things and make sure the guide we are loading is up to date. - If parameters or object are missing a warning message will be display and - the guide should be updated. + paramNames (list): List of parameter name cause it's actually important + to keep them sorted. + paramDefs (dict): Dictionary of parameter definition. + values (dict): Dictionary of options values. + valid (bool): We will check a few things and make sure the guide we are + loading is up to date. If parameters or object are missing a + warning message will be display and the guide should be updated. """ + def __init__(self): self.paramNames = [] @@ -98,30 +59,27 @@ def __init__(self): self.values = {} self.valid = True - def addPropertyParamenters(self, parent): - """ - Add attributes ( Attribute = Parameters terminology from Softimage) from the parameter definition list. + """Add attributes from the parameter definition list - Args: + Arguments: parent (dagNode): The object to add the attributes. Returns: dagNode: parent with the attributes. """ + for scriptName in self.paramNames: paramDef = self.paramDefs[scriptName] paramDef.create(parent) return parent - def setParamDefValue(self, scriptName, value): - """ - Set the value of parameter with matching scriptname. + """Set the value of parameter with matching scriptname. - Args: + Arguments: scriptName (str): Scriptname of the parameter to edit. value (variant): New value. @@ -129,8 +87,10 @@ def setParamDefValue(self, scriptName, value): bool: False if the parameter wasn't found. """ + if scriptName not in self.paramDefs.keys(): - mgear.log("Can't find parameter definition for : " + scriptName, mgear.sev_warning) + mgear.log("Can't find parameter definition for : " + scriptName, + mgear.sev_warning) return False self.paramDefs[scriptName].value = value @@ -138,33 +98,34 @@ def setParamDefValue(self, scriptName, value): return True - def setParamDefValuesFromProperty(self, node): - """ - Set the parameter definition values from the attributes of an object. + """Set the parameter definition values from the attributes of an object - Args: + Arguments: node (dagNode): The object with the attributes. """ for scriptName, paramDef in self.paramDefs.items(): if not pm.attributeQuery(scriptName, node=node, exists=True): - mgear.log("Can't find parameter '%s' in %s"%(scriptName, node), mgear.sev_warning) + mgear.log("Can't find parameter '%s' in %s" % + (scriptName, node), mgear.sev_warning) self.valid = False else: - cnx = pm.listConnections(node+"."+scriptName, destination=False, source=True) + cnx = pm.listConnections( + node + "." + scriptName, + destination=False, source=True) if cnx: paramDef.value = None self.values[scriptName] = cnx[0] else: - paramDef.value = pm.getAttr(node+"."+scriptName) - self.values[scriptName] = pm.getAttr(node+"."+scriptName) + paramDef.value = pm.getAttr(node + "." + scriptName) + self.values[scriptName] = pm.getAttr( + node + "." + scriptName) def addColorParam(self, scriptName, value=False): - """ - Add color paramenter to the paramenter definition Dictionary. + """Add color paramenter to the paramenter definition Dictionary. - Args: + Arguments: scriptName (str): The name of the color parameter. value (Variant): The default color value. @@ -172,19 +133,22 @@ def addColorParam(self, scriptName, value=False): paramDef: The newly create paramenter definition. """ - paramDef = att.colorParamDef(scriptName, value) + paramDef = attribute.colorParamDef(scriptName, value) self.paramDefs[scriptName] = paramDef self.paramNames.append(scriptName) return paramDef - def addParam(self, scriptName, valueType, value, minimum=None, maximum=None, keyable=False, readable=True, storable=True, writable=True, niceName=None, shortName=None): - """ - Add paramenter to the paramenter definition Dictionary. + def addParam(self, scriptName, valueType, value, + minimum=None, maximum=None, keyable=False, + readable=True, storable=True, writable=True, + niceName=None, shortName=None): + """Add paramenter to the paramenter definition Dictionary. - Args: + Arguments: scriptName (str): Parameter scriptname. - valueType (str): The Attribute Type. Exp: 'string', 'bool', 'long', etc.. + valueType (str): The Attribute Type. Exp: 'string', 'bool', + 'long', etc.. value (float or int): Default parameter value. niceName (str): Parameter niceName. shortName (str): Parameter shortName. @@ -199,7 +163,9 @@ def addParam(self, scriptName, valueType, value, minimum=None, maximum=None, ke paramDef: The newly create paramenter definition. """ - paramDef = att.ParamDef2(scriptName, valueType, value, niceName, shortName, minimum, maximum, keyable, readable, storable, writable) + paramDef = attribute.ParamDef2(scriptName, valueType, value, niceName, + shortName, minimum, maximum, keyable, + readable, storable, writable) self.paramDefs[scriptName] = paramDef self.values[scriptName] = value self.paramNames.append(scriptName) @@ -207,10 +173,9 @@ def addParam(self, scriptName, valueType, value, minimum=None, maximum=None, ke return paramDef def addFCurveParam(self, scriptName, keys, interpolation=0): - """ - Add FCurve paramenter to the paramenter definition Dictionary. + """Add FCurve paramenter to the paramenter definition Dictionary. - Args: + Arguments: scriptName (str): Attribute fullName. keys (list): The keyframes to define the function curve. interpolation (int): the curve interpolation. @@ -219,19 +184,17 @@ def addFCurveParam(self, scriptName, keys, interpolation=0): paramDef: The newly create paramenter definition. """ - paramDef = att.FCurveParamDef(scriptName, keys, interpolation) + paramDef = attribute.FCurveParamDef(scriptName, keys, interpolation) self.paramDefs[scriptName] = paramDef self.values[scriptName] = None self.paramNames.append(scriptName) return paramDef - def addEnumParam(self, scriptName, enum, value=False): - """ - Add FCurve paramenter to the paramenter definition Dictionary. + """Add FCurve paramenter to the paramenter definition Dictionary. - Args: + Arguments: scriptName (str): Attribute fullName enum (list of str): The list of elements in the enumerate control. value (int): The default value. @@ -240,7 +203,7 @@ def addEnumParam(self, scriptName, enum, value=False): paramDef: The newly create paramenter definition. """ - paramDef = att.enumParamDef(scriptName, enum, value) + paramDef = attribute.enumParamDef(scriptName, enum, value) self.paramDefs[scriptName] = paramDef self.values[scriptName] = value self.paramNames.append(scriptName) @@ -251,24 +214,31 @@ def addEnumParam(self, scriptName, enum, value=False): # RIG GUIDE ########################################################## -class RigGuide(MainGuide): - """ - Rig guide class. + +class Rig(Main): + """Rig guide class. This is the class for complete rig guide definition. - * It contains the component guide in correct hierarchy order and the options to generate the rig. + * It contains the component guide in correct hierarchy order and the + options to generate the rig. * Provide the methods to add more component, import/export guide. Attributes: - paramNames (list): List of parameter name cause it's actually important to keep them sorted. - paramDefs (dic): Dictionary of parameter definition. - values (dic): Dictionary of options values. - valid (bool): We will check a few things and make sure the guide we are loading is up to date. If parameters or object are missing a warning message will be display and the guide should be updated. - controllers (dic): Dictionary of controllers. - components (dic): Dictionary of component. Keys are the component fullname (ie. 'arm_L0') - componentsIndex (list): List of component name sorted by order creation (hierarchy order) - parents (list): List of the parent of each component, in same order as self.components + paramNames (list): List of parameter name cause it's actually important + to keep them sorted. + paramDefs (dict): Dictionary of parameter definition. + values (dict): Dictionary of options values. + valid (bool): We will check a few things and make sure the guide we are + loading is up to date. If parameters or object are missing a + warning message will be display and the guide should be updated. + controllers (dict): Dictionary of controllers. + components (dict): Dictionary of component. Keys are the component + fullname (ie. 'arm_L0') + componentsIndex (list): List of component name sorted by order + creation (hierarchy order) + parents (list): List of the parent of each component, in same order + as self.components """ def __init__(self): @@ -286,10 +256,8 @@ def __init__(self): self.addParameters() - def addParameters(self): - """ - Parameters for rig options. + """Parameters for rig options. Add more parameter to the parameter definition list. @@ -298,10 +266,18 @@ def addParameters(self): # Main Tab self.pRigName = self.addParam("rig_name", "string", "rig") self.pMode = self.addEnumParam("mode", ["Final", "WIP"], 0) - self.pStep = self.addEnumParam("step", ["All Steps", "Objects", "Properties", "Operators", "Connect", "Joints", "Finalize"], 6) + self.pStep = self.addEnumParam( + "step", + ["All Steps", "Objects", "Properties", + "Operators", "Connect", "Joints", "Finalize"], + 6) self.pIsModel = self.addParam("ismodel", "bool", True) - self.pClassicChannelNames = self.addParam("classicChannelNames", "bool", True) + self.pClassicChannelNames = self.addParam( + "classicChannelNames", + "bool", + True) self.pProxyChannels = self.addParam("proxyChannels", "bool", False) + self.pWorldCtl = self.addParam("worldCtl", "bool", False) # -------------------------------------------------- # skin @@ -311,15 +287,15 @@ def addParameters(self): # -------------------------------------------------- # Colors - #Index color - self.pLColorIndexfk = self.addParam("L_color_fk", "long", 6, 0, 31) - self.pLColorIndexik = self.addParam("L_color_ik", "long", 18, 0, 31) - self.pRColorIndexfk = self.addParam("R_color_fk", "long", 23, 0, 31) - self.pRColorIndexik = self.addParam("R_color_ik", "long", 14, 0, 31) - self.pCColorIndexfk = self.addParam("C_color_fk", "long", 13, 0, 31) - self.pCColorIndexik = self.addParam("C_color_ik", "long", 17, 0, 31) + # Index color + self.pLColorIndexfk = self.addParam("L_color_fk", "long", 6, 0, 31) + self.pLColorIndexik = self.addParam("L_color_ik", "long", 18, 0, 31) + self.pRColorIndexfk = self.addParam("R_color_fk", "long", 23, 0, 31) + self.pRColorIndexik = self.addParam("R_color_ik", "long", 14, 0, 31) + self.pCColorIndexfk = self.addParam("C_color_fk", "long", 13, 0, 31) + self.pCColorIndexik = self.addParam("C_color_ik", "long", 17, 0, 31) - #RGB colors for Maya 2015 and up + # RGB colors for Maya 2015 and up # self.pLColorfk = self.addColorParam("L_RGB_fk", [0, 1, 0]) # self.pLColorik = self.addColorParam("L_RGB_ik", [0, .5, 0]) # self.pRColorfk = self.addColorParam("R_RGB_fk", [0, 0, 1]) @@ -333,27 +309,30 @@ def addParameters(self): self.pSynoptic = self.addParam("synoptic", "string", "") self.pDoPreCustomStep = self.addParam("doPreCustomStep", "bool", False) - self.pDoPostCustomStep = self.addParam("doPostCustomStep", "bool", False) + self.pDoPostCustomStep = self.addParam("doPostCustomStep", + "bool", False) self.pPreCustomStep = self.addParam("preCustomStep", "string", "") self.pPostCustomStep = self.addParam("postCustomStep", "string", "") # -------------------------------------------------- # Comments self.pComments = self.addParam("comments", "string", "") - self.pUser = self.addParam("user", "string", getpass.getuser()) - self.pDate = self.addParam("date", "string", str(datetime.datetime.now())) - self.pMayaVersion = self.addParam("maya_version", "string", str(pm.mel.eval("getApplicationVersionAsFloat"))) - self.pGearVersion = self.addParam("gear_version", "string", mgear.getVersion()) - + self.pUser = self.addParam("user", "string", getpass.getuser()) + self.pDate = self.addParam( + "date", "string", str(datetime.datetime.now())) + self.pMayaVersion = self.addParam( + "maya_version", "string", + str(pm.mel.eval("getApplicationVersionAsFloat"))) + self.pGearVersion = self.addParam( + "gear_version", "string", mgear.getVersion()) def setFromSelection(self): - """ - Set the guide hierarchy from selection. - - """ + """Set the guide hierarchy from selection.""" selection = pm.ls(selection=True) if not selection: - mgear.log("Select one or more guide root or a guide model", mgear.sev_error) + mgear.log( + "Select one or more guide root or a guide model", + mgear.sev_error) self.valid = False return False @@ -362,12 +341,10 @@ def setFromSelection(self): return True - def setFromHierarchy(self, root, branch=True): - """ - Set the guide from given hierarchy. + """Set the guide from given hierarchy. - Args: + Arguments: root (dagNode): The root of the hierarchy to parse. branch (bool): True to parse children components. @@ -382,7 +359,7 @@ def setFromHierarchy(self, root, branch=True): if root.hasAttr("comp_type") or self.model == root: break root = root.getParent() - mgear.log( root) + mgear.log(root) # --------------------------------------------------- # First check and set the options @@ -401,56 +378,78 @@ def setFromHierarchy(self, root, branch=True): # Components mgear.log("Get components") self.findComponentRecursive(root, branch) + endTime = datetime.datetime.now() + finalTime = endTime - startTime + mgear.log("Find recursive in [ " + str(finalTime) + " ]") # Parenting if self.valid: for name in self.componentsIndex: mgear.log("Get parenting for: " + name) - compParent = self.components[name] - for localName, element in compParent.getObjects(self.model, False).items(): - for name in self.componentsIndex: - compChild = self.components[name] - compChild_parent = compChild.root.getParent() - if element is not None and element == compChild_parent: - compChild.parentComponent = compParent - compChild.parentLocalName = localName - + # TODO: In the future should use connections to retrive this + # data + # We try the fastes aproach, will fail if is not the top node + try: + # search for his parent + compParent = self.components[name].root.getParent() + if compParent and compParent.hasAttr("isGearGuide"): + pName = "_".join(compParent.name().split("_")[:2]) + pLocal = "_".join(compParent.name().split("_")[2:]) + + pComp = self.components[pName] + self.components[name].parentComponent = pComp + self.components[name].parentLocalName = pLocal + # This will scan the hierachy in reverse. It is much slower + except KeyError: + # search children and set him as parent + compParent = self.components[name] + # for localName, element in compParent.getObjects( + # self.model, False).items(): + # NOTE: getObjects3 is an experimental function + for localName, element in compParent.getObjects3( + self.model).items(): + for name in self.componentsIndex: + compChild = self.components[name] + compChild_parent = compChild.root.getParent() + if (element is not None + and element == compChild_parent): + compChild.parentComponent = compParent + compChild.parentLocalName = localName # More option values self.addOptionsValues() # End if not self.valid: - mgear.log("The guide doesn't seem to be up to date. Check logged messages and update the guide.", mgear.sev_warning) + mgear.log("The guide doesn't seem to be up to date." + "Check logged messages and update the guide.", + mgear.sev_warning) endTime = datetime.datetime.now() finalTime = endTime - startTime - mgear.log("Guide loaded from hierarchy in [ " + str(finalTime) + " ]" ) - + mgear.log("Guide loaded from hierarchy in [ " + str(finalTime) + " ]") def addOptionsValues(self): - """ - Gather or change some options values according to some others. + """Gather or change some options values according to some others. Note: - For the moment only gets the rig size to adapt size of object to the scale of the character + For the moment only gets the rig size to adapt size of object to + the scale of the character """ # Get rig size to adapt size of object to the scale of the character maximum = 1 - v = dt.Vector() + v = datatypes.Vector() for comp in self.components.values(): for pos in comp.apos: - d = vec.getDistance(v, pos) + d = vector.getDistance(v, pos) maximum = max(d, maximum) self.values["size"] = max(maximum * .05, .1) - def findComponentRecursive(self, node, branch=True): - """ - Finds components by recursive search. + """Finds components by recursive search. - Args: + Arguments: node (dagNode): Object frome where start the search. branch (bool): If True search recursive all the children. """ @@ -461,7 +460,7 @@ def findComponentRecursive(self, node, branch=True): if comp_guide: comp_guide.setFromHierarchy(node) - mgear.log(comp_guide.fullName+" ("+comp_type+")") + mgear.log(comp_guide.fullName + " (" + comp_type + ")") if not comp_guide.valid: self.valid = False @@ -469,14 +468,15 @@ def findComponentRecursive(self, node, branch=True): self.components[comp_guide.fullName] = comp_guide if branch: - for child in node.getChildren(): + for child in node.getChildren(type="transform"): self.findComponentRecursive(child) def getComponentGuide(self, comp_type): - """ - Get the componet guide python object. ie. Finds the guide.py of the component. + """Get the componet guide python object + + ie. Finds the guide.py of the component. - Args: + Arguments: comp_type (str): The component type. Returns: @@ -487,7 +487,8 @@ def getComponentGuide(self, comp_type): ''' path = os.path.join(basepath, comp_type, "guide.py") if not os.path.exists(path): - mgear.log("Can't find guide definition for : " + comp_type + ".\n"+ path, mgear.sev_error) + mgear.log("Can't find guide definition for : " + comp_type + ".\n"+ + path, mgear.sev_error) return False ''' @@ -503,25 +504,23 @@ def getComponentGuide(self, comp_type): # DRAW def initialHierarchy(self): - """ - Create the initial rig guide hierarchy (model, options...) - - """ + """Create the initial rig guide hierarchy (model, options...)""" self.model = pm.group(n="guide", em=True, w=True) # Options self.options = self.addPropertyParamenters(self.model) - #the basic org nulls (Maya groups) - self.controllers_org = pm.group(n="controllers_org", em=True, p=self.model) + # the basic org nulls (Maya groups) + self.controllers_org = pm.group( + n="controllers_org", + em=True, + p=self.model) self.controllers_org.attr('visibility').set(0) - def drawNewComponent(self, parent, comp_type): - """ - Add a new component to the guide. + """Add a new component to the guide. - Args: + Arguments: parent (dagNode): Parent of this new component guide. compType (str): Type of component to add. @@ -529,7 +528,8 @@ def drawNewComponent(self, parent, comp_type): comp_guide = self.getComponentGuide(comp_type) if not comp_guide: - mgear.log("Not component guide of type: " + comp_type + " have been found.", mgear.sev_error) + mgear.log("Not component guide of type: " + comp_type + + " have been found.", mgear.sev_error) return if parent is None: self.initialHierarchy() @@ -551,7 +551,6 @@ def drawNewComponent(self, parent, comp_type): comp_guide.setParamDefValue("comp_side", parent_side) comp_guide.setParamDefValue("ui_host", parent_uihost) - break parent_root = parent_root.getParent() @@ -568,10 +567,10 @@ def drawUpdate(self, oldRoot, parent=None): # controls shape try: - pm.delete(pm.PyNode(newParentName+"|controllers_org")) - oldRootName = oldRoot.name().split("|")[0]+"|controllers_org" + pm.delete(pm.PyNode(newParentName + "|controllers_org")) + oldRootName = oldRoot.name().split("|")[0] + "|controllers_org" pm.parent(oldRootName, newParentName) - except: + except TypeError: pm.displayError("The guide don't have controllers_org") # Components @@ -580,20 +579,16 @@ def drawUpdate(self, oldRoot, parent=None): oldParentName = comp_guide.root.getParent().name() try: - parent = pm.PyNode(oldParentName.replace(oldParentName.split("|")[0], newParentName)) - except: + parent = pm.PyNode(oldParentName.replace( + oldParentName.split("|")[0], newParentName)) + except TypeError: pm.displayWarning("No parent for the guide") parent = self.model comp_guide.draw(parent) - - - def update(self, sel): - """ - Update the guide if a parameter is missing - """ + """Update the guide if a parameter is missing""" if pm.attributeQuery("ismodel", node=sel, ex=True): self.model = sel @@ -607,28 +602,30 @@ def update(self, sel): pm.displayInfo("The Guide is updated") return - pm.rename(self.model, name+"_old") + pm.rename(self.model, name + "_old") deleteLater = self.model self.drawUpdate(deleteLater) - pm.rename(self.model, name) - pm.displayInfo("The guide %s have been updated"%name) + pm.rename(self.model, name) + pm.displayInfo("The guide %s have been updated" % name) pm.delete(deleteLater) def duplicate(self, root, symmetrize=False): - """ - Duplicate the guide hierarchy. + """Duplicate the guide hierarchy Note: - Indeed this method is not duplicating. What it is doing is parse the compoment guide, + Indeed this method is not duplicating. + What it is doing is parse the compoment guide, and creating an new one base on the current selection. Warning: - Don't use the default Maya's duplicate tool to duplicate a Shifter's guide. + Don't use the default Maya's duplicate tool to duplicate a + Shifter's guide. - Args: + Arguments: root (dagNode): The guide root to duplicate. - symmetrize (bool): If True, duplicate symmetrical in X axis. The guide have to be "Left" or "Right". + symmetrize (bool): If True, duplicate symmetrical in X axis. + The guide have to be "Left" or "Right". """ if not pm.attributeQuery("comp_type", node=root, ex=True): @@ -654,7 +651,10 @@ def duplicate(self, root, symmetrize=False): if comp_guide.parentComponent is None: parent = comp_guide.root.getParent() if symmetrize: - parent = dag.findChild(self.model, mgear.string.convertRLName(comp_guide.root.getParent().name())) + parent = dag.findChild( + self.model, + string.convertRLName( + comp_guide.root.getParent().name())) if not parent: parent = comp_guide.root.getParent() @@ -662,24 +662,31 @@ def duplicate(self, root, symmetrize=False): parent = comp_guide.root.getParent() else: - parent = dag.findChild(self.model, comp_guide.parentComponent.getName(comp_guide.parentLocalName)) + parent = dag.findChild( + self.model, + comp_guide.parentComponent.getName( + comp_guide.parentLocalName)) if not parent: - mgear.log("Unable to find parent (%s.%s) for guide %s"%(comp_guide.parentComponent.getFullName, comp_guide.parentLocalName, comp_guide.getFullName )) + mgear.log( + "Unable to find parent (%s.%s) for guide %s" % + (comp_guide.parentComponent.getFullName, + comp_guide.parentLocalName, + comp_guide.getFullName)) parent = self.model - comp_guide.root = None # Reset the root so we force the draw to duplicate + # Reset the root so we force the draw to duplicate + comp_guide.root = None + comp_guide.setIndex(self.model) comp_guide.draw(parent) pm.select(self.components[self.componentsIndex[0]].root) - def updateProperties(self, root, newName, newSide, newIndex): - """ - Update the Properties of the component. + """Update the Properties of the component. - Args: + Arguments: root (dagNode): Root of the component. newName (str): New name of the component newSide (str): New side of the component @@ -695,11 +702,7 @@ def updateProperties(self, root, newName, newSide, newIndex): comp_guide.rename(root, newName, newSide, newIndex) -################################################################################## -# HELPER SLOTS -################################################################################## - -class helperSlots(object): +class HelperSlots(object): def updateHostUI(self, lEdit, targetAttr): oType = pm.nodetypes.Transform @@ -710,7 +713,8 @@ def updateHostUI(self, lEdit, targetAttr): lEdit.setText(oSel[0].name()) self.root.attr(targetAttr).set(lEdit.text()) else: - pm.displayWarning("The selected element is not a valid object or not from a guide") + pm.displayWarning("The selected element is not a " + "valid object or not from a guide") else: pm.displayWarning("Please select first the object.") @@ -718,25 +722,28 @@ def updateLineEdit(self, lEdit, targetAttr): name = string.removeInvalidCharacter(lEdit.text()) self.root.attr(targetAttr).set(name) - def addItem2listWidget(self, listWidget, targetAttr=None): items = pm.selected() - itemsList = [i.text() for i in listWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in listWidget.findItems( + "", QtCore.Qt.MatchContains)] # Quick clean the first empty item if itemsList and not itemsList[0]: listWidget.takeItem(0) - for item in items: if item.name() not in itemsList: if item.hasAttr("isGearGuide"): listWidget.addItem(item.name()) else: - pm.displayWarning("The object: %s, is not a valid reference, Please select only guide componet roots and guide locators."%item.name()) + pm.displayWarning( + "The object: %s, is not a valid" + " reference, Please select only guide componet" + " roots and guide locators." % item.name()) else: - pm.displayWarning("The object: %s, is already in the list."%item.name()) + pm.displayWarning("The object: %s, is already in the list." % + item.name()) if targetAttr: self.updateListAttr(listWidget, targetAttr) @@ -747,9 +754,11 @@ def removeSelectedFromListWidget(self, listWidget, targetAttr=None): if targetAttr: self.updateListAttr(listWidget, targetAttr) - def moveFromListWidget2ListWidget(self, sourceListWidget, targetListWidget, targetAttrListWidget, targetAttr=None): + def moveFromListWidget2ListWidget(self, sourceListWidget, targetListWidget, + targetAttrListWidget, targetAttr=None): # Quick clean the first empty item - itemsList = [i.text() for i in targetAttrListWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in targetAttrListWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: targetAttrListWidget.takeItem(0) @@ -760,26 +769,22 @@ def moveFromListWidget2ListWidget(self, sourceListWidget, targetListWidget, targ if targetAttr: self.updateListAttr(targetAttrListWidget, targetAttr) - - - def copyFromListWidget(self, sourceListWidget, targetListWidget, targetAttr=None): + def copyFromListWidget(self, sourceListWidget, targetListWidget, + targetAttr=None): targetListWidget.clear() - itemsList = [i.text() for i in sourceListWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in sourceListWidget.findItems( + "", QtCore.Qt.MatchContains)] for item in itemsList: targetListWidget.addItem(item) if targetAttr: self.updateListAttr(sourceListWidget, targetAttr) - def updateListAttr(self, sourceListWidget, targetAttr): - """ - Update the string attribute with values separated by commas. - - """ - newValue = ",".join([i.text() for i in sourceListWidget.findItems("", QtCore.Qt.MatchContains)]) + """Update the string attribute with values separated by commas""" + newValue = ",".join([i.text() for i in sourceListWidget.findItems( + "", QtCore.Qt.MatchContains)]) self.root.attr(targetAttr).set(newValue) - def updateComponentName(self): newName = self.mainSettingsTab.name_lineEdit.text() @@ -790,11 +795,12 @@ def updateComponentName(self): sideIndex = self.mainSettingsTab.side_comboBox.currentIndex() newSide = sideSet[sideIndex] newIndex = self.mainSettingsTab.componentIndex_spinBox.value() - guide = RigGuide() + guide = Rig() guide.updateProperties(self.root, newName, newSide, newIndex) pm.select(self.root, r=True) - #sync index - self.mainSettingsTab.componentIndex_spinBox.setValue(self.root.attr("comp_index").get()) + # sync index + self.mainSettingsTab.componentIndex_spinBox.setValue( + self.root.attr("comp_index").get()) def updateConnector(self, sourceWidget, itemsList, *args): self.root.attr("connector").set(itemsList[sourceWidget.currentIndex()]) @@ -813,7 +819,7 @@ def updateSpinBox(self, sourceWidget, targetAttr, *args): return True def updateSlider(self, sourceWidget, targetAttr, *args): - self.root.attr(targetAttr).set(float(sourceWidget.value())/100) + self.root.attr(targetAttr).set(float(sourceWidget.value()) / 100) def updateComboBox(self, sourceWidget, targetAttr, *args): self.root.attr(targetAttr).set(sourceWidget.currentIndex()) @@ -823,19 +829,20 @@ def updateControlShape(self, sourceWidget, ctlList, targetAttr, *args): self.root.attr(targetAttr).set(ctlList[curIndx]) def setProfile(self): - pm.select(self.root, r=True) + pm.select(self.root, r=True) pm.runtime.GraphEditor() - def close_settings(self): self.close() - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) def editFile(self, widgetList): try: filepath = widgetList.selectedItems()[0].text().split("|")[-1][1:] - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): - editPath = os.path.join( os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") , filepath) + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + editPath = os.path.join( + os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""), filepath) else: editPath = filepath if filepath: @@ -847,79 +854,93 @@ def editFile(self, widgetList): subprocess.call(('xdg-open', editPath)) else: pm.displayWarning("Please select one item from the list") - except: + except Exception: pm.displayError("The step can't be find or does't exists") @classmethod def runStep(self, stepPath, customStepDic): - try: - with pm.UndoChunk(): - pm.displayInfo("EXEC: Executing custom step: %s"%stepPath) - fileName = os.path.split(stepPath)[1].split(".")[0] - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): - runPath = os.path.join( os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") , stepPath) - else: - runPath = stepPath - customStep = imp.load_source(fileName, runPath) - if hasattr(customStep, "CustomShifterStep"): - cs = customStep.CustomShifterStep() - cs.run(customStepDic) - customStepDic[cs.name] = cs - pm.displayInfo("SUCCEED: Custom Shifter Step Class: %s. Succeed!!"%stepPath) - else: - pm.displayInfo("SUCCEED: Custom Step simple script: %s. Succeed!!"%stepPath) - - except Exception as ex: - template = "An exception of type {0} occured. Arguments:\n{1!r}" - message = template.format(type(ex).__name__, ex.args) - pm.displayError( message) - pm.displayError(traceback.format_exc()) - cont = pm.confirmBox("FAIL: Custom Step Fail", "The step:%s has failed. Continue with next step?"%stepPath + "\n\n" + message + "\n\n" + traceback.format_exc(), "Continue", "Stop Build", "Try Again!") - if cont == "Stop Build": - # stop Build - return True - elif cont == "Try Again!": - try: #just in case there is nothing to undo - pm.undo() - except: - pass - pm.displayInfo("Trying again! : {}".format(stepPath)) - inception = self.runStep(stepPath, customStepDic) - if inception: # stops build from the recursion loop. - return True + try: + with pm.UndoChunk(): + pm.displayInfo( + "EXEC: Executing custom step: %s" % stepPath) + fileName = os.path.split(stepPath)[1].split(".")[0] + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + runPath = os.path.join( + os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""), stepPath) else: - return False - + runPath = stepPath + customStep = imp.load_source(fileName, runPath) + if hasattr(customStep, "CustomShifterStep"): + cs = customStep.CustomShifterStep() + cs.run(customStepDic) + customStepDic[cs.name] = cs + pm.displayInfo( + "SUCCEED: Custom Shifter Step Class: %s. " + "Succeed!!" % stepPath) + else: + pm.displayInfo( + "SUCCEED: Custom Step simple script: %s. " + "Succeed!!" % stepPath) + + except Exception as ex: + template = "An exception of type {0} occured. " + "Arguments:\n{1!r}" + message = template.format(type(ex).__name__, ex.args) + pm.displayError(message) + pm.displayError(traceback.format_exc()) + cont = pm.confirmBox( + "FAIL: Custom Step Fail", + "The step:%s has failed. Continue with next step?" % + stepPath + "\n\n" + message + "\n\n" + + traceback.format_exc(), + "Continue", "Stop Build", "Try Again!") + if cont == "Stop Build": + # stop Build + return True + elif cont == "Try Again!": + try: # just in case there is nothing to undo + pm.undo() + except Exception: + pass + pm.displayInfo("Trying again! : {}".format(stepPath)) + inception = self.runStep(stepPath, customStepDic) + if inception: # stops build from the recursion loop. + return True + else: + return False def runManualStep(self, widgetList): selItems = widgetList.selectedItems() for item in selItems: - self.runStep( item.text().split("|")[-1][1:], customStepDic={}) + self.runStep(item.text().split("|")[-1][1:], customStepDic={}) -################## -# Guide Settings -################## -class guideSettingsTab(QtWidgets.QDialog, guui.Ui_Form): +class GuideSettingsTab(QtWidgets.QDialog, guui.Ui_Form): + def __init__(self, parent=None): super(guideSettingsTab, self).__init__(parent) self.setupUi(self) -class customStepTab(QtWidgets.QDialog, csui.Ui_Form): + +class CustomStepTab(QtWidgets.QDialog, csui.Ui_Form): + def __init__(self, parent=None): super(customStepTab, self).__init__(parent) self.setupUi(self) -class guideSettings(MayaQWidgetDockableMixin, QtWidgets.QDialog, helperSlots): + +class GuideSettings(MayaQWidgetDockableMixin, QtWidgets.QDialog, HelperSlots): # valueChanged = QtCore.Signal(int) def __init__(self, parent=None): self.toolName = TYPE # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) # super(self.__class__, self).__init__(parent=parent) super(guideSettings, self).__init__() - # the inspectSettings function set the current selection to the component root before open the settings dialog + # the inspectSettings function set the current selection to the + # component root before open the settings dialog self.root = pm.selected()[0] self.guideSettingsTab = guideSettingsTab() @@ -934,7 +955,7 @@ def __init__(self, parent=None): self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) def setup_SettingWindow(self): - self.mayaMainWindow = gqt.maya_main_window() + self.mayaMainWindow = pyqt.maya_main_window() self.setObjectName(self.toolName) self.setWindowFlags(QtCore.Qt.Window) @@ -942,55 +963,71 @@ def setup_SettingWindow(self): self.resize(500, 615) def create_controls(self): - """ - Create the controls for the component base - - """ + """Create the controls for the component base""" self.tabs = QtWidgets.QTabWidget() self.tabs.setObjectName("settings_tab") # Close Button self.close_button = QtWidgets.QPushButton("Close") - - def populate_controls(self): - """ - Populate the controls values from the custom attributes of the component. + """Populate the controls values + from the custom attributes of the component. """ - #populate tab + # populate tab self.tabs.insertTab(0, self.guideSettingsTab, "Guide Settings") self.tabs.insertTab(1, self.customStepTab, "Custom Steps") - #populate main settings - self.guideSettingsTab.rigName_lineEdit.setText(self.root.attr("rig_name").get()) - self.guideSettingsTab.mode_comboBox.setCurrentIndex(self.root.attr("mode").get()) - self.guideSettingsTab.step_comboBox.setCurrentIndex(self.root.attr("step").get()) - self.populateCheck(self.guideSettingsTab.proxyChannels_checkBox, "proxyChannels") - self.populateCheck(self.guideSettingsTab.classicChannelNames_checkBox, "classicChannelNames") - self.populateCheck(self.guideSettingsTab.importSkin_checkBox, "importSkin") - self.guideSettingsTab.skin_lineEdit.setText(self.root.attr("skin").get()) - self.populateCheck(self.guideSettingsTab.jointRig_checkBox, "joint_rig") + # populate main settings + self.guideSettingsTab.rigName_lineEdit.setText( + self.root.attr("rig_name").get()) + self.guideSettingsTab.mode_comboBox.setCurrentIndex( + self.root.attr("mode").get()) + self.guideSettingsTab.step_comboBox.setCurrentIndex( + self.root.attr("step").get()) + self.populateCheck( + self.guideSettingsTab.proxyChannels_checkBox, "proxyChannels") + + self.populateCheck(self.guideSettingsTab.worldCtl_checkBox, "worldCtl") + + self.populateCheck( + self.guideSettingsTab.classicChannelNames_checkBox, + "classicChannelNames") + self.populateCheck( + self.guideSettingsTab.importSkin_checkBox, "importSkin") + self.guideSettingsTab.skin_lineEdit.setText( + self.root.attr("skin").get()) + self.populateCheck( + self.guideSettingsTab.jointRig_checkBox, "joint_rig") self.populateAvailableSynopticTabs() + for item in self.root.attr("synoptic").get().split(","): self.guideSettingsTab.rigTabs_listWidget.addItem(item) - self.guideSettingsTab.L_color_fk_spinBox.setValue(self.root.attr("L_color_fk").get()) - self.guideSettingsTab.L_color_ik_spinBox.setValue(self.root.attr("L_color_ik").get()) - self.guideSettingsTab.C_color_fk_spinBox.setValue(self.root.attr("C_color_fk").get()) - self.guideSettingsTab.C_color_ik_spinBox.setValue(self.root.attr("C_color_ik").get()) - self.guideSettingsTab.R_color_fk_spinBox.setValue(self.root.attr("R_color_fk").get()) - self.guideSettingsTab.R_color_ik_spinBox.setValue(self.root.attr("R_color_ik").get()) + + self.guideSettingsTab.L_color_fk_spinBox.setValue( + self.root.attr("L_color_fk").get()) + self.guideSettingsTab.L_color_ik_spinBox.setValue( + self.root.attr("L_color_ik").get()) + self.guideSettingsTab.C_color_fk_spinBox.setValue( + self.root.attr("C_color_fk").get()) + self.guideSettingsTab.C_color_ik_spinBox.setValue( + self.root.attr("C_color_ik").get()) + self.guideSettingsTab.R_color_fk_spinBox.setValue( + self.root.attr("R_color_fk").get()) + self.guideSettingsTab.R_color_ik_spinBox.setValue( + self.root.attr("R_color_ik").get()) # pupulate custom steps sttings - self.populateCheck(self.customStepTab.preCustomStep_checkBox, "doPreCustomStep") + self.populateCheck( + self.customStepTab.preCustomStep_checkBox, "doPreCustomStep") for item in self.root.attr("preCustomStep").get().split(","): self.customStepTab.preCustomStep_listWidget.addItem(item) - self.populateCheck(self.customStepTab.postCustomStep_checkBox, "doPostCustomStep") + self.populateCheck( + self.customStepTab.postCustomStep_checkBox, "doPostCustomStep") for item in self.root.attr("postCustomStep").get().split(","): self.customStepTab.postCustomStep_listWidget.addItem(item) - def create_layout(self): """ Create the layout for the component base settings @@ -1002,61 +1039,138 @@ def create_layout(self): self.setLayout(self.settings_layout) - def create_connections(self): - """ - Create the slots connections to the controls functions - - """ + """Create the slots connections to the controls functions""" self.close_button.clicked.connect(self.close_settings) # Setting Tab - self.guideSettingsTab.rigName_lineEdit.editingFinished.connect(partial(self.updateLineEdit, self.guideSettingsTab.rigName_lineEdit, "rig_name" ) ) - self.guideSettingsTab.mode_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.guideSettingsTab.mode_comboBox, "mode")) - self.guideSettingsTab.step_comboBox.currentIndexChanged.connect(partial(self.updateComboBox, self.guideSettingsTab.step_comboBox, "step")) - - self.guideSettingsTab.proxyChannels_checkBox.stateChanged.connect(partial(self.updateCheck, self.guideSettingsTab.proxyChannels_checkBox, "proxyChannels")) - self.guideSettingsTab.classicChannelNames_checkBox.stateChanged.connect(partial(self.updateCheck, self.guideSettingsTab.classicChannelNames_checkBox, "classicChannelNames")) - - self.guideSettingsTab.importSkin_checkBox.stateChanged.connect(partial(self.updateCheck, self.guideSettingsTab.importSkin_checkBox, "importSkin")) - self.guideSettingsTab.jointRig_checkBox.stateChanged.connect(partial(self.updateCheck, self.guideSettingsTab.jointRig_checkBox, "joint_rig")) - self.guideSettingsTab.addTab_pushButton.clicked.connect(partial(self.moveFromListWidget2ListWidget, self.guideSettingsTab.available_listWidget, self.guideSettingsTab.rigTabs_listWidget, self.guideSettingsTab.rigTabs_listWidget, "synoptic")) - self.guideSettingsTab.removeTab_pushButton.clicked.connect(partial(self.moveFromListWidget2ListWidget, self.guideSettingsTab.rigTabs_listWidget, self.guideSettingsTab.available_listWidget, self.guideSettingsTab.rigTabs_listWidget, "synoptic")) - self.guideSettingsTab.loadSkinPath_pushButton.clicked.connect(self.skinLoad) - self.guideSettingsTab.rigTabs_listWidget.installEventFilter(self) - - self.guideSettingsTab.L_color_fk_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.L_color_fk_spinBox, "L_color_fk")) - self.guideSettingsTab.L_color_ik_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.L_color_ik_spinBox, "L_color_ik")) - self.guideSettingsTab.C_color_fk_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.C_color_fk_spinBox, "C_color_fk")) - self.guideSettingsTab.C_color_ik_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.C_color_ik_spinBox, "C_color_ik")) - self.guideSettingsTab.R_color_fk_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.R_color_fk_spinBox, "R_color_fk")) - self.guideSettingsTab.R_color_ik_spinBox.valueChanged.connect(partial(self.updateSpinBox, self.guideSettingsTab.R_color_ik_spinBox, "R_color_ik")) + tap = self.guideSettingsTab + tap.rigName_lineEdit.editingFinished.connect( + partial(self.updateLineEdit, + tap.rigName_lineEdit, + "rig_name")) + tap.mode_comboBox.currentIndexChanged.connect( + partial(self.updateComboBox, + tap.mode_comboBox, + "mode")) + tap.step_comboBox.currentIndexChanged.connect( + partial(self.updateComboBox, + tap.step_comboBox, + "step")) + tap.proxyChannels_checkBox.stateChanged.connect( + partial(self.updateCheck, + tap.proxyChannels_checkBox, + "proxyChannels")) + tap.worldCtl_checkBox.stateChanged.connect( + partial(self.updateCheck, + tap.worldCtl_checkBox, + "worldCtl")) + tap.classicChannelNames_checkBox.stateChanged.connect( + partial(self.updateCheck, + tap.classicChannelNames_checkBox, + "classicChannelNames")) + tap.importSkin_checkBox.stateChanged.connect( + partial(self.updateCheck, + tap.importSkin_checkBox, + "importSkin")) + tap.jointRig_checkBox.stateChanged.connect( + partial(self.updateCheck, + tap.jointRig_checkBox, + "joint_rig")) + tap.addTab_pushButton.clicked.connect( + partial(self.moveFromListWidget2ListWidget, + tap.available_listWidget, + tap.rigTabs_listWidget, + tap.rigTabs_listWidget, + "synoptic")) + tap.removeTab_pushButton.clicked.connect( + partial(self.moveFromListWidget2ListWidget, + tap.rigTabs_listWidget, + tap.available_listWidget, + tap.rigTabs_listWidget, + "synoptic")) + tap.loadSkinPath_pushButton.clicked.connect( + self.skinLoad) + tap.rigTabs_listWidget.installEventFilter(self) + + tap.L_color_fk_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.L_color_fk_spinBox, + "L_color_fk")) + tap.L_color_ik_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.L_color_ik_spinBox, + "L_color_ik")) + tap.C_color_fk_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.C_color_fk_spinBox, + "C_color_fk")) + tap.C_color_ik_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.C_color_ik_spinBox, + "C_color_ik")) + tap.R_color_fk_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.R_color_fk_spinBox, + "R_color_fk")) + tap.R_color_ik_spinBox.valueChanged.connect( + partial(self.updateSpinBox, + tap.R_color_ik_spinBox, + "R_color_ik")) # custom Step Tab - self.customStepTab.preCustomStep_checkBox.stateChanged.connect(partial(self.updateCheck, self.customStepTab.preCustomStep_checkBox, "doPreCustomStep")) - self.customStepTab.preCustomStepAdd_pushButton.clicked.connect(self.addCustomStep) - self.customStepTab.preCustomStepNew_pushButton.clicked.connect(self.newCustomStep) - self.customStepTab.preCustomStepDuplicate_pushButton.clicked.connect(self.duplicateCustomStep) - self.customStepTab.preCustomStepExport_pushButton.clicked.connect(self.exportCustomStep) - self.customStepTab.preCustomStepImport_pushButton.clicked.connect(self.importCustomStep) - self.customStepTab.preCustomStepRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.customStepTab.preCustomStep_listWidget, "preCustomStep")) - self.customStepTab.preCustomStep_listWidget.installEventFilter(self) - self.customStepTab.preCustomStepRun_pushButton.clicked.connect(partial(self.runManualStep, self.customStepTab.preCustomStep_listWidget)) - self.customStepTab.preCustomStepEdit_pushButton.clicked.connect(partial(self.editFile, self.customStepTab.preCustomStep_listWidget)) - - self.customStepTab.postCustomStep_checkBox.stateChanged.connect(partial(self.updateCheck, self.customStepTab.postCustomStep_checkBox, "doPostCustomStep")) - self.customStepTab.postCustomStepAdd_pushButton.clicked.connect(partial(self.addCustomStep, False)) - self.customStepTab.postCustomStepNew_pushButton.clicked.connect(partial(self.newCustomStep, False)) - self.customStepTab.postCustomStepDuplicate_pushButton.clicked.connect(partial(self.duplicateCustomStep, False)) - self.customStepTab.postCustomStepExport_pushButton.clicked.connect(partial(self.exportCustomStep, False)) - self.customStepTab.postCustomStepImport_pushButton.clicked.connect(partial(self.importCustomStep, False)) - self.customStepTab.postCustomStepRemove_pushButton.clicked.connect(partial(self.removeSelectedFromListWidget, self.customStepTab.postCustomStep_listWidget, "postCustomStep")) - self.customStepTab.postCustomStep_listWidget.installEventFilter(self) - self.customStepTab.postCustomStepRun_pushButton.clicked.connect(partial(self.runManualStep, self.customStepTab.postCustomStep_listWidget)) - self.customStepTab.postCustomStepEdit_pushButton.clicked.connect(partial(self.editFile, self.customStepTab.postCustomStep_listWidget)) - - - + csTap = self.customStepTab + csTap.preCustomStep_checkBox.stateChanged.connect( + partial(self.updateCheck, + csTap.preCustomStep_checkBox, + "doPreCustomStep")) + csTap.preCustomStepAdd_pushButton.clicked.connect( + self.addCustomStep) + csTap.preCustomStepNew_pushButton.clicked.connect( + self.newCustomStep) + csTap.preCustomStepDuplicate_pushButton.clicked.connect( + self.duplicateCustomStep) + csTap.preCustomStepExport_pushButton.clicked.connect( + self.exportCustomStep) + csTap.preCustomStepImport_pushButton.clicked.connect( + self.importCustomStep) + csTap.preCustomStepRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + csTap.preCustomStep_listWidget, + "preCustomStep")) + csTap.preCustomStep_listWidget.installEventFilter(self) + csTap.preCustomStepRun_pushButton.clicked.connect( + partial(self.runManualStep, + csTap.preCustomStep_listWidget)) + csTap.preCustomStepEdit_pushButton.clicked.connect( + partial(self.editFile, + csTap.preCustomStep_listWidget)) + + csTap.postCustomStep_checkBox.stateChanged.connect( + partial(self.updateCheck, + csTap.postCustomStep_checkBox, + "doPostCustomStep")) + csTap.postCustomStepAdd_pushButton.clicked.connect( + partial(self.addCustomStep, False)) + csTap.postCustomStepNew_pushButton.clicked.connect( + partial(self.newCustomStep, False)) + csTap.postCustomStepDuplicate_pushButton.clicked.connect( + partial(self.duplicateCustomStep, False)) + csTap.postCustomStepExport_pushButton.clicked.connect( + partial(self.exportCustomStep, False)) + csTap.postCustomStepImport_pushButton.clicked.connect( + partial(self.importCustomStep, False)) + csTap.postCustomStepRemove_pushButton.clicked.connect( + partial(self.removeSelectedFromListWidget, + csTap.postCustomStep_listWidget, + "postCustomStep")) + csTap.postCustomStep_listWidget.installEventFilter(self) + csTap.postCustomStepRun_pushButton.clicked.connect( + partial(self.runManualStep, + csTap.postCustomStep_listWidget)) + csTap.postCustomStepEdit_pushButton.clicked.connect( + partial(self.editFile, + csTap.postCustomStep_listWidget)) def eventFilter(self, sender, event): if event.type() == QtCore.QEvent.ChildRemoved: @@ -1079,7 +1193,8 @@ def populateAvailableSynopticTabs(self): if not defPath or not os.path.isdir(defPath): defPath = shifter.SYNOPTIC_PATH - tabsDirectories = [ name for name in os.listdir(defPath) if os.path.isdir(os.path.join(defPath, name)) ] + tabsDirectories = [name for name in os.listdir(defPath) if + os.path.isdir(os.path.join(defPath, name))] # Quick clean the first empty item if tabsDirectories and not tabsDirectories[0]: self.guideSettingsTab.available_listWidget.takeItem(0) @@ -1090,21 +1205,25 @@ def populateAvailableSynopticTabs(self): self.guideSettingsTab.available_listWidget.addItem(tab) def skinLoad(self, *args): - startDir = self.root.attr("skin").get() - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, okc="Apply", - fileFilter='mGear skin (*%s)' % skin.FILE_EXT) - if not filePath: - return - if not isinstance(filePath, basestring): - filePath = filePath[0] + startDir = self.root.attr("skin").get() + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + okc="Apply", + fileFilter='mGear skin (*%s)' % skin.FILE_EXT) + if not filePath: + return + if not isinstance(filePath, basestring): + filePath = filePath[0] - self.root.attr("skin").set(filePath) - self.guideSettingsTab.skin_lineEdit.setText(filePath) + self.root.attr("skin").set(filePath) + self.guideSettingsTab.skin_lineEdit.setText(filePath) def addCustomStep(self, pre=True, *args): """Add a new custom step - Args: + Arguments: pre (bool, optional): If true adds the steps to the pre step list *args: Maya's Dummy @@ -1119,38 +1238,43 @@ def addCustomStep(self, pre=True, *args): stepAttr = "postCustomStep" stepWidget = self.customStepTab.postCustomStep_listWidget - # Check if we have a custom enviroment for the custom steps initial folder - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + # Check if we have a custom env for the custom steps initial folder + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): startDir = os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") else: startDir = self.root.attr(stepAttr).get() - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, okc="Add", - fileFilter='Custom Step .py (*.py)') + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + okc="Add", + fileFilter='Custom Step .py (*.py)') if not filePath: return if not isinstance(filePath, basestring): filePath = filePath[0] # Quick clean the first empty item - itemsList = [i.text() for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: stepWidget.takeItem(0) - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): filePath = os.path.abspath(filePath) - baseReplace = os.path.abspath(os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) + baseReplace = os.path.abspath(os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) filePath = filePath.replace(baseReplace, "")[1:] - fileName = os.path.split(filePath)[1].split(".")[0] - stepWidget.addItem(fileName +" | "+filePath) + stepWidget.addItem(fileName + " | " + filePath) self.updateListAttr(stepWidget, stepAttr) def newCustomStep(self, pre=True, *args): """Creates a new custom step - Args: + Arguments: pre (bool, optional): If true adds the steps to the pre step list *args: Maya's Dummy @@ -1165,14 +1289,18 @@ def newCustomStep(self, pre=True, *args): stepAttr = "postCustomStep" stepWidget = self.customStepTab.postCustomStep_listWidget - # Check if we have a custom enviroment for the custom steps initial folder - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + # Check if we have a custom env for the custom steps initial folder + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): startDir = os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") else: startDir = self.root.attr(stepAttr).get() - filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, startingDirectory=startDir, okc="New", - fileFilter='Custom Step .py (*.py)') + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=0, + startingDirectory=startDir, + okc="New", + fileFilter='Custom Step .py (*.py)') if not filePath: return if not isinstance(filePath, basestring): @@ -1193,38 +1321,42 @@ def __init__(self): def run(self, stepDict): """Run method. - i.e: stepDict["mgearRun"].global_ctl gets the global_ctl from shifter rig on post step - i.e: stepDict["otherCustomStepName"].ctlMesh gets the ctlMesh from a previous custom - step called "otherCustomStepName" - Args: - stepDict (dic): Dictionary containing the objects from the previous steps + i.e: stepDict["mgearRun"].global_ctl gets the global_ctl from + shifter rig on post step + i.e: stepDict["otherCustomStepName"].ctlMesh gets the ctlMesh + from a previous custom step called "otherCustomStepName" + Arguments: + stepDict (dict): Dictionary containing the objects from + the previous steps Returns: None: None """ - return'''%stepName + return''' % stepName f = open(filePath, 'w') f.write(rawString + "\n") f.close() # Quick clean the first empty item - itemsList = [i.text() for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: stepWidget.takeItem(0) - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): filePath = os.path.abspath(filePath) - baseReplace = os.path.abspath(os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) + baseReplace = os.path.abspath(os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) filePath = filePath.replace(baseReplace, "")[1:] fileName = os.path.split(filePath)[1].split(".")[0] - stepWidget.addItem(fileName +" | "+filePath) + stepWidget.addItem(fileName + " | " + filePath) self.updateListAttr(stepWidget, stepAttr) def duplicateCustomStep(self, pre=True, *args): """Duplicate the selected step - Args: + Arguments: pre (bool, optional): If true adds the steps to the pre step list *args: Maya's Dummy @@ -1239,69 +1371,81 @@ def duplicateCustomStep(self, pre=True, *args): stepAttr = "postCustomStep" stepWidget = self.customStepTab.postCustomStep_listWidget - # Check if we have a custom enviroment for the custom steps initial folder - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + # Check if we have a custom env for the custom steps initial folder + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): startDir = os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") else: startDir = self.root.attr(stepAttr).get() if stepWidget.selectedItems(): - sourcePath = stepWidget.selectedItems()[0].text().split("|")[-1][1:] - - filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, startingDirectory=startDir, okc="New", - fileFilter='Custom Step .py (*.py)') + sourcePath = stepWidget.selectedItems()[0].text().split( + "|")[-1][1:] + + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=0, + startingDirectory=startDir, + okc="New", + fileFilter='Custom Step .py (*.py)') if not filePath: return if not isinstance(filePath, basestring): filePath = filePath[0] - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): sourcePath = os.path.join(startDir, sourcePath) shutil.copy(sourcePath, filePath) # Quick clean the first empty item - itemsList = [i.text() for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: stepWidget.takeItem(0) - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): filePath = os.path.abspath(filePath) - baseReplace = os.path.abspath(os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) + baseReplace = os.path.abspath(os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) filePath = filePath.replace(baseReplace, "")[1:] - fileName = os.path.split(filePath)[1].split(".")[0] - stepWidget.addItem(fileName +" | "+filePath) + stepWidget.addItem(fileName + " | " + filePath) self.updateListAttr(stepWidget, stepAttr) def exportCustomStep(self, pre=True, *args): """Export custom steps to a json file - Args: - pre (bool, optional): If true takes the steps from the pre step list + Arguments: + pre (bool, optional): If true takes the steps from the + pre step list *args: Maya's Dummy Returns: None: None + """ + if pre: - stepAttr = "preCustomStep" stepWidget = self.customStepTab.preCustomStep_listWidget else: - stepAttr = "postCustomStep" stepWidget = self.customStepTab.postCustomStep_listWidget # Quick clean the first empty item - itemsList = [i.text() for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: stepWidget.takeItem(0) - # Check if we have a custom enviroment for the custom steps initial folder - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + # Check if we have a custom env for the custom steps initial folder + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): startDir = os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") - itemsList = [os.path.join(startDir, i.text().split("|")[-1][1:]) for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [os.path.join(startDir, i.text().split("|")[-1][1:]) + for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] else: - itemsList = [i.text().split("|")[-1][1:] for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text().split("|")[-1][1:] + for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList: startDir = os.path.split(itemsList[-1])[0] else: @@ -1309,7 +1453,7 @@ def exportCustomStep(self, pre=True, *args): return stepsDict = {} - stepsDict["itemsList"] = itemsList + stepsDict["itemsList"] = itemsList for item in itemsList: step = open(item, "r") data = step.read() @@ -1317,8 +1461,11 @@ def exportCustomStep(self, pre=True, *args): step.close() data_string = json.dumps(stepsDict, indent=4, sort_keys=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, startingDirectory=startDir, - fileFilter='Shifter Custom Steps .scs (*%s)' %".scs") + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=0, + startingDirectory=startDir, + fileFilter='Shifter Custom Steps .scs (*%s)' % ".scs") if not filePath: return if not isinstance(filePath, basestring): @@ -1330,13 +1477,15 @@ def exportCustomStep(self, pre=True, *args): def importCustomStep(self, pre=True, *args): """Import custom steps from a json file - Args: + Arguments: pre (bool, optional): If true import to pre steps list *args: Maya's Dummy Returns: None: None + """ + if pre: stepAttr = "preCustomStep" stepWidget = self.customStepTab.preCustomStep_listWidget @@ -1345,19 +1494,26 @@ def importCustomStep(self, pre=True, *args): stepWidget = self.customStepTab.postCustomStep_listWidget # option import only paths or unpack steps - option = pm.confirmDialog( title='Shifter Custom Step Import Style', - message='Do you want to import only the path or unpack and import?', - button=['Only Path','Unpack', 'Cancel'], defaultButton='Only Path', - cancelButton='Cancel', dismissString='Cancel' ) - - if option in ['Only Path', 'Unpack' ]: - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + option = pm.confirmDialog( + title='Shifter Custom Step Import Style', + message='Do you want to import only the path or' + ' unpack and import?', + button=['Only Path', 'Unpack', 'Cancel'], + defaultButton='Only Path', + cancelButton='Cancel', + dismissString='Cancel') + + if option in ['Only Path', 'Unpack']: + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): startDir = os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "") else: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2( dialogStyle=2, fileMode=1, startingDirectory=startDir, - fileFilter='Shifter Custom Steps .scs (*%s)' %".scs") + filePath = pm.fileDialog2( + dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + fileFilter='Shifter Custom Steps .scs (*%s)' % ".scs") if not filePath: return if not isinstance(filePath, basestring): @@ -1365,12 +1521,15 @@ def importCustomStep(self, pre=True, *args): stepDict = json.load(open(filePath)) stepsList = [] - if option =='Only Path': + if option == 'Only Path': for item in stepDict["itemsList"]: stepsList.append(item) elif option == 'Unpack': - unPackDir = pm.fileDialog2(dialogStyle=2, fileMode=2, startingDirectory=startDir) + unPackDir = pm.fileDialog2( + dialogStyle=2, + fileMode=2, + startingDirectory=startDir) if not filePath: return if not isinstance(unPackDir, basestring): @@ -1384,20 +1543,30 @@ def importCustomStep(self, pre=True, *args): f.write(stepDict[item]) f.close() - if option in ['Only Path', 'Unpack' ]: + if option in ['Only Path', 'Unpack']: for item in stepsList: # Quick clean the first empty item - itemsList = [i.text() for i in stepWidget.findItems("", QtCore.Qt.MatchContains)] + itemsList = [i.text() for i in stepWidget.findItems( + "", QtCore.Qt.MatchContains)] if itemsList and not itemsList[0]: stepWidget.takeItem(0) - if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): + if os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, ""): item = os.path.abspath(item) - baseReplace = os.path.abspath(os.environ.get(MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) + baseReplace = os.path.abspath(os.environ.get( + MGEAR_SHIFTER_CUSTOMSTEP_KEY, "")) item = item.replace(baseReplace, "")[1:] - fileName = os.path.split(item)[1].split(".")[0] - stepWidget.addItem(fileName +" | "+item) + stepWidget.addItem(fileName + " | " + item) self.updateListAttr(stepWidget, stepAttr) + + +# Backwards compatibility aliases +MainGuide = Main +RigGuide = Rig +helperSlots = HelperSlots +guideSettingsTab = GuideSettingsTab +customStepTab = CustomStepTab +guideSettings = GuideSettings diff --git a/scripts/mgear/maya/shifter/guideUI.py b/scripts/mgear/maya/shifter/guideUI.py index 19f8446..7a9f687 100644 --- a/scripts/mgear/maya/shifter/guideUI.py +++ b/scripts/mgear/maya/shifter/guideUI.py @@ -1,31 +1,5 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - import mgear.maya.pyqt as gqt -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from mgear.vendor.Qt import QtCore, QtWidgets class Ui_Form(object): def setupUi(self, Form): @@ -142,64 +116,7 @@ def setupUi(self, Form): self.horizontalLayout_6.addWidget(self.R_color_ik_spinBox) self.gridLayout.addLayout(self.horizontalLayout_6, 2, 2, 1, 1) self.gridLayout_7.addLayout(self.gridLayout, 0, 0, 1, 1) - self.gridLayout_2.addWidget(self.groupBox_5, 5, 0, 1, 1) - self.groupBox_4 = QtWidgets.QGroupBox(Form) - self.groupBox_4.setObjectName("groupBox_4") - self.gridLayout_6 = QtWidgets.QGridLayout(self.groupBox_4) - self.gridLayout_6.setObjectName("gridLayout_6") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.verticalLayout_3 = QtWidgets.QVBoxLayout() - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.rigTabs_label = QtWidgets.QLabel(self.groupBox_4) - self.rigTabs_label.setObjectName("rigTabs_label") - self.verticalLayout_3.addWidget(self.rigTabs_label) - self.rigTabs_listWidget = QtWidgets.QListWidget(self.groupBox_4) - self.rigTabs_listWidget.setDragDropOverwriteMode(True) - self.rigTabs_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) - self.rigTabs_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction) - self.rigTabs_listWidget.setAlternatingRowColors(True) - self.rigTabs_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - self.rigTabs_listWidget.setSelectionRectVisible(False) - self.rigTabs_listWidget.setObjectName("rigTabs_listWidget") - self.verticalLayout_3.addWidget(self.rigTabs_listWidget) - self.horizontalLayout_2.addLayout(self.verticalLayout_3) - self.verticalLayout_4 = QtWidgets.QVBoxLayout() - self.verticalLayout_4.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) - self.verticalLayout_4.setObjectName("verticalLayout_4") - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_4.addItem(spacerItem) - self.addTab_pushButton = QtWidgets.QPushButton(self.groupBox_4) - self.addTab_pushButton.setObjectName("addTab_pushButton") - self.verticalLayout_4.addWidget(self.addTab_pushButton) - self.removeTab_pushButton = QtWidgets.QPushButton(self.groupBox_4) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.removeTab_pushButton.sizePolicy().hasHeightForWidth()) - self.removeTab_pushButton.setSizePolicy(sizePolicy) - self.removeTab_pushButton.setObjectName("removeTab_pushButton") - self.verticalLayout_4.addWidget(self.removeTab_pushButton) - spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_4.addItem(spacerItem1) - self.horizontalLayout_2.addLayout(self.verticalLayout_4) - self.verticalLayout_2 = QtWidgets.QVBoxLayout() - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.available_label = QtWidgets.QLabel(self.groupBox_4) - self.available_label.setObjectName("available_label") - self.verticalLayout_2.addWidget(self.available_label) - self.available_listWidget = QtWidgets.QListWidget(self.groupBox_4) - self.available_listWidget.setDragDropOverwriteMode(True) - self.available_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.NoDragDrop) - self.available_listWidget.setDefaultDropAction(QtCore.Qt.IgnoreAction) - self.available_listWidget.setAlternatingRowColors(True) - self.available_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - self.available_listWidget.setSelectionRectVisible(False) - self.available_listWidget.setObjectName("available_listWidget") - self.verticalLayout_2.addWidget(self.available_listWidget) - self.horizontalLayout_2.addLayout(self.verticalLayout_2) - self.gridLayout_6.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) - self.gridLayout_2.addWidget(self.groupBox_4, 4, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_5, 6, 0, 1, 1) self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setObjectName("groupBox") self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox) @@ -257,7 +174,64 @@ def setupUi(self, Form): self.horizontalLayout.addWidget(self.loadSkinPath_pushButton) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout_4.addLayout(self.verticalLayout, 0, 0, 1, 1) - self.gridLayout_2.addWidget(self.groupBox_2, 2, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_2, 3, 0, 1, 1) + self.groupBox_4 = QtWidgets.QGroupBox(Form) + self.groupBox_4.setObjectName("groupBox_4") + self.gridLayout_6 = QtWidgets.QGridLayout(self.groupBox_4) + self.gridLayout_6.setObjectName("gridLayout_6") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.verticalLayout_3 = QtWidgets.QVBoxLayout() + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.rigTabs_label = QtWidgets.QLabel(self.groupBox_4) + self.rigTabs_label.setObjectName("rigTabs_label") + self.verticalLayout_3.addWidget(self.rigTabs_label) + self.rigTabs_listWidget = QtWidgets.QListWidget(self.groupBox_4) + self.rigTabs_listWidget.setDragDropOverwriteMode(True) + self.rigTabs_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) + self.rigTabs_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction) + self.rigTabs_listWidget.setAlternatingRowColors(True) + self.rigTabs_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.rigTabs_listWidget.setSelectionRectVisible(False) + self.rigTabs_listWidget.setObjectName("rigTabs_listWidget") + self.verticalLayout_3.addWidget(self.rigTabs_listWidget) + self.horizontalLayout_2.addLayout(self.verticalLayout_3) + self.verticalLayout_4 = QtWidgets.QVBoxLayout() + self.verticalLayout_4.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.verticalLayout_4.setObjectName("verticalLayout_4") + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_4.addItem(spacerItem) + self.addTab_pushButton = QtWidgets.QPushButton(self.groupBox_4) + self.addTab_pushButton.setObjectName("addTab_pushButton") + self.verticalLayout_4.addWidget(self.addTab_pushButton) + self.removeTab_pushButton = QtWidgets.QPushButton(self.groupBox_4) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.removeTab_pushButton.sizePolicy().hasHeightForWidth()) + self.removeTab_pushButton.setSizePolicy(sizePolicy) + self.removeTab_pushButton.setObjectName("removeTab_pushButton") + self.verticalLayout_4.addWidget(self.removeTab_pushButton) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_4.addItem(spacerItem1) + self.horizontalLayout_2.addLayout(self.verticalLayout_4) + self.verticalLayout_2 = QtWidgets.QVBoxLayout() + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.available_label = QtWidgets.QLabel(self.groupBox_4) + self.available_label.setObjectName("available_label") + self.verticalLayout_2.addWidget(self.available_label) + self.available_listWidget = QtWidgets.QListWidget(self.groupBox_4) + self.available_listWidget.setDragDropOverwriteMode(True) + self.available_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.NoDragDrop) + self.available_listWidget.setDefaultDropAction(QtCore.Qt.IgnoreAction) + self.available_listWidget.setAlternatingRowColors(True) + self.available_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.available_listWidget.setSelectionRectVisible(False) + self.available_listWidget.setObjectName("available_listWidget") + self.verticalLayout_2.addWidget(self.available_listWidget) + self.horizontalLayout_2.addLayout(self.verticalLayout_2) + self.gridLayout_6.addLayout(self.horizontalLayout_2, 0, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_4, 5, 0, 1, 1) self.groupBox_3 = QtWidgets.QGroupBox(Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -270,7 +244,7 @@ def setupUi(self, Form): self.jointRig_checkBox = QtWidgets.QCheckBox(self.groupBox_3) self.jointRig_checkBox.setObjectName("jointRig_checkBox") self.gridLayout_5.addWidget(self.jointRig_checkBox, 0, 0, 1, 1) - self.gridLayout_2.addWidget(self.groupBox_3, 3, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_3, 4, 0, 1, 1) self.groupBox_6 = QtWidgets.QGroupBox(Form) self.groupBox_6.setObjectName("groupBox_6") self.gridLayout_8 = QtWidgets.QGridLayout(self.groupBox_6) @@ -282,6 +256,19 @@ def setupUi(self, Form): self.classicChannelNames_checkBox.setObjectName("classicChannelNames_checkBox") self.gridLayout_8.addWidget(self.classicChannelNames_checkBox, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox_6, 1, 0, 1, 1) + self.groupBox_7 = QtWidgets.QGroupBox(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.groupBox_7.sizePolicy().hasHeightForWidth()) + self.groupBox_7.setSizePolicy(sizePolicy) + self.groupBox_7.setObjectName("groupBox_7") + self.gridLayout_9 = QtWidgets.QGridLayout(self.groupBox_7) + self.gridLayout_9.setObjectName("gridLayout_9") + self.worldCtl_checkBox = QtWidgets.QCheckBox(self.groupBox_7) + self.worldCtl_checkBox.setObjectName("worldCtl_checkBox") + self.gridLayout_9.addWidget(self.worldCtl_checkBox, 0, 0, 1, 1) + self.gridLayout_2.addWidget(self.groupBox_7, 2, 0, 1, 1) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) @@ -298,11 +285,6 @@ def retranslateUi(self, Form): self.L_color_fk_label_2.setText(gqt.fakeTranslate("Form", "IK", None, -1)) self.L_color_fk_label_6.setText(gqt.fakeTranslate("Form", "IK", None, -1)) self.L_color_fk_label_4.setText(gqt.fakeTranslate("Form", " IK", None, -1)) - self.groupBox_4.setTitle(gqt.fakeTranslate("Form", "Synoptic Settings", None, -1)) - self.rigTabs_label.setText(gqt.fakeTranslate("Form", "Rig Tabs", None, -1)) - self.addTab_pushButton.setText(gqt.fakeTranslate("Form", "<<", None, -1)) - self.removeTab_pushButton.setText(gqt.fakeTranslate("Form", ">>", None, -1)) - self.available_label.setText(gqt.fakeTranslate("Form", "Available Tabs", None, -1)) self.groupBox.setTitle(gqt.fakeTranslate("Form", "Rig Settings", None, -1)) self.rigName_label.setText(gqt.fakeTranslate("Form", "Rig Name", None, -1)) self.mode_label.setText(gqt.fakeTranslate("Form", "Debug Mode", None, -1)) @@ -320,10 +302,18 @@ def retranslateUi(self, Form): self.importSkin_checkBox.setText(gqt.fakeTranslate("Form", "Import Skin", None, -1)) self.skin_label.setText(gqt.fakeTranslate("Form", "Skin Path", None, -1)) self.loadSkinPath_pushButton.setText(gqt.fakeTranslate("Form", "Load Path", None, -1)) + self.groupBox_4.setTitle(gqt.fakeTranslate("Form", "Synoptic Settings", None, -1)) + self.rigTabs_label.setText(gqt.fakeTranslate("Form", "Rig Tabs", None, -1)) + self.addTab_pushButton.setText(gqt.fakeTranslate("Form", "<<", None, -1)) + self.removeTab_pushButton.setText(gqt.fakeTranslate("Form", ">>", None, -1)) + self.available_label.setText(gqt.fakeTranslate("Form", "Available Tabs", None, -1)) self.groupBox_3.setTitle(gqt.fakeTranslate("Form", "Joint Settings", None, -1)) self.jointRig_checkBox.setText(gqt.fakeTranslate("Form", "Separated Joint Structure", None, -1)) self.groupBox_6.setTitle(gqt.fakeTranslate("Form", "Animation Channels Settings", None, -1)) self.proxyChannels_checkBox.setText(gqt.fakeTranslate("Form", "Add Internal Proxy Channels", None, -1)) self.classicChannelNames_checkBox.setToolTip(gqt.fakeTranslate("Form", "

If this option is checked. The channel name will have unique full name.

i.e: "arm_L0_blend"

If the option is unchecked. The channel will use the simple name.

i.e: "arm_blend"

NOTE: With the option unchecked. If the channel host (uiHost) have 2 or more componets of the same type. The connection will be shared amoung all the componets with the same name channel.

i.e: If we have 2 arms, the channels will be shared for both arms. To avoid this behaviour with the unchecked option, please use a unique channel host for each component.

", None, -1)) self.classicChannelNames_checkBox.setText(gqt.fakeTranslate("Form", "Use Classic Channel Names (All channels will have unique names.)", None, -1)) + self.groupBox_7.setTitle(gqt.fakeTranslate("Form", "Base Rig Control", None, -1)) + self.worldCtl_checkBox.setToolTip(gqt.fakeTranslate("Form", "

Shifter creates by default a Base control called "global_C0_ctl".

Since this control is not accesible from any guide locator. Is not possible to add it as a space reference.

If this option is active, The base control will be named "world_ctl" and we can add "global_C0_ctl" as a regular "Control_01" component.

This way we can use it as space reference.

The biped guide template is configured with this structure.

", None, -1)) + self.worldCtl_checkBox.setText(gqt.fakeTranslate("Form", "Use World Ctl", None, -1)) diff --git a/scripts/mgear/maya/shifter/guideUI.ui b/scripts/mgear/maya/shifter/guideUI.ui index 0b338db..4831e84 100644 --- a/scripts/mgear/maya/shifter/guideUI.ui +++ b/scripts/mgear/maya/shifter/guideUI.ui @@ -14,7 +14,7 @@ Form
- + Color Settings @@ -201,7 +201,138 @@
- + + + + Rig Settings + + + + + + + + Rig Name + + + + + + + + + + Debug Mode + + + + + + + + Final + + + + + WIP + + + + + + + + Guide Build Steps: + + + + + + + + All Steps + + + + + Objects + + + + + Attributes + + + + + Operators + + + + + Connect + + + + + Joints + + + + + Finalize + + + + + + + + + + + + + Skinning Settings + + + + + + + + Import Skin + + + + + + + + + Skin Path + + + + + + + + + + Load Path + + + + + + + + + + + Synoptic Settings @@ -333,138 +464,7 @@
- - - - Rig Settings - - - - - - - - Rig Name - - - - - - - - - - Debug Mode - - - - - - - - Final - - - - - WIP - - - - - - - - Guide Build Steps: - - - - - - - - All Steps - - - - - Objects - - - - - Attributes - - - - - Operators - - - - - Connect - - - - - Joints - - - - - Finalize - - - - - - - - - - - - - Skinning Settings - - - - - - - - Import Skin - - - - - - - - - Skin Path - - - - - - - - - - Load Path - - - - - - - - - - - + @@ -512,6 +512,31 @@
+ + + + + 0 + 0 + + + + Base Rig Control + + + + + + <html><head/><body><p>Shifter creates by default a Base control called &quot;<span style=" font-weight:600;">global_C0_ctl</span>&quot;. </p><p>Since this control is not accesible from any guide locator. Is not possible to add it as a space reference.</p><p>If this option is active, The base control will be named &quot;<span style=" font-weight:600;">world_ctl</span>&quot; and we can add &quot;<span style=" font-weight:600;">global_C0_ctl</span>&quot; as a regular &quot;Control_01&quot; component. </p><p>This way we can use it as space reference.</p><p>The biped guide template is configured with this structure.</p></body></html> + + + Use World Ctl + + + + + + diff --git a/scripts/mgear/maya/simpleRig/__init__.py b/scripts/mgear/maya/simpleRig/__init__.py index cb1d001..d64ee5a 100644 --- a/scripts/mgear/maya/simpleRig/__init__.py +++ b/scripts/mgear/maya/simpleRig/__init__.py @@ -1,53 +1,19 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Simple autorig for props or set dressing. +"""Simple autorig for props or set dressing. This rigging system follow the structure and naming conventions from Shifer. """ import datetime import getpass -from mGear_pyqt import QtWidgets, wrapInstance +from mgear.vendor.Qt import QtWidgets, QtCompat -# Maya import pymel.core as pm import maya.OpenMayaUI as OpenMayaUI -#mGear import mgear import mgear.maya.icon as ico -import mgear.maya.dag as dag -import mgear.maya.transform as tra -import mgear.maya.node as nod -import mgear.string as st -import mgear.maya.attribute as att - - +from mgear.maya import dag, transform, node, attribute +from mgear import string ############################################# @@ -57,7 +23,7 @@ PGROUP_EXTENSION = "pgrp" ROOT_EXTENSION = "root" WIP = False - +iconList = ["cube", "circle", "square"] ############################################# @@ -73,8 +39,6 @@ def bBoxData(obj=None, yZero=True, *args): yZero (bool, optional): If true, sets the hight to the lowest point *args: Maya dummy - Returns: - TYPE: Description """ volCenter = False @@ -83,13 +47,14 @@ def bBoxData(obj=None, yZero=True, *args): shapes = pm.listRelatives(obj, ad=True, s=True) if shapes: bb = pm.polyEvaluate(shapes, b=True) - volCenter = [ (axis[0] + axis[1]) /2 for axis in bb ] + volCenter = [(axis[0] + axis[1]) / 2 for axis in bb] if yZero: volCenter[1] = bb[1][0] - radio = max([bb[0][1] - bb[0][0],bb[2][1] - bb[2][0]])/1.7 + radio = max([bb[0][1] - bb[0][0], bb[2][1] - bb[2][0]]) / 1.7 return volCenter, radio, bb + def getMayaWindow(): """Gets Maya main window @@ -97,7 +62,8 @@ def getMayaWindow(): QMainWindow: Maya window """ ptr = OpenMayaUI.MQtUtil.mainWindow() - return wrapInstance(long(ptr), QtWidgets.QMainWindow) + return QtCompat.wrapInstance(long(ptr), QtWidgets.QMainWindow) + def cnsPart(source, target): """Constraint target to source with parent and scale constraint @@ -110,22 +76,21 @@ def cnsPart(source, target): pm.parentConstraint(source, target, mo=True) pm.scaleConstraint(source, target, mo=True) - if WIP: # Is not working with stack offset objects - offsetLvl = pm.createNode("transform", n=source.name().split("_")[0]+"_offLvl") + offsetLvl = pm.createNode("transform", + n=source.name().split("_")[0] + "_offLvl") pm.parent(offsetLvl, source) - mulmat_node = pm.createNode("multMatrix") - pm.connectAttr(offsetLvl+".worldMatrix", mulmat_node+".matrixIn[0]", f=True) - pm.connectAttr(target+".parentInverseMatrix", mulmat_node+".matrixIn[1]", f=True) - - - dm_node = nod.createDecomposeMatrixNode(mulmat_node+".matrixSum") - pm.connectAttr(dm_node+".outputTranslate", target+".t", f=True) - pm.connectAttr(dm_node+".outputRotate", target+".r", f=True) - pm.connectAttr(dm_node+".outputScale", target+".s", f=True) - + mulmat_node = pm.createNode("multMatrix") + pm.connectAttr(offsetLvl + ".worldMatrix", + mulmat_node + ".matrixIn[0]", f=True) + pm.connectAttr(target + ".parentInverseMatrix", + mulmat_node + ".matrixIn[1]", f=True) + dm_node = node.createDecomposeMatrixNode(mulmat_node + ".matrixSum") + pm.connectAttr(dm_node + ".outputTranslate", target + ".t", f=True) + pm.connectAttr(dm_node + ".outputRotate", target + ".r", f=True) + pm.connectAttr(dm_node + ".outputScale", target + ".s", f=True) ########################################### @@ -138,7 +103,8 @@ def simpleRig(rigName="rig", wCntCtl=False, *args): Args: rigName (str, optional): Name of the rig. - wCntCtl (bool, optional): Place the Golbal control in the wolrd center or use the general BBox of the selection. + wCntCtl (bool, optional): Place the Golbal control in the wolrd + center or use the general BBox of the selection. *args: Description Returns: @@ -150,118 +116,171 @@ def simpleRig(rigName="rig", wCntCtl=False, *args): absBB = [] absRadio = 0.5 - listSelection = [oSel for oSel in pm.selected()] - + listSelection = [oSel for oSel in pm.selected()] # Create base structure rig = pm.createNode('transform', n=rigName) geo = pm.createNode('transform', n="geo", p=rig) + geo.attr("overrideEnabled").set(1) + geo.attr("overrideDisplayType").set(2) + + attribute.addAttribute(rig, "is_rig", "bool", True) + attribute.addAttribute(rig, "rig_name", "string", "rig") + attribute.addAttribute(rig, "user", "string", getpass.getuser()) + attribute.addAttribute(rig, "date", "string", str(datetime.datetime.now())) - att.addAttribute(rig, "is_rig", "bool", True) - att.addAttribute(rig, "rig_name", "string", "rig") - att.addAttribute(rig, "user", "string", getpass.getuser()) - att.addAttribute(rig, "date", "string", str(datetime.datetime.now())) - att.addAttribute(rig, "maya_version", "string", str(pm.mel.eval("getApplicationVersionAsFloat"))) - att.addAttribute(rig, "gear_version", "string", mgear.getVersion()) - att.addAttribute(rig, "ctl_vis", "bool", True) - att.addAttribute(rig, "jnt_vis", "bool", False) + attribute.addAttribute(rig, + "maya_version", + "string", + str(pm.mel.eval("getApplicationVersionAsFloat"))) - att.addAttribute(rig, "quickselA", "string", "") - att.addAttribute(rig, "quickselB", "string", "") - att.addAttribute(rig, "quickselC", "string", "") - att.addAttribute(rig, "quickselD", "string", "") - att.addAttribute(rig, "quickselE", "string", "") - att.addAttribute(rig, "quickselF", "string", "") + attribute.addAttribute(rig, "gear_version", "string", mgear.getVersion()) + attribute.addAttribute(rig, "ctl_vis", "bool", True) + attribute.addAttribute(rig, "jnt_vis", "bool", False) - rig.addAttr( "rigGroups", at='message', m=1 ) - rig.addAttr( "rigPoses", at='message', m=1 ) + attribute.addAttribute(rig, "quickselA", "string", "") + attribute.addAttribute(rig, "quickselB", "string", "") + attribute.addAttribute(rig, "quickselC", "string", "") + attribute.addAttribute(rig, "quickselD", "string", "") + attribute.addAttribute(rig, "quickselE", "string", "") + attribute.addAttribute(rig, "quickselF", "string", "") + rig.addAttr("rigGroups", at='message', m=1) + rig.addAttr("rigPoses", at='message', m=1) - for oSel in listSelection: + for oSel in listSelection: bbCenter, bbRadio, bb = bBoxData(oSel) lvl = pm.createNode('transform', n=oSel.name().split("_")[0] + "_npo") lvlList.append(lvl) - t = tra.getTransformFromPos(bbCenter) + t = transform.getTransformFromPos(bbCenter) lvl.setTransformation(t) - ctl = ico.create(lvl, oSel.name().split("_")[0] + "_ctl", t, 14, icon="circle", w=bbRadio*2) - cnsPart(ctl, oSel) + ctl = ico.create(lvl, + oSel.name().split("_")[0] + "_ctl", + t, + 14, + icon="circle", + w=bbRadio * 2) + + cnsPart(ctl, oSel) ctlList.append(ctl) for oShape in oSel.listRelatives(ad=True, s=True, type='mesh'): - pm.connectAttr(ctl+".visibility", oShape+".visibility", f=True) + pm.connectAttr(ctl + ".visibility", oShape + ".visibility", f=True) meshList.append(oShape) - #Reparenting + # Reparenting pm.parent(oSel, geo) - - #calculate the global control BB + # calculate the global control BB if not wCntCtl: if not absBB: absBB = bb else: - absBB = [[min(bb[0][0], absBB[0][0]), max(bb[0][1], absBB[0][1])], - [min(bb[1][0], absBB[1][0]), max(bb[1][1], absBB[1][1])], - [min(bb[2][0], absBB[2][0]), max(bb[2][1], absBB[2][1])]] + absBB = [[min(bb[0][0], absBB[0][0]), + max(bb[0][1], absBB[0][1])], + [min(bb[1][0], absBB[1][0]), + max(bb[1][1], absBB[1][1])], + [min(bb[2][0], absBB[2][0]), + max(bb[2][1], absBB[2][1])]] userPivots = dag.findChildrenPartial(oSel, PIVOT_EXTENSION) # Loop selection uPivotCtl = [] if userPivots: - for uPivot in reversed(userPivots): + for uPivot in userPivots: try: - pgrp = pm.PyNode(uPivot.name().split('_')[0]+"_"+PGROUP_EXTENSION) - except: - pm.displayError("The selected pivot dont have the group contrapart. Review your rig structure") + pstr = uPivot.name().split('_')[0] + "_" + PGROUP_EXTENSION + pgrp = pm.PyNode(pstr) + except TypeError: + pm.displayError("The selected pivot dont have the group" + " contrapart. Review your rig structure") return False objList = pgrp.listRelatives(ad=True) if objList: bbCenter, bbRadio, bb = bBoxData(objList) t = uPivot.getMatrix(worldSpace=True) - lvlParent = pm.listRelatives(uPivot, p=True)[0].name().split("_")[0]+"_ctl" - lvl = pm.createNode('transform', n=uPivot.split("_")[0] + "_npo") + lvlParent = pm.listRelatives( + uPivot, p=True)[0].name().split("_")[0] + "_ctl" + + lvl = pm.createNode('transform', + n=uPivot.split("_")[0] + "_npo") lvl.setTransformation(t) - ctl = ico.create(lvl, uPivot.split("_")[0] + "_ctl", t, 15, icon="cube", w=bbRadio*2, h=bbRadio*2, d=bbRadio*2) + icon = iconList[uPivot.attr("ctlIcon").get()] + ctlKeyable = [] + if uPivot.attr("animTranslation").get(): + ctlKeyable = ctlKeyable + ["tx", "ty", "tz"] + if uPivot.attr("animRotation").get(): + ctlKeyable = ctlKeyable + ["ro", "rx", "ry", "rz"] + if uPivot.attr("animScale").get(): + ctlKeyable = ctlKeyable + ["sx", "sy", "sz"] + + ctl = ico.create(lvl, + uPivot.split("_")[0] + "_ctl", + t, + 15, + icon=icon, + w=bbRadio * 2, + h=bbRadio * 2, + d=bbRadio * 2) + + attribute.setKeyableAttributes(ctl, ctlKeyable) pm.parent(lvl, lvlParent) - att.setKeyableAttributes(lvl, []) + attribute.setKeyableAttributes(lvl, []) uPivotCtl.append(ctl) - #Constraint + # Constraint cnsPart(ctl, pgrp) - for oShape in uPivot.listRelatives(ad=True, s=True, type='mesh'): - pm.connectAttr(ctl+".visibility", oShape+".visibility", f=True) + for oShape in uPivot.listRelatives(ad=True, + s=True, + type='mesh'): + pm.connectAttr(ctl + ".visibility", + oShape + ".visibility", + f=True) meshList.append(oShape) - #hidde user pivot + # hidde user pivot uPivot.attr("visibility").set(False) # setting the global control if wCntCtl: - absCenter = [0,0,0] + absCenter = [0, 0, 0] else: - absCenter = [ (axis[0] + axis[1]) /2 for axis in absBB ] - #set the cencter in the floor + absCenter = [(axis[0] + axis[1]) / 2 for axis in absBB] + # set the cencter in the floor absCenter[1] = absBB[1][0] - absRadio = max([absBB[0][1] - absBB[0][0],absBB[2][1] - absBB[2][0]])/1.7 - t = tra.getTransformFromPos(absCenter) + + absRadio = max([absBB[0][1] - absBB[0][0], + absBB[2][1] - absBB[2][0]]) / 1.7 + + t = transform.getTransformFromPos(absCenter) lvl = pm.createNode('transform', n="global_npo") lvl.setTransformation(t) pm.parent(lvl, rig) - ctlGlobal = ico.create(lvl, "global_ctl", t, 17, icon="square", w=absRadio*2, d=absRadio*2) + + ctlGlobal = ico.create(lvl, + "global_ctl", + t, + 17, + icon="square", + w=absRadio * 2, + d=absRadio * 2) + pm.parent(lvlList, ctlGlobal) ctlList.append(ctlGlobal) - att.setKeyableAttributes(lvl, []) + attribute.setKeyableAttributes(lvl, []) for lvl in lvlList: - att.setKeyableAttributes(lvl, []) + attribute.setKeyableAttributes(lvl, []) # Create sets meshSet = pm.sets(meshList, n="CACHE_grp") ctlSet = pm.sets([ctlList, uPivotCtl], n="rig_controllers_grp") deformersSet = pm.sets(meshList, n="rig_deformers_grp") compGroup = pm.sets(meshList, n="rig_componentsRoots_grp") - rigSets = pm.sets([meshSet, ctlSet, deformersSet, compGroup], n="rig_Sets_grp") + + rigSets = pm.sets([meshSet, ctlSet, deformersSet, compGroup], + n="rig_Sets_grp") pm.connectAttr(rigSets.attr("message"), "rig.rigGroups[0]") pm.connectAttr(meshSet.attr("message"), "rig.rigGroups[1]") @@ -269,10 +288,25 @@ def simpleRig(rigName="rig", wCntCtl=False, *args): pm.connectAttr(deformersSet.attr("message"), "rig.rigGroups[3]") pm.connectAttr(compGroup.attr("message"), "rig.rigGroups[4]") - #create dagPose + if oSel.hasAttr("animSets") and oSel.attr("animSets").get(): + # create anim Sets + pm.sets(n="animNodes", em=True) + animNodes_set = pm.PyNode("animNodes") + + pm.sets(n="animSets", em=True) + animSets_set = pm.PyNode("animSets") + + # adding set + pm.sets(animSets_set, add=animNodes_set) + pm.sets(animNodes_set, add=ctlSet.members()) + + pm.connectAttr(animSets_set.attr("message"), "rig.rigGroups[5]") + pm.connectAttr(animNodes_set.attr("message"), "rig.rigGroups[6]") + + # create dagPose pm.select(ctlSet) - node = pm.dagPose(save=True, selection=True) - pm.connectAttr(node.message, rig.rigPoses[0]) + o_node = pm.dagPose(save=True, selection=True) + pm.connectAttr(o_node.message, rig.rigPoses[0]) return rig @@ -287,25 +321,40 @@ def setUserRigPivot(*args): Returns: dagNode, dagNode: the axis and the group """ - listSelection = [oSel for oSel in pm.selected()] + listSelection = [oSel for oSel in pm.selected()] if listSelection: parent = listSelection[0].listRelatives(p=True) if parent: parent = parent[0] else: - pm.displayWarning("In order to set user pivot, the selected object must have one parent or Root") + pm.displayWarning("In order to set user pivot, the selected " + "object must have one parent or Root") return False, False dialog = NameUIDialog(getMayaWindow()) dialog.exec_() - oName = dialog.rootName + oName = dialog.rootName bbCenter, bbRadio, bb = bBoxData(listSelection, yZero=False) - t = tra.getTransformFromPos(bbCenter) - axis = ico.axis(parent=parent, name=oName +"_"+PIVOT_EXTENSION, width=1, color=[0,0,0], m=t) - pgrp = pm.group(listSelection, p=parent, n=oName + "_"+ PGROUP_EXTENSION) + t = transform.getTransformFromPos(bbCenter) + + axis = ico.axis(parent=parent, + name=oName + "_" + PIVOT_EXTENSION, + width=bbRadio * 2, + color=[0, 0, 0], + m=t) + + attribute.addAttribute(axis, "animTranslation", "bool", True) + attribute.addAttribute(axis, "animRotation", "bool", True) + attribute.addAttribute(axis, "animScale", "bool", True) + attribute.addEnumAttribute(axis, "ctlIcon", 0, iconList) + + pgrp = pm.group(listSelection, + p=parent, + n=oName + "_" + PGROUP_EXTENSION) return axis, pgrp else: - pm.displayWarning("Please select the objects to set and the parent root/userPivot") + pm.displayWarning("Please select the objects to set and " + "the parent root/userPivot") return False, False @@ -320,15 +369,18 @@ def selectObjectInUserRootPivot(*args): """ oSel = pm.selected()[0] try: - pgrp = pm.PyNode(oSel.name().split('_')[0]+"_"+PGROUP_EXTENSION) + pgrp = pm.PyNode(oSel.name().split('_')[0] + "_" + PGROUP_EXTENSION) objList = pgrp.listRelatives(ad=True, type="transform") pm.select(objList) - except: - pm.displayError("The selected pivot dont have the group contrapart. Review your rig structure") + except TypeError: + pm.displayError("The selected pivot dont have the group contrapart." + " Review your rig structure") return False + def addToUserPivot(*args): """Add the selected objects to a user pivot. + First select the objects and last the pivot Args: @@ -340,10 +392,11 @@ def addToUserPivot(*args): oSel = pm.selected()[:-1] pivot = pm.selected()[-1] try: - pgrp = pm.PyNode(pivot.name().split('_')[0]+"_"+PGROUP_EXTENSION) + pgrp = pm.PyNode(pivot.name().split('_')[0] + "_" + PGROUP_EXTENSION) pm.parent(oSel, pgrp) - except: - pm.displayError("The selected pivot dont have the group contrapart. Review your rig structure") + except TypeError: + pm.displayError("The selected pivot dont have the group contrapart. " + "Review your rig structure") return False @@ -359,21 +412,19 @@ def createRoot(*args): group = False dialog = NameUIDialog(getMayaWindow()) dialog.exec_() - oName = dialog.rootName + oName = dialog.rootName if oName: - group = pm.group(n=oName + "_" + ROOT_EXTENSION) + attribute.addAttribute(group, "animSets", "bool", False) return group - ########################################### # UI ########################################### class NameUIDialog(QtWidgets.QDialog): - """Ui dialog for names input + """Ui dialog for names input""" - """ def __init__(self, parent=None): super(NameUIDialog, self).__init__(parent) self.setWindowTitle('Name') @@ -384,7 +435,7 @@ def __init__(self, parent=None): mainVbox = QtWidgets.QVBoxLayout(self) - label = QtWidgets.QLabel("Please set the name for this part." ) + label = QtWidgets.QLabel("Please set the name for this part.") label.setWordWrap(True) mainVbox.addWidget(label) @@ -398,10 +449,8 @@ def __init__(self, parent=None): self.line.returnPressed.connect(self.getName) - - def getName(self): - """Get the name of from the dialog - """ - self.rootName = st.removeInvalidCharacter(self.line.text()) + """Get the name of from the dialog""" + + self.rootName = string.removeInvalidCharacter(self.line.text()) self.close() diff --git a/scripts/mgear/maya/skin.py b/scripts/mgear/maya/skin.py index d9c296c..7087510 100644 --- a/scripts/mgear/maya/skin.py +++ b/scripts/mgear/maya/skin.py @@ -1,36 +1,10 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Author: Chad Vernon ------------------ www.chadvernon.com -# Date: 2016 / 10 / 10 - """ Functions to work with skinCluster data. This module is derivated from Chad Vernon's Skin IO. -`Chad Vernon's github `_ +`Chad Vernon's github \n +`_ """ ############################################# @@ -39,7 +13,6 @@ import os import cPickle as pickle import json -from functools import partial import pymel.core as pm import maya.OpenMaya as OpenMaya @@ -48,26 +21,27 @@ PACK_EXT = ".gSkinPack" ###################################### -## Skin getters +# Skin getters ###################################### + def getSkinCluster(obj): - """ - Get the skincluster of a given object + """Get the skincluster of a given object - Args: + Arguments: obj (dagNode): The object to get skincluster Returns: pyNode: The skin cluster pynode object - """ + """ skinCluster = None - if isinstance(obj, basestring): + if isinstance(obj, basestring): obj = pm.PyNode(obj) try: - if pm.nodeType(obj.getShape()) in ["mesh", "nurbsSurface", "nurbsCurve"]: + if (pm.nodeType(obj.getShape()) + in ["mesh", "nurbsSurface", "nurbsCurve"]): for shape in obj.getShapes(): try: @@ -75,20 +49,20 @@ def getSkinCluster(obj): try: if skC.getGeometry()[0] == shape: skinCluster = skC - except: + except Exception: pass - except: + except Exception: pass - except: - pm.displayWarning("%s: is not supported."% obj.name()) + except Exception: + pm.displayWarning("%s: is not supported." % obj.name()) return skinCluster + def getGeometryComponents(skinCls): - """ - Get the geometry components from skincluster + """Get the geometry components from skincluster - Args: + Arguments: skinCls (PyNode): The skincluster node Returns: @@ -103,17 +77,18 @@ def getGeometryComponents(skinCls): members.getDagPath(0, dagPath, components) return dagPath, components + def getCurrentWeights(skinCls, dagPath, components): - """ - Get the skincluster weights + """Get the skincluster weights - Args: + Arguments: skinCls (PyNode): The skincluster node dagPath (MDagPath): The skincluster dagpath components (MObject): The skincluster components Returns: MDoubleArray: The skincluster weights + """ weights = OpenMaya.MDoubleArray() util = OpenMaya.MScriptUtil() @@ -123,9 +98,10 @@ def getCurrentWeights(skinCls, dagPath, components): return weights ###################################### -## Skin Collectors +# Skin Collectors ###################################### + def collectInfluenceWeights(skinCls, dagPath, components, dataDic): weights = getCurrentWeights(skinCls, dagPath, components) @@ -135,8 +111,9 @@ def collectInfluenceWeights(skinCls, dagPath, components, dataDic): for ii in range(influencePaths.length()): influenceName = influencePaths[ii].partialPathName() influenceWithoutNamespace = pm.PyNode(influenceName).stripNamespace() - dataDic['weights'][influenceWithoutNamespace] = \ - [weights[jj*numInfluences+ii] for jj in range(numComponentsPerInfluence)] + inf_w = [weights[jj * numInfluences + ii] for jj + in range(numComponentsPerInfluence)] + dataDic['weights'][influenceWithoutNamespace] = inf_w def collectBlendWeights(skinCls, dagPath, components, dataDic): @@ -145,7 +122,6 @@ def collectBlendWeights(skinCls, dagPath, components, dataDic): dataDic['blendWeights'] = [weights[i] for i in range(weights.length())] - def collectData(skinCls, dataDic): dagPath, components = getGeometryComponents(skinCls) collectInfluenceWeights(skinCls, dagPath, components, dataDic) @@ -158,7 +134,7 @@ def collectData(skinCls, dataDic): ###################################### -## Skin export +# Skin export ###################################### def exportSkin(filePath=None, objs=None, *args): @@ -170,14 +146,16 @@ def exportSkin(filePath=None, objs=None, *args): pm.displayWarning("Please Select One or more objects") return False - packDic = { "objs":[], - "objDDic":[], - "bypassObj":[] - } + packDic = {"objs": [], + "objDDic": [], + "bypassObj": [] + } if not filePath: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=0, startingDirectory=startDir, + filePath = pm.fileDialog2(dialogStyle=2, + fileMode=0, + startingDirectory=startDir, fileFilter='mGear Skin (*%s)' % FILE_EXT) filePath = filePath[0] if not filePath: @@ -186,38 +164,43 @@ def exportSkin(filePath=None, objs=None, *args): if not filePath.endswith(FILE_EXT): filePath += FILE_EXT - #object parsing + # object parsing for obj in objs: skinCls = getSkinCluster(obj) if not skinCls: - pm.displayWarning(obj.name() + ": Skiped because don't have Skin Cluster") + pm.displayWarning( + obj.name() + ": Skipped because don't have Skin Cluster") pass else: - dataDic = { 'weights':{}, - 'blendWeights':[], - 'skinClsName':"", - 'objName':"", - 'nameSpace':"" - } + dataDic = {'weights': {}, + 'blendWeights': [], + 'skinClsName': "", + 'objName': "", + 'nameSpace': "" + } dataDic["objName"] = obj.name() dataDic["nameSpace"] = obj.namespace() - collectData(skinCls, dataDic) packDic["objs"].append(obj.name()) packDic["objDDic"].append(dataDic) - pm.displayInfo( 'Exported skinCluster %s (%d influences, %d vertices) %s' % ( skinCls.name(), - len(dataDic['weights'].keys()), len(dataDic['blendWeights']), obj.name())) + pm.displayInfo( + "Exported skinCluster %s (%d influences, %d " + "points) %s" % (skinCls.name(), + len(dataDic['weights'].keys()), + len(dataDic['blendWeights']), + obj.name())) + if packDic["objs"]: + fh = open(filePath, 'wb') + pickle.dump(packDic, fh, pickle.HIGHEST_PROTOCOL) + fh.close() - fh = open(filePath, 'wb') - pickle.dump(packDic, fh, pickle.HIGHEST_PROTOCOL) - fh.close() + return True - return True def exportSkinPack(packPath=None, objs=None, *args): @@ -228,31 +211,33 @@ def exportSkinPack(packPath=None, objs=None, *args): pm.displayWarning("Please Select Some Objects") return - packDic = { - "packFiles":[], - "rootPath":[] - } + "packFiles": [], + "rootPath": [] + } startDir = pm.workspace(q=True, rootDirectory=True) - packPath = pm.fileDialog2(dialogStyle=2, fileMode=0, startingDirectory=startDir, - fileFilter='mGear skinPack (*%s)' % PACK_EXT) + packPath = pm.fileDialog2(dialogStyle=2, + fileMode=0, + startingDirectory=startDir, + fileFilter='mGear skinPack (*%s)' % PACK_EXT) if not packPath: return packPath = packPath[0] if not packPath.endswith(PACK_EXT): packPath += PACK_EXT - packDic["rootPath"], packName = os.path.split(packPath) + packDic["rootPath"], packName = os.path.split(packPath) for obj in objs: fileName = obj.stripNamespace() + FILE_EXT filePath = os.path.join(packDic["rootPath"], fileName) if exportSkin(filePath, [obj]): packDic["packFiles"].append(fileName) - pm.displayInfo( filePath) + pm.displayInfo(filePath) else: - pm.displayWarning(obj.name() + ": Skiped because don't have Skin Cluster") + pm.displayWarning( + obj.name() + ": Skipped because don't have Skin Cluster") if packDic["packFiles"]: data_string = json.dumps(packDic, indent=4, sort_keys=True) @@ -261,11 +246,12 @@ def exportSkinPack(packPath=None, objs=None, *args): f.close() pm.displayInfo("Skin Pack exported: " + packPath) else: - pm.displayWarning("Any of the selected objects have Skin Cluster. Skin Pack export aborted.") + pm.displayWarning("Any of the selected objects have Skin Cluster. " + "Skin Pack export aborted.") ###################################### -## Skin setters +# Skin setters ###################################### @@ -279,19 +265,23 @@ def setInfluenceWeights(skinCls, dagPath, components, dataDic): for importedInfluence, importedWeights in dataDic['weights'].items(): for ii in range(influencePaths.length()): influenceName = influencePaths[ii].partialPathName() - influenceWithoutNamespace = pm.PyNode(influenceName).stripNamespace() + nnspace = pm.PyNode(influenceName).stripNamespace() + influenceWithoutNamespace = nnspace if influenceWithoutNamespace == importedInfluence: for jj in range(numComponentsPerInfluence): - weights.set(importedWeights[jj], jj*numInfluences+ii) + weights.set(importedWeights[jj], jj * numInfluences + ii) break else: unusedImports.append(importedInfluence) - influenceIndices = OpenMaya.MIntArray(numInfluences) for ii in range(numInfluences): influenceIndices.set(ii, ii) - skinCls.__apimfn__().setWeights(dagPath, components, influenceIndices, weights, False) + skinCls.__apimfn__().setWeights(dagPath, + components, + influenceIndices, + weights, + False) def setBlendWeights(skinCls, dagPath, components, dataDic): @@ -310,13 +300,17 @@ def setData(skinCls, dataDic): pm.setAttr('%s.%s' % (skinCls, attr), dataDic[attr]) ###################################### -## Skin import +# Skin import ###################################### + + def getObjsFromSkinFile(filePath=None, *args): - #retrive the object names inside gSkin file + # retrive the object names inside gSkin file if not filePath: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, + filePath = pm.fileDialog2(dialogStyle=2, + fileMode=1, + startingDirectory=startDir, fileFilter='mGear Skin (*%s)' % FILE_EXT) if not filePath: return @@ -330,11 +324,14 @@ def getObjsFromSkinFile(filePath=None, *args): for x in data["objs"]: print x + def importSkin(filePath=None, *args): if not filePath: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, + filePath = pm.fileDialog2(dialogStyle=2, + fileMode=1, + startingDirectory=startDir, fileFilter='mGear Skin (*%s)' % FILE_EXT) if not filePath: return @@ -360,38 +357,44 @@ def importSkin(filePath=None, *args): pm.displayWarning('Vertex counts do not match. %d != %d' % (meshVertices, importedVertices)) continue - except: + except Exception: pass - if getSkinCluster(objNode): + if getSkinCluster(objNode): skinCluster = getSkinCluster(objNode) else: try: joints = data['weights'].keys() - skinCluster = pm.skinCluster(joints, objNode, tsb=True, nw=2, n=data['skinClsName']) - except: + skinCluster = pm.skinCluster( + joints, objNode, tsb=True, nw=2, n=data['skinClsName']) + except Exception: notFound = data['weights'].keys() - sceneJoints = set([pm.PyNode(x).name() for x in pm.ls(type='joint')]) + sceneJoints = set([pm.PyNode(x).name() + for x in pm.ls(type='joint')]) for j in notFound: if j in sceneJoints: notFound.remove(j) - pm.displayWarning("Object: " + objName + " Skiped. Can't found corresponding deformer for the following joints: " + str(notFound)) + pm.displayWarning("Object: " + objName + " Skiped. Can't " + "found corresponding deformer for the " + "following joints: " + str(notFound)) continue if skinCluster: setData(skinCluster, data) print 'Imported skin for: %s' % objName - - except: - pm.displayWarning("Object: " + objName + " Skiped. Can NOT be found in the scene" ) + except Exception: + pm.displayWarning("Object: " + objName + " Skiped. Can NOT be " + "found in the scene") def importSkinPack(filePath=None, *args): if not filePath: startDir = pm.workspace(q=True, rootDirectory=True) - filePath = pm.fileDialog2(dialogStyle=2, fileMode=1, startingDirectory=startDir, - fileFilter='mGear skinPack (*%s)' % PACK_EXT) + filePath = pm.fileDialog2(dialogStyle=2, + fileMode=1, + startingDirectory=startDir, + fileFilter='mGear skinPack (*%s)' % PACK_EXT) if not filePath: return if not isinstance(filePath, basestring): @@ -403,47 +406,62 @@ def importSkinPack(filePath=None, *args): importSkin(filePath, True) ###################################### -## Skin Copy +# Skin Copy ###################################### + def skinCopy(sourceMesh=None, targetMesh=None, *args): if not sourceMesh or not targetMesh: - if len(pm.selected()) >=2: + if len(pm.selected()) >= 2: sourceMesh = pm.selected()[-1] targetMeshes = pm.selected()[:-1] else: - pm.displayWarning("Please select target mesh/meshes and source mesh with skinCluster.") + pm.displayWarning("Please select target mesh/meshes and source " + "mesh with skinCluster.") return else: targetMeshes = [targetMesh] - #we check this here, because if not need to check when we work base on selection. + # we check this here, because if not need to check when we work + # base on selection. if isinstance(sourceMesh, basestring): sourceMesh = pm.PyNode(sourceMesh) for targetMesh in targetMeshes: - if isinstance(targetMesh, basestring): + if isinstance(targetMesh, basestring): sourceMesh = pm.PyNode(targetMesh) ss = getSkinCluster(sourceMesh) if ss: oDef = pm.skinCluster(sourceMesh, query=True, influence=True) - skinCluster = pm.skinCluster(oDef, targetMesh, tsb=True, nw=2, n=targetMesh.name() + "_SkinCluster") - pm.copySkinWeights( ss=ss.stripNamespace(), ds=skinCluster.name(), noMirror=True, ia="oneToOne", sm=True, nr=True) + skinCluster = pm.skinCluster(oDef, + targetMesh, + tsb=True, + nw=2, + n=targetMesh.name() + "_SkinCluster") + pm.copySkinWeights(ss=ss.stripNamespace(), + ds=skinCluster.name(), + noMirror=True, + ia="oneToOne", + sm=True, + nr=True) else: - pm.displayError("Source Mesh :" + sourceMesh.name() + " Don't have skinCluster") + pm.displayError("Source Mesh :" + sourceMesh.name() + " Don't " + "have skinCluster") ###################################### -## Skin Utils +# Skin Utils ###################################### + + def selectDeformers(*args): if pm.selected(): try: oSel = pm.selected()[0] oColl = pm.skinCluster(oSel, query=True, influence=True) pm.select(oColl) - except: + except Exception: pm.displayError("Select one object with skinCluster") else: pm.displayWarning("Select one object with skinCluster") diff --git a/scripts/mgear/maya/synoptic/__init__.py b/scripts/mgear/maya/synoptic/__init__.py index 7d74186..8ab4e40 100644 --- a/scripts/mgear/maya/synoptic/__init__.py +++ b/scripts/mgear/maya/synoptic/__init__.py @@ -1,43 +1,14 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -################################################## -# GLOBAL -################################################## import os import pymel.core as pm from maya.app.general.mayaMixin import MayaQDockWidget from maya.app.general.mayaMixin import MayaQWidgetDockableMixin -import mgear.maya.pyqt as gqt -import mgear.maya.utils - -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +import mgear +from mgear.maya import pyqt +from mgear.vendor.Qt import QtGui, QtCore, QtWidgets +import mgear.maya.utils SYNOPTIC_WIDGET_NAME = "synoptic_view" @@ -53,16 +24,25 @@ ################################################## def open(*args): # open the synoptic dialog, without clean old instances - gqt.showDialog(Synoptic, False) + pyqt.showDialog(Synoptic, False) def importTab(tabName): + """Import Synoptic Tab + + Args: + tabName (Str): Synoptic tab name + + Returns: + module: Synoptic tab module + """ import mgear.maya.synoptic as syn dirs = syn.SYNOPTIC_DIRECTORIES defFmt = "mgear.maya.synoptic.tabs.{}" customFmt = "{0}" - module = mgear.maya.utils.importFromStandardOrCustomDirectories(dirs, defFmt, customFmt, tabName) + module = mgear.maya.utils.importFromStandardOrCustomDirectories( + dirs, defFmt, customFmt, tabName) return module @@ -70,6 +50,7 @@ def importTab(tabName): # SYNOPTIC ################################################## class Synoptic(MayaQWidgetDockableMixin, QtWidgets.QDialog): + """Synoptic Main class""" default_height = 790 default_width = 325 @@ -78,7 +59,7 @@ class Synoptic(MayaQWidgetDockableMixin, QtWidgets.QDialog): def __init__(self, parent=None): self.toolName = SYNOPTIC_WIDGET_NAME # Delete old instances of the componet settings window. - gqt.deleteInstances(self, MayaQDockWidget) + pyqt.deleteInstances(self, MayaQDockWidget) super(Synoptic, self).__init__(parent) self.create_widgets() self.setAttribute(QtCore.Qt.WA_DeleteOnClose) @@ -98,7 +79,8 @@ def setupUi(self): self.setObjectName(SYNOPTIC_WIDGET_NAME) self.resize(560, 775) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) @@ -111,10 +93,14 @@ def setupUi(self): self.mainContainer = QtWidgets.QGroupBox(self) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.mainContainer.sizePolicy().hasHeightForWidth()) + + sizePolicy.setHeightForWidth( + self.mainContainer.sizePolicy().hasHeightForWidth()) self.mainContainer.setSizePolicy(sizePolicy) self.mainContainer.setMinimumSize(QtCore.QSize(0, 0)) @@ -146,14 +132,20 @@ def setupUi(self): self.gridLayout.setObjectName("gridLayout") self.scrollArea = QtWidgets.QScrollArea(self.mainContainer) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) - self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) + + self.scrollArea.setHorizontalScrollBarPolicy( + QtCore.Qt.ScrollBarAsNeeded) + self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.scrollArea.setWidgetResizable(True) self.scrollArea.setAlignment(QtCore.Qt.AlignCenter) @@ -163,10 +155,12 @@ def setupUi(self): self.tabs.setSizePolicy(sizePolicy) self.tabs.setObjectName("tabs") - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy = QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.tabs.sizePolicy().hasHeightForWidth()) + sizePolicy.setHeightForWidth( + self.tabs.sizePolicy().hasHeightForWidth()) self.tabs.setSizePolicy(sizePolicy) self.tabs.setObjectName("synoptic_tab") @@ -178,13 +172,16 @@ def setupUi(self): # Singal Methods ============================= def updateModelList(self): - # avoiding unnecessary firing currentIndexChanged event before finish to model_list + # avoiding unnecessary firing currentIndexChanged event before + # finish to model_list try: self.model_list.currentIndexChanged.disconnect() except RuntimeError: pass - rig_models = [item for item in pm.ls(transforms=True) if item.hasAttr("is_rig")] + rig_models = [item for item in pm.ls(transforms=True) + if item.hasAttr("is_rig")] + self.model_list.clear() for item in rig_models: self.model_list.addItem(item.name(), item.name()) @@ -193,7 +190,6 @@ def updateModelList(self): self.model_list.currentIndexChanged.connect(self.updateTabs) self.updateTabs() - def updateTabs(self): for i in range(self.tabs.count()): @@ -241,13 +237,18 @@ def updateTabs(self): self.tabs.insertTab(i, tab, tab_name) else: - mes = "No synoptic tabs for %s" % self.model_list.currentText() + mes = "No synoptic tabs for %s" % \ + self.model_list.currentText() + pm.displayWarning(mes) except Exception as e: import traceback traceback.print_exc() - mes = "Synoptic tab: %s Loading fail {0}\n{1}".format(tab_name, e) + + mes = "Synoptic tab: %s Loading fail {0}\n{1}".format( + tab_name, e) + pm.displayError(mes) max_h = self.default_height if max_h == 0 else max_h @@ -269,8 +270,16 @@ def wrapTabContents(self, synoptic_tab): horizontalLayout.setContentsMargins(0, 0, 0, 0) horizontalLayout.setObjectName("horizontalLayout") - spacer_left = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - spacer_right = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + spacer_left = QtWidgets.QSpacerItem(0, + 0, + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Minimum) + + spacer_right = QtWidgets.QSpacerItem(0, + 0, + QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Minimum) + wrapperWidget.setSpacerLeft(spacer_left) horizontalLayout.addItem(spacer_left) @@ -285,8 +294,10 @@ def wrapTabContents(self, synoptic_tab): class SynopticTabWrapper(QtWidgets.QWidget): - """ - class for handling mouse rubberband within spacer and synoptic tab that is children of. + """Class for handling mouse rubberband Selection + + Class for handling mouse rubberband within spacer and synoptic tab that + is children of. """ def __init__(self, *args, **kwargs): @@ -295,7 +306,10 @@ def __init__(self, *args, **kwargs): super(SynopticTabWrapper, self).__init__(*args, **kwargs) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) - self.rubberband = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle, self) + + self.rubberband = QtWidgets.QRubberBand( + QtWidgets.QRubberBand.Rectangle, self) + self.offset = QtCore.QPoint() def setSpacerLeft(self, spacer): @@ -350,29 +364,31 @@ def offsetEvent(self, event): def mousePressEvent(self, event): # type: (QtGui.QMouseEvent) -> None - self.syn_widget, self.syn_widget_is_mainsynoptictab = self.searchMainSynopticTab() + self.syn_w, self.syn_wid_is_mainsyntab = self.searchMainSynopticTab() self.offset = self.calculateOffset() self.origin = event.pos() self.rubberband.setGeometry(QtCore.QRect(self.origin, QtCore.QSize())) self.rubberband.show() - if self.syn_widget_is_mainsynoptictab: - self.syn_widget.mousePressEvent_(self.offsetEvent(event)) + if self.syn_wid_is_mainsyntab: + self.syn_w.mousePressEvent_(self.offsetEvent(event)) else: - self.syn_widget.mousePressEvent(self.offsetEvent(event)) + self.syn_w.mousePressEvent(self.offsetEvent(event)) def mouseMoveEvent(self, event): # type: (QtGui.QMouseEvent) -> None - self.syn_widget, self.syn_widget_is_mainsynoptictab = self.searchMainSynopticTab() + self.syn_w, self.syn_wid_is_mainsyntab = self.searchMainSynopticTab() if self.rubberband.isVisible(): - self.rubberband.setGeometry(QtCore.QRect(self.origin, event.pos()).normalized()) - if self.syn_widget_is_mainsynoptictab: - self.syn_widget.mouseMoveEvent_(self.offsetEvent(event)) + self.rubberband.setGeometry( + QtCore.QRect(self.origin, event.pos()).normalized()) + + if self.syn_wid_is_mainsyntab: + self.syn_w.mouseMoveEvent_(self.offsetEvent(event)) else: - self.syn_widget.mouseMoveEvent(self.offsetEvent(event)) + self.syn_w.mouseMoveEvent(self.offsetEvent(event)) def mouseReleaseEvent(self, event): # type: (QtGui.QMouseEvent) -> None @@ -380,7 +396,7 @@ def mouseReleaseEvent(self, event): if self.rubberband.isVisible(): self.rubberband.hide() - if self.syn_widget_is_mainsynoptictab: - self.syn_widget.mouseReleaseEvent_(self.offsetEvent(event)) + if self.syn_wid_is_mainsyntab: + self.syn_w.mouseReleaseEvent_(self.offsetEvent(event)) else: - self.syn_widget.mouseReleaseEvent(self.offsetEvent(event)) + self.syn_w.mouseReleaseEvent(self.offsetEvent(event)) diff --git a/scripts/mgear/maya/synoptic/tabs/__init__.py b/scripts/mgear/maya/synoptic/tabs/__init__.py index c370833..f5a13c0 100644 --- a/scripts/mgear/maya/synoptic/tabs/__init__.py +++ b/scripts/mgear/maya/synoptic/tabs/__init__.py @@ -1,51 +1,17 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -################################################## -# GLOBAL -################################################## import traceback import pymel.core as pm import maya.OpenMayaUI as OpenMayaUI -import mgear.maya.pyqt as gqt import mgear -import mgear.maya.synoptic.utils as syn_uti -import mgear.maya.synoptic.widgets as mwi - -# import functools - -QtGui, QtCore, QtWidgets, wrapInstance, shiboken = gqt.qt_import(True) - +from .. import widgets, utils +from mgear.vendor.Qt import QtCore, QtWidgets, QtGui, QtCompat ################################################## # SYNOPTIC TAB WIDGET ################################################## + + class MainSynopticTab(QtWidgets.QDialog): """ Base class of synoptic tab widget @@ -114,31 +80,28 @@ def _conn(entry): for entry in self.default_buttons + self.buttons: _conn(entry) - # self.b_selAll.clicked.connect(self.selAll_clicked) - # self.b_selAll.setMouseTracking(True) - # self.b_keyAll.clicked.connect(self.keyAll_clicked) - # self.b_keySel.clicked.connect(self.keySel_clicked) - def connectMaya(self): # type: () -> None # script job callback - ptr = long(shiboken.getCppPointer(self)[0]) + # ptr = long(QtCompat.getCppPointer(self)[0]) + # ptr = long(QtCompat.getCppPointer(self)) + ptr = QtCompat.getCppPointer(self) + gui = OpenMayaUI.MQtUtil.fullName(ptr) - self.selJob = pm.scriptJob(e=("SelectionChanged", self.selectChanged), parent=gui) + self.selJob = pm.scriptJob(e=("SelectionChanged", + self.selectChanged), + parent=gui) def selectChanged(self, *args): - """ - - :param args: - """ - # wrap to catch exception guaranteeing maya does not stop at this try: self.__selectChanged(*args) except Exception as e: mes = traceback.format_exc() - mes = "error has occur in scriptJob SelectionChanged\n{0}".format(mes) + mes = "error has occur in scriptJob " \ + "SelectionChanged\n{0}".format(mes) + mes = "{0}\n{1}".format(mes, e) mgear.log(mes, mgear.sev_error) pm.scriptJob(kill=self.selJob) @@ -149,21 +112,21 @@ def __selectChanged(self, *args): sels = [] [sels.append(x.name()) for x in pm.ls(sl=True)] - oModel = syn_uti.getModel(self) + oModel = utils.getModel(self) if not oModel: mes = "model not found for synoptic {}".format(self.name) mgear.log(mes, mgear.sev_info) # self.close() - syn_widget = syn_uti.getSynopticWidget(self) + syn_widget = utils.getSynopticWidget(self) syn_widget.updateModelList() return - nameSpace = syn_uti.getNamespace(oModel.name()) + nameSpace = utils.getNamespace(oModel.name()) - selButtons = self.findChildren(mwi.SelectButton) + selButtons = self.findChildren(widgets.SelectButton) for selB in selButtons: obj = str(selB.property("object")).split(",") if len(obj) == 1: @@ -178,7 +141,7 @@ def __selectChanged(self, *args): selB.paintSelected(False) def _getButtonAbsoluteGeometry(self, button): - # type: (mwi.SelectButton) -> QtCore.QSize + # type: (widgets.SelectButton) -> QtCore.QSize if button in self._buttonGeometry.keys(): return self._buttonGeometry[button] @@ -211,7 +174,7 @@ def mouseReleaseEvent_(self, event): selected = [] rect = QtCore.QRect(self.origin, event.pos()).normalized() - for child in self.findChildren(mwi.SelectButton): + for child in self.findChildren(widgets.SelectButton): # if rect.intersects(child.geometry()): if rect.intersects(self._getButtonAbsoluteGeometry(child)): selected.append(child) @@ -235,8 +198,8 @@ def mouseReleaseEvent_(self, event): # BUTTONS def selAll_clicked(self): # type: () -> None - model = syn_uti.getModel(self) - syn_uti.selAll(model) + model = utils.getModel(self) + utils.selAll(model) def resetAll_clicked(self): # type: () -> None @@ -248,9 +211,9 @@ def resetSel_clicked(self): def keyAll_clicked(self): # type: () -> None - model = syn_uti.getModel(self) - syn_uti.keyAll(model) + model = utils.getModel(self) + utils.keyAll(model) def keySel_clicked(self): # type: () -> None - syn_uti.keySel() + utils.keySel() diff --git a/scripts/mgear/maya/synoptic/tabs/baker/__init__.py b/scripts/mgear/maya/synoptic/tabs/baker/__init__.py new file mode 100644 index 0000000..81d6f10 --- /dev/null +++ b/scripts/mgear/maya/synoptic/tabs/baker/__init__.py @@ -0,0 +1,18 @@ +from mgear.maya.synoptic.tabs import MainSynopticTab +from . import widget + + +################################################## +# SYNOPTIC TAB WIDGET +################################################## + + +class SynopticTab(MainSynopticTab, widget.Ui_baker): + + description = "baker" + name = "baker" + + # ============================================ + # INIT + def __init__(self, parent=None): + super(SynopticTab, self).__init__(self, parent) diff --git a/scripts/mgear/maya/synoptic/tabs/baker/widget.py b/scripts/mgear/maya/synoptic/tabs/baker/widget.py new file mode 100644 index 0000000..22361d3 --- /dev/null +++ b/scripts/mgear/maya/synoptic/tabs/baker/widget.py @@ -0,0 +1,340 @@ +# MGEAR is under the terms of the MIT License + +# Copyright (c) 2016 Jeremie Passerin, Miquel Campos + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com +# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com +# Date: 2016 / 10 / 10 + +import mgear.maya.pyqt as gqt +QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() + + +class Ui_baker(object): + def setupUi(self, baker): + baker.setObjectName("baker") + baker.resize(325, 840) + baker.setMinimumSize(QtCore.QSize(325, 790)) + self.gridLayout = QtWidgets.QGridLayout(baker) + self.gridLayout.setObjectName("gridLayout") + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.bake = bakeSprings(baker) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(176, 234, 202)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(176, 234, 202)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.bake.setPalette(palette) + self.bake.setMouseTracking(False) + self.bake.setAutoDefault(False) + self.bake.setDefault(False) + self.bake.setFlat(False) + self.bake.setObjectName("bake") + self.verticalLayout.addWidget(self.bake) + self.clearBake = clearSprings(baker) + palette = QtGui.QPalette() + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(176, 234, 202)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(176, 234, 202)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipText, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) + brush = QtGui.QBrush(QtGui.QColor(183, 255, 215)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Light, brush) + brush = QtGui.QBrush(QtGui.QColor(140, 234, 182)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Midlight, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Dark, brush) + brush = QtGui.QBrush(QtGui.QColor(65, 143, 100)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Mid, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush) + brush = QtGui.QBrush(QtGui.QColor(49, 107, 75)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Shadow, brush) + brush = QtGui.QBrush(QtGui.QColor(98, 214, 150)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.AlternateBase, brush) + brush = QtGui.QBrush(QtGui.QColor(255, 255, 220)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) + brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) + brush.setStyle(QtCore.Qt.SolidPattern) + palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipText, brush) + self.clearBake.setPalette(palette) + self.clearBake.setMouseTracking(False) + self.clearBake.setAutoDefault(False) + self.clearBake.setDefault(False) + self.clearBake.setFlat(False) + self.clearBake.setObjectName("clearBake") + self.verticalLayout.addWidget(self.clearBake) + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout.addItem(spacerItem) + self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) + + self.retranslateUi(baker) + QtCore.QMetaObject.connectSlotsByName(baker) + + def retranslateUi(self, baker): + baker.setWindowTitle(gqt.fakeTranslate("baker", "Form", None, -1)) + self.bake.setText(gqt.fakeTranslate("baker", "Bake Springs", None, -1)) + self.clearBake.setText(gqt.fakeTranslate("baker", "Clear Baked Springs", None, -1)) + +from mgear.maya.synoptic.widgets import clearSprings, bakeSprings diff --git a/scripts/mgear/maya/synoptic/tabs/baker/widget.ui b/scripts/mgear/maya/synoptic/tabs/baker/widget.ui new file mode 100644 index 0000000..60d1bf3 --- /dev/null +++ b/scripts/mgear/maya/synoptic/tabs/baker/widget.ui @@ -0,0 +1,924 @@ + + + baker + + + + 0 + 0 + 325 + 840 + + + + + 325 + 790 + + + + Form + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 176 + 234 + 202 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 176 + 234 + 202 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 49 + 107 + 75 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 49 + 107 + 75 + + + + + + + 255 + 255 + 255 + + + + + + + 49 + 107 + 75 + + + + + + + 98 + 214 + 150 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + false + + + Bake Springs + + + false + + + false + + + false + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 176 + 234 + 202 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 176 + 234 + 202 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 49 + 107 + 75 + + + + + + + 98 + 214 + 150 + + + + + + + 183 + 255 + 215 + + + + + + + 140 + 234 + 182 + + + + + + + 49 + 107 + 75 + + + + + + + 65 + 143 + 100 + + + + + + + 49 + 107 + 75 + + + + + + + 255 + 255 + 255 + + + + + + + 49 + 107 + 75 + + + + + + + 98 + 214 + 150 + + + + + + + 98 + 214 + 150 + + + + + + + 0 + 0 + 0 + + + + + + + 98 + 214 + 150 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + false + + + Clear Baked Springs + + + false + + + false + + + false + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + bakeSprings + QPushButton +
mgear.maya.synoptic.widgets
+
+ + clearSprings + QPushButton +
mgear.maya.synoptic.widgets
+
+
+ + +
diff --git a/scripts/mgear/maya/synoptic/tabs/biped/__init__.py b/scripts/mgear/maya/synoptic/tabs/biped/__init__.py index 0413134..34675d8 100644 --- a/scripts/mgear/maya/synoptic/tabs/biped/__init__.py +++ b/scripts/mgear/maya/synoptic/tabs/biped/__init__.py @@ -1,48 +1,17 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -################################################## -# GLOBAL -################################################## import os -import mgear.maya.pyqt as gqt -import mgear.maya.synoptic.utils as syn_uti from mgear.maya.synoptic.tabs import MainSynopticTab -import widget as wui - -QtGui, QtCore, QtWidgets, wrapInstance, shiboken = gqt.qt_import(True) +from . import widget +from ... import utils +from mgear.vendor.Qt import QtWidgets ################################################## # SYNOPTIC TAB WIDGET ################################################## -class SynopticTab(MainSynopticTab, wui.Ui_biped_body): +class SynopticTab(MainSynopticTab, widget.Ui_biped_body): description = "biped" name = "biped" @@ -63,44 +32,39 @@ def __init__(self, parent=None): # ============================================ # BUTTONS def selRight_clicked(self): - model = syn_uti.getModel(self) + model = utils.getModel(self) # i : num of fingers, j : finger length - object_names = ["finger_R%s_fk%s_ctl"%(i,j) for i in range(4) for j in range(3)] - thumb_names = ["thumb_R0_fk%s_ctl"%j for j in range(3)] + object_names = ["finger_R%s_fk%s_ctl" % (i, j) + for i in range(4) for j in range(3)] + thumb_names = ["thumb_R0_fk%s_ctl" % j for j in range(3)] object_names.extend(thumb_names) modifiers = QtWidgets.QApplication.keyboardModifiers() - syn_uti.selectObj(model, object_names, None, modifiers) + utils.selectObj(model, object_names, None, modifiers) def selLeft_clicked(self): - model = syn_uti.getModel(self) + model = utils.getModel(self) # i : num of fingers, j : finger length - object_names = ["finger_L%s_fk%s_ctl"%(i,j) for i in range(4) for j in range(3)] - thumb_names = ["thumb_L0_fk%s_ctl"%j for j in range(3)] + object_names = ["finger_L%s_fk%s_ctl" % (i, j) + for i in range(4) for j in range(3)] + thumb_names = ["thumb_L0_fk%s_ctl" % j for j in range(3)] object_names.extend(thumb_names) modifiers = QtWidgets.QApplication.keyboardModifiers() - syn_uti.selectObj(model, object_names, None, modifiers) + utils.selectObj(model, object_names, None, modifiers) def keyRight_clicked(self): - model = syn_uti.getModel(self) + model = utils.getModel(self) # i : num of fingers, j : finger length - object_names = ["finger_R%s_fk%s_ctl"%(i,j) for i in range(4) for j in range(3)] - thumb_names = ["thumb_R0_fk%s_ctl"%j for j in range(3)] + object_names = ["finger_R%s_fk%s_ctl" % (i, j) + for i in range(4) for j in range(3)] + thumb_names = ["thumb_R0_fk%s_ctl" % j for j in range(3)] object_names.extend(thumb_names) - syn_uti.keyObj(model, object_names) + utils.keyObj(model, object_names) def keyLeft_clicked(self): - model = syn_uti.getModel(self) + model = utils.getModel(self) # i : num of fingers, j : finger length - object_names = ["finger_L%s_fk%s_ctl"%(i,j) for i in range(4) for j in range(3)] - thumb_names = ["thumb_L0_fk%s_ctl"%j for j in range(3)] + object_names = ["finger_L%s_fk%s_ctl" % (i, j) + for i in range(4) for j in range(3)] + thumb_names = ["thumb_L0_fk%s_ctl" % j for j in range(3)] object_names.extend(thumb_names) - syn_uti.keyObj(model, object_names) - - - -''' -MEMO: widget.py snippet -self.thumbRoll_L0_ctl.setToolTip(gqt.fakeTranslate("biped_body", "thumbRoll_L0_ctl", None, -1)) -self.thumbRoll_L0_ctl.setStatusTip(gqt.fakeTranslate("biped_body", "thumbRoll_L0_ctl", None, -1)) -self.thumbRoll_L0_ctl.setWhatsThis(gqt.fakeTranslate("biped_body", "thumbRoll_L0_ctl", None, -1)) -''' + utils.keyObj(model, object_names) diff --git a/scripts/mgear/maya/synoptic/tabs/quadruped/__init__.py b/scripts/mgear/maya/synoptic/tabs/quadruped/__init__.py index a545f03..ed7b718 100644 --- a/scripts/mgear/maya/synoptic/tabs/quadruped/__init__.py +++ b/scripts/mgear/maya/synoptic/tabs/quadruped/__init__.py @@ -1,38 +1,5 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -################################################## -# GLOBAL -################################################## -import mgear.maya.pyqt as gqt - from mgear.maya.synoptic.tabs import MainSynopticTab -import widget as wui - -QtGui, QtCore, QtWidgets, wrapInstance, shiboken = gqt.qt_import(True) +from . import widget ################################################## @@ -40,7 +7,7 @@ ################################################## -class SynopticTab(MainSynopticTab, wui.Ui_biped_body): +class SynopticTab(MainSynopticTab, widget.Ui_biped_body): description = "biped body" name = "biped_body" diff --git a/scripts/mgear/maya/synoptic/utils.py b/scripts/mgear/maya/synoptic/utils.py index b819b2e..2e4e939 100644 --- a/scripts/mgear/maya/synoptic/utils.py +++ b/scripts/mgear/maya/synoptic/utils.py @@ -1,58 +1,19 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -################################################## -# GLOBAL -################################################## - - - -import pymel.core as pm -from pymel import versions -# import maya.mel as mel -# import maya.OpenMayaUI as omui from functools import partial import re - -import mgear -import mgear.maya.dag as dag -import mgear.maya.transform as tra -import mgear.maya.utils as mutils import traceback +from pymel import versions +import pymel.core as pm -import mgear.maya.pyqt as gqt -# from maya.app.general.mayaMixin import MayaQWidgetDockableMixin -# from maya.app.general.mayaMixin import MayaQDockWidget +import mgear -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from mgear.maya import pyqt, dag, transform, utils +from mgear.vendor.Qt import QtCore, QtWidgets SYNOPTIC_WIDGET_NAME = "synoptic_view" CTRL_GRP_SUFFIX = "_controllers_grp" +PLOT_GRP_SUFFIX = "_PLOT_grp" EXPR_LEFT_SIDE = re.compile("L(\d+)") @@ -62,15 +23,16 @@ ################################################## # util def isSideElement(name): - # type: (str) -> bool - """ - Returns is name(str) side element? + """Returns is name(str) side element? Arguments: - node: str + name (str): Description Returns: bool + + Deleted Parameters: + node: str """ nameParts = stripNamespace(name).split("|")[-1] @@ -83,12 +45,13 @@ def isSideElement(name): def swapSideLabel(name): - # type: (str) -> str - """ - Returns fliped name that replaced side label left to right or right to left. + """Returns fliped name + + Returns fliped name that replaced side label left to right or + right to left Arguments: - name(str): + name(str): Name to swap the side Returns: str @@ -109,12 +72,14 @@ def swapSideLabel(name): ################################################## def getSynopticWidget(widget, max_iter=20): + """Return the widget where the synoptic panel is attach - """ - Return the widget where the synoptic panel is attach - :param widget: - :param max_iter: - :return: + Arguments: + widget (QWidget): The widget to get the parent + max_iter (int, optional): Iteration limit to find the paretn widget + + Returns: + widget: The Parent widget """ parent = widget.parentWidget() for i in range(max_iter): @@ -124,8 +89,16 @@ def getSynopticWidget(widget, max_iter=20): return False + def getModel(widget): + """Get the model Name + + Args: + widget (QWidget): Synoptic widget + Returns: + PyNode: The rig model name + """ syn_widget = getSynopticWidget(widget, max_iter=20) model_name = syn_widget.model_list.currentText() @@ -137,20 +110,42 @@ def getModel(widget): except pm.general.MayaNodeError: mes = traceback.format_exc() - mes = "Can't find model {0} for widget: {1}\n{2}".format(model_name, widget, mes) + mes = "Can't find model {0} for widget: {1}\n{2}".format( + model_name, widget, mes) mgear.log(mes, mgear.sev_error) return None return model + def getControlers(model, gSuffix=CTRL_GRP_SUFFIX): + """Get thr controlers from the set - ctl_set = pm.PyNode(model.name()+gSuffix) - members = ctl_set.members() + Args: + model (PyNode): Rig root + gSuffix (str, optional): set suffix + + Returns: + list: The members of the group + """ + try: + ctl_set = pm.PyNode(model.name() + gSuffix) + members = ctl_set.members() + + return members + except TypeError: + return None - return members def getNamespace(modelName): + """Get the name space from rig root + + Args: + modelName (str): Rig top node name + + Returns: + str: Namespace + """ if not modelName: return "" @@ -161,10 +156,29 @@ def getNamespace(modelName): return nameSpace + def stripNamespace(nodeName): + """Strip all the namespaces from a given name + + Args: + nodeName (str): Node name to strip the namespaces + + Returns: + str: Node name without namespace + """ return nodeName.split(":")[-1] + def getNode(nodeName): + """Get a PyNode from the string name + + + Args: + nodeName (str): Node name + + Returns: + PyNode or None: The node. or None if the object can't be found + """ try: return pm.PyNode(nodeName) @@ -173,9 +187,16 @@ def getNode(nodeName): def listAttrForMirror(node): - # type: (pm.nodetypes.Transform) -> list[str] + """List attributes to invert the value for mirror posing - res = ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"] # FIXME: should "ro" be here? + Args: + node (PyNode): The Node with the attributes to invert + + Returns: + list: Attributes to invert + """ + # TODO: should "ro" be here? + res = ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"] res.extend(pm.listAttr(node, userDefined=True, shortNames=True)) res = list(filter(lambda x: not x.startswith("inv"), res)) @@ -183,6 +204,14 @@ def listAttrForMirror(node): def getInvertCheckButtonAttrName(str): + """Get the invert check butto attribute name + + Args: + str (str): The attribute name + + Returns: + str: The checked attribute name + """ # type: (str) -> str return "inv{0}".format(str.lower().capitalize()) @@ -192,7 +221,17 @@ def getInvertCheckButtonAttrName(str): ################################################## # ================================================ def selectObj(model, object_names, mouse_button, key_modifier): + """Select an object + + Args: + model (PyNode): The rig top node + object_names (list): The names of the objects to select + mouse_button (QtSignal): Clicked mouse button signal + key_modifier (QtSignal): Modifier button signal + Returns: + None + """ if not model: return @@ -201,7 +240,7 @@ def selectObj(model, object_names, mouse_button, key_modifier): with pm.UndoChunk(): nodes = [] for name in object_names: - if nameSpace: + if nameSpace: node = getNode(nameSpace + ":" + name) else: node = getNode(name) @@ -210,9 +249,10 @@ def selectObj(model, object_names, mouse_button, key_modifier): continue if not node and nameSpace: - mgear.log("Can't find object : %s:%s"%( nameSpace, name), mgear.sev_error) + mgear.log("Can't find object : %s:%s" % (nameSpace, name), + mgear.sev_error) elif not node: - mgear.log("Can't find object : %s"%( name), mgear.sev_error) + mgear.log("Can't find object : %s" % (name), mgear.sev_error) nodes.append(node) if not nodes: @@ -226,31 +266,49 @@ def selectObj(model, object_names, mouse_button, key_modifier): # Key pressed if key_modifier is None: pm.select(nodes) - elif key_modifier == QtCore.Qt.NoModifier:# No Key + elif key_modifier == QtCore.Qt.NoModifier: # No Key pm.select(nodes) - elif key_modifier == QtCore.Qt.ControlModifier: # ctrl + elif key_modifier == QtCore.Qt.ControlModifier: # ctrl pm.select(nodes, deselect=True) - elif key_modifier == QtCore.Qt.ShiftModifier: # shift + elif key_modifier == QtCore.Qt.ShiftModifier: # shift pm.select(nodes, toggle=True) - elif int(key_modifier) == (QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier): # ctrl + shift + elif int(key_modifier) == (QtCore.Qt.ControlModifier + | QtCore.Qt.ShiftModifier): # ctrl + shift pm.select(nodes, add=True) - elif key_modifier == QtCore.Qt.AltModifier: # alt + elif key_modifier == QtCore.Qt.AltModifier: # alt pm.select(nodes) - elif int(key_modifier) == (QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier): # ctrl + alt + elif int(key_modifier) == (QtCore.Qt.ControlModifier + | QtCore.Qt.AltModifier): # ctrl + alt pm.select(nodes, deselect=True) - elif int(key_modifier) == (QtCore.Qt.ShiftModifier | QtCore.Qt.AltModifier): # shift + alt + elif int(key_modifier) == (QtCore.Qt.ShiftModifier + | QtCore.Qt.AltModifier): # shift + alt pm.select(nodes, toggle=True) - elif int(key_modifier) == (QtCore.Qt.ControlModifier | QtCore.Qt.AltModifier | QtCore.Qt.ShiftModifier): # Ctrl + alt + shift + + # Ctrl + alt + shift + elif int(key_modifier) == (QtCore.Qt.ControlModifier + | QtCore.Qt.AltModifier + | QtCore.Qt.ShiftModifier): pm.select(nodes, add=True) else: pm.select(nodes) # ================================================ + + def quickSel(model, channel, mouse_button): + """Select the object stored on the quick selection attributes - qs_attr = model.attr("quicksel%s"%channel) + Args: + model (PyNode): The rig top node + channel (str): The quick selection channel name + mouse_button (QtSignal): Clicked mouse button - if mouse_button == QtCore.Qt.LeftButton: # Call Selection + Returns: + None + """ + qs_attr = model.attr("quicksel%s" % channel) + + if mouse_button == QtCore.Qt.LeftButton: # Call Selection names = qs_attr.get().split(",") if not names: return @@ -259,11 +317,14 @@ def quickSel(model, channel, mouse_button): ctl = dag.findChild(model, name) if ctl: ctl.select(add=True) - elif mouse_button == QtCore.Qt.MidButton: # Save Selection - names = [ sel.name().split("|")[-1] for sel in pm.ls(selection=True) if sel.name().endswith("_ctl") ] + elif mouse_button == QtCore.Qt.MidButton: # Save Selection + names = [sel.name().split("|")[-1] + for sel in pm.ls(selection=True) + if sel.name().endswith("_ctl")] + qs_attr.set(",".join(names)) - elif mouse_button == QtCore.Qt.RightButton: # Key Selection + elif mouse_button == QtCore.Qt.RightButton: # Key Selection names = qs_attr.get().split(",") if not names: return @@ -271,14 +332,27 @@ def quickSel(model, channel, mouse_button): keyObj(model, names) # ================================================ + + def selAll(model): + """Select all controlers + Args: + model (PyNode): Rig top node + """ controlers = getControlers(model) pm.select(controlers) # ================================================ + + def selGroup(model, groupSuffix): + """Select the members of a given set + Args: + model (PyNode): Rig top node + groupSuffix (str): Set suffix name + """ controlers = getControlers(model, groupSuffix) pm.select(controlers) @@ -288,23 +362,28 @@ def selGroup(model, groupSuffix): ################################################## # ================================================ def keySel(): + """Key selected controls""" + pm.setKeyframe() # ================================================ + + def keyObj(model, object_names): + """Set the keyframe in the controls pass by a list in obj_names variable - """ - Set the keyframe in the controls pass by a list in obj_names variable + Args: + model (Str): Name of the namespace that will define de the model + object_names (Str): names of the controls, without the name space - :param model: Name of the namespace that will define de the model - :param object_names: names of the controls, without the name space - :return: None + Returns: + None """ with pm.UndoChunk(): nodes = [] nameSpace = getNamespace(model) for name in object_names: - if nameSpace: + if nameSpace: node = getNode(nameSpace + ":" + name) else: node = getNode(name) @@ -313,9 +392,10 @@ def keyObj(model, object_names): continue if not node and nameSpace: - mgear.log("Can't find object : %s:%s"%( nameSpace, name), mgear.sev_error) + mgear.log("Can't find object : %s:%s" % (nameSpace, name), + mgear.sev_error) elif not node: - mgear.log("Can't find object : %s"%( name), mgear.sev_error) + mgear.log("Can't find object : %s" % (name), mgear.sev_error) nodes.append(node) if not nodes: @@ -324,14 +404,29 @@ def keyObj(model, object_names): pm.setKeyframe(*nodes) # ================================================ + + def keyAll(model): + """Keyframe all the controls inside the controls group + + Note: We use the workd "group" to refer to a set in Maya + Args: + model (PyNode): Rig top node + """ controlers = getControlers(model) pm.setKeyframe(controlers) # ================================================ + + def keyGroup(model, groupSuffix): + """Keyframe all the members of a given group + Args: + model (PyNode): Rig top node + groupSuffix (str): The group preffix + """ controlers = getControlers(model, groupSuffix) pm.setKeyframe(controlers) @@ -339,14 +434,21 @@ def keyGroup(model, groupSuffix): def toggleAttr(model, object_name, attr_name): + """Toggle a boolean attribute + Args: + model (PyNode): Rig top node + object_name (str): The name of the control containing the attribute to + toggle + attr_name (str): The attribute to toggle + """ nameSpace = getNamespace(model) - if nameSpace: + if nameSpace: node = dag.findChild(nameSpace + ":" + object_name) else: node = dag.findChild(model, object_name) - oAttr = node.attr(attr_name) + oAttr = node.attr(attr_name) if oAttr.type() in ["float", "bool"]: oVal = oAttr.get() if oVal == 1: @@ -355,20 +457,26 @@ def toggleAttr(model, object_name, attr_name): oAttr.set(1) - ################################################## # Combo Box ################################################## # ================================================ def getComboKeys(model, object_name, combo_attr): + """Get the keys from a combo attribute + Args: + model (PyNode): Rig top node + object_name (str): Control name + combo_attr (str): Combo attribute name + + Returns: + list: Keys names from the combo attribute. + """ nameSpace = getNamespace(model) - if nameSpace: + if nameSpace: node = getNode(nameSpace + ":" + object_name) - # node = dag.findRelative(model, model.split(":")[0] + ":" + object_name) else: node = getNode(object_name) - # node = dag.findRelative(model, object_name) oAttr = node.attr(combo_attr) keys = oAttr.getEnums().keys() @@ -377,19 +485,38 @@ def getComboKeys(model, object_name, combo_attr): def getComboIndex(model, object_name, combo_attr): + """Get the index from a combo attribute + Args: + model (PyNode): Rig top node + object_name (str): Control name + combo_attr (str): Combo attribute name + + Returns: + int: Current index in the combo attribute + """ nameSpace = getNamespace(model) - if nameSpace: + if nameSpace: node = getNode(nameSpace + ":" + object_name) else: node = getNode(object_name) - oVal = node.attr(combo_attr).get() + oVal = node.attr(combo_attr).get() return oVal def changeSpace(model, object_name, combo_attr, cnsIndex, ctl_name): + """Change the space of a control + i.e: A control with ik reference array + + Args: + model (PyNode): Rig top node + object_name (str): Object Name + combo_attr (str): Combo attribute name + cnsIndex (int): Combo index to change + ctl_name (str): Control name + """ nameSpace = getNamespace(model) if nameSpace: node = getNode(nameSpace + ":" + object_name) @@ -411,8 +538,20 @@ def changeSpace(model, object_name, combo_attr, cnsIndex, ctl_name): ################################################## # ================================================ def ikFkMatch(model, ikfk_attr, uiHost_name, fks, ik, upv, ikRot=None): - # type: (pm.nodetypes.Transform, str, str, List[str], str, str, str) -> None - + """Switch IK/FK with matching functionality + + This function is meant to work with 2 joint limbs. + i.e: human legs or arms + + Args: + model (PyNode): Rig top transform node + ikfk_attr (str): Blend ik fk attribute name + uiHost_name (str): Ui host name + fks ([str]): List of fk controls names + ik (str): Ik control name + upv (str): Up vector control name + ikRot (None, str): optional. Name of the Ik Rotation control + """ nameSpace = getNamespace(model) def _getNode(name): @@ -451,18 +590,18 @@ def _getMth(name): if val == 1.0: for target, ctl in zip(fkTargets, fkCtrls): - tra.matchWorldTransform(target, ctl) + transform.matchWorldTransform(target, ctl) oAttr.set(0.0) # if is FK elif val == 0.0: - tra.matchWorldTransform(ikTarget, ikCtrl) + transform.matchWorldTransform(ikTarget, ikCtrl) if ikRot: - tra.matchWorldTransform(ikRotTarget, ikRotNode) + transform.matchWorldTransform(ikRotTarget, ikRotNode) - tra.matchWorldTransform(upvTarget, upvCtrl) + transform.matchWorldTransform(upvTarget, upvCtrl) oAttr.set(1.0) roll_att = uiNode.attr(ikfk_attr.replace("blend", "roll")) @@ -471,10 +610,15 @@ def _getMth(name): ################################################## # POSE ################################################## -# ================================================ + + def mirrorPose(flip=False, nodes=None): - # type(bool, List[pm.nodetypes.Transform]) -> None + """Summary + Args: + flip (bool, optiona): Set the function behaviout to flip + nodes (None, [PyNode]): Controls to mirro/flip the pose + """ if nodes is None: nodes = pm.selected() @@ -502,6 +646,12 @@ def mirrorPose(flip=False, nodes=None): def applyMirror(nameSpace, mirrorEntry): + """Apply mirro pose + + Args: + nameSpace (str): Namespace + mirrorEntry (list): List witht the mirror entry template + """ node = mirrorEntry["target"] attr = mirrorEntry["attr"] val = mirrorEntry["val"] @@ -514,12 +664,23 @@ def applyMirror(nameSpace, mirrorEntry): node.attr(attr).set(val) except RuntimeError as e: - mgear.log("applyMirror failed: {0} {1}: {2}".format(node.name(), attr, e), mgear.sev_error) + mgear.log("applyMirror failed: {0} {1}: {2}".format(node.name(), + attr, + e), + mgear.sev_error) def gatherMirrorData(nameSpace, node, flip): - # type: (str, pm.datatypes.Transform, bool) -> List[dict[str]] + """Get the data to mirror + + Args: + nameSpace (str): Namespace + node (PyNode): No + flip (TYPE): flip option + Returns: + [dict[str]: The mirror data + """ if isSideElement(node.name()): nameParts = stripNamespace(node.name()).split("|")[-1] @@ -535,8 +696,16 @@ def gatherMirrorData(nameSpace, node, flip): def calculateMirrorData(srcNode, targetNode, flip=False): - # type: (str, pm.datatypes.Transform, bool) -> List[dict[str]] - """returns [{"target": node, "attr": at, "val": flipVal}]""" + """Calculate the mirror data + + Args: + srcNode (str): The source Node + targetNode ([dict[str]]): Target node + flip (bool, optional): flip option + + Returns: + [{"target": node, "attr": at, "val": flipVal}] + """ results = [] @@ -545,7 +714,10 @@ def calculateMirrorData(srcNode, targetNode, flip=False): # whether does attribute "invTx" exists when attrName is "tx" invCheckName = getInvertCheckButtonAttrName(attrName) - if not pm.attributeQuery(invCheckName, node=srcNode, shortName=True, exists=True): + if not pm.attributeQuery(invCheckName, + node=srcNode, + shortName=True, + exists=True): # if not exists, straight inv = 1 @@ -567,25 +739,43 @@ def calculateMirrorData(srcNode, targetNode, flip=False): # if flip enabled record self also if flip: flipVal = targetNode.attr(attrName).get() - results.append({"target": srcNode, "attr": invAttrName, "val": flipVal * inv}) + results.append({"target": srcNode, + "attr": invAttrName, + "val": flipVal * inv}) - results.append({"target": targetNode, "attr": invAttrName, "val": srcNode.attr(attrName).get() * inv}) + results.append({"target": targetNode, + "attr": invAttrName, + "val": srcNode.attr(attrName).get() * inv}) return results def mirrorPoseOld(flip=False, nodes=False): + """Deprecated: Mirror pose + Args: + flip (bool, optional): if True will flip the pose + nodes (bool, optional): Nodes to mirror or flip transformation + """ axis = ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"] - aDic = {"tx":"invTx", "ty":"invTy", "tz":"invTz", "rx":"invRx", "ry":"invRy", "rz":"invRz", "sx":"invSx", "sy":"invSy", "sz":"invSz"} - mapDic = {"L":"R", "R":"L"} + aDic = {"tx": "invTx", + "ty": "invTy", + "tz": "invTz", + "rx": "invRx", + "ry": "invRy", + "rz": "invRz", + "sx": "invSx", + "sy": "invSy", + "sz": "invSz"} + + mapDic = {"L": "R", "R": "L"} if not nodes: nodes = pm.selected() pm.undoInfo(ock=1) try: nameSpace = False if nodes: - if len(nodes[0].split(":")) == 2: + if len(nodes[0].split(":")) == 2: nameSpace = nodes[0].split(":")[0] for oSel in nodes: if nameSpace: @@ -595,15 +785,15 @@ def mirrorPoseOld(flip=False, nodes=False): if nameParts[1][0] == "C": if not oSel.attr("tx").isLocked(): - oSel.attr("tx").set(oSel.attr("tx").get()*-1) + oSel.attr("tx").set(oSel.attr("tx").get() * -1) if not oSel.attr("ry").isLocked(): - oSel.attr("ry").set(oSel.attr("ry").get()*-1) + oSel.attr("ry").set(oSel.attr("ry").get() * -1) if not oSel.attr("rz").isLocked(): - oSel.attr("rz").set(oSel.attr("rz").get()*-1) + oSel.attr("rz").set(oSel.attr("rz").get() * -1) else: nameParts[1] = mapDic[nameParts[1][0]] + nameParts[1][1:] if nameSpace: - nameTarget = nameSpace+":"+"_".join(nameParts) + nameTarget = nameSpace + ":" + "_".join(nameParts) else: nameTarget = "_".join(nameParts) oTarget = getNode(nameTarget) @@ -616,11 +806,11 @@ def mirrorPoseOld(flip=False, nodes=False): if flip: flipVal = oTarget.attr(a).get() - oTarget.attr(a).set(oSel.attr(a).get()*inv) + oTarget.attr(a).set(oSel.attr(a).get() * inv) if flip: - oSel.attr(a).set(flipVal*inv) - except: + oSel.attr(a).set(flipVal * inv) + except Exception: pm.displayWarning("Flip/Mirror pose fail") pass finally: @@ -628,30 +818,36 @@ def mirrorPoseOld(flip=False, nodes=False): def bindPose(model): + """Restore the reset position of the rig + + Args: + model (TYPE): Description + """ nameSpace = getNamespace(model.name()) if nameSpace: - dagPoseName = nameSpace+':dagPose1' + dagPoseName = nameSpace + ':dagPose1' else: dagPoseName = 'dagPose1' - pm.dagPose( dagPoseName, restore=True ) + pm.dagPose(dagPoseName, restore=True) def resetSelTrans(): + """Reset the transfom values (SRT) for the selected objects""" with pm.UndoChunk(): for obj in pm.selected(): - tra.resetTransform(obj) + transform.resetTransform(obj) ################################################## # Transfer space ################################################## -# ================================================ class AbstractAnimationTransfer(QtWidgets.QDialog): + """Abstract animation transfer class""" try: valueChanged = QtCore.Signal(int) except Exception: - valueChanged = gqt.pyqtSignal() + valueChanged = pyqt.pyqtSignal() def __init__(self): # type: () -> None @@ -679,7 +875,10 @@ def create_controls(self): # type: () -> None self.groupBox = QtWidgets.QGroupBox() - self.setGroupBoxTitle() # must be implemented in each specialized classes + + # must be implemented in each specialized classes + self.setGroupBoxTitle() + self.onlyKeyframes_check = QtWidgets.QCheckBox('Only Keyframe Frames') self.onlyKeyframes_check.setChecked(True) self.startFrame_label = QtWidgets.QLabel("Start") @@ -693,7 +892,8 @@ def create_controls(self): self.endFrame_value.setMaximum(999999) self.populateRange(True) self.allFrames_button = QtWidgets.QPushButton("All Frames") - self.timeSliderFrames_button = QtWidgets.QPushButton("Time Slider Frames") + self.timeSliderFrames_button = QtWidgets.QPushButton( + "Time Slider Frames") self.comboBoxSpaces = QtWidgets.QComboBox() self.comboBoxSpaces.addItems(self.comboItems) @@ -734,8 +934,10 @@ def create_connections(self): # type: () -> None self.spaceTransfer_button.clicked.connect(self.doItByUI) - self.allFrames_button.clicked.connect(partial(self.populateRange, False)) - self.timeSliderFrames_button.clicked.connect(partial(self.populateRange, True)) + self.allFrames_button.clicked.connect( + partial(self.populateRange, False)) + self.timeSliderFrames_button.clicked.connect( + partial(self.populateRange, True)) # SLOTS ########################################################## @@ -768,7 +970,8 @@ def setComboBoxItemsFormList(self, comboList): def setGroupBoxTitle(self): # type: (str) -> None - # raise NotImplementedError("must implement transfer in each specialized class") + # raise NotImplementedError("must implement transfer + # in each specialized class") pass def setComboObj(self, combo): @@ -793,7 +996,8 @@ def getHostName(self): return ":".join([self.nameSpace, self.uihost]) def getWorldMatrices(self, start, end, val_src_nodes): - # type: (int, int, List[pm.nodetypes.Transform]) -> List[List[pm.datatypes.Matrix]] + # type: (int, int, List[pm.nodetypes.Transform]) -> + # List[List[pm.datatypes.Matrix]] """ returns matrice List[frame][controller number].""" res = [] @@ -808,7 +1012,8 @@ def getWorldMatrices(self, start, end, val_src_nodes): def transfer(self, startFrame, endFrame, onlyKeyframes, *args, **kwargs): # type: (int, int, bool, *str, **str) -> None - raise NotImplementedError("must be implemented in each specialized class") + raise NotImplementedError("must be implemented in each " + "specialized class") def doItByUI(self): # type: () -> None @@ -825,25 +1030,40 @@ def doItByUI(self): if self.comboObj is not None: self.comboObj.setCurrentIndex(self.comboBoxSpaces.currentIndex()) - for c in gqt.maya_main_window().children(): + for c in pyqt.maya_main_window().children(): if isinstance(c, AbstractAnimationTransfer): c.deleteLater() - @mutils.one_undo - @mutils.viewport_off - def bakeAnimation(self, switch_attr_name, val_src_nodes, key_src_nodes, key_dst_nodes, - startFrame, endFrame, onlyKeyframes=True): - # type: (str, List[pm.nodetypes.Transform], List[pm.nodetypes.Transform], List[pm.nodetypes.Transform], int, int, bool) -> None - - # Temporaly turn off cycle check to avoid misleading cycle message on Maya 2016. With Maya 2016.5 and 2017 the cycle warning doesn't show up + @utils.one_undo + @utils.viewport_off + def bakeAnimation(self, + switch_attr_name, + val_src_nodes, + key_src_nodes, + key_dst_nodes, + startFrame, + endFrame, + onlyKeyframes=True): + # type: (str, List[pm.nodetypes.Transform], + # List[pm.nodetypes.Transform], + # List[pm.nodetypes.Transform], int, int, bool) -> None + + # Temporaly turn off cycle check to avoid misleading cycle message + # on Maya 2016. With Maya 2016.5 and 2017 the cycle warning doesn't + # show up if versions.current() < 201650: pm.cycleCheck(e=False) - pm.displayWarning("Maya version older than: 2016.5: CycleCheck temporal turn OFF") + pm.displayWarning("Maya version older than: 2016.5: " + "CycleCheck temporal turn OFF") channels = ["tx", "ty", "tz", "rx", "ry", "rz", "sx", "sy", "sz"] - worldMatrixList = self.getWorldMatrices(startFrame, endFrame, val_src_nodes) - keyframeList = list(set(pm.keyframe(key_src_nodes, at=["t", "r", "s"], q=True))) - keyframeList.sort() + worldMatrixList = self.getWorldMatrices(startFrame, + endFrame, + val_src_nodes) + + keyframeList = sorted(set(pm.keyframe(key_src_nodes, + at=["t", "r", "s"], + q=True))) # delete animation in the space switch channel and destination ctrls pm.cutKey(key_dst_nodes, at=channels, time=(startFrame, endFrame)) @@ -871,6 +1091,8 @@ def bakeAnimation(self, switch_attr_name, val_src_nodes, key_src_nodes, key_dst_ # ================================================ # Transfer space + + class ParentSpaceTransfer(AbstractAnimationTransfer): def __init__(self): @@ -898,7 +1120,8 @@ def getValue(self): def setGroupBoxTitle(self): if hasattr(self, "groupBox"): # TODO: extract logic with naming convention - part = "_".join(self.ctrlNode.name().split(":")[-1].split("_")[:-1]) + part = "_".join( + self.ctrlNode.name().split(":")[-1].split("_")[:-1]) self.groupBox.setTitle(part) def transfer(self, startFrame, endFrame, onlyKeyframes, *args, **kwargs): @@ -908,15 +1131,21 @@ def transfer(self, startFrame, endFrame, onlyKeyframes, *args, **kwargs): key_src_nodes = val_src_nodes key_dst_nodes = val_src_nodes - self.bakeAnimation(self.getChangeAttrName(), val_src_nodes, key_src_nodes, key_dst_nodes, - startFrame, endFrame, onlyKeyframes) + self.bakeAnimation(self.getChangeAttrName(), + val_src_nodes, + key_src_nodes, + key_dst_nodes, + startFrame, + endFrame, + onlyKeyframes) @staticmethod def showUI(combo, model, uihost, switchedAttrShortName, ctrl_name, *args): - # type: (widgets.toggleCombo, pm.nodetypes.Transform, str, str, str, *str) -> None + # type: (widgets.toggleCombo, + # pm.nodetypes.Transform, str, str, str, *str) -> None try: - for c in gqt.maya_main_window().children(): + for c in pyqt.maya_main_window().children(): if isinstance(c, ParentSpaceTransfer): c.deleteLater() @@ -935,7 +1164,7 @@ def showUI(combo, model, uihost, switchedAttrShortName, ctrl_name, *args): # Delete the UI if errors occur to avoid causing winEvent # and event errors (in Maya 2014) try: - ui.createUI(gqt.maya_main_window()) + ui.createUI(pyqt.maya_main_window()) ui.show() except Exception as e: @@ -959,7 +1188,9 @@ def getChangeAttrName(self): def getChangeRollAttrName(self): # type: () -> str - return "{}.{}".format(self.getHostName(), self.switchedAttrShortName.replace("blend", "roll")) + return "{}.{}".format( + self.getHostName(), + self.switchedAttrShortName.replace("blend", "roll")) def changeAttrToBoundValue(self): # type: () -> None @@ -1018,7 +1249,14 @@ def setGroupBoxTitle(self): # ---------------------------------------------------------------- - def transfer(self, startFrame, endFrame, onlyKeyframes, ikRot, switchTo=None, *args, **kargs): + def transfer(self, + startFrame, + endFrame, + onlyKeyframes, + ikRot, + switchTo=None, + *args, + **kargs): # type: (int, int, bool, str, *str, **str) -> None if switchTo is not None: @@ -1067,8 +1305,13 @@ def transfer(self, startFrame, endFrame, onlyKeyframes, ikRot, switchTo=None, *a pm.cutKey(roll_att, time=(startFrame, endFrame)) pm.setAttr(roll_att, 0) - self.bakeAnimation(self.getChangeAttrName(), val_src_nodes, key_src_nodes, key_dst_nodes, - startFrame, endFrame, onlyKeyframes) + self.bakeAnimation(self.getChangeAttrName(), + val_src_nodes, + key_src_nodes, + key_dst_nodes, + startFrame, + endFrame, + onlyKeyframes) # ---------------------------------------------------------------- # re implement doItbyUI to have access to self.hasIKrot option @@ -1087,17 +1330,18 @@ def doItByUI(self): if self.comboObj is not None: self.comboObj.setCurrentIndex(self.comboBoxSpaces.currentIndex()) - for c in gqt.maya_main_window().children(): + for c in pyqt.maya_main_window().children(): if isinstance(c, AbstractAnimationTransfer): c.deleteLater() # ---------------------------------------------------------------- @staticmethod def showUI(model, ikfk_attr, uihost, fks, ik, upv, ikRot, *args): - # type: (pm.nodetypes.Transform, str, str, List[str], str, str, *str) -> None + # type: (pm.nodetypes.Transform, str, str, + # List[str], str, str, *str) -> None try: - for c in gqt.maya_main_window().children(): + for c in pyqt.maya_main_window().children(): if isinstance(c, IkFkTransfer): c.deleteLater() @@ -1116,7 +1360,7 @@ def showUI(model, ikfk_attr, uihost, fks, ik, upv, ikRot, *args): # Delete the UI if errors occur to avoid causing winEvent # and event errors (in Maya 2014) try: - ui.createUI(gqt.maya_main_window()) + ui.createUI(pyqt.maya_main_window()) ui.show() except Exception as e: @@ -1125,9 +1369,19 @@ def showUI(model, ikfk_attr, uihost, fks, ik, upv, ikRot, *args): mgear.log(e, mgear.sev_error) @staticmethod - def execute(model, ikfk_attr, uihost, fks, ik, upv, ikRot=None, - startFrame=None, endFrame=None, onlyKeyframes=None, switchTo=None): - # type: (pm.nodetypes.Transform, str, str, List[str], str, str, int, int, bool, str) -> None + def execute(model, + ikfk_attr, + uihost, + fks, + ik, + upv, + ikRot=None, + startFrame=None, + endFrame=None, + onlyKeyframes=None, + switchTo=None): + # type: (pm.nodetypes.Transform, str, str, + # List[str], str, str, int, int, bool, str) -> None """transfer without displaying UI""" if startFrame is None: @@ -1156,14 +1410,84 @@ def execute(model, ikfk_attr, uihost, fks, ik, upv, ikRot=None, @staticmethod def toIK(model, ikfk_attr, uihost, fks, ik, upv, ikRot, **kwargs): - # type: (pm.nodetypes.Transform, str, str, List[str], str, str, **str) -> None + # type: (pm.nodetypes.Transform, str, str, + # List[str], str, str, **str) -> None kwargs.update({"switchTo": "ik"}) - IkFkTransfer.execute(model, ikfk_attr, uihost, fks, ik, upv, ikRot, **kwargs) + IkFkTransfer.execute(model, + ikfk_attr, + uihost, + fks, + ik, + upv, + ikRot, + **kwargs) @staticmethod def toFK(model, ikfk_attr, uihost, fks, ik, upv, ikRot, **kwargs): - # type: (pm.nodetypes.Transform, str, str, List[str], str, str, **str) -> None + # type: (pm.nodetypes.Transform, str, str, + # List[str], str, str, **str) -> None kwargs.update({"switchTo": "fk"}) - IkFkTransfer.execute(model, ikfk_attr, uihost, fks, ik, upv, ikRot, **kwargs) + IkFkTransfer.execute(model, + ikfk_attr, + uihost, + fks, + ik, + upv, + ikRot, + **kwargs) + + +# Baker Springs + +@utils.one_undo +def clearSprings(model): + """Delete baked animation from spring + + Args: + model (dagNode): The rig top node + """ + springNodes = getControlers(model, gSuffix=PLOT_GRP_SUFFIX) + pairblends = [sn.listConnections(type="pairBlend")[0] + for sn in springNodes] + + for pb in pairblends: + animCrvs = pb.listConnections(type="animCurveTA") + for fcrv in animCrvs: + for conn in fcrv.listConnections(connections=True, + destination=True, + plugs=True): + + pm.disconnectAttr(conn[0], conn[1]) + # reset the value to 0 + attrs = ["inRotateX1", "inRotateY1", "inRotateZ1"] + for attr in attrs: + pb.attr(attr).set(0) + + # delete fcurves + pm.delete(animCrvs) + + +@utils.one_undo +@utils.viewport_off +def bakeSprings(model): + """Bake the automatic spring animation to animation curves + + Args: + model (dagNode): The rig top node + """ + # first clear animation + clearSprings(model) + + # bake again + springNodes = getControlers(model, gSuffix=PLOT_GRP_SUFFIX) + if springNodes: + + start = pm.playbackOptions(q=True, min=True) + end = pm.playbackOptions(q=True, max=True) + ct = start + for i in range(int(end - start) + 1): + pm.currentTime(int(ct)) + pm.setKeyframe(springNodes, insertBlend=True, attribute='rotate') + ct += 1 diff --git a/scripts/mgear/maya/synoptic/widgets.py b/scripts/mgear/maya/synoptic/widgets.py index 35839a0..94a0224 100644 --- a/scripts/mgear/maya/synoptic/widgets.py +++ b/scripts/mgear/maya/synoptic/widgets.py @@ -1,39 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -################################################## -# GLOBAL -################################################## -import mgear.maya.pyqt as gqt -# from maya.app.general.mayaMixin import MayaQWidgetDockableMixin -# from maya.app.general.mayaMixin import MayaQDockWidget -import mgear.maya.synoptic.utils as syn_uti - -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() +from . import utils +from mgear.vendor.Qt import QtCore, QtWidgets, QtGui ################################################## @@ -49,41 +16,58 @@ def __init__(self, parent=None): self.currentIndexChanged['QString'].connect(self.handleChanged) - - def wheelEvent (self, event): + def wheelEvent(self, event): event.ignore() - # def focusInEvent(self, event): def enterEvent(self, event): - self.model = syn_uti.getModel(self) + self.model = utils.getModel(self) self.uihost_name = str(self.property("Object")) self.combo_attr = str(self.property("Attr")) self.ctl_name = str(self.property("ik_ctl")) if not self.currentText(): - list1 = syn_uti.getComboKeys( self.model, self.uihost_name, self.combo_attr) + list1 = utils.getComboKeys( + self.model, self.uihost_name, self.combo_attr) self.addItems(list1) - self.setCurrentIndex(syn_uti.getComboIndex( self.model, self.uihost_name, self.combo_attr)) + self.setCurrentIndex(utils.getComboIndex( + self.model, self.uihost_name, self.combo_attr)) self.firstUpdate = True def handleChanged(self): if self.firstUpdate: - if self.currentIndex() == self.count() -1: + if self.currentIndex() == self.count() - 1: print "Space Transfer" - self.setCurrentIndex(syn_uti.getComboIndex( self.model, self.uihost_name, self.combo_attr)) - # self.setCurrentIndex(0) - syn_uti.ParentSpaceTransfer.showUI(self, self.model, self.uihost_name, self.combo_attr, self.ctl_name) + self.setCurrentIndex(utils.getComboIndex( + self.model, self.uihost_name, self.combo_attr)) + utils.ParentSpaceTransfer.showUI(self, + self.model, + self.uihost_name, + self.combo_attr, + self.ctl_name) else: - syn_uti.changeSpace(self.model, self.uihost_name, self.combo_attr, self.currentIndex(), self.ctl_name) + utils.changeSpace(self.model, + self.uihost_name, + self.combo_attr, + self.currentIndex(), + self.ctl_name) + + +class bakeSprings(QtWidgets.QPushButton): + + def mousePressEvent(self, event): -class bakeMocap(QtWidgets.QPushButton): + model = utils.getModel(self) + utils.bakeSprings(model) + + +class clearSprings(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) - syn_uti.bakeMocap(model) + model = utils.getModel(self) + utils.clearSprings(model) class ikfkMatchButton(QtWidgets.QPushButton): @@ -109,7 +93,7 @@ def mousePressEvent(self, event): mouse_button = event.button() - model = syn_uti.getModel(self) + model = utils.getModel(self) ikfk_attr = str(self.property("ikfk_attr")) uiHost_name = str(self.property("uiHost_name")) @@ -129,85 +113,85 @@ def mousePressEvent(self, event): ikRot = None if mouse_button == QtCore.Qt.RightButton: - syn_uti.IkFkTransfer.showUI(model, ikfk_attr, uiHost_name, fks, ik, upv, ikRot) + utils.IkFkTransfer.showUI( + model, ikfk_attr, uiHost_name, fks, ik, upv, ikRot) return else: - syn_uti.ikFkMatch(model, ikfk_attr, uiHost_name, fks, ik, upv, ikRot) + utils.ikFkMatch(model, ikfk_attr, uiHost_name, fks, ik, upv, ikRot) return + class selGroup(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) + model = utils.getModel(self) group_suffix = str(self.property("groupSuffix")) - mouse_button = event.button() - syn_uti.selGroup(model, group_suffix) + utils.selGroup(model, group_suffix) + class keyGroup(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) + model = utils.getModel(self) group_suffix = str(self.property("groupSuffix")) - mouse_button = event.button() - syn_uti.keyGroup(model, group_suffix) + utils.keyGroup(model, group_suffix) class toggleAttrButton(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) + model = utils.getModel(self) object_name = str(self.property("Object")) attr_name = str(self.property("Attr")) - mouse_button = event.button() - syn_uti.toggleAttr(model, object_name, attr_name) + utils.toggleAttr(model, object_name, attr_name) class resetTransform(QtWidgets.QPushButton): def mousePressEvent(self, event): - mouse_button = event.button() - syn_uti.resetSelTrans() + utils.resetSelTrans() class resetBindPose(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) - mouse_button = event.button() + model = utils.getModel(self) + + utils.bindPose(model) - syn_uti.bindPose(model) class MirrorPoseButton(QtWidgets.QPushButton): def mousePressEvent(self, event): - mouse_button = event.button() - syn_uti.mirrorPose() + utils.mirrorPose() + class FlipPoseButton(QtWidgets.QPushButton): def mousePressEvent(self, event): - mouse_button = event.button() - syn_uti.mirrorPose(True) + utils.mirrorPose(True) + class QuickSelButton(QtWidgets.QPushButton): def mousePressEvent(self, event): - model = syn_uti.getModel(self) + model = utils.getModel(self) channel = str(self.property("channel")) mouse_button = event.button() - syn_uti.quickSel(model, channel, mouse_button) + utils.quickSel(model, channel, mouse_button) + class SelectButton(QtWidgets.QWidget): over = False @@ -222,7 +206,6 @@ def __init__(self, parent=None): p.setColor(self.backgroundRole(), QtGui.QColor(000, 000, 000, 000)) self.setPalette(p) - def enterEvent(self, event): self.over = True self.repaint() @@ -233,29 +216,29 @@ def leaveEvent(self, event): self.repaint() self.update() - def rectangleSelection(self,event, firstLoop): + def rectangleSelection(self, event, firstLoop): if firstLoop: key_modifier = event.modifiers() else: if event.modifiers(): key_modifier = event.modifiers() else: - # key_modifier = QtCore.Qt.ShiftModifier - key_modifier = (QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier) - model = syn_uti.getModel(self) + key_modifier = (QtCore.Qt.ControlModifier + | QtCore.Qt.ShiftModifier) + model = utils.getModel(self) object = str(self.property("object")).split(",") mouse_button = event.button() - syn_uti.selectObj(model, object, mouse_button, key_modifier) + utils.selectObj(model, object, mouse_button, key_modifier) def mousePressEvent(self, event): - model = syn_uti.getModel(self) + model = utils.getModel(self) object = str(self.property("object")).split(",") mouse_button = event.button() key_modifier = event.modifiers() - syn_uti.selectObj(model, object, mouse_button, key_modifier) + utils.selectObj(model, object, mouse_button, key_modifier) def paintEvent(self, event): painter = QtGui.QPainter() @@ -270,12 +253,13 @@ def paintEvent(self, event): def paintSelected(self, paint=False): if paint: p = self.palette() - p.setColor(self.foregroundRole(),QtGui.QColor(255, 255, 255, 255)) + p.setColor(self.foregroundRole(), QtGui.QColor(255, 255, 255, 255)) self.setPalette(p) self.setBorderColor(QtGui.QColor(255, 255, 255, 255)) else: p = self.palette() - p.setColor(self.foregroundRole(),QtGui.QColor(000, 000, 000, 010)) + p.setColor(self.foregroundRole(), + QtGui.QColor(000, 000, 000, 0o10)) self.setPalette(p) self.setBorderColor(self.defaultBGColor) @@ -296,27 +280,35 @@ def drawPathWithBorder(self, painter, path, borderWidth): class SelectBtn_RFk(SelectButton): color = QtGui.QColor(0, 0, 192, 255) + class SelectBtn_RIk(SelectButton): color = QtGui.QColor(0, 128, 192, 255) + class SelectBtn_CFk(SelectButton): color = QtGui.QColor(128, 0, 128, 255) + class SelectBtn_CIk(SelectButton): color = QtGui.QColor(192, 64, 192, 255) + class SelectBtn_LFk(SelectButton): color = QtGui.QColor(192, 0, 0, 255) + class SelectBtn_LIk(SelectButton): color = QtGui.QColor(192, 128, 0, 255) + class SelectBtn_yellow(SelectButton): color = QtGui.QColor(255, 192, 0, 255) + class SelectBtn_green(SelectButton): color = QtGui.QColor(0, 192, 0, 255) + class SelectBtn_darkGreen(SelectButton): color = QtGui.QColor(0, 100, 0, 255) @@ -370,9 +362,10 @@ def drawShape(self, painter): innH = h - (ow * 2) innR = rr * 0.2 pathInner = QtGui.QPainterPath() - pathInner.addRoundedRect(QtCore.QRectF(innX, innY, innW, innH), innR, innR) + pathInner.addRoundedRect(QtCore.QRectF(innX, innY, innW, innH), + innR, innR) - self.drawPathWithBorder(painter, pathOuter - pathInner, borderWidth) + self.drawPathWithBorder(painter, pathOuter - pathInner, borderWidth) class SelectBtn_Circle(SelectButton): @@ -422,7 +415,9 @@ def drawShape(self, painter): w = self.width() - borderWidth h = self.height() - borderWidth - triangle = QtGui.QPolygon([QtCore.QPoint(1, h/2), QtCore.QPoint( w-1, 0), QtCore.QPoint( w-1,h-1)]) + triangle = QtGui.QPolygon([QtCore.QPoint(1, h / 2), + QtCore.QPoint(w - 1, 0), + QtCore.QPoint(w - 1, h - 1)]) path = QtGui.QPainterPath() path.addPolygon(triangle) self.drawPathWithBorder(painter, path, borderWidth) @@ -436,7 +431,9 @@ def drawShape(self, painter): w = self.width() - borderWidth h = self.height() - borderWidth - triangle = QtGui.QPolygon([QtCore.QPoint(1, h/2), QtCore.QPoint( w-1, 0), QtCore.QPoint( w-1,h-1)]) + triangle = QtGui.QPolygon([QtCore.QPoint(1, h / 2), + QtCore.QPoint(w - 1, 0), + QtCore.QPoint(w - 1, h - 1)]) path = QtGui.QPainterPath() path.addPolygon(triangle) self.drawPathWithBorder(painter, path, borderWidth) @@ -450,7 +447,9 @@ def drawShape(self, painter): w = self.width() - borderWidth h = self.height() - borderWidth - triangle = QtGui.QPolygon([ QtCore.QPoint(-1, 0), QtCore.QPoint( -1, h-1), QtCore.QPoint(w-1, h/2)]) + triangle = QtGui.QPolygon([QtCore.QPoint(-1, 0), + QtCore.QPoint(-1, h - 1), + QtCore.QPoint(w - 1, h / 2)]) path = QtGui.QPainterPath() path.addPolygon(triangle) self.drawPathWithBorder(painter, path, borderWidth) @@ -464,7 +463,9 @@ def drawShape(self, painter): w = self.width() - borderWidth h = self.height() - borderWidth - triangle = QtGui.QPolygon([ QtCore.QPoint(-1, 0), QtCore.QPoint( -1, h-1), QtCore.QPoint(w-1, h/2)]) + triangle = QtGui.QPolygon([QtCore.QPoint(-1, 0), + QtCore.QPoint(-1, h - 1), + QtCore.QPoint(w - 1, h / 2)]) path = QtGui.QPainterPath() path.addPolygon(triangle) self.drawPathWithBorder(painter, path, borderWidth) @@ -482,57 +483,59 @@ class SelectorClass(color, shape): SELECTORS = { # "selector button name": [ColorClass, DrawingClass], - "SelectBtn_RFkBox": [SelectBtn_RFk, SelectBtn_Box], - "SelectBtn_RIkBox": [SelectBtn_RIk, SelectBtn_Box], - "SelectBtn_CFkBox": [SelectBtn_CFk, SelectBtn_Box], - "SelectBtn_CIkBox": [SelectBtn_CIk, SelectBtn_Box], - "SelectBtn_LFkBox": [SelectBtn_LFk, SelectBtn_Box], - "SelectBtn_LIkBox": [SelectBtn_LIk, SelectBtn_Box], - "SelectBtn_yellowBox": [SelectBtn_yellow, SelectBtn_Box], - "SelectBtn_greenBox": [SelectBtn_green, SelectBtn_Box], - "SelectBtn_darkGreenBox": [SelectBtn_darkGreen, SelectBtn_Box], - "SelectBtn_blueBox": [SelectBtn_RFk, SelectBtn_Box], - "SelectBtn_redBox": [SelectBtn_LFk, SelectBtn_Box], - - "SelectBtn_RFkCircle": [SelectBtn_RFk, SelectBtn_Circle], - "SelectBtn_RIkCircle": [SelectBtn_RIk, SelectBtn_Circle], - "SelectBtn_CFkCircle": [SelectBtn_CFk, SelectBtn_Circle], - "SelectBtn_CIkCircle": [SelectBtn_CIk, SelectBtn_Circle], - "SelectBtn_LFkCircle": [SelectBtn_LFk, SelectBtn_Circle], - "SelectBtn_LIkCircle": [SelectBtn_LIk, SelectBtn_Circle], - "SelectBtn_greenCircle": [SelectBtn_green, SelectBtn_Circle], - "SelectBtn_redCircle": [SelectBtn_LFk, SelectBtn_Circle], - "SelectBtn_yellowCircle": [SelectBtn_yellow, SelectBtn_Circle], - "SelectBtn_blueCircle": [SelectBtn_RFk, SelectBtn_Circle], - - "SelectBtn_RFkOutlineBox": [SelectBtn_RFk, SelectBtn_OutlineBox], - "SelectBtn_RIkOutlineBox": [SelectBtn_RIk, SelectBtn_OutlineBox], - "SelectBtn_CFkOutlineBox": [SelectBtn_CFk, SelectBtn_OutlineBox], - "SelectBtn_CIkOutlineBox": [SelectBtn_CIk, SelectBtn_OutlineBox], - "SelectBtn_LFkOutlineBox": [SelectBtn_LFk, SelectBtn_OutlineBox], - "SelectBtn_LIkOutlineBox": [SelectBtn_LIk, SelectBtn_OutlineBox], - "SelectBtn_yellowOutlineBox": [SelectBtn_yellow, SelectBtn_OutlineBox], - "SelectBtn_greenOutlineBox": [SelectBtn_green, SelectBtn_OutlineBox], - "SelectBtn_darkGreenOutlineBox": [SelectBtn_darkGreen, SelectBtn_OutlineBox], - - "SelectBtn_RFkOutlineCircle": [SelectBtn_RFk, SelectBtn_OutlineCircle], - "SelectBtn_RIkOutlineCircle": [SelectBtn_RIk, SelectBtn_OutlineCircle], - "SelectBtn_CFkOutlineCircle": [SelectBtn_CFk, SelectBtn_OutlineCircle], - "SelectBtn_CIkOutlineCircle": [SelectBtn_CIk, SelectBtn_OutlineCircle], - "SelectBtn_LFkOutlineCircle": [SelectBtn_LFk, SelectBtn_OutlineCircle], - "SelectBtn_LIkOutlineCircle": [SelectBtn_LIk, SelectBtn_OutlineCircle], - "SelectBtn_greenOutlineCircle": [SelectBtn_green, SelectBtn_OutlineCircle], - "SelectBtn_redOutlineCircle": [SelectBtn_LFk, SelectBtn_OutlineCircle], - "SelectBtn_yellowOutlineCircle": [SelectBtn_yellow, SelectBtn_OutlineCircle], - "SelectBtn_blueOutlineCircle": [SelectBtn_RFk, SelectBtn_OutlineCircle], - - "SelectBtn_RFkTriangleRight": [SelectBtn_RFk, SelectBtn_TriangleRight], - "SelectBtn_RIkTriangleRight": [SelectBtn_RIk, SelectBtn_TriangleRight], - "SelectBtn_LFkTriangleLeft": [SelectBtn_LFk, SelectBtn_TriangleLeft], - "SelectBtn_LIkTriangleLeft": [SelectBtn_LIk, SelectBtn_TriangleLeft], - - "SelectBtn_greenTriangleRight": [SelectBtn_green, SelectBtn_TriangleRight], - "SelectBtn_greenTriangleLeft": [SelectBtn_green, SelectBtn_TriangleLeft] + "SelectBtn_RFkBox": [SelectBtn_RFk, SelectBtn_Box], + "SelectBtn_RIkBox": [SelectBtn_RIk, SelectBtn_Box], + "SelectBtn_CFkBox": [SelectBtn_CFk, SelectBtn_Box], + "SelectBtn_CIkBox": [SelectBtn_CIk, SelectBtn_Box], + "SelectBtn_LFkBox": [SelectBtn_LFk, SelectBtn_Box], + "SelectBtn_LIkBox": [SelectBtn_LIk, SelectBtn_Box], + "SelectBtn_yellowBox": [SelectBtn_yellow, SelectBtn_Box], + "SelectBtn_greenBox": [SelectBtn_green, SelectBtn_Box], + "SelectBtn_darkGreenBox": [SelectBtn_darkGreen, SelectBtn_Box], + "SelectBtn_blueBox": [SelectBtn_RFk, SelectBtn_Box], + "SelectBtn_redBox": [SelectBtn_LFk, SelectBtn_Box], + + "SelectBtn_RFkCircle": [SelectBtn_RFk, SelectBtn_Circle], + "SelectBtn_RIkCircle": [SelectBtn_RIk, SelectBtn_Circle], + "SelectBtn_CFkCircle": [SelectBtn_CFk, SelectBtn_Circle], + "SelectBtn_CIkCircle": [SelectBtn_CIk, SelectBtn_Circle], + "SelectBtn_LFkCircle": [SelectBtn_LFk, SelectBtn_Circle], + "SelectBtn_LIkCircle": [SelectBtn_LIk, SelectBtn_Circle], + "SelectBtn_greenCircle": [SelectBtn_green, SelectBtn_Circle], + "SelectBtn_redCircle": [SelectBtn_LFk, SelectBtn_Circle], + "SelectBtn_yellowCircle": [SelectBtn_yellow, SelectBtn_Circle], + "SelectBtn_blueCircle": [SelectBtn_RFk, SelectBtn_Circle], + + "SelectBtn_RFkOutlineBox": [SelectBtn_RFk, SelectBtn_OutlineBox], + "SelectBtn_RIkOutlineBox": [SelectBtn_RIk, SelectBtn_OutlineBox], + "SelectBtn_CFkOutlineBox": [SelectBtn_CFk, SelectBtn_OutlineBox], + "SelectBtn_CIkOutlineBox": [SelectBtn_CIk, SelectBtn_OutlineBox], + "SelectBtn_LFkOutlineBox": [SelectBtn_LFk, SelectBtn_OutlineBox], + "SelectBtn_LIkOutlineBox": [SelectBtn_LIk, SelectBtn_OutlineBox], + "SelectBtn_yellowOutlineBox": [SelectBtn_yellow, SelectBtn_OutlineBox], + "SelectBtn_greenOutlineBox": [SelectBtn_green, SelectBtn_OutlineBox], + "SelectBtn_darkGreenOutlineBox": [SelectBtn_darkGreen, + SelectBtn_OutlineBox], + + "SelectBtn_RFkOutlineCircle": [SelectBtn_RFk, SelectBtn_OutlineCircle], + "SelectBtn_RIkOutlineCircle": [SelectBtn_RIk, SelectBtn_OutlineCircle], + "SelectBtn_CFkOutlineCircle": [SelectBtn_CFk, SelectBtn_OutlineCircle], + "SelectBtn_CIkOutlineCircle": [SelectBtn_CIk, SelectBtn_OutlineCircle], + "SelectBtn_LFkOutlineCircle": [SelectBtn_LFk, SelectBtn_OutlineCircle], + "SelectBtn_LIkOutlineCircle": [SelectBtn_LIk, SelectBtn_OutlineCircle], + "SelectBtn_greenOutlineCircle": [SelectBtn_green, SelectBtn_OutlineCircle], + "SelectBtn_redOutlineCircle": [SelectBtn_LFk, SelectBtn_OutlineCircle], + "SelectBtn_yellowOutlineCircle": [SelectBtn_yellow, + SelectBtn_OutlineCircle], + "SelectBtn_blueOutlineCircle": [SelectBtn_RFk, SelectBtn_OutlineCircle], + + "SelectBtn_RFkTriangleRight": [SelectBtn_RFk, SelectBtn_TriangleRight], + "SelectBtn_RIkTriangleRight": [SelectBtn_RIk, SelectBtn_TriangleRight], + "SelectBtn_LFkTriangleLeft": [SelectBtn_LFk, SelectBtn_TriangleLeft], + "SelectBtn_LIkTriangleLeft": [SelectBtn_LIk, SelectBtn_TriangleLeft], + + "SelectBtn_greenTriangleRight": [SelectBtn_green, SelectBtn_TriangleRight], + "SelectBtn_greenTriangleLeft": [SelectBtn_green, SelectBtn_TriangleLeft] } diff --git a/scripts/mgear/maya/transform.py b/scripts/mgear/maya/transform.py index b1647bd..f756e53 100644 --- a/scripts/mgear/maya/transform.py +++ b/scripts/mgear/maya/transform.py @@ -1,53 +1,21 @@ -# MGEAR is under the terms of the MIT License +"""Functions to work with matrix and transformations""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to work with matrix and transformations. -""" - - -############################################# -# GLOBAL -############################################# import math -from pymel import util as pmu -import pymel.core.datatypes as dt -import pymel.core.nodetypes as nt +from pymel import util +from pymel.core import datatypes, nodetypes -import mgear.maya.vector as vec +from . import vector ############################################# # TRANSFORM ############################################# + + def getTranslation(node): - """ - Return the position of the dagNode in worldSpace. + """Return the position of the dagNode in worldSpace. - Args: + Arguments: node (dagNode): The dagNode to get the translation Returns: @@ -55,11 +23,11 @@ def getTranslation(node): """ return node.getTranslation(space="world") + def getTransform(node): - """ - Return the transformation matrix of the dagNode in worldSpace. + """Return the transformation matrix of the dagNode in worldSpace. - Args: + Arguments: node (dagNode): The dagNode to get the translation Returns: @@ -67,13 +35,16 @@ def getTransform(node): """ return node.getMatrix(worldSpace=True) + def getTransformLookingAt(pos, lookat, normal, axis="xy", negate=False): - """ - Return the transformation matrix of the dagNode oriented looking to an specific point. + """Return a transformation mstrix using vector positions. + + Return the transformation matrix of the dagNode oriented looking to + an specific point. - Args: + Arguments: pos (vector): The position for the transformation - lookat (vector): The aiming position to stablish the orientation. + lookat (vector): The aiming position to stablish the orientation normal (vector): The normal control the transformation roll. axis (str): The 2 axis used for lookat and normal. Default "xy" negate (bool): If true, invert the aiming direction. @@ -81,9 +52,13 @@ def getTransformLookingAt(pos, lookat, normal, axis="xy", negate=False): Returns: matrix: The transformation matrix - >>> t = tra.getTransformLookingAt(self.guide.pos["heel"], self.guide.apos[-4], self.normal, "xz", self.negate) - """ + >>> t = tra.getTransformLookingAt(self.guide.pos["heel"], + self.guide.apos[-4], + self.normal, + "xz", + self.negate) + """ normal.normalize() if negate: @@ -92,9 +67,9 @@ def getTransformLookingAt(pos, lookat, normal, axis="xy", negate=False): a = lookat - pos a.normalize() - c = pmu.cross(a, normal) + c = util.cross(a, normal) c.normalize() - b = pmu.cross(c, a) + b = util.cross(c, a) b.normalize() if axis == "xy": @@ -139,7 +114,7 @@ def getTransformLookingAt(pos, lookat, normal, axis="xy", negate=False): Y = b Z = c - m = dt.Matrix() + m = datatypes.Matrix() m[0] = [X[0], X[1], X[2], 0.0] m[1] = [Y[0], Y[1], Y[2], 0.0] m[2] = [Z[0], Z[1], Z[2], 0.0] @@ -147,31 +122,33 @@ def getTransformLookingAt(pos, lookat, normal, axis="xy", negate=False): return m + def getChainTransform(positions, normal, negate=False): - """ - Get a tranformation list from a positions list and normal. + """Get a tranformation list from a positions list and normal. - Args: + Arguments: positions(list of vector): List with the chain positions. normal (vector): Normal direction. negate (bool): If true invert the chain orientation. returns: - list of matrix: The list containing the transformation matrix for the chain. + list of matrix: The list containing the transformation matrix + for the chain. >>> tra.getChainTransform(self.guide.apos, self.normal, self.negate) - """ + """ # Draw transforms = [] - for i in range(len(positions)-1): - v0 = positions[i-1] + for i in range(len(positions) - 1): + v0 = positions[i - 1] v1 = positions[i] - v2 = positions[i+1] + v2 = positions[i + 1] # Normal Offset if i > 0: - normal = vec.getTransposedVector(normal, [v0, v1], [v1, v2]) + normal = vector.getTransposedVector( + normal, [v0, v1], [v1, v2]) t = getTransformLookingAt(v1, v2, normal, "xz", negate) transforms.append(t) @@ -179,43 +156,45 @@ def getChainTransform(positions, normal, negate=False): return transforms - def getChainTransform2(positions, normal, negate=False): - """ - Get a tranformation list from a positions list and normal. + """Get a tranformation list from a positions list and normal. Note: getChainTransform2 is using the latest position on the chain - Args: + Arguments: positions(list of vector): List with the chain positions. normal (vector): Normal direction. negate (bool): If true invert the chain orientation. returns: - list of matrix: The list containing the transformation matrix for the chain. + list of matrix: The list containing the transformation matrix + for the chain. - >>> tra.getChainTransform2(self.guide.apos, self.normal, self.negate) - """ + >>> tra.getChainTransform2(self.guide.apos, + self.normal, + self.negate) + """ # Draw transforms = [] for i in range(len(positions)): - if i == len(positions)-1: - v0 = positions[i-1] + if i == len(positions) - 1: + v0 = positions[i - 1] v1 = positions[i] - v2 = positions[i-2] + v2 = positions[i - 2] else: - v0 = positions[i-1] + v0 = positions[i - 1] v1 = positions[i] - v2 = positions[i+1] + v2 = positions[i + 1] # Normal Offset - if i > 0 and i != len(positions)-1: - normal = vec.getTransposedVector(normal, [v0, v1], [v1, v2]) + if i > 0 and i != len(positions) - 1: + normal = vector.getTransposedVector( + normal, [v0, v1], [v1, v2]) - if i == len(positions)-1: + if i == len(positions) - 1: t = getTransformLookingAt(v1, v0, normal, "-xz", negate) else: t = getTransformLookingAt(v1, v2, normal, "xz", negate) @@ -225,19 +204,18 @@ def getChainTransform2(positions, normal, negate=False): def getTransformFromPos(pos): - """ - Create a transformation Matrix from a given position. + """Create a transformation Matrix from a given position. - Args: + Arguments: pos (vector): Position for the transformation matrix Returns: matrix: The newly created transformation matrix >>> t = tra.getTransformFromPos(self.guide.pos["root"]) - """ - m = dt.Matrix() + """ + m = datatypes.Matrix() m[0] = [1.0, 0, 0, 0.0] m[1] = [0, 1.0, 0, 0.0] m[2] = [0, 0, 1.0, 0.0] @@ -245,13 +223,14 @@ def getTransformFromPos(pos): return m -def getOffsetPosition(node, offset=[0,0,0]): - """ - Get an offset position from dagNode - Args: +def getOffsetPosition(node, offset=[0, 0, 0]): + """Get an offset position from dagNode + + Arguments: node (dagNode): The dagNode with the original position. - offset (list of float): Ofsset values for xyz. exp : [1.2, 4.6, 32.78] + offset (list of float): Ofsset values for xyz. + exp : [1.2, 4.6, 32.78] Returns: list of float: the new offset position. @@ -264,28 +243,29 @@ def getOffsetPosition(node, offset=[0,0,0]): self.knee = self.addLoc("knee", self.root, vTemp) """ - offsetVec = dt.Vector(offset[0],offset[1],offset[2]) + offsetVec = datatypes.Vector(offset[0], offset[1], offset[2]) return offsetVec + node.getTranslation(space="world") + def getPositionFromMatrix(in_m): - """ - Get the position values from matrix + """Get the position values from matrix - Args: + Arguments: in_m (matrix): The input Matrix. Returns: list of float: The position values for xyz. + """ pos = in_m[3][:3] return pos + def setMatrixPosition(in_m, pos): - """ - Set the position for a given matrix + """Set the position for a given matrix - Args: + Arguments: in_m (matrix): The input Matrix. pos (list of float): The position values for xyz @@ -295,8 +275,9 @@ def setMatrixPosition(in_m, pos): >>> tnpo = tra.setMatrixPosition(tOld, tra.getPositionFromMatrix(t)) >>> t = tra.setMatrixPosition(t, self.guide.apos[-1]) + """ - m = dt.Matrix() + m = datatypes.Matrix() m[0] = in_m[0] m[1] = in_m[1] m[2] = in_m[2] @@ -304,16 +285,17 @@ def setMatrixPosition(in_m, pos): return m + def setMatrixRotation(m, rot): - """ - Set the rotation for a given matrix + """Set the rotation for a given matrix - Args: + Arguments: in_m (matrix): The input Matrix. rot (list of float): The rotation values for xyz Returns: matrix: The matrix with the new rotation + """ X = rot[0] Y = rot[1] @@ -325,57 +307,66 @@ def setMatrixRotation(m, rot): return m -def setMatrixScale(m, scl=[1,1,1]): - """ - Set the scale for a given matrix - Args: +def setMatrixScale(m, scl=[1, 1, 1]): + """Set the scale for a given matrix + + Arguments: in_m (matrix): The input Matrix. scl (list of float): The scale values for xyz Returns: matrix: The matrix with the new scale - """ - tm = dt.TransformationMatrix(m) + """ + tm = datatypes.TransformationMatrix(m) tm.setScale(scl, space="world") - m = dt.Matrix(tm) + m = datatypes.Matrix(tm) return m -def getFilteredTransform(m, translation=True, rotation=True, scaling=True): - """ - Retrieve a transformation filtered. +def getFilteredTransform(m, + translation=True, + rotation=True, + scaling=True): + """Retrieve a transformation filtered. - Args: + Arguments: m (matrix): the reference matrix - translation (bool): If true the return matrix will match the translation. - rotation (bool): If true the return matrix will match the rotation. - scaling (bool): If true the return matrix will match the scaling. + translation (bool): If true the return matrix will match the + translation. + rotation (bool): If true the return matrix will match the + rotation. + scaling (bool): If true the return matrix will match the + scaling. Returns: matrix : The filtered matrix """ - t = dt.Vector(m[3][0],m[3][1],m[3][2]) - x = dt.Vector(m[0][0],m[0][1],m[0][2]) - y = dt.Vector(m[1][0],m[1][1],m[1][2]) - z = dt.Vector(m[2][0],m[2][1],m[2][2]) + t = datatypes.Vector(m[3][0], m[3][1], m[3][2]) + x = datatypes.Vector(m[0][0], m[0][1], m[0][2]) + y = datatypes.Vector(m[1][0], m[1][1], m[1][2]) + z = datatypes.Vector(m[2][0], m[2][1], m[2][2]) - out = dt.Matrix() + out = datatypes.Matrix() if translation: out = setMatrixPosition(out, t) if rotation and scaling: - out = setMatrixRotation(out, [x,y,z]) + out = setMatrixRotation(out, [x, y, z]) elif rotation and not scaling: out = setMatrixRotation(out, [x.normal(), y.normal(), z.normal()]) elif not rotation and scaling: - out = setMatrixRotation(out, [dt.Vector(1,0,0) * x.length(), dt.Vector(0,1,0) * y.length(), dt.Vector(0,0,1) * z.length()]) + out = setMatrixRotation(out, + [datatypes.Vector(1, 0, 0) + * x.length(), datatypes.Vector(0, 1, 0) + * y.length(), datatypes.Vector(0, 0, 1) + * z.length()]) return out @@ -383,11 +374,11 @@ def getFilteredTransform(m, translation=True, rotation=True, scaling=True): # ROTATION ########################################################## + def getRotationFromAxis(in_a, in_b, axis="xy", negate=False): - """ - Get the matrix rotation from a given axis. + """Get the matrix rotation from a given axis. - Args: + Arguments: in_a (vector): Axis A in_b (vector): Axis B axis (str): The axis to use for the orientation. Default: "xy" @@ -399,16 +390,18 @@ def getRotationFromAxis(in_a, in_b, axis="xy", negate=False): Example: .. code-block:: python - x = dt.Vector(0,-1,0) + x = datatypes.Vector(0,-1,0) x = x * tra.getTransform(self.eff_loc) - z = dt.Vector(self.normal.x,self.normal.y,self.normal.z) + z = datatypes.Vector(self.normal.x, + self.normal.y, + self.normal.z) z = z * tra.getTransform(self.eff_loc) m = tra.getRotationFromAxis(x, z, "xz", self.negate) - """ - a = dt.Vector(in_a.x, in_a.y, in_a.z) - b = dt.Vector(in_b.x, in_b.y, in_b.z) - c = dt.Vector() + """ + a = datatypes.Vector(in_a.x, in_a.y, in_a.z) + b = datatypes.Vector(in_b.x, in_b.y, in_b.z) + c = datatypes.Vector() if negate: a *= -1 @@ -444,16 +437,19 @@ def getRotationFromAxis(in_a, in_b, axis="xy", negate=False): y = b x = -c - m = dt.Matrix() - setMatrixRotation(m, [x,y,z]) + m = datatypes.Matrix() + setMatrixRotation(m, [x, y, z]) return m + def getSymmetricalTransform(t, axis="yz", fNegScale=False): - """ - Get the symmetrical tranformation matrix from a define 2 axis mirror plane. exp:"yz". + """Get the symmetrical tranformation - Args: + Get the symmetrical tranformation matrix from a define 2 axis mirror + plane. exp:"yz". + + Arguments: t (matrix): The transformation matrix to mirror. axis (str): The mirror plane. fNegScale(bool): This function is not yet implemented. @@ -463,32 +459,32 @@ def getSymmetricalTransform(t, axis="yz", fNegScale=False): """ if axis == "yz": - mirror = dt.TransformationMatrix( -1,0,0,0, - 0,1,0,0, - 0,0,1,0, - 0,0,0,1) + mirror = datatypes.TransformationMatrix(-1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1) if axis == "xy": - mirror = dt.TransformationMatrix( 1,0,0,0, - 0,1,0,0, - 0,0,-1,0, - 0,0,0,1) + mirror = datatypes.TransformationMatrix(1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, -1, 0, + 0, 0, 0, 1) if axis == "zx": - mirror = dt.TransformationMatrix( 1,0,0,0, - 0,-1,0,0, - 0,0,1,0, - 0,0,0,1) + mirror = datatypes.TransformationMatrix(1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1) t *= mirror - #TODO: getSymmetricalTransform: add freeze negative scaling procedure. + # TODO: add freeze negative scaling procedure. return t + def resetTransform(node, t=True, r=True, s=True): - """ - Reset the scale, rotation and translation for a given dagNode. + """Reset the scale, rotation and translation for a given dagNode. - Args: + Arguments: node(dagNode): The object to reset the transforms. t (bool): If true translation will be reseted. r (bool): If true rotation will be reseted. @@ -498,59 +494,69 @@ def resetTransform(node, t=True, r=True, s=True): None """ + trsDic = {"tx": 0, + "ty": 0, + "tz": 0, + "rx": 0, + "ry": 0, + "rz": 0, + "sx": 1, + "sy": 1, + "sz": 1} - trsDic = {"tx":0, "ty":0, "tz":0, "rx":0, "ry":0, "rz":0, "sx":1, "sy":1, "sz":1} tAxis = ["tx", "ty", "tz"] rAxis = ["rx", "ry", "rz"] sAxis = ["sx", "sy", "sz"] axis = [] - if t: axis = axis + tAxis - if r: axis = axis + rAxis - if s: axis = axis + sAxis + if t: + axis = axis + tAxis + if r: + axis = axis + rAxis + if s: + axis = axis + sAxis for a in axis: - try: node.attr(a).set(trsDic[a]) - except: pass - - + try: + node.attr(a).set(trsDic[a]) + except Exception: + pass def matchWorldTransform(source, target): - """ - Match 2 dagNode transformations in world space. + """Match 2 dagNode transformations in world space. - Args: + Arguments: source (dagNode): The source dagNode target (dagNode): The target dagNode Returns: None - """ + """ sWM = source.getMatrix(worldSpace=True) target.setMatrix(sWM, worldSpace=True) + def quaternionDotProd(q1, q2): - """ - Get the dot product of 2 quaternion. + """Get the dot product of 2 quaternion. - Args: + Arguments: q1 (quaternion): Input quaternion 1. q2 (quaternion): Input quaternion 2. Returns: quaternion: The dot proct quaternion. - """ + """ dot = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w return dot + def quaternionSlerp(q1, q2, blend): - """ - Get an interpolate quaternion based in slerp function. + """Get an interpolate quaternion based in slerp function. - Args: + Arguments: q1 (quaternion): Input quaternion 1. q2 (quaternion): Input quaternion 2. blend (float): Blending value. @@ -561,8 +567,11 @@ def quaternionSlerp(q1, q2, blend): Example: .. code-block:: python - q = quaternionSlerp(dt.Quaternion(t1.getRotationQuaternion()), - dt.Quaternion(t2.getRotationQuaternion()), blend) + q = quaternionSlerp(datatypes.Quaternion( + t1.getRotationQuaternion()), + datatypes.Quaternion( + t2.getRotationQuaternion()), blend) + """ dot = quaternionDotProd(q1, q2) if dot < 0.0: @@ -578,34 +587,37 @@ def quaternionSlerp(q1, q2, blend): w1 = 1.0 - blend w2 = blend - result = dt.Quaternion(q1).scaleIt(w1) + dt.Quaternion(q2).scaleIt(w2) + result = (datatypes.Quaternion(q1).scaleIt(w1) + + datatypes.Quaternion(q2).scaleIt(w2)) return result def convert2TransformMatrix(tm): - """ - Convert a transformation Matrix or a matrix to a transformation matrix in world space. + """Convert a transformation Matrix - Args: + Convert a transformation Matrix or a matrix to a transformation + matrix in world space. + + Arguments: tm (matrix): The input matrix. Returns: matrix: The transformation matrix in worldSpace + """ - if isinstance(tm, nt.Transform): - tm = dt.TransformationMatrix(tm.getMatrix(worldSpace=True)) - if isinstance(tm, dt.Matrix): - tm = dt.TransformationMatrix(tm) + if isinstance(tm, nodetypes.Transform): + tm = datatypes.TransformationMatrix(tm.getMatrix(worldSpace=True)) + if isinstance(tm, datatypes.Matrix): + tm = datatypes.TransformationMatrix(tm) return tm -def getInterpolateTransformMatrix(t1, t2, blend=.5 ): - """ - Interpolate 2 matrix. +def getInterpolateTransformMatrix(t1, t2, blend=.5): + """Interpolate 2 matrix. - Args: + Arguments: t1 (matrix): Input matrix 1. t2 (matrix): Input matrix 2. blend (float): The blending value. Default 0.5 @@ -613,10 +625,12 @@ def getInterpolateTransformMatrix(t1, t2, blend=.5 ): Returns: matrix: The newly interpolated transformation matrix. - >>> t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], self.tws1A_npo, .3333) - """ + >>> t = tra.getInterpolateTransformMatrix(self.fk_ctl[0], + self.tws1A_npo, + .3333) - #check if the input transforms are transformMatrix + """ + # check if the input transforms are transformMatrix t1 = convert2TransformMatrix(t1) t2 = convert2TransformMatrix(t2) @@ -626,20 +640,23 @@ def getInterpolateTransformMatrix(t1, t2, blend=.5 ): return t1 # translate - pos = vec.linearlyInterpolate(t1.getTranslation(space="world"), t2.getTranslation(space="world"), blend) + pos = vector.linearlyInterpolate(t1.getTranslation(space="world"), + t2.getTranslation(space="world"), + blend) # scale - scaleA = dt.Vector(*t1.getScale(space="world")) - scaleB = dt.Vector(*t2.getScale(space="world")) - + scaleA = datatypes.Vector(*t1.getScale(space="world")) + scaleB = datatypes.Vector(*t2.getScale(space="world")) - vs = vec.linearlyInterpolate(scaleA, scaleB, blend) + vs = vector.linearlyInterpolate(scaleA, scaleB, blend) # rotate - q = quaternionSlerp(dt.Quaternion(t1.getRotationQuaternion()), dt.Quaternion(t2.getRotationQuaternion()), blend) + q = quaternionSlerp(datatypes.Quaternion(t1.getRotationQuaternion()), + datatypes.Quaternion(t2.getRotationQuaternion()), + blend) # out - result = dt.TransformationMatrix() + result = datatypes.TransformationMatrix() result.setTranslation(pos, space="world") result.setRotationQuaternion(q.x, q.y, q.z, q.w) diff --git a/scripts/mgear/maya/utils.py b/scripts/mgear/maya/utils.py index 0a31a48..a4c9b0a 100644 --- a/scripts/mgear/maya/utils.py +++ b/scripts/mgear/maya/utils.py @@ -1,35 +1,6 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Utilitie functions. -""" -########################################################## -# GLOBAL -########################################################## +"""Utilitie functions""" + + import os import sys from functools import wraps @@ -46,10 +17,9 @@ ########################################################## def is_odd(num): - """ - Check if the number is odd. + """Check if the number is odd. - Args: + Arguments: num (int): the number Returns: @@ -58,9 +28,10 @@ def is_odd(num): return num % 2 -def gatherCustomModuleDirectories(envvarkey, defaultModulePath, component=False): - """ - returns component directory +def gatherCustomModuleDirectories(envvarkey, + defaultModulePath, + component=False): + """returns component directory Arguments: envvarkey: The environment variable key name, that is searched @@ -68,14 +39,15 @@ def gatherCustomModuleDirectories(envvarkey, defaultModulePath, component=False) Returns: Dict{string: []string} - """ + """ results = {} # default path if not os.path.exists(defaultModulePath): message = "= GEAR RIG SYSTEM ====== notify:" - message += "\n default module directory is not found at {}".format(defaultModulePath) + message += "\n default module directory is not " \ + "found at {}".format(defaultModulePath) message += "\n\n check your mGear installation" message += " or call your system administrator." message += "\n" @@ -85,7 +57,6 @@ def gatherCustomModuleDirectories(envvarkey, defaultModulePath, component=False) modules = sorted(os.listdir(defaultModulePath)) results[defaultModulePath] = modules - # from environment variables envvarval = os.environ.get(envvarkey, "") for path in envvarval.split(os.pathsep): @@ -96,8 +67,10 @@ def gatherCustomModuleDirectories(envvarkey, defaultModulePath, component=False) init_py_path = os.path.join(path, "__init__.py") if not os.path.exists(init_py_path): message = "= GEAR RIG SYSTEM ====== notify:" - message += "\n __init__.py for custom component not found {}".format(init_py_path) - message += "\n\n check your module definition file or environment variable 'MGEAR_COMPONENTS_PATH'" + message += "\n __init__.py for custom component not " \ + "found {}".format(init_py_path) + message += "\n\n check your module definition file or " \ + "environment variable 'MGEAR_COMPONENTS_PATH'" message += " or call your system administrator." message += "\n" mgear.log(message, mgear.sev_error) @@ -108,12 +81,12 @@ def gatherCustomModuleDirectories(envvarkey, defaultModulePath, component=False) results[path] = modules - return results def getModuleBasePath(directories, moduleName): - # search component path + """search component path""" + for basepath, modules in directories.iteritems(): if moduleName in modules: # moduleBasePath = os.path.basename(basepath) @@ -122,23 +95,30 @@ def getModuleBasePath(directories, moduleName): else: moduleBasePath = "" message = "= GEAR RIG SYSTEM ======" - message += "component base directory not found for {}".format(moduleName) + message += "component base directory not found " \ + " for {}".format(moduleName) mgear.log(message, mgear.sev_error) return moduleBasePath -def importFromStandardOrCustomDirectories(directories, defaultFormatter, customFormatter, moduleName): - """ - return imported module +def importFromStandardOrCustomDirectories(directories, + defaultFormatter, + customFormatter, + moduleName): + """Return imported module Arguments: - directories: the directories for search in. this is got by gatherCustomModuleDirectories - defaultFormatter: this represents module structure for default module. for example "mgear.maya.shifter.component.{}" - customFormatter: this represents module structure for custom module. for example "{0}.{1}" + directories: the directories for search in. this is got by + gatherCustomModuleDirectories + defaultFormatter: this represents module structure for default + module. for example "mgear.maya.shifter.component.{}" + customFormatter: this represents module structure for custom + module. for example "{0}.{1}" Returns: module: imported module + """ # Import module and get class try: @@ -158,10 +138,12 @@ def importFromStandardOrCustomDirectories(directories, defaultFormatter, customF # Decorators # ----------------------------------------------------------------------------- def viewport_off(func): - # type: (function) -> function - """ - Decorator - turn off Maya display while func is running. + """Decorator - Turn off Maya display while func is running. + if func will fail, the error will be raised after. + + type: (function) -> function + """ @wraps(func) def wrap(*args, **kwargs): @@ -184,9 +166,10 @@ def wrap(*args, **kwargs): def one_undo(func): - # type: (function) -> function - """ - Decorator - guarantee close chunk. + """Decorator - guarantee close chunk. + + type: (function) -> function + """ @wraps(func) def wrap(*args, **kwargs): diff --git a/scripts/mgear/maya/vector.py b/scripts/mgear/maya/vector.py index 1ab04b5..07ed5de 100644 --- a/scripts/mgear/maya/vector.py +++ b/scripts/mgear/maya/vector.py @@ -1,56 +1,25 @@ -# MGEAR is under the terms of the MIT License +"""Functions to work with vectors""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -Functions to work with vectors. -""" - -############################################# -# GLOBAL -############################################# import math -import maya.OpenMaya as om +import maya.OpenMaya as OpenMaya + +from pymel.core import datatypes -import pymel.core.datatypes as dt -import pymel.core as pm ############################################# # VECTOR OPERATIONS ############################################# def getDistance(v0, v1): - """ - Get the distance between 2 vectors + """Get the distance between 2 vectors - Args: + Arguments: v0 (vector): vector A. v1 (vector): vector B. Returns: float: Distance length. + """ v = v1 - v0 @@ -58,15 +27,15 @@ def getDistance(v0, v1): def getDistance2(obj0, obj1): - """ - Get the distance between 2 objects. + """Get the distance between 2 objects. - Args: + Arguments: obj0 (dagNode): Object A obj1 (dagNode): Object B Returns: float: Distance length + """ v0 = obj0.getTranslation(space="world") v1 = obj1.getTranslation(space="world") @@ -77,10 +46,9 @@ def getDistance2(obj0, obj1): def linearlyInterpolate(v0, v1, blend=.5): - """ - Get the vector interpolated between 2 vectors. + """Get the vector interpolated between 2 vectors. - Args: + Arguments: v0 (vector): vector A. v1 (vector): vector B. blend (float): Blending value. @@ -89,7 +57,6 @@ def linearlyInterpolate(v0, v1, blend=.5): vector: The interpolated vector. """ - vector = v1 - v0 vector *= blend vector += v0 @@ -98,10 +65,9 @@ def linearlyInterpolate(v0, v1, blend=.5): def getPlaneNormal(v0, v1, v2): - """ - Get the normal vector of a plane (Defined by 3 positions). + """Get the normal vector of a plane (Defined by 3 positions). - Args: + Arguments: v0 (vector): First position on the plane. v1 (vector): Second position on the plane. v2 (vector): Third position on the plane. @@ -110,7 +76,6 @@ def getPlaneNormal(v0, v1, v2): vector: The normal. """ - vector0 = v1 - v0 vector1 = v2 - v0 vector0.normalize() @@ -123,10 +88,9 @@ def getPlaneNormal(v0, v1, v2): def getPlaneBiNormal(v0, v1, v2): - """ - Get the binormal vector of a plane (Defined by 3 positions). + """Get the binormal vector of a plane (Defined by 3 positions). - Args: + Arguments: v0 (vector): First position on the plane. v1 (vector): Second position on the plane. v2 (vector): Third position on the plane. @@ -135,7 +99,6 @@ def getPlaneBiNormal(v0, v1, v2): vector: The binormal. """ - normal = getPlaneNormal(v0, v1, v2) vector0 = v1 - v0 @@ -147,10 +110,9 @@ def getPlaneBiNormal(v0, v1, v2): def getTransposedVector(v, position0, position1, inverse=False): - """ - Get the transposed vector. + """Get the transposed vector. - Args: + Arguments: v (vector): Input Vector. position0 (vector): Position A. position1 (vector): Position B. @@ -159,14 +121,13 @@ def getTransposedVector(v, position0, position1, inverse=False): Returns: vector: The transposed vector. - Khan Academy: - `Transposed Vector `_ - - - >>> normal = vec.getTransposedVector(self.normal, [self.guide.apos[0], self.guide.apos[1]], [self.guide.apos[-2], self.guide.apos[-1]]) + >>> normal = vec.getTransposedVector(self.normal, + [self.guide.apos[0], + self.guide.apos[1]], + [self.guide.apos[-2], + self.guide.apos[-1]]) """ - v0 = position0[1] - position0[0] v0.normalize() @@ -190,52 +151,50 @@ def getTransposedVector(v, position0, position1, inverse=False): def rotateAlongAxis(v, axis, a): - """ - Rotate a vector around a given axis defined by other vector. + """Rotate a vector around a given axis defined by other vector. - Args: + Arguments: v (vector): The vector to rotate. axis (vector): The axis to rotate around. a (float): The rotation angle in radians. + """ sa = math.sin(a / 2.0) ca = math.cos(a / 2.0) - q1 = om.MQuaternion(v.x, v.y, v.z, 0) - q2 = om.MQuaternion(axis.x * sa, axis.y * sa, axis.z * sa, ca) - q2n = om.MQuaternion(-axis.x * sa, -axis.y * sa, -axis.z * sa, ca) + q1 = OpenMaya.MQuaternion(v.x, v.y, v.z, 0) + q2 = OpenMaya.MQuaternion(axis.x * sa, axis.y * sa, axis.z * sa, ca) + q2n = OpenMaya.MQuaternion(-axis.x * sa, -axis.y * sa, -axis.z * sa, ca) q = q2 * q1 q *= q2n - out = om.MVector(q.x, q.y, q.z) + out = OpenMaya.MVector(q.x, q.y, q.z) return out - ########################################################## # CLASS ########################################################## -# ======================================================== class Blade(object): - """ - The Blade object for shifter guides. - """ + """The Blade object for shifter guides""" - def __init__(self, t=dt.Matrix()): + def __init__(self, t=datatypes.Matrix()): self.transform = t - d = [t.data[j][i] for j in range(len(t.data)) for i in range(len(t.data[0])) ] + d = [t.data[j][i] + for j in range(len(t.data)) + for i in range(len(t.data[0]))] - m = om.MMatrix() - om.MScriptUtil.createMatrixFromList(d, m) - m = om.MTransformationMatrix(m) + m = OpenMaya.MMatrix() + OpenMaya.MScriptUtil.createMatrixFromList(d, m) + m = OpenMaya.MTransformationMatrix(m) - x = om.MVector(1,0,0).rotateBy(m.rotation()) - y = om.MVector(0,1,0).rotateBy(m.rotation()) - z = om.MVector(0,0,1).rotateBy(m.rotation()) + x = OpenMaya.MVector(1, 0, 0).rotateBy(m.rotation()) + y = OpenMaya.MVector(0, 1, 0).rotateBy(m.rotation()) + z = OpenMaya.MVector(0, 0, 1).rotateBy(m.rotation()) - self.x = dt.Vector(x.x, x.y, x.z) - self.y = dt.Vector(y.x, y.y, y.z) - self.z = dt.Vector(z.x, z.y, z.z) + self.x = datatypes.Vector(x.x, x.y, x.z) + self.y = datatypes.Vector(y.x, y.y, y.z) + self.z = datatypes.Vector(z.x, z.y, z.z) diff --git a/scripts/mgear/string.py b/scripts/mgear/string.py index 82eda79..60a55be 100644 --- a/scripts/mgear/string.py +++ b/scripts/mgear/string.py @@ -1,32 +1,4 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -string management methods -""" +"""string management methods""" ########################################################## # GLOBAL @@ -36,60 +8,68 @@ ########################################################## # FUNCTIONS ########################################################## + + def normalize(string): - """ - Replace all invalid characters with "_" + """Replace all invalid characters with "_" :param string string: A string to normalize. :return string: Normalized string + """ string = str(string) if re.match("^[0-9]", string): - string = "_"+string + string = "_" + string return re.sub("[^A-Za-z0-9_-]", "_", str(string)) + def removeInvalidCharacter(string): - """ - Remove all invalid character. + """Remove all invalid character. :param string string: A string to normalize. :return string: Normalized string. + """ return re.sub("[^A-Za-z0-9]", "", str(string)) + def replaceSharpWithPadding(string, index): - """ - Replace a list of # symbol with properly padded index. (ie. count_### > count_001 ) + """Replace a list of # symbol with properly padded index. + + ie. count_### > count_001 :param string string: A string to set. Should include '#' :param integer index: Index to replace. :return string: Normalized string. + """ if string.count("#") == 0: string += "#" digit = str(index) while len(digit) < string.count("#"): - digit = "0"+digit + digit = "0" + digit return re.sub("#+", digit, string) def convertRLName(name): - """ - Convert a string with underscore "_\L", "_L0\_", "L\_", "_L" to "R". And vice and versa. + """Convert a string with underscore + + i.e: "_\L", "_L0\_", "L\_", "_L" to "R". And vice and versa. :param string name: string to convert :return: Tuple of Integer + """ if name == "L": return "R" elif name == "R": return "L" - - rePattern = re.compile("_[RL][0-9]+_|^[RL][0-9]+_|_[RL][0-9]+$|_[RL]_|^[RL]_|_[RL]$") + re_str = "_[RL][0-9]+_|^[RL][0-9]+_|_[RL][0-9]+$|_[RL]_|^[RL]_|_[RL]$" + rePattern = re.compile(re_str) reMatch = re.search(rePattern, name) if reMatch: diff --git a/scripts/mgear/vendor/__init__.py b/scripts/mgear/vendor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/mgear/widgets.py b/scripts/mgear/widgets.py index 82b5fea..7810a91 100644 --- a/scripts/mgear/widgets.py +++ b/scripts/mgear/widgets.py @@ -1,43 +1,15 @@ -# MGEAR is under the terms of the MIT License +"""mGear Qt custom widgets""" -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos +from mgear.vendor.Qt import QtCore, QtWidgets -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -""" -mGear Qt custom widgets -""" - -import mgear.maya.pyqt as gqt -QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import() ################################################# -## CUSTOM WIDGETS +# CUSTOM WIDGETS ################################################# class TableWidgetDragRows(QtWidgets.QTableWidget): - """qTableWidget with drag and drop functionality - """ + """qTableWidget with drag and drop functionality""" + def __init__(self, *args, **kwargs): super(TableWidgetDragRows, self).__init__(*args, **kwargs) @@ -56,8 +28,11 @@ def dropEvent(self, event): drop_row = self.drop_on(event) rows = sorted(set(item.row() for item in self.selectedItems())) - rows_to_move = [[QtWidgets.QTableWidgetItem(self.item(row_index, column_index)) for column_index in range(self.columnCount())] - for row_index in rows] + rows_to_move = [[QtWidgets.QTableWidgetItem( + self.item(row_index, column_index)) + for column_index in range(self.columnCount())] + for row_index in rows] + for row_index in reversed(rows): self.removeRow(row_index) if row_index < drop_row: @@ -71,14 +46,16 @@ def dropEvent(self, event): event.accept() for row_index in range(len(rows_to_move)): for column_index in range(self.columnCount()): - self.item(drop_row + row_index, column_index).setSelected(True) + self.item(drop_row + row_index, + column_index).setSelected(True) def drop_on(self, event): index = self.indexAt(event.pos()) if not index.isValid(): return self.rowCount() - return index.row() + 1 if self.is_below(event.pos(), index) else index.row() + return index.row() + 1 if self.is_below(event.pos(), + index) else index.row() def is_below(self, pos, index): rect = self.visualRect(index) @@ -87,7 +64,10 @@ def is_below(self, pos, index): return False elif rect.bottom() - pos.y() < margin: return True - return rect.contains(pos, True) and not (int(self.model().flags(index)) & QtCore.Qt.ItemIsDropEnabled) and pos.y() >= rect.center().y() + return rect.contains(pos, True) \ + and not (int(self.model().flags(index)) + & QtCore.Qt.ItemIsDropEnabled) \ + and pos.y() >= rect.center().y() def getSelectedRowsFast(self): selRows = [] @@ -102,7 +82,9 @@ def droppingOnItself(self, event, index): if self.dragDropMode() == QtWidgets.QAbstractItemView.InternalMove: dropAction = QtCore.Qt.MoveAction - if event.source() == self and event.possibleActions() & QtCore.Qt.MoveAction and dropAction == QtCore.Qt.MoveAction: + if (event.source() == self + and event.possibleActions() & QtCore.Qt.MoveAction + and dropAction == QtCore.Qt.MoveAction): selectedIndexes = self.selectedIndexes() child = index while child.isValid() and child != self.rootIndex(): @@ -122,17 +104,20 @@ def dropOn(self, event): if self.viewport().rect().contains(event.pos()): index = self.indexAt(event.pos()) - if not index.isValid() or not self.visualRect(index).contains(event.pos()): + if (not index.isValid() + or not self.visualRect(index).contains(event.pos())): index = self.rootIndex() if self.model().supportedDropActions() & event.dropAction(): if index != self.rootIndex(): - dropIndicatorPosition = self.position(event.pos(), self.visualRect(index), index) - - if dropIndicatorPosition == QtWidgets.QAbstractItemView.AboveItem: + dropIndicatorPosition = self.position(event.pos(), + self.visualRect(index), + index) + qabw = QtWidgets.QAbstractItemView + if dropIndicatorPosition == qabw.AboveItem: row = index.row() col = index.column() - elif dropIndicatorPosition == QtWidgets.QAbstractItemView.BelowItem: + elif dropIndicatorPosition == qabw.BelowItem: row = index.row() + 1 col = index.column() else: @@ -154,7 +139,12 @@ def position(self, pos, rect, index): elif rect.contains(pos, True): r = QtWidgets.QAbstractItemView.OnItem - if r == QtWidgets.QAbstractItemView.OnItem and not (self.model().flags(index) & QtCore.Qt.ItemIsDropEnabled): - r = QtWidgets.QAbstractItemView.AboveItem if pos.y() < rect.center().y() else QtWidgets.QAbstractItemView.BelowItem + if (r == QtWidgets.QAbstractItemView.OnItem + and not (self.model().flags(index) + & QtCore.Qt.ItemIsDropEnabled)): + if pos.y() < rect.center().y(): + r = QtWidgets.QAbstractItemView.AboveItem + else: + r = QtWidgets.QAbstractItemView.BelowItem return r diff --git a/scripts/userSetup.py b/scripts/userSetup.py index e2492c4..fe4f972 100644 --- a/scripts/userSetup.py +++ b/scripts/userSetup.py @@ -1,36 +1,10 @@ -# MGEAR is under the terms of the MIT License +from maya import utils -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - -import maya.utils as utils def mGearLoader(): - """ - Creates mGear menu - """ + """Create mGear menu""" import mGear_menu mGear_menu.CreateMenu() -utils.executeDeferred('mGearLoader()') + +utils.executeDeferred(mGearLoader) diff --git a/tests/test_mgear_attribute.py b/tests/test_mgear_attribute.py index 69f9cb4..f9e91df 100644 --- a/tests/test_mgear_attribute.py +++ b/tests/test_mgear_attribute.py @@ -1,141 +1,62 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -import unittest +from maya import cmds import pymel.core as pm -import mgear.maya.attribute as att - -# Test suite for mgear.maya.attribute module. - -class attribute_moveChannel_TestCase(unittest.TestCase): - """Test for moveChannel function on attribute module - """ - def setUp(self): - self.testName = self.shortDescription() - if (self.testName in [ "move_channel", "move_channel_index", "move_channel_fullName", - "move_channel_merge", "proxy_channel"]): - pm.displayInfo("Running: {}".format(self.testName)) - self.pcs = pm.polyCube(n="pCube_source") - self.pcs2 = pm.polyCube(n="pCube_source2") - self.pct = pm.polyCube(n="pCube_target") - self.chanName = "bla_{}".format(self.testName) - ch1 = att.addAttribute(self.pcs[0], self.chanName, "double", 0, minValue=0, maxValue=1 ) - ch2 = att.addAttribute(self.pcs2[0], self.chanName, "double", 0, minValue=0, maxValue=1 ) - pm.connectAttr(ch1, self.pcs[0].ty) - pm.connectAttr(ch2, self.pcs2[0].ty) - else: - pm.displayWarning("UNKNOWN TEST ROUTINE: {}".format(self.testName)) - - - def tearDown(self): - if (self.testName in [ "move_channel", "move_channel_index", "move_channel_fullName", - "move_channel_merge", "proxy_channel"]): - pm.delete(self.pcs) - pm.delete(self.pcs2) - pm.delete(self.pct) - - - def test_moveChannel(self): - """move_channel - """ - for s in [self.pcs[0], self.pcs2[0]]: - self.assertFalse(att.moveChannel(self.chanName, s, self.pct[0])) - - def test_moveChannel_index(self): - """move_channel_index - """ - for s in [self.pcs[0], self.pcs2[0]]: - self.assertIsNone(att.moveChannel(self.chanName, s, self.pct[0], "index")) - - def test_moveChannel_fullName(self): - """move_channel_fullName - """ - for s in [self.pcs[0], self.pcs2[0]]: - self.assertIsNone(att.moveChannel(self.chanName, s, self.pct[0], "fullName")) - - def test_moveChannel_merge(self): - """move_channel_merge - """ - for s in [self.pcs[0], self.pcs2[0]]: - self.assertIsNone(att.moveChannel(self.chanName, s, self.pct[0], "merge")) - - - - -class attribute_addProxyAttribute_TestCase(unittest.TestCase): - - - def setUp(self): - self.testName = self.shortDescription() - if (self.testName in ["proxy_channel", "proxy_channel_index", "proxy_channel_fullName"]): - pm.displayInfo("Running: {}".format(self.testName)) - self.pcs = pm.polyCube(n="pCube_source") - self.pcs2 = pm.polyCube(n="pCube_source2") - self.pct = pm.polyCube(n="pCube_target") - self.chanName = "bla_{}".format(self.testName) - ch1 = att.addAttribute(self.pcs[0], self.chanName, "double", 0, minValue=0, maxValue=1 ) - ch2 = att.addAttribute(self.pcs2[0], self.chanName, "double", 0, minValue=0, maxValue=1 ) - pm.connectAttr(ch1, self.pcs[0].ty) - pm.connectAttr(ch2, self.pcs2[0].ty) - else: - pm.displayWarning("UNKNOWN TEST ROUTINE: {}".format(self.testName)) - - def tearDown(self): - if (self.testName in ["proxy_channel", "proxy_channel_index", "proxy_channel_fullName"]): - pm.delete(self.pcs) - pm.delete(self.pcs2) - pm.delete(self.pct) - - def test_addProxyAttribute(self): - """proxy_channel - """ - source = pm.PyNode("{}.{}".format(self.pcs[0], self.chanName)) - source2 = pm.PyNode("{}.{}".format(self.pcs2[0], self.chanName)) - self.assertIsNone(att.addProxyAttribute(source, self.pct[0])) - self.assertIsNone(att.addProxyAttribute(source2, self.pct[0])) - - def test_addProxyAttribute_index(self): - """proxy_channel_index - """ - source = pm.PyNode("{}.{}".format(self.pcs[0], self.chanName)) - source2 = pm.PyNode("{}.{}".format(self.pcs2[0], self.chanName)) - self.assertIsNone(att.addProxyAttribute(source, self.pct[0], "index")) - self.assertIsNone(att.addProxyAttribute(source2, self.pct[0], "index")) - - def test_addProxyAttribute_fullName(self): - """proxy_channel_fullName - """ - source = pm.PyNode("{}.{}".format(self.pcs[0], self.chanName)) - source2 = pm.PyNode("{}.{}".format(self.pcs2[0], self.chanName)) - self.assertIsNone(att.addProxyAttribute(source, self.pct[0], "fullName")) - self.assertIsNone(att.addProxyAttribute(source2, self.pct[0], "fullName")) - - +import mgear.maya.attribute as att -if __name__=='__main__': - unittest.main(exit=False) +from nose.tools import ( + assert_false, + assert_is_none, + with_setup, +) + + +def source_nodes(): + cmds.file(new=True, force=True) + + source1, _ = pm.polyCube(name="source1") + source2, _ = pm.polyCube(name="source2") + target, _ = pm.polyCube(name="target") + + ch1 = att.addAttribute(source1, + "chanName", + "double", + 0, + minValue=0, + maxValue=1) + ch2 = att.addAttribute(source2, + "chanName", + "double", + 0, + minValue=0, + maxValue=1) + + pm.connectAttr(ch1, source1.ty) + pm.connectAttr(ch2, source2.ty) + + +@with_setup(source_nodes) +def test_move_channel(): + """chanName.moveChannel works""" + + for source in ("source1", "source2"): + assert_false( + att.moveChannel("chanName", source, "target") + ) + + +@with_setup(source_nodes) +def test_moveChannel_index(): + """move_channel_index""" + for source in ("source1", "source2"): + assert_is_none( + att.moveChannel("chanName", source, "source1", "index") + ) + + +@with_setup(source_nodes) +def test_moveChannel_fullName(): + """move_channel_fullName""" + for source in ("source1", "source2"): + assert_is_none( + att.moveChannel("chanName", source, "source1", "fullName") + ) diff --git a/tests/test_rigbits_channelWrangler.py b/tests/test_rigbits_channelWrangler.py index 4c2b718..6c3557b 100644 --- a/tests/test_rigbits_channelWrangler.py +++ b/tests/test_rigbits_channelWrangler.py @@ -1,69 +1,53 @@ -# MGEAR is under the terms of the MIT License - -# Copyright (c) 2016 Jeremie Passerin, Miquel Campos - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# Author: Jeremie Passerin geerem@hotmail.com www.jeremiepasserin.com -# Author: Miquel Campos hello@miquel-campos.com www.miquel-campos.com -# Date: 2016 / 10 / 10 - - -import unittest +from maya import cmds import pymel.core as pm -import mgear.maya.rigbits.channelWrangler as cw -import mgear.maya.attribute as att - - -class cwTestCase(unittest.TestCase): - - def setUp(self): - self.config = { "movePolicy":"merge", - "proxyPolicy":"index", - "map":[ ["shoulder_ik", "armUI_R0_ctl", "armUI_L0_ctl", 0], - ["shoulder_rotRef", "armUI_R0_ctl", "armUI_L0_ctl", 0], - ["shoulder_rotRef", "armUI_R1_ctl", "armUI_L0_ctl", 0]]} - - self.pcs = pm.polyCube(n="armUI_R0_ctl") - self.pcs2 = pm.polyCube(n="armUI_R1_ctl") - self.pct = pm.polyCube(n="armUI_L0_ctl") - att.addAttribute(self.pcs[0], "shoulder_ik", "double", 0, minValue=0, maxValue=1 ) - ch2 = att.addAttribute(self.pcs[0], "shoulder_rotRef", "double", 0, minValue=0, maxValue=1 ) - ch3 = att.addAttribute(self.pcs2[0], "shoulder_rotRef", "double", 0, minValue=0, maxValue=1 ) - pm.connectAttr(ch2, self.pcs[0].ty) - pm.connectAttr(ch3, self.pcs2[0].ty) - - - def tearDown(self): - pm.delete(self.pcs) - pm.delete(self.pcs2) - pm.delete(self.pct) - - def test_applyChannelConfig(self): - self.assertIsNone(cw._applyChannelConfig(self.config)) - - # def test_applyChannelConfigFromFile(self): - # filePath = "" - # self.assertIsNone(cw.applyChannelConfig(filePath)) - - - -if __name__=='__main__': - unittest.main(exit=False) +from mgear.maya.rigbits import channelWrangler +from mgear.maya import attribute + +from nose.tools import ( + assert_is_none, + with_setup, +) + +self = type("self", (object,), {}) +self.config = { + "movePolicy": "merge", + "proxyPolicy": "index", + "map": [ + ["shoulder_ik", "armUI_R0_ctl", "armUI_L0_ctl", 0], + ["shoulder_rotRef", "armUI_R0_ctl", "armUI_L0_ctl", 0], + ["shoulder_rotRef", "armUI_R1_ctl", "armUI_L0_ctl", 0] + ] +} + + +def source_nodes(): + cmds.file(new=True, force=True) + + pcs = pm.polyCube(name="armUI_R0_ctl") + pcs2 = pm.polyCube(name="armUI_R1_ctl") + attribute.addAttribute(pcs[0], + "shoulder_ik", + "double", + 0, + minValue=0, + maxValue=1) + ch2 = attribute.addAttribute(pcs[0], + "shoulder_rotRef", + "double", + 0, + minValue=0, + maxValue=1) + ch3 = attribute.addAttribute(pcs2[0], + "shoulder_rotRef", + "double", + 0, + minValue=0, + maxValue=1) + pm.connectAttr(ch2, pcs[0].ty) + pm.connectAttr(ch3, pcs2[0].ty) + + +@with_setup(source_nodes) +def test_applyChannelConfig(): + assert_is_none(channelWrangler._applyChannelConfig(self.config))