├── .gitignore ├── README.md ├── environment ├── MAYA_PLUG_IN_PATH │ ├── basicPerlinDeformer.py │ └── jlCollisionDeformer.py └── PYTHONPATH │ ├── Red9 │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── changeLog.txt │ ├── core │ │ ├── AnimationBinder.py │ │ ├── Red9_AnimationUtils.py │ │ ├── Red9_Audio.py │ │ ├── Red9_CoreUtils.py │ │ ├── Red9_General.py │ │ ├── Red9_MelCore.mel │ │ ├── Red9_Meta.py │ │ ├── Red9_PoseSaver.py │ │ ├── Red9_Tools.py │ │ └── __init__.py │ ├── docs │ │ ├── Makefile │ │ ├── Red9-StudioTools Help.odt │ │ ├── Red9-StudioTools Help.pdf │ │ ├── html │ │ │ ├── .buildinfo │ │ │ ├── .doctrees │ │ │ │ ├── environment.pickle │ │ │ │ ├── index.doctree │ │ │ │ └── red9templates │ │ │ │ │ ├── Red9_AnimationUtils.doctree │ │ │ │ │ ├── Red9_Core.doctree │ │ │ │ │ ├── Red9_Meta.doctree │ │ │ │ │ └── core.doctree │ │ │ ├── _sources │ │ │ │ ├── index.txt │ │ │ │ └── red9templates │ │ │ │ │ ├── Red9_AnimationUtils.txt │ │ │ │ │ ├── Red9_Core.txt │ │ │ │ │ ├── Red9_Meta.txt │ │ │ │ │ └── core.txt │ │ │ ├── _static │ │ │ │ ├── basic.css │ │ │ │ ├── doctools.js │ │ │ │ ├── file.png │ │ │ │ ├── jquery.js │ │ │ │ ├── minus.png │ │ │ │ ├── nature.css │ │ │ │ ├── plus.png │ │ │ │ ├── pygments.css │ │ │ │ ├── searchtools.js │ │ │ │ └── underscore.js │ │ │ ├── genindex.html │ │ │ ├── index.html │ │ │ ├── objects.inv │ │ │ ├── py-modindex.html │ │ │ ├── red9templates │ │ │ │ ├── Red9_AnimationUtils.html │ │ │ │ ├── Red9_Audio.html │ │ │ │ ├── Red9_Core.html │ │ │ │ ├── Red9_General.html │ │ │ │ ├── Red9_Meta.html │ │ │ │ ├── Red9_PoseSaver.html │ │ │ │ ├── Red9_Tools.html │ │ │ │ └── core.html │ │ │ ├── search.html │ │ │ └── searchindex.js │ │ ├── images │ │ │ ├── AnimationUI.jpg │ │ │ ├── AnimationUI_Pose.jpg │ │ │ ├── AnimationUI_filter.jpg │ │ │ ├── AnimationUI_main.jpg │ │ │ ├── CopyKeys.jpg │ │ │ ├── FilterUI.jpg │ │ │ ├── LocknHide.jpg │ │ │ ├── NodeName_re.jpg │ │ │ ├── PoseManager.jpg │ │ │ ├── SnapTransforms.jpg │ │ │ ├── TimeOffset.jpg │ │ │ ├── TimeRange.jpg │ │ │ └── Track and Stabilize.jpg │ │ ├── make.bat │ │ ├── source │ │ │ ├── conf.py │ │ │ ├── index.rst │ │ │ └── red9templates │ │ │ │ ├── Red9_AnimationUtils.rst │ │ │ │ ├── Red9_Audio.rst │ │ │ │ ├── Red9_Core.rst │ │ │ │ ├── Red9_General.rst │ │ │ │ ├── Red9_Meta.rst │ │ │ │ ├── Red9_PoseSaver.rst │ │ │ │ └── Red9_Tools.rst │ │ └── sphinxme.py │ ├── examples │ │ ├── MetaData_Getting_started.py │ │ ├── MetaData_subclassing.py │ │ ├── MetaRig_Morpheus.py │ │ └── poseHandler.py │ ├── icons │ │ ├── Red9StudioPack.ico │ │ ├── Rocket9_buttonStrap.bmp │ │ ├── Rocket9_buttonStrap2.bmp │ │ └── red9.jpg │ ├── installer │ │ ├── How To - ReadMe.txt │ │ └── userSetup.py │ ├── license.txt │ ├── packages │ │ ├── __init__.py │ │ ├── configobj.py │ │ ├── pydub │ │ │ ├── .gitignore │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── README.markdown │ │ │ ├── __init__.py │ │ │ └── pydub │ │ │ │ ├── __init__.py │ │ │ │ ├── audio_segment.py │ │ │ │ ├── effects.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── playback.py │ │ │ │ └── utils.py │ │ └── pyperclip.py │ ├── plug-ins │ │ └── SnapRuntime.py │ ├── presets │ │ ├── Andy_Rig.cfg │ │ ├── Basic_Rig.cfg │ │ ├── Default.cfg │ │ ├── HumanIK.cfg │ │ ├── MaxforMaya.cfg │ │ ├── MetaRig.cfg │ │ ├── MorpheusRig.cfg │ │ ├── Red9_MetaRig_unitTest.cfg │ │ ├── Standard_Hierarchy.cfg │ │ ├── Stewart_Rig.cfg │ │ ├── TSM.cfg │ │ └── __red9animreset__ │ ├── startup │ │ ├── __init__.py │ │ ├── maya_native │ │ │ ├── maya_2009 │ │ │ │ └── Maya_Hacked.mel │ │ │ ├── maya_2010 │ │ │ │ └── Maya_Hacked.mel │ │ │ ├── maya_2011 │ │ │ │ └── Maya_Hacked.mel │ │ │ ├── maya_2012 │ │ │ │ └── Maya_Hacked.mel │ │ │ ├── maya_2013 │ │ │ │ └── Maya_Hacked.mel │ │ │ ├── maya_2014 │ │ │ │ └── Maya_Hacked.mel │ │ │ └── red9MayaHacks.mel │ │ └── setup.py │ └── tests │ │ ├── Red9_AudioTest.py │ │ ├── Red9_CoreUtilTests.py │ │ ├── Red9_MetaTests.py │ │ ├── Red9_PoseTests.py │ │ └── testFiles │ │ ├── FilterNode_baseTests.ma │ │ ├── MetaRig_Poses │ │ ├── T_Pose.bmp │ │ ├── T_Pose.pose │ │ ├── fingers │ │ │ ├── l_fingers_curled.bmp │ │ │ ├── l_fingers_curled.pose │ │ │ ├── lfingers.bmp │ │ │ ├── lfingers.pose │ │ │ └── poseHandler.py │ │ ├── jump_f218.bmp │ │ ├── jump_f218.pose │ │ ├── jump_f218_projected.bmp │ │ ├── jump_f218_projected.pose │ │ ├── jump_f9.bmp │ │ ├── jump_f9.pose │ │ ├── jump_f9_absolute29.bmp │ │ └── jump_f9_absolute29.pose │ │ ├── MetaRig_anim_jump.mb │ │ ├── MetaRig_baseTests.ma │ │ ├── MetaRig_baseTests_MetaWired.ma │ │ ├── Meta_Network_WalkTest.ma │ │ ├── bwav_test.wav │ │ └── filterTest.cfg │ ├── UVDeluxe │ ├── __init__.py │ ├── uistates.py │ └── uvdeluxe.py │ ├── ZvParentMaster.py │ ├── userSetup.py │ └── zv │ └── parentmaster │ ├── pm_attach.xpm │ ├── pm_destroy.xpm │ ├── pm_detach.xpm │ ├── pm_fixsnap.xpm │ ├── pm_select.xpm │ └── pm_timeline.xpm └── tapp ├── __init__.py ├── app.py ├── maya ├── __init__.py ├── animation │ ├── __init__.py │ ├── dialog.py │ ├── dialog.ui │ ├── playblastQueue │ │ ├── __init__.py │ │ ├── dialog.py │ │ ├── dialog.ui │ │ └── utils.py │ ├── resetAttributes │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── dialog.ui │ ├── setsSelector │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── dialog.ui │ ├── timing │ │ ├── __init__.py │ │ ├── gui.py │ │ └── resources │ │ │ ├── __init__.py │ │ │ ├── dialog.py │ │ │ └── dialog.ui │ └── utils │ │ ├── RAT.mel │ │ ├── RAT_ui.ui │ │ ├── __init__.py │ │ ├── bhGhost.mel │ │ ├── deleteRedundantKeys.mel │ │ ├── face │ │ ├── __init__.py │ │ ├── gui.py │ │ └── utils.py │ │ ├── imageplane.py │ │ ├── ml_breakdownDragger.py │ │ ├── ml_hold.py │ │ ├── ml_keyValueDragger.py │ │ ├── ml_stopwatch.py │ │ ├── ml_utilities.py │ │ ├── paie.py │ │ ├── zooChangeRoo.mel │ │ └── zooUtils.mel ├── dialog.py ├── lighting │ ├── AddRimLight.py │ ├── FileTextureManager.mel │ ├── __init__.py │ ├── alembic │ │ ├── __init__.py │ │ └── utils.py │ ├── arnold.py │ ├── fgshooter.py │ ├── gui.py │ ├── region │ │ ├── __init__.py │ │ ├── gui.py │ │ ├── resources │ │ │ ├── __init__.py │ │ │ ├── region.py │ │ │ └── region.ui │ │ └── utils.py │ ├── resources │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── dialog.ui │ └── vray.py ├── modelling │ ├── RoadKill.mel │ ├── RoadKill1_1.exe │ ├── __init__.py │ ├── blendshapes.py │ ├── detachSeparate.mel │ ├── gui.py │ ├── icPolyScatter.mel │ ├── kk_symmetry.mel │ ├── resources │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── dialog.ui │ └── utils.py ├── rigging │ ├── DoraSkinWeightImpExp.mel │ ├── ZvRadialBlendShape.py │ ├── __init__.py │ ├── bakeRadialBlendshape.py │ ├── connections.py │ ├── constraints.py │ ├── cylinderPreview.py │ ├── deformation.py │ ├── gui.py │ ├── joints.py │ ├── joysticker │ │ ├── __init__.py │ │ ├── gui.py │ │ ├── icons │ │ │ ├── icons.psd │ │ │ ├── sliderA.PNG │ │ │ ├── sliderB_east.png │ │ │ ├── sliderB_north.png │ │ │ ├── sliderB_south.png │ │ │ ├── sliderB_west.png │ │ │ ├── sliderC_east.png │ │ │ ├── sliderC_horizontal.png │ │ │ ├── sliderC_north.png │ │ │ ├── sliderC_south.png │ │ │ ├── sliderC_vertical.png │ │ │ ├── sliderC_west.png │ │ │ ├── sliderD_northeast.png │ │ │ ├── sliderD_northwest.png │ │ │ ├── sliderD_southeast.png │ │ │ └── sliderD_southwest.png │ │ └── utils.py │ ├── lattice.py │ ├── resources │ │ ├── __init__.py │ │ ├── dialog.py │ │ └── dialog.ui │ ├── sculptInbetweenEditor │ │ ├── __init__.py │ │ ├── dslDeltaOptions.py │ │ ├── dslReverseShape.py │ │ └── dslSculptInbetweenEditor.py │ ├── si_poseDeformer.mel │ ├── skinPropagation.py │ ├── spherePreview │ │ ├── README.md │ │ ├── __init__.py │ │ ├── gui.py │ │ └── resources │ │ │ ├── __init__.py │ │ │ ├── dialog.py │ │ │ └── dialog.ui │ ├── utils.py │ └── wireColor.py └── utils │ ├── __init__.py │ ├── framerate.py │ └── setProject.py └── utils ├── __init__.py ├── docked_widget.py ├── lib.py └── utils.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | 3 | .settings 4 | *.uvd 5 | ._* 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tapp 2 | 3 | This is a tool set for Maya and Nuke 4 | 5 | Everything are very much a work-in-progress. 6 | 7 | ## Install 8 | Run Tapp/install.py, and follow on screen instructions. 9 | 10 | Alternatively you can set/add the environment variables manually: 11 | 12 | PYTHONPATH: Tapp/System,..Tapp (parent directory of Tapp) 13 | NUKE_PATH: Tapp/System,..Tapp (parent directory of Tapp) 14 | 15 | ## Documentation 16 | 17 | You can find all the documentation for the Tapp tools here: https://github.com/Bumpybox/Tapp/wiki/Documentation 18 | 19 | ## REQUIREMENTS 20 | 21 | - Python (http://www.python.org/ftp/python/2.6.4/python-2.6.4.amd64.msi) 22 | - Maya 2014 or higher 23 | - Nuke 6.3 or higher 24 | 25 | ## CREDITS 26 | 27 | - Ian Waters; addRimLight 28 | - Robert Nederhorst; addSubdivision/setSubdivision, createTechPasses, addObjectID 29 | - Mark Jackson; Red9 30 | - Marco Giordano; MG_Tools 31 | - Paolo Dominici; ZvParentMaster 32 | - Morgan Loomis; ml_breakdownDragger, ml_hold, ml_keyValueDragger, ml_stopwatch, ml_utilities 33 | - Ingo Clemens; icPolyScatter 34 | - Crow Yeh; FileTextureManager 35 | - Hamish McKenzie; zooChangeRoo 36 | - Jeff Dobson; detachSeparate 37 | - Karim Kashefy; kk_symmetry 38 | - Francis O'Brien; RoadKill 39 | - Brian Horgan; bhGhost 40 | - Daniel S. Lima; SculptInbetweenEditor 41 | - Dora Yuki; Dora SkinWeight 42 | - Brenton Rayner; fgshooter 43 | - basicPerlinDeformer; Ken Perlin, Paulalso, Ian Waters 44 | - si_poseDeformer; Stanislav Ilin 45 | - UV Deluxe; Erik Spellerberg 46 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | 3 | 4 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/README.md: -------------------------------------------------------------------------------- 1 | Red Nine Studio Pack for Maya 2 | ============================= 3 | 4 | Contact : Mark Jackson 5 | Technical Animation Director 6 | email: rednineinfo@gmail.com 7 | 8 | https://vimeo.com/user9491246 9 | 10 | 11 | Firstly thanks for your interest, if you'd like to get more involved mail me! 12 | 13 | This Maya Python module is an ongoing project to bring extensive support for those 14 | studios without the luxury of their own R&D department. Maya out of the box is 15 | sadly lacking in a lot of the love that large studios show it through their own 16 | toolsets, this StudioPack is aimed at correcting that balance. 17 | 18 | For suggestions and info please feel free to contact me. 19 | 20 | Install instructions in the installer folder, there's also full api docs ;) 21 | 22 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | =============================================================================== 3 | Red9 StudioPack: 4 | author : Mark Jackson 5 | email : rednineinfo@gmail.com 6 | 7 | This is the main entry point for initilizing the Red9 StudioPack. 8 | Unlike previous releases I've removed the ability to install this via the 9 | Maya Module systems. Instead I've made it more of a standard Python site-package 10 | which has many benefits in the way the systems are managed. 11 | Simply running the following will initialize and install the setups 12 | 13 | You need to modify the path to point to the folder containing this file and 14 | add it to the system path UNLESS the Red9 folder is already on a Maya script path. 15 | 16 | import sys 17 | sys.path.append('P:\Red9_Pipeline\Red9_Release1.28') 18 | 19 | import Red9 20 | Red9.start() 21 | 22 | =============================================================================== 23 | 24 | 25 | License:: 26 | =============================================================================== 27 | Red9 StudioPack is released under a BSD style license 28 | 29 | Copyright (c) 2013, Mark Jackson 30 | All rights reserved. 31 | 32 | Redistribution and use in source and binary forms, with or without modification, are 33 | permitted provided that the following conditions are met: 34 | 35 | * Redistributions of source code must retain the above copyright notice, 36 | this list of conditions and the following disclaimer. 37 | * Redistributions in binary form must reproduce the above copyright notice, 38 | this list of conditions and the following disclaimer in the documentation 39 | and/or other materials provided with the distribution. 40 | * Neither the name of the Red9 nor the names of its contributors may be used 41 | to endorse or promote products derived from this software without specific 42 | prior written permission. 43 | 44 | THIS SOFTWARE IS PROVIDED BY MARK JACKSON "AS IS" AND ANY EXPRESS OR IMPLIED 45 | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 46 | AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MARK JACKSON 47 | BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 48 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 49 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 50 | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 52 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53 | =============================================================================== 54 | 55 | ''' 56 | 57 | 58 | #Initialize the RED9_META_REGISTRY which is used by the MetaClass baseclass to 59 | #know what subclasses there are, and what to consider in it's __new__ statement 60 | #for initialization. If you're using the MetaClass as a base for your own modules 61 | #you'll probably need to run the Red9.core.Red9_Meta.registerMClassInheritanceMapping() 62 | #to update this dictionary 63 | #global RED9_META_REGISTERY 64 | #RED9_META_REGISTERY=[] 65 | 66 | import maya.cmds as cmds 67 | import startup.setup as setup 68 | 69 | def start(Menu=True, MayaUIHooks=True, MayaOverloads=True, parentMenu='MayaWindow'): 70 | 71 | #Run the main setups. If you DON'T want the Red9Menu set 'Menu=False' 72 | #cmds.evalDeferred("Red9.setup.start(Menu=%s)" % Menu) 73 | cmds.evalDeferred("import Red9;Red9.setup.start(Menu=%s,MayaUIHooks=%s,MayaOverloads=%s,parentMenu='%s')" % (Menu,MayaUIHooks,MayaOverloads,parentMenu)) 74 | #Import the core, not this is on LowPriority to make sure it 75 | #happens after the main setups have finished above 76 | cmds.evalDeferred("import Red9.core", lp=True) 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/core/Red9_MelCore.mel: -------------------------------------------------------------------------------- 1 | /* 2 | Created on 10 July 2012 3 | 4 | ------------------------------------------ 5 | Red9 Studio Pack: Maya Pipeline Solutions 6 | Author: Mark Jackson 7 | email: rednineinfo@gmail.com 8 | ------------------------------------------ 9 | 10 | This is a core mel lib, sometimes it's just easier to keep certain 11 | calls native in mel for the UI functions 12 | 13 | Setup : Follow the Install instructions in the Modules package 14 | ================================================================ 15 | */ 16 | 17 | 18 | // 19 | // Mel wrapper for the Inspect calls in the Script editor 20 | // 21 | global proc red9_InspectCode() 22 | { 23 | string $text; 24 | python "import Red9.core.Red9_General as r9General"; 25 | $text=python("r9General.getScriptEditorSelection()"); 26 | 27 | if(!`python("r9General.inspectFunctionSource('"+$text+"')")`) 28 | { 29 | python("r9General.inspectFunctionSource("+$text+")"); 30 | } 31 | // //Executer / Editor 32 | // if( $gLastFocusedCommandControl == $gLastFocusedCommandExecuter) 33 | // { 34 | // $text=`cmdScrollFieldExecuter -q -selectedText $gLastFocusedCommandControl`; 35 | // print ("command Caught: " + $text +"\n"); 36 | // if (`getCurrentExecuterTabLabel`=="MEL"){ 37 | // python("r9General.inspectFunctionSource('"+$text+"')");} 38 | // else{ 39 | // python("r9General.inspectFunctionSource("+$text+")");} 40 | // } 41 | // 42 | // //Reporter / History 43 | // else if( $gLastFocusedCommandControl == $gLastFocusedCommandReporter) 44 | // { 45 | // //?????for some reason calling this here rather from the popupMenu 46 | // //command fails to copy the text to the clipboard? 47 | // //cmdScrollFieldReporter -e -copySelection $gLastFocusedCommandControl; 48 | // $text=python("r9General.Clipboard.getScriptHistory()"); 49 | // print ("command Caught: " + $text +"\n"); 50 | // 51 | // 52 | // if(!`python("r9General.inspectFunctionSource('"+$text+"')")`) 53 | // { 54 | // python("r9General.inspectFunctionSource("+$text+")"); 55 | // } 56 | // } 57 | } -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/core/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | Red9 Studio Pack: Maya Pipeline Solutions 4 | Author: Mark Jackson 5 | email: rednineinfo@gmail.com 6 | 7 | Red9 blog : http://red9-consultancy.blogspot.co.uk/ 8 | MarkJ blog: http://markj3d.blogspot.co.uk 9 | 10 | 11 | Core is the library of Python modules that make the backbone of the Red9 Pack 12 | 13 | :Note that the registerMClassInheritanceMapping() call is after all the imports 14 | so that the global RED9_META_REGISTERY is built up correctly 15 | 16 | ''' 17 | 18 | import Red9_General 19 | import Red9_Meta 20 | import Red9_Tools 21 | import Red9_CoreUtils 22 | import Red9_AnimationUtils 23 | import Red9_PoseSaver 24 | import Red9_Audio 25 | 26 | 27 | 28 | def _reload(): 29 | ''' 30 | reload carefully and re-register the RED9_META_REGISTRY 31 | ''' 32 | reload(Red9_General) 33 | reload(Red9_Meta) 34 | reload(Red9_Tools) 35 | reload(Red9_Audio) 36 | reload(Red9_CoreUtils) 37 | reload(Red9_AnimationUtils) 38 | reload(Red9_PoseSaver) 39 | 40 | Red9_Meta.registerMClassInheritanceMapping() 41 | print('Red9 Core Reloaded and META REGISTRY updated') 42 | 43 | def _setlogginglevel_debug(module='all'): 44 | ''' 45 | Dev wrapper to set the logging level to debug 46 | ''' 47 | if module=='r9Core' or module=='all': 48 | Red9_CoreUtils.log.setLevel(Red9_CoreUtils.logging.DEBUG) 49 | print('Red9_CoreUtils set to DEBUG state') 50 | if module=='r9Anim' or module=='all': 51 | Red9_AnimationUtils.log.setLevel(Red9_AnimationUtils.logging.DEBUG) 52 | print('Red9_AnimationUtils set to DEBUG state') 53 | if module=='r9General' or module=='all': 54 | Red9_General.log.setLevel(Red9_General.logging.DEBUG) 55 | print('Red9_General set to DEBUG state') 56 | if module=='r9Tools' or module=='all': 57 | Red9_Tools.log.setLevel(Red9_Tools.logging.DEBUG) 58 | print('Red9_Tools set to DEBUG state') 59 | if module=='r9Audio' or module=='all': 60 | Red9_Audio.log.setLevel(Red9_Audio.logging.DEBUG) 61 | print('Red9_Meta set to DEBUG state') 62 | if module=='r9Pose' or module=='all': 63 | Red9_PoseSaver.log.setLevel(Red9_PoseSaver.logging.DEBUG) 64 | print('Red9_PoseSaver set to DEBUG state') 65 | if module=='r9Meta' or module=='all': 66 | Red9_Meta.log.setLevel(Red9_Meta.logging.DEBUG) 67 | print('Red9_Meta set to DEBUG state') 68 | 69 | 70 | def _setlogginglevel_info(module='all'): 71 | ''' 72 | Dev wrapper to set the logging to Info, usual state 73 | ''' 74 | if module=='r9Core' or module=='all': 75 | Red9_CoreUtils.log.setLevel(Red9_CoreUtils.logging.INFO) 76 | print('Red9_CoreUtils set to INFO state') 77 | if module=='r9Anim' or module=='all': 78 | Red9_AnimationUtils.log.setLevel(Red9_AnimationUtils.logging.INFO) 79 | print('Red9_AnimationUtils set to INFO state') 80 | if module=='r9General' or module=='all': 81 | Red9_General.log.setLevel(Red9_General.logging.INFO) 82 | print('Red9_General set to INFO state') 83 | if module=='r9Tools' or module=='all': 84 | Red9_Tools.log.setLevel(Red9_Tools.logging.INFO) 85 | print('Red9_Tools set to INFO state') 86 | if module=='r9Audio' or module=='all': 87 | Red9_Audio.log.setLevel(Red9_Audio.logging.INFO) 88 | print('Red9_Meta set to DEBUG state') 89 | if module=='r9Pose' or module=='all': 90 | Red9_PoseSaver.log.setLevel(Red9_PoseSaver.logging.INFO) 91 | print('Red9_PoseSaver set to INFO state') 92 | if module=='r9Meta' or module=='all': 93 | Red9_Meta.log.setLevel(Red9_Meta.logging.INFO) 94 | print('Red9_Meta set to INFO state') 95 | 96 | 97 | #======================================================================== 98 | # This HAS to be at the END of this module so that the RED9_META_REGISTRY 99 | # picks up all inherited subclasses when Red9.core is imported 100 | #======================================================================== 101 | Red9_Meta.registerMClassInheritanceMapping() 102 | Red9_Meta.registerMClassNodeMapping() 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/Red9-StudioTools Help.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/Red9-StudioTools Help.odt -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/Red9-StudioTools Help.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/Red9-StudioTools Help.pdf -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 0594b222552fa189233fa80d9377b9ee 4 | tags: fbb0d17656682115ca4d033fb2f83ba1 5 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/environment.pickle -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/index.doctree -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_AnimationUtils.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_AnimationUtils.doctree -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_Core.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_Core.doctree -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_Meta.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/Red9_Meta.doctree -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/core.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/.doctrees/red9templates/core.doctree -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_sources/index.txt: -------------------------------------------------------------------------------- 1 | .. Red9 documentation master file, created by 2 | sphinx-quickstart on Mon Jun 24 21:20:48 2013. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Welcome to Red9's documentation! 7 | ================================ 8 | 9 | Author : Mark Jackson 10 | 11 | Red9 was born out of frustration for the lack of this kind of in-depth support 12 | that there is in the general Maya community. I wanted to create full production 13 | ready tools suite which integrated seemlessly within Maya, giving users the 14 | kind of pipeline support normally limited to larger studios. 15 | 16 | The Red9 core is coded in such a way as to allow most of the functions to be 17 | expanded upon, and used by any tech artists / programmer out there, solving many 18 | common issues you find when coding in Maya. 19 | 20 | The core modules are expanding rapidly so keep up to date. Red9 main repository can 21 | now be found on GitHub and I'll be branching on there every release: 22 | 23 | https://github.com/markj3d/Red9_StudioPack 24 | 25 | * Red9_AnimationUtils : all animation functions for dealing with data flow, key management, mirroring and time 26 | * Red9_Audio : Audio tools for managing sound nodes, includes a full audio compiler for mixing multiple wav together 27 | * Red9_CoreUtils : backbone of the systems, filtering, processing and managing nodes on mass 28 | * Red9_General : general system calls 29 | * Red9_Meta : MetaData api - huge library for data flow management around complex Maya rigs. 30 | * Red9_PoseSaver : generic poseSaver for any rig 31 | * Red9_Tools : generic tools for Maya 32 | 33 | 34 | Red9 Modules 35 | ============ 36 | 37 | core 38 | ---- 39 | 40 | .. toctree:: 41 | :glob: 42 | 43 | 44 | red9templates/* 45 | 46 | Indices and tables 47 | ================== 48 | 49 | * :ref:`genindex` 50 | * :ref:`modindex` 51 | * :ref:`search` -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_sources/red9templates/Red9_AnimationUtils.txt: -------------------------------------------------------------------------------- 1 | Red9_AnimationUtils 2 | =================== 3 | 4 | Red9_AnimationUtils deals with all the key, attribute and time management 5 | within Red9. Anything from copying keys between processed hierarchies 6 | to Mirroring animation data. 7 | 8 | 9 | .. automodule:: Red9.core.Red9_AnimationUtils 10 | 11 | .. rubric:: Core Functions 12 | 13 | .. autosummary:: 14 | 15 | getChannelBoxSelection 16 | getChannelBoxAttrs 17 | getSettableChannels 18 | getAnimLayersFromGivenNodes 19 | timeLineRangeGet 20 | timeLineRangeProcess 21 | mergeAnimLayers 22 | eulerSelected 23 | 24 | 25 | .. rubric:: Core Classes 26 | 27 | .. autosummary:: 28 | 29 | AnimationUI 30 | AnimFunctions 31 | RandomizeKeys 32 | FilterCurves 33 | MirrorHierarchy 34 | MirrorSetup 35 | AnimationLayerContext 36 | CameraTracker 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_sources/red9templates/Red9_Core.txt: -------------------------------------------------------------------------------- 1 | Red9_CoreUtils 2 | ============== 3 | 4 | Red9_CoreUtils is the backbone of much of the systems, used to filter, find and process nodes 5 | on mass withing Maya as well as containing a lot of core functions for dealing with data. 6 | 7 | The FilterNode and FilterSettings classes are used throughout the pack, in fact any 8 | time the tools process a hierarchy it's these classes that deal with it. 9 | 10 | 11 | .. automodule:: Red9.core.Red9_CoreUtils 12 | 13 | .. rubric:: Core Functions 14 | 15 | .. autosummary:: 16 | 17 | nodeNameStrip 18 | prioritizeNodeList 19 | sortNumerically 20 | stringReplace 21 | decodeString 22 | floatIsEqual 23 | valueToMappedRange 24 | 25 | 26 | .. rubric:: Core Classes 27 | 28 | .. autosummary:: 29 | 30 | FilterNode_Settings 31 | FilterNode 32 | MatchedNodeInputs 33 | LockChannels 34 | TimeOffset 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_sources/red9templates/Red9_Meta.txt: -------------------------------------------------------------------------------- 1 | Red9_Meta 2 | ========= 3 | 4 | Red9 Meta is a full metaData API that deals with Maya nodes in a more seemless manor. I've 5 | tried to do as much documentation as I can both in terms of commenting the code and doing 6 | examples and Vimeo demos. 7 | 8 | This is a big concept and I'll be expanding these docs accordingly when I get more time. 9 | 10 | Vimeo Demos: 11 | ------------ 12 | 13 | * MetaData part1 14 | * MetaData part2 15 | * MetaData Part3 16 | * MetaData part4 17 | * MetaData MetaHUD 18 | 19 | There are also some basic examples in the Red9 Package itself found under the examples folder. 20 | 21 | 22 | .. automodule:: Red9.core.Red9_Meta 23 | 24 | .. rubric:: Key Functions 25 | 26 | .. autosummary:: 27 | 28 | registerMClassInheritanceMapping 29 | registerMClassNodeMapping 30 | isMetaNode 31 | isMetaNodeInherited 32 | getMetaNodes 33 | getConnectedMetaNodes 34 | getConnectedMetaSystemRoot 35 | 36 | 37 | .. rubric:: Main Classes 38 | 39 | .. autosummary:: 40 | 41 | MetaClass 42 | MetaRig 43 | MetaRigSubSystem 44 | MetaRigSupport 45 | MetaFacialRig 46 | MetaFacialRigSupport 47 | MetaHIKCharacterNode 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_sources/red9templates/core.txt: -------------------------------------------------------------------------------- 1 | Red9.core 2 | ========= 3 | 4 | .. automodule:: Red9.core 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/_static/file.png -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/_static/minus.png -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/_static/plus.png -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | .hll { background-color: #ffffcc } 2 | .c { color: #408090; font-style: italic } /* Comment */ 3 | .err { border: 1px solid #FF0000 } /* Error */ 4 | .k { color: #007020; font-weight: bold } /* Keyword */ 5 | .o { color: #666666 } /* Operator */ 6 | .cm { color: #408090; font-style: italic } /* Comment.Multiline */ 7 | .cp { color: #007020 } /* Comment.Preproc */ 8 | .c1 { color: #408090; font-style: italic } /* Comment.Single */ 9 | .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ 10 | .gd { color: #A00000 } /* Generic.Deleted */ 11 | .ge { font-style: italic } /* Generic.Emph */ 12 | .gr { color: #FF0000 } /* Generic.Error */ 13 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 14 | .gi { color: #00A000 } /* Generic.Inserted */ 15 | .go { color: #333333 } /* Generic.Output */ 16 | .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ 17 | .gs { font-weight: bold } /* Generic.Strong */ 18 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 19 | .gt { color: #0044DD } /* Generic.Traceback */ 20 | .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ 21 | .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ 22 | .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ 23 | .kp { color: #007020 } /* Keyword.Pseudo */ 24 | .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ 25 | .kt { color: #902000 } /* Keyword.Type */ 26 | .m { color: #208050 } /* Literal.Number */ 27 | .s { color: #4070a0 } /* Literal.String */ 28 | .na { color: #4070a0 } /* Name.Attribute */ 29 | .nb { color: #007020 } /* Name.Builtin */ 30 | .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ 31 | .no { color: #60add5 } /* Name.Constant */ 32 | .nd { color: #555555; font-weight: bold } /* Name.Decorator */ 33 | .ni { color: #d55537; font-weight: bold } /* Name.Entity */ 34 | .ne { color: #007020 } /* Name.Exception */ 35 | .nf { color: #06287e } /* Name.Function */ 36 | .nl { color: #002070; font-weight: bold } /* Name.Label */ 37 | .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ 38 | .nt { color: #062873; font-weight: bold } /* Name.Tag */ 39 | .nv { color: #bb60d5 } /* Name.Variable */ 40 | .ow { color: #007020; font-weight: bold } /* Operator.Word */ 41 | .w { color: #bbbbbb } /* Text.Whitespace */ 42 | .mf { color: #208050 } /* Literal.Number.Float */ 43 | .mh { color: #208050 } /* Literal.Number.Hex */ 44 | .mi { color: #208050 } /* Literal.Number.Integer */ 45 | .mo { color: #208050 } /* Literal.Number.Oct */ 46 | .sb { color: #4070a0 } /* Literal.String.Backtick */ 47 | .sc { color: #4070a0 } /* Literal.String.Char */ 48 | .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ 49 | .s2 { color: #4070a0 } /* Literal.String.Double */ 50 | .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ 51 | .sh { color: #4070a0 } /* Literal.String.Heredoc */ 52 | .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ 53 | .sx { color: #c65d09 } /* Literal.String.Other */ 54 | .sr { color: #235388 } /* Literal.String.Regex */ 55 | .s1 { color: #4070a0 } /* Literal.String.Single */ 56 | .ss { color: #517918 } /* Literal.String.Symbol */ 57 | .bp { color: #007020 } /* Name.Builtin.Pseudo */ 58 | .vc { color: #bb60d5 } /* Name.Variable.Class */ 59 | .vg { color: #bb60d5 } /* Name.Variable.Global */ 60 | .vi { color: #bb60d5 } /* Name.Variable.Instance */ 61 | .il { color: #208050 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/html/objects.inv -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/red9templates/core.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | Red9.core — Red9 v1.41 documentation 10 | 11 | 12 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 43 | 44 |
45 |
46 |
47 |
48 | 49 |
50 |

Red9.core

51 |

Red9 Studio Pack: Maya Pipeline Solutions 52 | Author: Mark Jackson 53 | email: rednineinfo@gmail.com

54 |

Red9 blog : http://red9-consultancy.blogspot.co.uk/ 55 | MarkJ blog: http://markj3d.blogspot.co.uk

56 |

Core is the library of Python modules that make the backbone of the Red9 Pack

57 |

:Note that the registerMClassInheritanceMapping() call is after all the imports 58 | so that the global RED9_META_REGISTERY is built up correctly

59 |
60 | 61 | 62 |
63 |
64 |
65 |
66 |
67 |

Previous topic

68 |

Red9_Meta

70 |

This Page

71 | 75 | 87 | 88 |
89 |
90 |
91 |
92 | 107 | 111 | 112 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | Search — Red9 v1.42 documentation 10 | 11 | 12 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 45 | 46 |
47 |
48 |
49 |
50 | 51 |

Search

52 |
53 | 54 |

55 | Please activate JavaScript to enable the search 56 | functionality. 57 |

58 |
59 |

60 | From here you can search these documents. Enter your search 61 | words into the box below and click "search". Note that the search 62 | function will automatically search for all of the words. Pages 63 | containing fewer words won't appear in the result list. 64 |

65 |
66 | 67 | 68 | 69 |
70 | 71 |
72 | 73 |
74 | 75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | 96 | 100 | 101 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/AnimationUI.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/AnimationUI.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/AnimationUI_Pose.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/AnimationUI_Pose.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/AnimationUI_filter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/AnimationUI_filter.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/AnimationUI_main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/AnimationUI_main.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/CopyKeys.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/CopyKeys.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/FilterUI.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/FilterUI.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/LocknHide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/LocknHide.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/NodeName_re.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/NodeName_re.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/PoseManager.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/PoseManager.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/SnapTransforms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/SnapTransforms.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/TimeOffset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/TimeOffset.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/TimeRange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/TimeRange.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/images/Track and Stabilize.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/docs/images/Track and Stabilize.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | REM Command file for Sphinx documentation 4 | 5 | if "%SPHINXBUILD%" == "" ( 6 | set SPHINXBUILD=sphinx-build 7 | ) 8 | set BUILDDIR=build 9 | set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source 10 | if NOT "%PAPER%" == "" ( 11 | set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% 12 | ) 13 | 14 | if "%1" == "" goto help 15 | 16 | if "%1" == "help" ( 17 | :help 18 | echo.Please use `make ^` where ^ is one of 19 | echo. html to make standalone HTML files 20 | echo. dirhtml to make HTML files named index.html in directories 21 | echo. singlehtml to make a single large HTML file 22 | echo. pickle to make pickle files 23 | echo. json to make JSON files 24 | echo. htmlhelp to make HTML files and a HTML help project 25 | echo. qthelp to make HTML files and a qthelp project 26 | echo. devhelp to make HTML files and a Devhelp project 27 | echo. epub to make an epub 28 | echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter 29 | echo. text to make text files 30 | echo. man to make manual pages 31 | echo. changes to make an overview over all changed/added/deprecated items 32 | echo. linkcheck to check all external links for integrity 33 | echo. doctest to run all doctests embedded in the documentation if enabled 34 | goto end 35 | ) 36 | 37 | if "%1" == "clean" ( 38 | for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i 39 | del /q /s %BUILDDIR%\* 40 | goto end 41 | ) 42 | 43 | if "%1" == "html" ( 44 | %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 45 | echo. 46 | echo.Build finished. The HTML pages are in %BUILDDIR%/html. 47 | goto end 48 | ) 49 | 50 | if "%1" == "dirhtml" ( 51 | %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml 52 | echo. 53 | echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. 54 | goto end 55 | ) 56 | 57 | if "%1" == "singlehtml" ( 58 | %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml 59 | echo. 60 | echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. 61 | goto end 62 | ) 63 | 64 | if "%1" == "pickle" ( 65 | %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle 66 | echo. 67 | echo.Build finished; now you can process the pickle files. 68 | goto end 69 | ) 70 | 71 | if "%1" == "json" ( 72 | %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json 73 | echo. 74 | echo.Build finished; now you can process the JSON files. 75 | goto end 76 | ) 77 | 78 | if "%1" == "htmlhelp" ( 79 | %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp 80 | echo. 81 | echo.Build finished; now you can run HTML Help Workshop with the ^ 82 | .hhp project file in %BUILDDIR%/htmlhelp. 83 | goto end 84 | ) 85 | 86 | if "%1" == "qthelp" ( 87 | %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp 88 | echo. 89 | echo.Build finished; now you can run "qcollectiongenerator" with the ^ 90 | .qhcp project file in %BUILDDIR%/qthelp, like this: 91 | echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Red9.qhcp 92 | echo.To view the help file: 93 | echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Red9.ghc 94 | goto end 95 | ) 96 | 97 | if "%1" == "devhelp" ( 98 | %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp 99 | echo. 100 | echo.Build finished. 101 | goto end 102 | ) 103 | 104 | if "%1" == "epub" ( 105 | %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub 106 | echo. 107 | echo.Build finished. The epub file is in %BUILDDIR%/epub. 108 | goto end 109 | ) 110 | 111 | if "%1" == "latex" ( 112 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 113 | echo. 114 | echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. 115 | goto end 116 | ) 117 | 118 | if "%1" == "text" ( 119 | %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text 120 | echo. 121 | echo.Build finished. The text files are in %BUILDDIR%/text. 122 | goto end 123 | ) 124 | 125 | if "%1" == "man" ( 126 | %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man 127 | echo. 128 | echo.Build finished. The manual pages are in %BUILDDIR%/man. 129 | goto end 130 | ) 131 | 132 | if "%1" == "changes" ( 133 | %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes 134 | echo. 135 | echo.The overview file is in %BUILDDIR%/changes. 136 | goto end 137 | ) 138 | 139 | if "%1" == "linkcheck" ( 140 | %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck 141 | echo. 142 | echo.Link check complete; look for any errors in the above output ^ 143 | or in %BUILDDIR%/linkcheck/output.txt. 144 | goto end 145 | ) 146 | 147 | if "%1" == "doctest" ( 148 | %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest 149 | echo. 150 | echo.Testing of doctests in the sources finished, look at the ^ 151 | results in %BUILDDIR%/doctest/output.txt. 152 | goto end 153 | ) 154 | 155 | :end 156 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/index.rst: -------------------------------------------------------------------------------- 1 | .. Red9 documentation master file, created by 2 | sphinx-quickstart on Mon Jun 24 21:20:48 2013. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | Welcome to Red9's documentation! 7 | ================================ 8 | 9 | Author : Mark Jackson 10 | 11 | Red9 was born out of frustration for the lack of this kind of in-depth support 12 | that there is in the general Maya community. I wanted to create full production 13 | ready tools suite which integrated seemlessly within Maya, giving users the 14 | kind of pipeline support normally limited to larger studios. 15 | 16 | The Red9 core is coded in such a way as to allow most of the functions to be 17 | expanded upon, and used by any tech artists / programmer out there, solving many 18 | common issues you find when coding in Maya. 19 | 20 | The core modules are expanding rapidly so keep up to date. Red9 main repository can 21 | now be found on GitHub and I'll be branching on there every release: 22 | 23 | https://github.com/markj3d/Red9_StudioPack 24 | 25 | * Red9_AnimationUtils : all animation functions for dealing with data flow, key management, mirroring and time 26 | * Red9_Audio : Audio tools for managing sound nodes, includes a full audio compiler for mixing multiple wav together 27 | * Red9_CoreUtils : backbone of the systems, filtering, processing and managing nodes on mass 28 | * Red9_General : general system calls 29 | * Red9_Meta : MetaData api - huge library for data flow management around complex Maya rigs. 30 | * Red9_PoseSaver : generic poseSaver for any rig 31 | * Red9_Tools : generic tools for Maya 32 | 33 | 34 | Red9 Modules 35 | ============ 36 | 37 | core 38 | ---- 39 | 40 | .. toctree:: 41 | :glob: 42 | 43 | 44 | red9templates/* 45 | 46 | Indices and tables 47 | ================== 48 | 49 | * :ref:`genindex` 50 | * :ref:`modindex` 51 | * :ref:`search` -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_AnimationUtils.rst: -------------------------------------------------------------------------------- 1 | Red9_AnimationUtils 2 | =================== 3 | 4 | Red9_AnimationUtils deals with all the key, attribute and time management 5 | within Red9. Anything from copying keys between processed hierarchies 6 | to Mirroring animation data. 7 | 8 | 9 | .. automodule:: Red9.core.Red9_AnimationUtils 10 | 11 | .. rubric:: Core Functions 12 | 13 | .. autosummary:: 14 | 15 | getChannelBoxSelection 16 | getChannelBoxAttrs 17 | getSettableChannels 18 | getAnimLayersFromGivenNodes 19 | timeLineRangeGet 20 | timeLineRangeProcess 21 | mergeAnimLayers 22 | eulerSelected 23 | 24 | 25 | .. rubric:: Core Classes 26 | 27 | .. autosummary:: 28 | 29 | AnimationUI 30 | AnimFunctions 31 | RandomizeKeys 32 | FilterCurves 33 | MirrorHierarchy 34 | MirrorSetup 35 | AnimationLayerContext 36 | CameraTracker 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_Audio.rst: -------------------------------------------------------------------------------- 1 | Red9_Audio 2 | ========== 3 | 4 | Red9 Audio is the module for all audio handling within the Red9 pack. 5 | 6 | This includes the wrapper to the new audio compile tools for mixing multiple wavs 7 | inside Maya to a single merged track, allowing you to finally playblast multiple 8 | separate audio nodes! Why the hell Autodesk haven't done this I have no idea 9 | as it's a major issue when you're dealing with facial sequences. There's is 10 | a 'compile' flag in the playblast command but it's never worked. 11 | 12 | 13 | .. automodule:: Red9.core.Red9_Audio 14 | 15 | .. rubric:: Core Functions 16 | 17 | .. autosummary:: 18 | 19 | milliseconds_to_Timecode 20 | timecode_to_milliseconds 21 | frame_to_milliseconds 22 | combineAudio 23 | inspect_wav 24 | getMediaFileMetaData 25 | 26 | .. rubric:: Main Classes 27 | 28 | .. autosummary:: 29 | 30 | AudioHandler 31 | AudioNode 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_Core.rst: -------------------------------------------------------------------------------- 1 | Red9_CoreUtils 2 | ============== 3 | 4 | Red9_CoreUtils is the backbone of much of the systems, used to filter, find and process nodes 5 | on mass withing Maya as well as containing a lot of core functions for dealing with data. 6 | 7 | The FilterNode and FilterSettings classes are used throughout the pack, in fact any 8 | time the tools process a hierarchy it's these classes that deal with it. 9 | 10 | 11 | .. automodule:: Red9.core.Red9_CoreUtils 12 | 13 | .. rubric:: Core Functions 14 | 15 | .. autosummary:: 16 | 17 | nodeNameStrip 18 | prioritizeNodeList 19 | sortNumerically 20 | stringReplace 21 | decodeString 22 | floatIsEqual 23 | valueToMappedRange 24 | 25 | 26 | .. rubric:: Core Classes 27 | 28 | .. autosummary:: 29 | 30 | FilterNode_Settings 31 | FilterNode 32 | MatchedNodeInputs 33 | LockChannels 34 | TimeOffset 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_General.rst: -------------------------------------------------------------------------------- 1 | Red9_General 2 | ============ 3 | 4 | Red9 General is a module for general functions called and used throughout the codebase. 5 | This includes most of the context managers and decorators. 6 | 7 | .. note:: 8 | Nothing inside this module should require any other part of Red9 9 | 10 | 11 | .. automodule:: Red9.core.Red9_General 12 | 13 | .. rubric:: Key functions 14 | 15 | .. autosummary:: 16 | 17 | getCurrentFPS 18 | getModifier 19 | forceToString 20 | itersubclasses 21 | inspectFunctionSource 22 | getScriptEditorSelection 23 | 24 | thumbNailScreen 25 | thumbnailFromPlayBlast 26 | thumbnailApiFromView 27 | 28 | os_OpenFileDirectory 29 | os_OpenFile 30 | 31 | 32 | .. rubric:: Context Managers / decorators 33 | 34 | .. autosummary:: 35 | 36 | AnimationContext 37 | undoContext 38 | ProgressBarContext 39 | HIKContext 40 | SceneRestoreContext 41 | Timer 42 | runProfile 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_Meta.rst: -------------------------------------------------------------------------------- 1 | Red9_Meta 2 | ========= 3 | 4 | Red9 Meta is a full metaData API that deals with Maya nodes in a more seemless manor. I've 5 | tried to do as much documentation as I can both in terms of commenting the code and doing 6 | examples and Vimeo demos. 7 | 8 | This is a big concept and I'll be expanding these docs accordingly when I get more time. 9 | 10 | Vimeo Demos: 11 | ------------ 12 | 13 | * MetaData part1 14 | * MetaData part2 15 | * MetaData Part3 16 | * MetaData part4 17 | * MetaData MetaHUD 18 | 19 | There are also some basic examples in the Red9 Package itself found under the examples folder. 20 | 21 | 22 | .. automodule:: Red9.core.Red9_Meta 23 | 24 | .. rubric:: Key Functions 25 | 26 | .. autosummary:: 27 | 28 | registerMClassInheritanceMapping 29 | registerMClassNodeMapping 30 | isMetaNode 31 | isMetaNodeInherited 32 | getMetaNodes 33 | getConnectedMetaNodes 34 | getConnectedMetaSystemRoot 35 | 36 | 37 | .. rubric:: Main Classes 38 | 39 | .. autosummary:: 40 | 41 | MetaClass 42 | MetaRig 43 | MetaRigSubSystem 44 | MetaRigSupport 45 | MetaFacialRig 46 | MetaFacialRigSupport 47 | MetaHIKCharacterNode 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_PoseSaver.rst: -------------------------------------------------------------------------------- 1 | Red9_PoseSaver 2 | ============== 3 | 4 | Red9_PoseSaver is designed as a generic module for storing and dealing 5 | with poses inside Maya. The PoseData object is the base for all of this 6 | and is what's wrapped by the AnimUI and the MetaData.poseCacheLoad() calls. 7 | 8 | There's also a powerful setup for testing a rigs current pose against a 9 | previously stored pose file, or you can test poseObjectA==poseObjectB 10 | or even poseFileA==poseFileB 11 | 12 | 13 | .. automodule:: Red9.core.Red9_PoseSaver 14 | 15 | .. rubric:: Core Pose Classes 16 | 17 | .. autosummary:: 18 | 19 | PoseData 20 | PosePointCloud 21 | PoseCompare 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/source/red9templates/Red9_Tools.rst: -------------------------------------------------------------------------------- 1 | Red9_Tools 2 | ========== 3 | 4 | Red9 Tools is the module for general tools within Red9 5 | 6 | 7 | .. automodule:: Red9.core.Red9_Tools 8 | 9 | .. rubric:: Main Classes 10 | 11 | .. autosummary:: 12 | 13 | SceneReviewerUI 14 | SceneReviewer 15 | RecordAttrs 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/docs/sphinxme.py: -------------------------------------------------------------------------------- 1 | import os 2 | import time 3 | import pymel.core as pCore 4 | 5 | THISDIR = os.path.dirname(__file__) 6 | OUTPUTHTML = THISDIR + "/html" 7 | SOURCEFOLDER = "%s/source" % THISDIR 8 | 9 | starttime = time.strftime("%H") 10 | time.gmtime 11 | 12 | 13 | if __name__ == "__main__": 14 | #while time.strftime("%H") == starttime: 15 | cmd = "sphinx-build -b html %s %s" % (SOURCEFOLDER, OUTPUTHTML) 16 | os.system(cmd) 17 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/icons/Red9StudioPack.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/icons/Red9StudioPack.ico -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/icons/Rocket9_buttonStrap.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/icons/Rocket9_buttonStrap.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/icons/Rocket9_buttonStrap2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/icons/Rocket9_buttonStrap2.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/icons/red9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/icons/red9.jpg -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/installer/How To - ReadMe.txt: -------------------------------------------------------------------------------- 1 | Red Nine Studio Pack: 2 | ===================== 3 | 4 | Contact : Mark Jackson 5 | Technical Animation Director 6 | 7 | email: rednineinfo@gmail.com 8 | 9 | Firstly thanks for your interest, if you'd like to get more involved mail me! 10 | 11 | This Maya Python module is an ongoing project to bring extensive support for those 12 | studios without the luxury of their own R&D department. Maya out of the box is 13 | sadly lacking in a lot of the love that large studios show it through their own 14 | toolsets, this StudioPack is aimed at correcting that balance. 15 | 16 | For suggestions and info please feel free to contact me. 17 | 18 | 19 | Installation: 20 | ====================================== 21 | 22 | The system is designed to be booted as a standard Python site-package. 23 | You can do one of 2 things here, either copy the Red9 folder to your Maya 24 | scripts directory or any directory on the Maya Python path, 25 | OR move it to any folder of your choice and make sure you set the 26 | sys.path.append() correctly 27 | 28 | Note: the main folder containing all the Red9 subfolders must be called 'Red9', 29 | if you've downloaded a versioned zip file make sure to rename the folder correctly 30 | 31 | 32 | 33 | To Boot for a Maya session: 34 | =========================== 35 | Open up a Python Tab in the Script Editor and run the following: 36 | 37 | Note: You don't need to set the path if you dropped the "Red9" folder 38 | into the Maya scripts directory in your prefs, or any directory already 39 | on a Python path. 40 | 41 | 42 | #Set the Python path 43 | #-------------------- 44 | import sys 45 | sys.path.append('C:/ExtraSitePackages/RedNine_v1.42') 46 | 47 | 48 | #Launch the pack 49 | #-------------------- 50 | import Red9 51 | Red9.start() 52 | 53 | 54 | This will boot the pack only for this Maya session. 55 | 56 | If you do need to set the path then point to folder that contains 57 | the "Red9" folder NOT to the Red9 folder itself. 58 | 59 | if the pack was located : c:\markj\pythonModules\Red9_release141\Red 60 | set the path to: c:\markj\pythonModules\Red9_release141\ 61 | 62 | 63 | 64 | To Boot when Maya launches: 65 | =========================== 66 | 67 | Copy the userSetup.py file into your Maya scripts folder found here: 68 | 69 | C:\user\xxxxx\Documents\maya\2012\scripts 70 | 71 | Then edit the folder path as per instructions in the userSetup file 72 | 73 | NOTE: if you have spaces in your path ie: 74 | ----------------------------------------- 75 | 76 | sys.path.append('D:\My Documents\Maya\2012-x64\Red9_release\') 77 | 78 | then do so like the following (making the string a raw sting stops the escapes) 79 | 80 | sys.path.append(r'D:\My Documents\Maya\2012-x64\Red9_release\') 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/installer/userSetup.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | #Entry point for the Red9 Studio Pack. Copy this file to your 4 | #C:\user\xxxxx\Documents\maya\20xx\scripts folder and edit the path 5 | #below to point to the folder containing the Red9 folder. 6 | 7 | #Note: the first 2 lines arent needed if you dropped the Red9 folder 8 | #into the Maya scripts directory in your prefs, or any directory already 9 | #on a Python path 10 | 11 | #repoint the path to folder that contains the Red9 folder 12 | #NOT to the Red9 folder itself 13 | 14 | import sys 15 | sys.path.append('O:\Animation\Red9_Release') 16 | 17 | #then to launch 18 | import Red9 19 | Red9.start() 20 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/license.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | =============================================================================== 4 | 5 | Red9 StudioPack is released under a BSD style license 6 | 7 | Copyright (c) 2013, Mark Jackson 8 | All rights reserved. 9 | 10 | Redistribution and use in source and binary forms, with or without modification, are 11 | permitted provided that the following conditions are met: 12 | 13 | * Redistributions of source code must retain the above copyright notice, 14 | this list of conditions and the following disclaimer. 15 | * Redistributions in binary form must reproduce the above copyright notice, 16 | this list of conditions and the following disclaimer in the documentation 17 | and/or other materials provided with the distribution. 18 | * Neither the name of the Red9 nor the names of its contributors may be used 19 | to endorse or promote products derived from this software without specific 20 | prior written permission. 21 | 22 | THIS SOFTWARE IS PROVIDED BY MARK JACKSON "AS IS" AND ANY EXPRESS OR IMPLIED 23 | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 24 | AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MARK JACKSON 25 | BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28 | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | =============================================================================== -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ------------------------------------------ 3 | Red9 Studio Pack : Maya Pipeline Solutions 4 | email: rednineinfo@gmail.com 5 | ------------------------------------------ 6 | 7 | This is a repository for all external Python Module dependencies 8 | =============================================================================== 9 | ''' 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | /.project 3 | /.pydevproject 4 | /dist/ 5 | /pydub.egg-info/ 6 | .DS_Store 7 | env 8 | *.swp 9 | .idea 10 | 11 | /build/ 12 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/AUTHORS: -------------------------------------------------------------------------------- 1 | James Robert 2 | github: jiaaro 3 | twitter: @jiaaro 4 | web: jiaaro.com 5 | email: pydub@jiaaro.com 6 | 7 | Marc Webbie 8 | github: marcwebbie 9 | 10 | Jean-philippe Serafin 11 | github: jeanphix 12 | 13 | Anurag Ramdasan 14 | github: AnuragRamdasan 15 | 16 | Choongmin Lee 17 | github: clee704 18 | 19 | Patrick Pittman 20 | github: ptpittman 21 | 22 | Hunter Lang 23 | github: hunterlang 24 | 25 | Alexey 26 | github: nihisil 27 | 28 | Jaymz Campbell 29 | github: jaymzcd -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 James Robert, http://jiaaro.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ------------------------------------------ 3 | Red9 Studio Pack : Maya Pipeline Solutions 4 | email: rednineinfo@gmail.com 5 | ------------------------------------------ 6 | 7 | This is a repository for all external Python Module dependencies 8 | =============================================================================== 9 | ''' 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/pydub/__init__.py: -------------------------------------------------------------------------------- 1 | from .audio_segment import AudioSegment 2 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/pydub/exceptions.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class TooManyMissingFrames(Exception): 4 | pass 5 | 6 | 7 | class InvalidDuration(Exception): 8 | pass 9 | 10 | 11 | class InvalidTag(Exception): 12 | pass 13 | 14 | 15 | class InvalidID3TagVersion(Exception): 16 | pass 17 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/pydub/playback.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | from tempfile import NamedTemporaryFile 3 | from .utils import get_player_name 4 | 5 | PLAYER = get_player_name() 6 | 7 | def play(audio_segment): 8 | with NamedTemporaryFile("w+b", suffix=".wav") as f: 9 | audio_segment.export(f.name, "wav") 10 | subprocess.call([PLAYER, "-nodisp", "-autoexit", f.name]) 11 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/packages/pydub/pydub/utils.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | 3 | from math import log, ceil, floor 4 | import os 5 | import re 6 | from subprocess import Popen, PIPE 7 | import sys 8 | from tempfile import TemporaryFile 9 | 10 | if sys.version_info >= (3, 0): 11 | basestring = str 12 | 13 | 14 | def _fd_or_path_or_tempfile(fd, mode='w+b', tempfile=True): 15 | if fd is None and tempfile: 16 | fd = TemporaryFile(mode=mode) 17 | 18 | if isinstance(fd, basestring): 19 | fd = open(fd, mode=mode) 20 | 21 | return fd 22 | 23 | 24 | def db_to_float(db): 25 | """ 26 | Converts the input db to a float, which represents the equivalent 27 | ratio in power. 28 | """ 29 | db = float(db) 30 | return 10 ** (db / 10) 31 | 32 | 33 | def ratio_to_db(ratio, val2=None): 34 | """ 35 | Converts the input float to db, which represents the equivalent 36 | to the ratio in power represented by the multiplier passed in. 37 | """ 38 | ratio = float(ratio) 39 | 40 | # accept 2 values and use the ratio of val1 to val2 41 | if val2 is not None: 42 | ratio = ratio / val2 43 | 44 | return 10 * log(ratio, 10) 45 | 46 | 47 | def register_pydub_effect(fn, name=None): 48 | """ 49 | decorator for adding pydub effects to the AudioSegment objects. 50 | 51 | example use: 52 | 53 | @register_pydub_effect 54 | def normalize(audio_segment): 55 | ... 56 | 57 | or you can specify a name: 58 | 59 | @register_pydub_effect("normalize") 60 | def normalize_audio_segment(audio_segment): 61 | ... 62 | 63 | """ 64 | if isinstance(fn, basestring): 65 | name = fn 66 | return lambda fn: register_pydub_effect(fn, name) 67 | 68 | if name is None: 69 | name = fn.__name__ 70 | 71 | from .audio_segment import AudioSegment 72 | setattr(AudioSegment, name, fn) 73 | return fn 74 | 75 | 76 | def make_chunks(audio_segment, chunk_length): 77 | """ 78 | Breaks an AudioSegment into chunks that are milliseconds 79 | long. 80 | 81 | if chunk_length is 50 then you'll get a list of 50 millisecond long audio 82 | segments back (except the last one, which can be shorter) 83 | """ 84 | number_of_chunks = ceil(len(audio_segment) / float(chunk_length)) 85 | return [audio_segment[i * chunk_length:(i + 1) * chunk_length] 86 | for i in range(int(number_of_chunks))] 87 | 88 | 89 | def which(program): 90 | """ 91 | Mimics behavior of UNIX which command. 92 | """ 93 | envdir_list = os.environ["PATH"].split(os.pathsep) 94 | 95 | for envdir in envdir_list: 96 | program_path = os.path.join(envdir, program) 97 | if os.path.isfile(program_path) and os.access(program_path, os.X_OK): 98 | return program_path 99 | 100 | 101 | def get_encoder_name(): 102 | """ 103 | Return enconder default application for system, either avconv or ffmpeg 104 | """ 105 | if which("avconv"): 106 | return "avconv" 107 | elif which("ffmpeg"): 108 | return "ffmpeg" 109 | else: 110 | # should raise exception 111 | return "ffmpeg" 112 | 113 | def get_player_name(): 114 | """ 115 | Return enconder default application for system, either avconv or ffmpeg 116 | """ 117 | if which("avplay"): 118 | return "avplay" 119 | elif which("ffplay"): 120 | return "ffplay" 121 | else: 122 | # should raise exception 123 | return "ffplay" 124 | 125 | 126 | def get_prober_name(): 127 | """ 128 | Return probe application, either avconv or ffmpeg 129 | """ 130 | if which("avprobe"): 131 | return "avprobe" 132 | elif which("ffprobe"): 133 | return "ffprobe" 134 | else: 135 | # should raise exception 136 | return "ffprobe" 137 | 138 | 139 | def mediainfo(filepath): 140 | """Return dictionary with media info(codec, duration, size, bitrate...) from filepath 141 | """ 142 | 143 | from .audio_segment import AudioSegment 144 | 145 | command = "{0} -v quiet -show_format -show_streams {1}".format( 146 | get_prober_name(), 147 | filepath 148 | ) 149 | output = Popen(command.split(), stdout=PIPE).communicate()[0].decode("utf-8") 150 | 151 | rgx = re.compile(r"(?:(?P.*?):)?(?P.*?)\=(?P.*?)$") 152 | info = {} 153 | for line in output.split("\n"): 154 | # print(line) 155 | mobj = rgx.match(line) 156 | 157 | if mobj: 158 | # print(mobj.groups()) 159 | inner_dict, key, value = mobj.groups() 160 | 161 | if inner_dict: 162 | try: 163 | info[inner_dict] 164 | except KeyError: 165 | info[inner_dict] = {} 166 | info[inner_dict][key] = value 167 | else: 168 | info[key] = value 169 | 170 | return info 171 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Andy_Rig.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = False 3 | infoBlock = AndyRig : rough config. Please note that for the AnimTools Hierarchy flags or PoseSaver you should use the rigs Character sets as root nodes 4 | searchAttrs = , 5 | hierarchy = True 6 | searchPattern = , 7 | filterPriority = andy_spine_Root$, rig_andy_spine_0_Hips$, rig_andy_spine_0_Shoulders$, rig_andy_spine_0_Mid$, andy_neck_IK_Cntrl$, andy_leg_IKleg_Cntrl_l$, andy_leg_IKleg_Cntrl_r$, andy_arm_IK_Cntrl_r$, andy_arm_IK_Cntrl_l$ 8 | transformClamp = True 9 | nodeTypes = , 10 | incRoots = True 11 | [[rigData]] 12 | parentSpaces = Parent 13 | snapPriority = True 14 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Basic_Rig.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = False 3 | searchAttrs = , 4 | hierarchy = False 5 | searchPattern = , 6 | filterPriority = , 7 | transformClamp = True 8 | nodeTypes = nurbsCurve, 9 | incRoots = True 10 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Default.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | searchAttrs = , 3 | hierarchy = False 4 | filterPriority = , 5 | incRoots = True 6 | searchPattern = , 7 | nodeTypes = nurbsCurve, 8 | transformClamp = True 9 | metaRig = False 10 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/HumanIK.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | searchAttrs = , 3 | hierarchy = False 4 | filterPriority = Ctrl_HipsEffector$, Ctrl_Hips$ 5 | incRoots = True 6 | searchPattern = , 7 | nodeTypes = hikIKEffector, hikFKJoint 8 | transformClamp = True 9 | metaRig = False 10 | infoBlock = HIK Rig : For the rootNode use the Ctrl_Reference node in the rig 11 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/MaxforMaya.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | searchAttrs = , 3 | hierarchy = False 4 | filterPriority = root_Ctrl$, hip_Ctrl$, ikSpine2_Ctrl$, footIKR_Ctrl$, footIKL_Ctrl$, footIKR_Ctrl$, footIKL_Ctrl$, kneePoleVectorIKR_Ctrl$, kneePoleVectorIKL_Ctrl$ 5 | incRoots = True 6 | searchPattern = Ctrl$, 7 | nodeTypes = nurbsCurve, 8 | transformClamp = True 9 | metaRig = False 10 | infoBlock = MaxForMaya Rig : For the root node of the hierarchy use the controls_Grp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/MetaRig.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = True 3 | searchAttrs = , 4 | hierarchy = False 5 | searchPattern = , 6 | filterPriority = , 7 | transformClamp = True 8 | nodeTypes = , 9 | incRoots = True 10 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/MorpheusRig.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | hierarchy = False 3 | filterPriority = all_anim$, m_spine_Root_anim$, rig_spine_0_skin_Hips_anim$, rig_spine_0_skin_Shoulders_anim$, m_neck_IK_anim$, m_leg_IKleg_Cntrl_r_anim$, m_leg_IKleg_Cntrl_l_anim$, m_arm_IK_Cntrl_r_anim$, m_arm_IK_Cntrl_l_anim$, m_leg_PV_Cntrl_r_anim$, m_leg_PV_Cntrl_l_anim$, m_arm_PV_Cntrl_r_anim$, m_arm_PV_Cntrl_l_anim$ 4 | incRoots = False 5 | searchPattern = anim$, NOT:Deform, NOT:deform 6 | metaClass = , 7 | nodeTypes = nurbsCurve, 8 | metaRig = False 9 | searchAttrs = , 10 | infoBlock = "" 11 | transformClamp = True 12 | [[rigData]] 13 | parentSpaces = Parent,lockMid 14 | snapPriority = True 15 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Red9_MetaRig_unitTest.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = True 3 | infoBlock = "" 4 | searchAttrs = , 5 | hierarchy = False 6 | metaClass = , 7 | searchPattern = , 8 | filterPriority = COG__Ctrl, Hips_Ctrl, Chest_Ctrl, R_Wrist_Ctrl, L_Wrist_Ctrl, L_Foot_Ctrl, R_Foot_Ctrl, L_Knee_Ctrl, R_Knee_Ctrl 9 | transformClamp = True 10 | nodeTypes = , 11 | incRoots = False 12 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Standard_Hierarchy.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | searchAttrs = , 3 | hierarchy = True 4 | filterPriority = , 5 | incRoots = True 6 | searchPattern = , 7 | nodeTypes = , 8 | transformClamp = True 9 | metaRig = False 10 | infoBlock = Use this filter for standard Hierarchys where NO specific filtering is required. Also works with SelectionSets and CharacterSets 11 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/Stewart_Rig.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | hierarchy = False 3 | filterPriority = stw_root_ctrl, stw_COG_ctrl, stw_spine_ik_hip_ctrl, stw_spine_ik_shoulder_ctrl, stw_rt_foot_ik_ctrl, stw_lf_foot_ik_ctrl, stw_rt_arm_ik_ctrl, stw_lf_arm_ik_ctrl, stw_lf_knee_pv_ctrl, stw_rt_knee_pv_ctrl, stw_rt_elbow_pv_ctrl, stw_lf_elbow_pv_ctrl, stw_head_ctrl 4 | incRoots = True 5 | searchPattern = ctrl, 6 | metaClass = , 7 | nodeTypes = nurbsCurve, 8 | metaRig = False 9 | searchAttrs = , 10 | infoBlock = Animation Mentors : Stewart Rig. This is a really quick template that needs testing! Please let me know if you get issues. For Root of hierarchy searches use the 'stw_grp' node 11 | transformClamp = True 12 | [[rigData]] 13 | parentSpaces = space 14 | snapPriority = True 15 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/TSM.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = False 3 | searchAttrs = , 4 | hierarchy = False 5 | searchPattern = , 6 | filterPriority = Character, Upper_Body, Spine_Pelvis_FK, Spine_Middle_FK, Spine_Torso_FK, LeftArm_Arm_IK, RightArm_Arm_IK, RightLeg_IK_Leg, LeftLeg_IK_Leg 7 | transformClamp = True 8 | nodeTypes = nurbsCurve, 9 | incRoots = False 10 | infoBlock = TSM : The Setup Machine : Use the object selection sets ar roots 11 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/presets/__red9animreset__: -------------------------------------------------------------------------------- 1 | [AnimationUI] 2 | poseMode = thumb 3 | posePathMode = localPoseMode 4 | keyPasteMethod = replace 5 | [[checkboxes]] 6 | uicbPoseRelative = False 7 | uicbPoseHierarchy = True 8 | uicbPoseSpace = False 9 | uicbMatchMethod = True 10 | uicbSnapPriorityOnly = True 11 | uicbCAttrHierarchy = False 12 | uicbCKeyRange = False 13 | uicbCKeyAnimLay = False 14 | uicbCKeyHierarchy = False 15 | uicbSnapRange = False 16 | uicbSnapHierarchy = False 17 | uicbStabRots = True 18 | uicbStabTrans = True 19 | uicbStabRange = False 20 | uicbTimeOffsetHierarchy = False 21 | uicbTimeOffsetScene = False 22 | uicbTimeOffsetRange = False 23 | uicbTimeOffsetTimelines = True 24 | uicbMirrorHierarchy = False 25 | 26 | 27 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/startup/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ------------------------------------------ 3 | Red9 Studio Pack: Maya Pipeline Solutions 4 | Author: Mark Jackson 5 | email: rednineinfo@gmail.com 6 | 7 | Red9 blog : http://red9-consultancy.blogspot.co.uk/ 8 | MarkJ blog: http://markj3d.blogspot.co.uk 9 | ------------------------------------------ 10 | 11 | This is the internal boot folder for the systems. The maya_native folder 12 | contains any Maya default scripts that I'm over-loading, these are sourced 13 | by the pack when it boots, matching Maya versions first. 14 | =============================================================================== 15 | ''' 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/startup/maya_native/maya_2009/Maya_Hacked.mel: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Hacked popup menu for the Script Editor. Added the Red9_Inspect item 4 | original source file scriptEditorPanel.mel from C:\Program...\scripts\startup\ 5 | */ 6 | 7 | //================================================== 8 | //HACKED FROM: scripts/startup/scriptEditorPanel.mel 9 | //================================================== 10 | 11 | global proc buildScriptEditorCondensedPopupMenus(string $parent, int $isHistoryPopup) 12 | // 13 | // Builds all the necessary menus under the specified menubar/popup 14 | // 15 | { 16 | // build the default marking menus 17 | menuItem -radialPosition "N" 18 | -parent $parent 19 | -label (uiRes("m_scriptEditorPanel.kNewExecuterTab")) 20 | -command "handleScriptEditorAction \"addExecuterTab\""; 21 | menuItem -radialPosition "W" 22 | -parent $parent 23 | -label (uiRes("m_scriptEditorPanel.kSelectPreviousTab")) 24 | -command "handleScriptEditorAction \"selectPreviousExecuterTab\""; 25 | menuItem -radialPosition "E" 26 | -parent $parent 27 | -label (uiRes("m_scriptEditorPanel.kSelectNextTab")) 28 | -command "handleScriptEditorAction \"selectNextExecuterTab\""; 29 | 30 | $deleteSM = `menuItem -radialPosition "SE" 31 | -parent $parent 32 | -subMenu true 33 | -label (uiRes("m_scriptEditorPanel.kCloseMMLabel"))`; 34 | menuItem -parent $deleteSM 35 | -radialPosition "E" 36 | -label (uiRes("m_scriptEditorPanel.kCloseCurrentMMLabel")) 37 | -command "handleScriptEditorAction \"removeCurrentExecuterTab\""; 38 | menuItem -parent $deleteSM 39 | -radialPosition "W" 40 | -label (uiRes("m_scriptEditorPanel.kCloseOthersMMLabel")) 41 | -command "handleScriptEditorAction \"removeOtherExecuterTabs\""; 42 | setParent -m ..; 43 | 44 | if (!$isHistoryPopup) { 45 | // build the default short rmb menus 46 | menuItem -label (uiRes("m_scriptEditorPanel.kExecute")) 47 | -parent $parent 48 | -command "handleScriptEditorAction \"execute\""; 49 | menuItem -label (uiRes("m_scriptEditorPanel.kQuickHelp")) 50 | -parent $parent 51 | -command "handleScriptEditorAction \"showSelectedCmdQuickHelp\""; 52 | menuItem -divider on; 53 | menuItem -label (uiRes("m_scriptEditorPanel.kUndo")) 54 | -parent $parent 55 | -command "handleScriptEditorAction \"undo\""; 56 | menuItem -label (uiRes("m_scriptEditorPanel.kRedo")) 57 | -parent $parent 58 | -command "handleScriptEditorAction \"redo\""; 59 | menuItem -divider on; 60 | 61 | menuItem -label (uiRes("m_scriptEditorPanel.kCut")) 62 | -parent $parent 63 | -command "handleScriptEditorAction \"cut\""; 64 | menuItem -label (uiRes("m_scriptEditorPanel.kCopy")) 65 | -parent $parent 66 | -command "handleScriptEditorAction \"copy\""; 67 | menuItem -label (uiRes("m_scriptEditorPanel.kPaste")) 68 | -parent $parent 69 | -command "handleScriptEditorAction \"paste\""; 70 | menuItem -divider on; 71 | 72 | menuItem -label (uiRes("m_scriptEditorPanel.kSelectAll")) 73 | -parent $parent 74 | -command "handleScriptEditorAction \"selectAll\""; 75 | menuItem -divider on; 76 | menuItem -label (uiRes("m_scriptEditorPanel.kClearInput")) 77 | -parent $parent 78 | -command "handleScriptEditorAction \"clearInput\""; 79 | menuItem -label (uiRes("m_scriptEditorPanel.kClearAll")) 80 | -parent $parent 81 | -command "handleScriptEditorAction \"clearAll\""; 82 | }else { 83 | menuItem -label (uiRes("m_scriptEditorPanel.kCopy")) 84 | -parent $parent 85 | -command "handleScriptEditorAction \"copy\""; 86 | 87 | menuItem -label (uiRes("m_scriptEditorPanel.kSelectAll")) 88 | -parent $parent 89 | -command "handleScriptEditorAction \"selectAll\""; 90 | menuItem -divider on; 91 | menuItem -label (uiRes("m_scriptEditorPanel.kClearHistory")) 92 | -parent $parent 93 | -command "handleScriptEditorAction \"clearHistory\""; 94 | menuItem -label (uiRes("m_scriptEditorPanel.kClearAll")) 95 | -parent $parent 96 | -command "handleScriptEditorAction \"clearAll\""; 97 | } 98 | 99 | //ADD HACKS =============================================================== 100 | source red9MayaHacks; 101 | red9HackScriptEditorPopup $parent; 102 | //HACK END ================================================================ 103 | } 104 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/startup/maya_native/maya_2010/Maya_Hacked.mel: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Hacked popup menu for the Script Editor. Added the Red9_Inspect item 4 | original source file scriptEditorPanel.mel from C:\Program...\scripts\startup\ 5 | */ 6 | 7 | //================================================== 8 | //HACKED FROM: scripts/startup/scriptEditorPanel.mel 9 | //================================================== 10 | 11 | global proc buildScriptEditorCondensedPopupMenus(string $parent, int $isHistoryPopup) 12 | // 13 | // Builds all the necessary menus under the specified menubar/popup 14 | // 15 | { 16 | // build the default marking menus 17 | menuItem -radialPosition "N" 18 | -parent $parent 19 | -label (uiRes("m_scriptEditorPanel.kNewExecuterTab")) 20 | -command "handleScriptEditorAction \"addExecuterTab\""; 21 | menuItem -radialPosition "W" 22 | -parent $parent 23 | -label (uiRes("m_scriptEditorPanel.kSelectPreviousTab")) 24 | -command "handleScriptEditorAction \"selectPreviousExecuterTab\""; 25 | menuItem -radialPosition "E" 26 | -parent $parent 27 | -label (uiRes("m_scriptEditorPanel.kSelectNextTab")) 28 | -command "handleScriptEditorAction \"selectNextExecuterTab\""; 29 | 30 | $deleteSM = `menuItem -radialPosition "SE" 31 | -parent $parent 32 | -subMenu true 33 | -label (uiRes("m_scriptEditorPanel.kCloseMMLabel"))`; 34 | menuItem -parent $deleteSM 35 | -radialPosition "E" 36 | -label (uiRes("m_scriptEditorPanel.kCloseCurrentMMLabel")) 37 | -command "handleScriptEditorAction \"removeCurrentExecuterTab\""; 38 | menuItem -parent $deleteSM 39 | -radialPosition "W" 40 | -label (uiRes("m_scriptEditorPanel.kCloseOthersMMLabel")) 41 | -command "handleScriptEditorAction \"removeOtherExecuterTabs\""; 42 | setParent -m ..; 43 | 44 | if (!$isHistoryPopup) { 45 | // build the default short rmb menus 46 | menuItem -label (uiRes("m_scriptEditorPanel.kExecute")) 47 | -parent $parent 48 | -command "handleScriptEditorAction \"execute\""; 49 | menuItem -label (uiRes("m_scriptEditorPanel.kQuickHelp")) 50 | -parent $parent 51 | -command "handleScriptEditorAction \"showSelectedCmdQuickHelp\""; 52 | menuItem -divider on; 53 | menuItem -label (uiRes("m_scriptEditorPanel.kUndo")) 54 | -parent $parent 55 | -command "handleScriptEditorAction \"undo\""; 56 | menuItem -label (uiRes("m_scriptEditorPanel.kRedo")) 57 | -parent $parent 58 | -command "handleScriptEditorAction \"redo\""; 59 | menuItem -divider on; 60 | 61 | menuItem -label (uiRes("m_scriptEditorPanel.kCut")) 62 | -parent $parent 63 | -command "handleScriptEditorAction \"cut\""; 64 | menuItem -label (uiRes("m_scriptEditorPanel.kCopy")) 65 | -parent $parent 66 | -command "handleScriptEditorAction \"copy\""; 67 | menuItem -label (uiRes("m_scriptEditorPanel.kPaste")) 68 | -parent $parent 69 | -command "handleScriptEditorAction \"paste\""; 70 | menuItem -divider on; 71 | 72 | menuItem -label (uiRes("m_scriptEditorPanel.kSelectAll")) 73 | -parent $parent 74 | -command "handleScriptEditorAction \"selectAll\""; 75 | menuItem -divider on; 76 | menuItem -label (uiRes("m_scriptEditorPanel.kClearInput")) 77 | -parent $parent 78 | -command "handleScriptEditorAction \"clearInput\""; 79 | menuItem -label (uiRes("m_scriptEditorPanel.kClearAll")) 80 | -parent $parent 81 | -command "handleScriptEditorAction \"clearAll\""; 82 | }else { 83 | menuItem -label (uiRes("m_scriptEditorPanel.kCopy")) 84 | -parent $parent 85 | -command "handleScriptEditorAction \"copy\""; 86 | 87 | menuItem -label (uiRes("m_scriptEditorPanel.kSelectAll")) 88 | -parent $parent 89 | -command "handleScriptEditorAction \"selectAll\""; 90 | menuItem -divider on; 91 | menuItem -label (uiRes("m_scriptEditorPanel.kClearHistory")) 92 | -parent $parent 93 | -command "handleScriptEditorAction \"clearHistory\""; 94 | menuItem -label (uiRes("m_scriptEditorPanel.kClearAll")) 95 | -parent $parent 96 | -command "handleScriptEditorAction \"clearAll\""; 97 | } 98 | 99 | //ADD HACKS =============================================================== 100 | source red9MayaHacks; 101 | red9HackScriptEditorPopup $parent; 102 | //HACK END ================================================================ 103 | } 104 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/Red9_AudioTest.py: -------------------------------------------------------------------------------- 1 | ''' 2 | ------------------------------------------ 3 | Red9 Studio Pack: Maya Pipeline Solutions 4 | Author: Mark Jackson 5 | email: rednineinfo@gmail.com 6 | 7 | Red9 blog : http://red9-consultancy.blogspot.co.uk/ 8 | MarkJ blog: http://markj3d.blogspot.co.uk 9 | ------------------------------------------ 10 | 11 | This is the main unittest for the Red9_Meta module and a good 12 | example of what's expected and what the systems can do on simple data 13 | ================================================================ 14 | 15 | ''' 16 | 17 | 18 | #import pymel.core as pm 19 | import maya.standalone 20 | maya.standalone.initialize(name='python') 21 | 22 | import Red9.core.Red9_Audio as r9Audio 23 | import Red9.core.Red9_General as r9General 24 | import Red9.startup.setup as r9Setup 25 | r9Setup.start(Menu=False) 26 | 27 | import maya.cmds as cmds 28 | import os 29 | 30 | class Test_BwavHandler(object): 31 | def setup(self): 32 | self.bwavpath=os.path.join(r9Setup.red9ModulePath(),'tests','testFiles','bwav_test.wav') 33 | self.audioNode = r9Audio.AudioNode.importAndActivate(self.bwavpath) 34 | 35 | def teardown(self): 36 | cmds.file(new=True,f=True) 37 | 38 | def test_basics(self): 39 | assert isinstance(self.audioNode, r9Audio.AudioNode) 40 | assert r9General.formatPath(self.audioNode.path)==r9General.formatPath(self.bwavpath) 41 | assert self.audioNode.audioNode=='bwav_test' 42 | assert self.audioNode.sample_width==2 43 | assert self.audioNode.sampleRate==44100 44 | assert self.audioNode.sample_bits==16 45 | assert self.audioNode.channels==1 46 | 47 | 48 | def test_funcs(self): 49 | assert self.audioNode.startFrame==0 50 | self.audioNode.startFrame=10 51 | assert self.audioNode.startFrame==10 52 | assert cmds.getAttr('%s.offset' % self.audioNode.audioNode)==10 53 | self.audioNode.offsetTime(25) 54 | assert self.audioNode.startFrame==35 55 | 56 | assert cmds.getAttr('%s.mute' % self.audioNode.audioNode)==False 57 | self.audioNode.mute(True) 58 | assert cmds.getAttr('%s.mute' % self.audioNode.audioNode)==True 59 | 60 | 61 | def test_bwav_handler(self): 62 | ''' 63 | test the bwav handler and formatting of the data 64 | ''' 65 | assert self.audioNode.isBwav() 66 | #print self.audioNode.bwav_timecodeFormatted() 67 | cmds.currentUnit(time='ntscf') 68 | assert r9General.getCurrentFPS()==60 69 | #print 'ntscf' , self.audioNode.bwav_timecodeFormatted() 70 | assert self.audioNode.bwav_timecodeFormatted()=='01:26:04:11' 71 | cmds.currentUnit(time='pal') 72 | assert r9General.getCurrentFPS()==25 73 | #print 'pal : ', self.audioNode.bwav_timecodeFormatted() 74 | assert self.audioNode.bwav_timecodeFormatted()=='01:26:04:05' 75 | #print self.audioNode.bwav_timecodeFormatted(smpte=False) 76 | assert self.audioNode.bwav_timecodeFormatted(smpte=False)=='01:26:04:172' 77 | assert self.audioNode.bwav_timecodeReference()==227739993 78 | assert self.audioNode.bwav_timecodeMS()==5164172.1768707484 79 | assert self.audioNode.bwav_HeaderData=={'AudioFormat': 0, 80 | 'BextVersion': 0, 81 | 'BitsPerSample': 0, 82 | 'ChunkSize': 732516, 83 | 'Description': 'This is a unitTest file for validating the Red9 broadcast wav extraction of metaData', 84 | 'Format': 'WAVE', 85 | 'InternalFormat': 'fmt ', 86 | 'OriginationDate': '2014-03-03', 87 | 'OriginationTime': '10:00:00', 88 | 'Originator': 'Pro Tools', 89 | 'OriginatorReference': 'ffgDDffdhgff', 90 | 'Subchunk1Size': 16, 91 | 'TimeReference': 227739993, 92 | 'TimeReferenceHigh': 0} 93 | 94 | def test_compiler(self): 95 | self.audioNode.stampCompiled(self.audioNode.audioNode) 96 | assert self.audioNode.isCompiled 97 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/T_Pose.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/T_Pose.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/fingers/l_fingers_curled.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/fingers/l_fingers_curled.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/fingers/lfingers.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/fingers/lfingers.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f218.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f218.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f218_projected.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f218_projected.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f9.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f9_absolute29.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_Poses/jump_f9_absolute29.bmp -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_anim_jump.mb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/MetaRig_anim_jump.mb -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/bwav_test.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/Red9/tests/testFiles/bwav_test.wav -------------------------------------------------------------------------------- /environment/PYTHONPATH/Red9/tests/testFiles/filterTest.cfg: -------------------------------------------------------------------------------- 1 | [filterNode_settings] 2 | metaRig = True 3 | infoBlock = "" 4 | searchAttrs = myAttr, 5 | hierarchy = False 6 | searchPattern = anim$ 7 | filterPriority = m_spine_Root_anim$, rig_spine_0_skin_Hips_anim$, rig_spine_0_skin_Shoulders_anim$ 8 | transformClamp = True 9 | nodeTypes = nurbsCurves, 10 | incRoots = True 11 | [[rigData]] 12 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/UVDeluxe/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/environment/PYTHONPATH/UVDeluxe/__init__.py -------------------------------------------------------------------------------- /environment/PYTHONPATH/UVDeluxe/uistates.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | import os 3 | import maya.cmds as mc 4 | 5 | version = 120 6 | 7 | class UiStates(): 8 | import os 9 | file = 'config.uvd' 10 | filepath = os.path.join(os.path.dirname(__file__), file) 11 | 12 | def __init__(self): 13 | self.version = version 14 | #Window 15 | self.widthHeight = (1150,700) 16 | self.collapseFrame0 = False 17 | self.collapseFrame1 = True 18 | self.collapseFrame2 = True 19 | self.collapseFrame3 = True 20 | self.collapseFrame4 = True 21 | self.collapseFrame5 = True 22 | self.collapseFrame6 = True 23 | self.collapseFrame7 = True 24 | self.collapseFrame8 = True 25 | 26 | #Settings 27 | #self.textureSize = (5,5) 28 | #self.forgetTextureSize = False 29 | self.detectTextureSize = True 30 | self.retainCS = mc.texMoveContext('texMoveContext',q=True,scr=True) 31 | self.matchDist = 0.05 32 | 33 | #Quicksnap 34 | self.snapPath = mc.workspace(q=True,rd=True) 35 | 36 | @staticmethod 37 | def pickleDump(uis): 38 | datafile = open(UiStates.filepath,'w') 39 | pickle.dump(uis, datafile) 40 | datafile.close() 41 | 42 | @staticmethod 43 | def pickleLoad(): 44 | #Delete settings file from parent folder 45 | if os.path.exists(UiStates.filepath): 46 | print "%s found, loading settings." % UiStates.file 47 | datafile = open(UiStates.filepath,'r') 48 | uis = pickle.load(datafile) 49 | datafile.close() 50 | try: 51 | pickledVer = uis.version 52 | if pickledVer < version: 53 | os.remove(UiStates.filepath) 54 | return UiStates() 55 | except: 56 | os.remove(UiStates.filepath) 57 | return UiStates() 58 | return uis 59 | else: 60 | return UiStates() 61 | 62 | 63 | def setUiState(self): 64 | #Window 65 | self.widthHeight = mc.window('UVDeluxe',query=True,wh=True) 66 | self.collapseFrame0 = mc.frameLayout('layout_Settings', query=True, cl=True) 67 | self.collapseFrame1 = mc.frameLayout('layout_Mover', query=True, cl=True) 68 | self.collapseFrame2 = mc.frameLayout('layout_Scaler', query=True, cl=True) 69 | self.collapseFrame3 = mc.frameLayout('layout_Ratio', query=True, cl=True) 70 | self.collapseFrame4 = mc.frameLayout('layout_Straighten', query=True, cl=True) 71 | self.collapseFrame5 = mc.frameLayout('layout_Align', query=True, cl=True) 72 | self.collapseFrame6 = mc.frameLayout('layout_QuickSnap', query=True, cl=True) 73 | self.collapseFrame7 = mc.frameLayout('layout_MatchUV', query=True, cl=True) 74 | self.collapseFrame8 = mc.frameLayout('layout_SelectionSets',query=True, cl=True) 75 | 76 | self.detectTextureSize = mc.checkBox ('DTR', query=True, v=True) 77 | 78 | self.retainCS = mc.texMoveContext('texMoveContext',q=True,scr=True) 79 | #Qucksnap 80 | self.snapPath = mc.textField("pathField",query=True,text=True) 81 | ''' Dump ''' 82 | UiStates.pickleDump(self) -------------------------------------------------------------------------------- /environment/PYTHONPATH/userSetup.py: -------------------------------------------------------------------------------- 1 | try: 2 | __import__("tapp") 3 | 4 | except ImportError as e: 5 | print("tapp: Could not load integration: %s " % e) 6 | 7 | else: 8 | 9 | import tapp 10 | 11 | # Setup integration 12 | tapp.setup() 13 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_attach.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 61 2", 4 | " c #4D4D4D", 5 | ". c #3D3D3D", 6 | "X c #474747", 7 | "o c #212121", 8 | "O c #050505", 9 | "+ c #0D0D0D", 10 | "@ c #4A4A4A", 11 | "# c #2B2B2B", 12 | "$ c #080808", 13 | "% c #00562D", 14 | "& c #32D838", 15 | "* c #1A1A1A", 16 | "= c #2E2E2E", 17 | "- c #363636", 18 | "; c #0F0F0F", 19 | ": c #1C1C1C", 20 | "> c #00FF40", 21 | ", c #424242", 22 | "< c #00AF14", 23 | "1 c #242424", 24 | "2 c #238E23", 25 | "3 c #303030", 26 | "4 c #000001", 27 | "5 c #171717", 28 | "6 c #121212", 29 | "7 c #292929", 30 | "8 c #3B3B3B", 31 | "9 c #0A0A0A", 32 | "0 c #1F1F1F", 33 | "q c #454545", 34 | "w c #262626", 35 | "e c #8B4513", 36 | "r c #CDCD1D", 37 | "t c #B8860B", 38 | "y c #55562F", 39 | "u c #F2DE0D", 40 | "i c #FFFF00", 41 | "p c #141414", 42 | "a c #333333", 43 | "s c #000000", 44 | "d c #030303", 45 | "f c #2F4F4F", 46 | "g c #5E5E5E", 47 | "h c #616161", 48 | "j c #2F2F64", 49 | "k c #595959", 50 | "l c #91D2DE", 51 | "z c #9BEFF2", 52 | "x c #6A6A8D", 53 | "c c #383838", 54 | "v c #5F929E", 55 | "b c #87CEFA", 56 | "n c #529584", 57 | "m c #7C98D3", 58 | "M c #636363", 59 | "N c #666666", 60 | "B c #545454", 61 | "V c #384B66", 62 | "C c #5C5C5C", 63 | "Z c #347766", 64 | "A c #72D5CD", 65 | " . . ", 66 | " X o O + @ ", 67 | " @ # $ % & * = ", 68 | " - ; : & > > & $ X ", 69 | " , * + < > > > > > % o ", 70 | " X 1 O 2 & > > > & & > & $ . ", 71 | " 3 O & > > > & % 4 < > > < 5 ", 72 | " @ 6 < > & % O 7 8 9 & > & ; - ", 73 | " 8 9 < $ 0 q : % > > < + @ ", 74 | " : 6 o 5 5 # @ q $ & > > % 7 ", 75 | " X w 9 e r t y 5 @ 7 % > > & O q ", 76 | " @ 8 1 0 u i i i i y 7 @ 9 & > > % 0 ", 77 | " X y y p r i i i i i r ; a 6 & > & $ . ", 78 | " X y y t s i i i i i i i d p < > > < 6 ", 79 | " y y y t 6 r i i i i i r ; q 5 ; > > & p 3 ", 80 | " @ y y y t y y i i i i i y w 7 $ % & > > > < 9 @ ", 81 | " X y y y t t 0 y r i r y ; + % & > > > & % 9 = @ ", 82 | " @ y y y y t t y 6 s 9 ; ; < > > > & % 9 = @ ", 83 | " q y y y y y y y - @ = 5 & > & % $ # @ ", 84 | " q y y y y 8 X @ p % % O 7 X @ @ ", 85 | " @ q q X , $ % X @ 8 f g h f f ", 86 | " @ f j k l z z z z x f ", 87 | " c 3 j f f f - f v z z b n g v z z f ", 88 | " c v z z z z v n z z m f 8 , . v z M @ ", 89 | " f v z z x M N f z z g v v q c v z g @ ", 90 | " f z z B X . v z M f v z j c # x z z f ", 91 | " V z z 7 8 v z V @ f z f n z z z V , ", 92 | " f z z C @ V z l V v z M z z x f , ", 93 | " f v z z n g f f V Z A z v v V c , ", 94 | " c n z z z z z z z z v = - @ ", 95 | " 8 = j c a j j a 0 7 ", 96 | " " 97 | }; 98 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_destroy.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 90 2", 4 | " c #4D4D4D", 5 | ". c #454545", 6 | "X c #363636", 7 | "o c #4A4A4A", 8 | "O c #2B2B2B", 9 | "+ c #0D0D0D", 10 | "@ c #0A0A0A", 11 | "# c #333333", 12 | "$ c #121212", 13 | "% c #424242", 14 | "& c #C7C7C7", 15 | "* c #666666", 16 | "= c #212121", 17 | "- c #3D3D3D", 18 | "; c #1C1C1C", 19 | ": c #A6A6A6", 20 | "> c #E5E5E5", 21 | ", c #D9D9D9", 22 | "< c #0F0F0F", 23 | "1 c #474747", 24 | "2 c #242424", 25 | "3 c #828282", 26 | "4 c #E0E0E0", 27 | "5 c #8C8C8C", 28 | "6 c #171717", 29 | "7 c #2E2E2E", 30 | "8 c #5C5C5C", 31 | "9 c #D4D4D4", 32 | "0 c #BDBDBD", 33 | "q c #D6D6D6", 34 | "w c #E3E3E3", 35 | "e c #262626", 36 | "r c #303030", 37 | "t c #404040", 38 | "y c #000001", 39 | "u c #ADADAD", 40 | "i c #030303", 41 | "p c #616161", 42 | "a c #B5B5B5", 43 | "s c #C2C2C2", 44 | "d c #292929", 45 | "f c #383838", 46 | "g c #CCCCCC", 47 | "h c #A1A1A1", 48 | "j c #707070", 49 | "k c #1F1F1F", 50 | "l c #1A1A1A", 51 | "z c #DEDEDE", 52 | "x c #141414", 53 | "c c #3B3B3B", 54 | "v c #7D7D7D", 55 | "b c #999999", 56 | "n c #080808", 57 | "m c #55562F", 58 | "M c #D1D1D1", 59 | "N c #F2DE0D", 60 | "B c #FFFF00", 61 | "V c #545454", 62 | "C c #CDCD1D", 63 | "Z c #B8860B", 64 | "A c #C9C9C9", 65 | "S c #ABABAB", 66 | "D c #8A8A8A", 67 | "F c #595959", 68 | "G c #CFCFCF", 69 | "H c #5E5E5E", 70 | "J c #636363", 71 | "K c #2F4F4F", 72 | "L c #D11619", 73 | "P c #8E2323", 74 | "I c #2F2F64", 75 | "U c #FF6347", 76 | "Y c #91D2DE", 77 | "T c #9BEFF2", 78 | "R c #6A6A8D", 79 | "E c #6B3939", 80 | "W c #FF0000", 81 | "Q c #5F929E", 82 | "! c #F5280A", 83 | "~ c #A22E61", 84 | "^ c #DB7093", 85 | "/ c #B3B3B3", 86 | "( c #A52A2A", 87 | ") c #DA322D", 88 | "_ c #384B66", 89 | "` c #A6B8C7", 90 | "' c #529584", 91 | "] c #9E9E9E", 92 | "[ c #FF7256", 93 | "{ c #708090", 94 | " . X ", 95 | " o O + @ . ", 96 | " # $ % & * = ", 97 | " - ; = : > > , < - ", 98 | " 1 2 + 3 4 > > > > 5 6 ", 99 | " o 7 + 8 9 > > > 0 q > w e r ", 100 | " t y u > > > 9 8 i p > > a + o ", 101 | " 2 p > 4 3 + 2 t @ s > > o d ", 102 | " 1 @ 5 = ; - O f > > g @ . ", 103 | " O < # o $ h > > j k ", 104 | " o o X l 4 > z x c ", 105 | " . # r t ; v > > b x o ", 106 | " r n m m + ; 1 t @ M > > r 7 ", 107 | " r $ N B B B m l o e V > > 0 + 1 ", 108 | " o @ C B B B B B l X o 2 n 9 > > V e ", 109 | " f 2 B B B B B B Z 2 # < . A > > > S i t ", 110 | " # m B B B B B B Z = - l 2 u > > > & V + O 1 ", 111 | " % + B B B B B B m r d + D w > > & F + r 1 ", 112 | " k m B B B B Z @ o c x z > G H + X 1 ", 113 | " 1 6 ; Z Z m + - k J J $ t 1 o o ", 114 | " X 2 = 7 o . n . o c K H p K K ", 115 | " L P o K I F h U Y T T R K ", 116 | " f r I E W W E K Q T Y ! W ~ Q T T K ", 117 | " f Q T T T ^ W W / T b W W L - Q T J o ", 118 | " K Q T T R J * ( W W 8 ! W L f Q T H o ", 119 | " K T T V 1 - Q U W W W ) I f O R T T K ", 120 | " _ T T d c Q T W W W ` K ' T T T _ % ", 121 | " K T T 8 o V U W W W ! J T T R K % ", 122 | " K Q T T ' H K ( W W ] ) W L f % ", 123 | " f ' T T T [ W W Y T { L W L ", 124 | " c 7 I E W W E # k d W W P ", 125 | " ( E ( " 126 | }; 127 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_detach.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 64 2", 4 | " c #4D4D4D", 5 | ". c #454545", 6 | "X c #363636", 7 | "o c #4A4A4A", 8 | "O c #2B2B2B", 9 | "+ c #0A0A0A", 10 | "@ c #080808", 11 | "# c #333333", 12 | "$ c #0F0F0F", 13 | "% c #00562D", 14 | "& c #91D2A0", 15 | "* c #5C5C5C", 16 | "= c #212121", 17 | "- c #3D3D3D", 18 | "; c #1A1A1A", 19 | ": c #1F1F1F", 20 | "> c #8FBC8F", 21 | ", c #9BEEB4", 22 | "< c #474747", 23 | "1 c #242424", 24 | "2 c #0D0D0D", 25 | "3 c #509F69", 26 | "4 c #141414", 27 | "5 c #2E2E2E", 28 | "6 c #525252", 29 | "7 c #303030", 30 | "8 c #404040", 31 | "9 c #000001", 32 | "0 c #030303", 33 | "q c #575757", 34 | "w c #292929", 35 | "e c #636363", 36 | "r c #171717", 37 | "t c #121212", 38 | "y c #3B3B3B", 39 | "u c #424242", 40 | "i c #55562F", 41 | "p c #1C1C1C", 42 | "a c #B8860B", 43 | "s c #262626", 44 | "d c #F2DE0D", 45 | "f c #FFFF00", 46 | "g c #4F4F4F", 47 | "h c #545454", 48 | "j c #2F4F4F", 49 | "k c #5E5E5E", 50 | "l c #616161", 51 | "z c #050505", 52 | "x c #2F2F64", 53 | "c c #595959", 54 | "v c #91D2DE", 55 | "b c #9BEFF2", 56 | "n c #6A6A8D", 57 | "m c #5F929E", 58 | "M c #87CEFA", 59 | "N c #529584", 60 | "B c #6B6B6B", 61 | "V c #7E88AB", 62 | "C c #383838", 63 | "Z c #384B66", 64 | "A c #696969", 65 | "S c #72D5CD", 66 | "D c #666666", 67 | "F c #7C98D3", 68 | " . X ", 69 | " o O + @ . ", 70 | " # $ % & * = ", 71 | " - ; : > , , , $ - ", 72 | " < 1 2 3 , , , , , 3 4 ", 73 | " o 5 + 6 , , , , & , , , = 7 ", 74 | " 8 9 & , , , , 6 0 q , , & 2 o ", 75 | " 1 q , , 3 2 1 8 + & , , % w ", 76 | " < + 3 : ; - O # , , & + . ", 77 | " O $ # o $ 3 , , e : ", 78 | " o < . o o o X r , , , t y ", 79 | " o u - i i i i o p 3 , , 3 t o ", 80 | " u w # i i i i i i o 8 + , , , O 5 ", 81 | " - : = i a a i i i i i s o , , & 2 < ", 82 | " o 7 + i a a 2 i a i i i i o 1 @ , , , o s ", 83 | " w s d f f f d 2 a a i i i o # $ % & , , , > 0 8 ", 84 | " o @ d f f f f f a i a i i i - r : & , , , & o 2 O < ", 85 | " - r f f f f f f a 1 a i i . w 2 3 , , , & g + 5 < ", 86 | " . 2 f f f f f f a O i i . y t , , , h + # < ", 87 | " 4 a f f f f f = 5 # o : q q $ % < o o ", 88 | " y + a f f d i 4 - . @ % o y j k l j j ", 89 | " - r @ t z 1 o o j x c v b b b b n j ", 90 | " < 8 o j j m b b M N k m b b j ", 91 | " . j j c c c c c j j u j B b b V j y u - m b e o ", 92 | " C n b b b b b b b b b n C o j b b j y o C m b k o ", 93 | " - B b b m Z Z Z Z Z m b v * < . A V c < C O n b b j ", 94 | " w b b n - u h u . o - X N b b b Z u ", 95 | " O b b j o o j o * B c m b b b n j u ", 96 | " w S b v Z C X X X x Z V D - o 6 v b b b F Z C u ", 97 | " o 7 m b b b b b b b b b m j o j j k q j X o ", 98 | " Z A n n n n n D Z 6 o ", 99 | " " 100 | }; 101 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_fixsnap.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 80 2", 4 | " c #4D4D4D", 5 | ". c #4A4A4A", 6 | "X c #474747", 7 | "o c #424242", 8 | "O c #2E2E2E", 9 | "+ c #3D3D3D", 10 | "@ c #2B2B2B", 11 | "# c #2F4F4F", 12 | "$ c #2F2F64", 13 | "% c #3B3B3B", 14 | "& c #616161", 15 | "* c #383838", 16 | "= c #212121", 17 | "- c #525252", 18 | "; c #91D2DE", 19 | ": c #9BEFF2", 20 | "> c #5F929E", 21 | ", c #404040", 22 | "< c #6A6A8D", 23 | "1 c #7C98D3", 24 | "2 c #454545", 25 | "3 c #575757", 26 | "4 c #333333", 27 | "5 c #5C5C5C", 28 | "6 c #696969", 29 | "7 c #8C8C8C", 30 | "8 c #B0B0B0", 31 | "9 c #D4D4D4", 32 | "0 c #C4C4C4", 33 | "q c #384B66", 34 | "w c #737373", 35 | "e c #FFFFFF", 36 | "r c #F7F7F7", 37 | "t c #6B6B6B", 38 | "y c #F0F0F0", 39 | "u c #9C9C9C", 40 | "i c #303030", 41 | "p c #9E9E9E", 42 | "a c #FAFAFA", 43 | "s c #E8E8E8", 44 | "d c #DCDCDC", 45 | "f c #D6D6D6", 46 | "g c #595959", 47 | "h c #6E6E6E", 48 | "j c #292929", 49 | "k c #707070", 50 | "l c #E5E5E5", 51 | "z c #080808", 52 | "x c #55562F", 53 | "c c #1A1A1A", 54 | "v c #CDCD1D", 55 | "b c #FFFF00", 56 | "n c #B8860B", 57 | "m c #0A0A0A", 58 | "M c #00562D", 59 | "N c #050505", 60 | "B c #262626", 61 | "V c #F2DE0D", 62 | "C c #0D0D0D", 63 | "Z c #32D838", 64 | "A c #00FF40", 65 | "S c #121212", 66 | "D c #242424", 67 | "F c #00AF14", 68 | "G c #6B8E23", 69 | "H c #141414", 70 | "J c #1C1C1C", 71 | "K c #171717", 72 | "L c #D1D1D1", 73 | "P c #FCFCFC", 74 | "I c #363636", 75 | "U c #8F8F8F", 76 | "Y c #F5F5F5", 77 | "T c #C7C7C7", 78 | "R c #545454", 79 | "E c #EDEDED", 80 | "W c #1F1F1F", 81 | "Q c #636363", 82 | "! c #72D5CD", 83 | "~ c #666666", 84 | " ", 85 | " . X o O ", 86 | " + @ # $ % & * ", 87 | " = - ; : > > ; % ", 88 | " , < : : : : 1 % ", 89 | " 2 * 3 : : : : > o ", 90 | " 4 = ; : : : : : 5 . 6 7 8 9 0 ", 91 | " o % q 1 : : : q w e e e r & ", 92 | " . % # > : # t y e e u ", 93 | " # $ i p a y s d ", 94 | " 3 f e 0 g 6 h ", 95 | " X i j O o k l 7 ", 96 | " . O z x x x z c j O o ", 97 | " , j z v b b n m M M M N B ", 98 | " X O x x b b V C Z A A A Z S O ", 99 | " X x n D n b b x M A A A A A Z z . ", 100 | " 2 x x n B n b b M F A A A A A A C , ", 101 | " x x x n x x b b M F A A A A A A C , ", 102 | " . x x x n n S n b G M A A A A A Z z . ", 103 | " x x x x n n H D x z F A A A Z S O ", 104 | " 6 x x x x n n x = J C K M M N j ", 105 | " & L P & x x x x x 4 o . I j O 2 ", 106 | " U Y Y U . 2 x x x 2 4 $ , ", 107 | " 5 T e L & # : > # % . ", 108 | "R E a u q : : : 1 q % o ", 109 | " p 6 . & : : : : : ; W I ", 110 | " , > : : : : 5 * 2 ", 111 | " % 1 : : : : Q 2 ", 112 | " % ; > > ! ~ # 2 ", 113 | " I & % $ Q - ", 114 | " O o ", 115 | " " 116 | }; 117 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_select.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 80 2", 4 | " c #4D4D4D", 5 | ". c #4F4F4F", 6 | "X c #575757", 7 | "o c #5C5C5C", 8 | "O c #595959", 9 | "+ c #545454", 10 | "@ c #525252", 11 | "# c #616161", 12 | "$ c #666666", 13 | "% c #6E6E6E", 14 | "& c #707070", 15 | "* c #6B6B6B", 16 | "= c #696969", 17 | "- c #474747", 18 | "; c #2E2E2E", 19 | ": c #1F1F1F", 20 | "> c #737373", 21 | ", c #5E5E5E", 22 | "< c #303030", 23 | "1 c #0A0A0A", 24 | "2 c #384B66", 25 | "3 c #5F929E", 26 | "4 c #7C98D3", 27 | "5 c #333333", 28 | "6 c #262626", 29 | "7 c #636363", 30 | "8 c #454545", 31 | "9 c #171717", 32 | "0 c #212121", 33 | "q c #9BEFF2", 34 | "w c #2F4F4F", 35 | "e c #292929", 36 | "r c #000000", 37 | "t c #050505", 38 | "y c #080808", 39 | "u c #72D5CD", 40 | "i c #363636", 41 | "p c #91D2DE", 42 | "a c #0D0D0D", 43 | "s c #7A7A7A", 44 | "d c #121212", 45 | "f c #0F0F0F", 46 | "g c #757575", 47 | "h c #6A6A8D", 48 | "j c #4A4A4A", 49 | "k c #7E7E7E", 50 | "l c #141414", 51 | "z c #828282", 52 | "x c #242424", 53 | "c c #858585", 54 | "v c #000001", 55 | "b c #1A1A1A", 56 | "n c #787878", 57 | "m c #B5B5B5", 58 | "M c #404040", 59 | "N c #E5E5E5", 60 | "B c #D4D4D4", 61 | "V c #E8E8E8", 62 | "C c #FFFFFF", 63 | "Z c #CCCCCC", 64 | "A c #3B3B3B", 65 | "S c #C2C2C2", 66 | "D c #3D3D3D", 67 | "F c #B3B3B3", 68 | "G c #A1A1A1", 69 | "H c #424242", 70 | "J c #919191", 71 | "K c #7D7D7D", 72 | "L c #FAFAFA", 73 | "P c #D6D6D6", 74 | "I c #B0B0B0", 75 | "U c #F7F7F7", 76 | "Y c #1C1C1C", 77 | "T c #2B2B2B", 78 | "R c #030303", 79 | "E c #FCFCFC", 80 | "W c #C9C9C9", 81 | "Q c #E3E3E3", 82 | "! c #D9D9D9", 83 | "~ c #999999", 84 | " ", 85 | " . . ", 86 | " . X o o o O + ", 87 | " @ O # $ % & & * # X . ", 88 | " + o # = = - ; : ; . > $ O ", 89 | " @ X O O O o O O O o , $ * X < 1 2 3 4 3 5 6 % 7 + ", 90 | " @ O # $ * % % & & % % & % 8 9 0 3 q q q q q q 2 w % , . ", 91 | " @ , = > # e 1 r r r r r t y w 4 q q u 7 i w 3 q p a & $ + ", 92 | " . o = s X d 3 p q q q q w w p q q 3 6 f i . + 9 3 q w X = X ", 93 | " + 7 g > d p q q q q q h w q q 3 d 5 y j + , & 6 3 q # j % O ", 94 | " X = k w 3 q q O l r r y u q 3 d 4 q = 6 @ i 9 q q w @ * O ", 95 | " O % z l p q w e + + - f q q d 9 6 q p y x y w p q p a > $ X ", 96 | " O % c r q q y $ o - 1 q q y < y q q v 2 p q q u 9 + > # @ ", 97 | " O % z 9 p q 2 6 + X + d 4 q 3 9 5 q u b q q 4 w a X n $ O ", 98 | " X = k w h q q $ b v r r r y e 3 6 h # o 3 e 9 s g = o . ", 99 | " @ 7 g n f 4 q q q q q q q q q q 6 a 1 f x O k n % 7 O @ ", 100 | " o = s , a $ p q q q q q q q u 9 m 9 M n & = 7 o + ", 101 | " + , = g % 5 f r r r r r r r v 1 N B l 8 , O + ", 102 | " + o 7 = % & > > > & % * = $ a V C Z a A ", 103 | " . + X o o , , o o O X X + a V C C S 1 D ", 104 | " . . a V C C C F a D ", 105 | " a V C C C C G d H ", 106 | " a V C C C C C J d 8 ", 107 | " a V C C C C C C K l - ", 108 | " a V C C C C L P I 0 9 j ", 109 | " a V C U C C Y f 0 x T 8 ", 110 | " R E W x S C z x ", 111 | " r s a : j C Q 1 j ", 112 | " r : 8 j f ! C D 5 ", 113 | " ; 5 , ~ : Y ", 114 | " 8 y x i j ", 115 | " j " 116 | }; 117 | -------------------------------------------------------------------------------- /environment/PYTHONPATH/zv/parentmaster/pm_timeline.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char * image_name[]={ 3 | "32 32 55 2", 4 | " c #4D4D4D", 5 | ". c #474747", 6 | "X c #1F1F1F", 7 | "o c #030303", 8 | "O c #000000", 9 | "+ c #4A4A4A", 10 | "@ c #1A1A1A", 11 | "# c #55562F", 12 | "$ c #F2DE0D", 13 | "% c #FFFF00", 14 | "& c #FFFFFF", 15 | "* c #00FF40", 16 | "= c #32D838", 17 | "- c #00562D", 18 | "; c #000001", 19 | ": c #6B3939", 20 | "> c #292929", 21 | ", c #404040", 22 | "< c #3D3D3D", 23 | "1 c #EBEBEB", 24 | "2 c #333333", 25 | "3 c #737373", 26 | "4 c #B5B5B5", 27 | "5 c #2B2B2B", 28 | "6 c #ADADAD", 29 | "7 c #EDEDED", 30 | "8 c #454545", 31 | "9 c #9C9C9C", 32 | "0 c #858585", 33 | "q c #7F7F7F", 34 | "w c #696969", 35 | "e c #242424", 36 | "r c #424242", 37 | "t c #3B3B3B", 38 | "y c #2F4F4F", 39 | "u c #5E5E5E", 40 | "i c #2F2F64", 41 | "p c #595959", 42 | "a c #91D2DE", 43 | "s c #9BEFF2", 44 | "d c #6A6A8D", 45 | "f c #383838", 46 | "g c #303030", 47 | "h c #363636", 48 | "j c #5F929E", 49 | "k c #87CEFA", 50 | "l c #529584", 51 | "z c #7C98D3", 52 | "x c #636363", 53 | "c c #666666", 54 | "v c #545454", 55 | "b c #384B66", 56 | "n c #5C5C5C", 57 | "m c #72D5CD", 58 | "M c #2E2E2E", 59 | " ", 60 | " ", 61 | " ", 62 | " ", 63 | " ", 64 | " . X o O O O O O O O O O O O O O O O O O O O O O O o X + ", 65 | " @ # $ % % % % % O & O * * * * * * * * * * * * * * = - X ", 66 | " ; $ % % % % % % O & O * * * * * * * * * * * * * * * = o ", 67 | " O % % % % % % % O & O * * * * * * * * * * * * * * * * O ", 68 | " O % % % % % % % O & O * * * * * * * * * * * * * * * * O ", 69 | " o $ % % % % % % O & O * * * * * * * * * * * * * * * = o ", 70 | " X : $ % % % % % O & O * * * * * * * * * * * * * * = - X ", 71 | " + X o O O O O O O O O O O O O O O O O O O O O O O o X + ", 72 | " . > , ", 73 | " & & < 1 2 + & & & & ", 74 | " & & . 3 & 4 5 & & & & ", 75 | " 6 6 < 7 & & 8 , 6 6 6 6 ", 76 | " . 8 9 0 q w e ", 77 | " 8 < r + ", 78 | " + + ", 79 | " + t y u u y y ", 80 | " y i p a s s s s d y ", 81 | " f g i y y y h y j s s k l u j s s y ", 82 | " f j s s s s j l s s z y t r < j s x + ", 83 | " y j s s d x c y s s u j j 8 f j s u + ", 84 | " y s s v . < j s x y j s i f 5 d s s y ", 85 | " b s s > t j s b + y s y l s s s b r ", 86 | " y s s n + b s a b j s x s s d y r ", 87 | " y j s s l u y y b n m s j j b f r ", 88 | " f l s s s s s s s s j M h + ", 89 | " t M i f 2 i i 2 X > ", 90 | " " 91 | }; 92 | -------------------------------------------------------------------------------- /tapp/__init__.py: -------------------------------------------------------------------------------- 1 | from .utils.lib import setup 2 | from .app import show 3 | -------------------------------------------------------------------------------- /tapp/app.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import contextlib 3 | 4 | from Qt import QtWidgets 5 | 6 | import tapp.maya.dialog 7 | 8 | 9 | @contextlib.contextmanager 10 | def application(): 11 | 12 | app = QtWidgets.QApplication.instance() 13 | 14 | if not app: 15 | print("Starting new QApplication..") 16 | app = QtWidgets.QApplication(sys.argv) 17 | yield app 18 | app.exec_() 19 | else: 20 | print("Using existing QApplication..") 21 | yield app 22 | 23 | 24 | def show(parent=None): 25 | 26 | import utils.docked_widget 27 | 28 | with application(): 29 | 30 | dock = utils.docked_widget.get_docked_widget() 31 | win = tapp.maya.dialog.Dialog() 32 | 33 | if dock: 34 | dock.layout().addWidget(win) 35 | else: 36 | win.show() 37 | return win 38 | 39 | 40 | if __name__ == "__main__": 41 | 42 | show() 43 | -------------------------------------------------------------------------------- /tapp/maya/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/playblastQueue/__init__.py: -------------------------------------------------------------------------------- 1 | from dialog import * 2 | -------------------------------------------------------------------------------- /tapp/maya/animation/playblastQueue/dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 536 10 | 530 11 | 12 | 13 | 14 | Playblast Queue 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Folder 23 | 24 | 25 | 26 | 27 | File 28 | 29 | 30 | 31 | 32 | Camera 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Resolution: 43 | 44 | 45 | 46 | 47 | 48 | 49 | 1 50 | 51 | 52 | 999999 53 | 54 | 55 | 1920 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 8 64 | 16777215 65 | 66 | 67 | 68 | x 69 | 70 | 71 | 72 | 73 | 74 | 75 | 1 76 | 77 | 78 | 999999 79 | 80 | 81 | 1080 82 | 83 | 84 | 85 | 86 | 87 | 88 | Add 89 | 90 | 91 | 92 | 93 | 94 | 95 | Remove 96 | 97 | 98 | 99 | 100 | 101 | 102 | Export 103 | 104 | 105 | 106 | 107 | 108 | 109 | Import 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | <html><head/><body><p>If output folder is not specified, the playblasts will be saved in the same folder as each Maya file.</p></body></html> 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | Output folder: 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | Playblast Queue 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /tapp/maya/animation/resetAttributes/__init__.py: -------------------------------------------------------------------------------- 1 | import dialog 2 | -------------------------------------------------------------------------------- /tapp/maya/animation/resetAttributes/dialog.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from Qt import QtWidgets, QtCompat 4 | 5 | import maya.cmds as cmds 6 | 7 | 8 | class Dialog(QtWidgets.QDialog): 9 | 10 | def __init__(self): 11 | super(Dialog, self).__init__() 12 | 13 | layout = QtWidgets.QVBoxLayout(self) 14 | layout.setContentsMargins(0, 10, 0, 0) 15 | 16 | fname = os.path.splitext(__file__)[0] + ".ui" 17 | self.ui = QtCompat.load_ui(fname=fname) 18 | layout.addWidget(self.ui) 19 | 20 | self.create_connections() 21 | 22 | def create_connections(self): 23 | 24 | self.ui.pushButton.released.connect(self.pushButton_released) 25 | 26 | def pushButton_released(self): 27 | 28 | translation = self.ui.translation_checkBox.isChecked() 29 | rotation = self.ui.rotation_checkBox.isChecked() 30 | scale = self.ui.scale_checkBox.isChecked() 31 | userAttrs = self.ui.extraAttributes_checkBox.isChecked() 32 | 33 | self.resetSelection(translation, rotation, scale, userAttrs) 34 | 35 | def resetAttribute(self, node, attr): 36 | 37 | # Reset attributes to default if keyable 38 | if cmds.attributeQuery(attr, node=node, keyable=True): 39 | values = cmds.attributeQuery(attr, node=node, listDefault=True) 40 | 41 | try: 42 | cmds.setAttr(node + '.' + attr, *values) 43 | except: 44 | pass 45 | 46 | def resetAttributes(self, node, translation=True, rotation=True, 47 | scale=True, userAttrs=True): 48 | 49 | if translation: 50 | self.resetAttribute(node, 'tx') 51 | self.resetAttribute(node, 'ty') 52 | self.resetAttribute(node, 'tz') 53 | 54 | if rotation: 55 | self.resetAttribute(node, 'rx') 56 | self.resetAttribute(node, 'ry') 57 | self.resetAttribute(node, 'rz') 58 | 59 | if scale: 60 | self.resetAttribute(node, 'sx') 61 | self.resetAttribute(node, 'sy') 62 | self.resetAttribute(node, 'sz') 63 | 64 | if userAttrs: 65 | if cmds.listAttr(node, userDefined=True): 66 | for attr in cmds.listAttr(node, userDefined=True): 67 | self.resetAttribute(node, attr) 68 | 69 | def resetSelection(self, translation=True, rotation=True, 70 | scale=True, userAttrs=True): 71 | 72 | # Undo enable 73 | cmds.undoInfo(openChunk=True) 74 | 75 | # Getting selection 76 | sel = cmds.ls(sl=True) 77 | 78 | # Zero nodes 79 | if len(sel) >= 1: 80 | for node in cmds.ls(sl=True): 81 | self.resetAttributes( 82 | node, translation, rotation, scale, userAttrs 83 | ) 84 | 85 | # Revert selection 86 | cmds.select(sel) 87 | else: 88 | cmds.warning('No nodes select!') 89 | 90 | cmds.undoInfo(closeChunk=True) 91 | -------------------------------------------------------------------------------- /tapp/maya/animation/resetAttributes/dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 236 10 | 131 11 | 12 | 13 | 14 | Reset Attributes 15 | 16 | 17 | 1.000000000000000 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 30 | 31 | 32 | Qt::Horizontal 33 | 34 | 35 | 36 | 37 | 38 | 39 | Reset Attributes 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 0 48 | 0 49 | 50 | 51 | 52 | Qt::Horizontal 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | Reset Selection 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | Translation 71 | 72 | 73 | true 74 | 75 | 76 | 77 | 78 | 79 | 80 | Rotation 81 | 82 | 83 | true 84 | 85 | 86 | 87 | 88 | 89 | 90 | Scale 91 | 92 | 93 | true 94 | 95 | 96 | 97 | 98 | 99 | 100 | Extra Attributes 101 | 102 | 103 | true 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /tapp/maya/animation/setsSelector/__init__.py: -------------------------------------------------------------------------------- 1 | import dialog 2 | -------------------------------------------------------------------------------- /tapp/maya/animation/setsSelector/dialog.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from Qt import QtWidgets, QtCompat 4 | 5 | import maya.cmds as cmds 6 | 7 | 8 | class Dialog(QtWidgets.QDialog): 9 | 10 | def __init__(self): 11 | super(Dialog, self).__init__() 12 | 13 | layout = QtWidgets.QVBoxLayout(self) 14 | layout.setContentsMargins(0, 10, 0, 0) 15 | fname = os.path.splitext(__file__)[0] + ".ui" 16 | self.ui = QtCompat.load_ui(fname=fname) 17 | layout.addWidget(self.ui) 18 | 19 | self.refresh() 20 | 21 | self.create_connections() 22 | 23 | def refresh(self): 24 | 25 | self.ui.listWidget.clear() 26 | 27 | # Populate list 28 | if self.getSets(): 29 | self.ui.listWidget.addItems(self.getSets()) 30 | 31 | def create_connections(self): 32 | 33 | self.ui.listWidget.itemSelectionChanged.connect( 34 | self.on_listWidget_itemSelectionChanged 35 | ) 36 | self.ui.pushButton.released.connect(self.on_pushButton_released) 37 | 38 | def on_pushButton_released(self): 39 | 40 | self.refresh() 41 | 42 | def on_listWidget_itemSelectionChanged(self): 43 | 44 | members = [] 45 | # Getting members of sets 46 | if self.ui.listWidget.selectedItems(): 47 | 48 | for item in self.ui.listWidget.selectedItems(): 49 | 50 | members.extend( 51 | cmds.listConnections(item.text() + ".dagSetMembers") 52 | ) 53 | 54 | if members: 55 | cmds.select(members, toggle=self.ui.checkBox.isChecked()) 56 | else: 57 | cmds.select(cl=True) 58 | 59 | def getSets(self): 60 | 61 | objectSets = [] 62 | for node in cmds.ls(transforms=True): 63 | 64 | sets = cmds.listSets(object=node) 65 | if sets: 66 | objectSets.extend(sets) 67 | 68 | return list(set(objectSets)) 69 | -------------------------------------------------------------------------------- /tapp/maya/animation/setsSelector/dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 316 10 | 254 11 | 12 | 13 | 14 | Sets Selector 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 0 25 | 0 26 | 27 | 28 | 29 | Qt::Horizontal 30 | 31 | 32 | 33 | 34 | 35 | 36 | Sets Selector 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 0 45 | 0 46 | 47 | 48 | 49 | Qt::Horizontal 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Toggle Selection 59 | 60 | 61 | true 62 | 63 | 64 | 65 | 66 | 67 | 68 | QAbstractItemView::ExtendedSelection 69 | 70 | 71 | 72 | 73 | 74 | 75 | Refresh 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /tapp/maya/animation/timing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/timing/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/timing/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/timing/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/timing/resources/dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'C:\Users\tokejepsen\Documents\GitHub\Tapp\Tapp\Maya\animation\utils\timing\resources\timing.ui' 4 | # 5 | # Created: Sat Oct 05 18:06:33 2013 6 | # by: pyside-uic 0.2.14 running on PySide 1.1.1 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(513, 115) 16 | MainWindow.setMaximumSize(QtCore.QSize(16777215, 115)) 17 | self.centralwidget = QtGui.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.horizontalLayout_5 = QtGui.QHBoxLayout(self.centralwidget) 20 | self.horizontalLayout_5.setObjectName("horizontalLayout_5") 21 | self.verticalLayout = QtGui.QVBoxLayout() 22 | self.verticalLayout.setObjectName("verticalLayout") 23 | self.horizontalLayout_3 = QtGui.QHBoxLayout() 24 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 25 | self.bake_checkBox = QtGui.QCheckBox(self.centralwidget) 26 | self.bake_checkBox.setObjectName("bake_checkBox") 27 | self.horizontalLayout_3.addWidget(self.bake_checkBox) 28 | self.forwardOnly_checkBox = QtGui.QCheckBox(self.centralwidget) 29 | self.forwardOnly_checkBox.setObjectName("forwardOnly_checkBox") 30 | self.horizontalLayout_3.addWidget(self.forwardOnly_checkBox) 31 | self.verticalLayout.addLayout(self.horizontalLayout_3) 32 | self.horizontalLayout = QtGui.QHBoxLayout() 33 | self.horizontalLayout.setObjectName("horizontalLayout") 34 | self.label = QtGui.QLabel(self.centralwidget) 35 | self.label.setObjectName("label") 36 | self.horizontalLayout.addWidget(self.label) 37 | self.accurracy_doubleSpinBox = QtGui.QDoubleSpinBox(self.centralwidget) 38 | self.accurracy_doubleSpinBox.setObjectName("accurracy_doubleSpinBox") 39 | self.horizontalLayout.addWidget(self.accurracy_doubleSpinBox) 40 | self.verticalLayout.addLayout(self.horizontalLayout) 41 | self.horizontalLayout_2 = QtGui.QHBoxLayout() 42 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 43 | self.storeAnimation_pushButton = QtGui.QPushButton(self.centralwidget) 44 | self.storeAnimation_pushButton.setMinimumSize(QtCore.QSize(100, 40)) 45 | self.storeAnimation_pushButton.setObjectName("storeAnimation_pushButton") 46 | self.horizontalLayout_2.addWidget(self.storeAnimation_pushButton) 47 | self.restoreAnimation_pushButton = QtGui.QPushButton(self.centralwidget) 48 | self.restoreAnimation_pushButton.setMinimumSize(QtCore.QSize(100, 40)) 49 | self.restoreAnimation_pushButton.setObjectName("restoreAnimation_pushButton") 50 | self.horizontalLayout_2.addWidget(self.restoreAnimation_pushButton) 51 | self.verticalLayout.addLayout(self.horizontalLayout_2) 52 | self.horizontalLayout_5.addLayout(self.verticalLayout) 53 | self.horizontalSlider = QtGui.QSlider(self.centralwidget) 54 | self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) 55 | self.horizontalSlider.setObjectName("horizontalSlider") 56 | self.horizontalLayout_5.addWidget(self.horizontalSlider) 57 | MainWindow.setCentralWidget(self.centralwidget) 58 | 59 | self.retranslateUi(MainWindow) 60 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 61 | 62 | def retranslateUi(self, MainWindow): 63 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Timing Tool", None, QtGui.QApplication.UnicodeUTF8)) 64 | self.bake_checkBox.setText(QtGui.QApplication.translate("MainWindow", "Bake", None, QtGui.QApplication.UnicodeUTF8)) 65 | self.forwardOnly_checkBox.setText(QtGui.QApplication.translate("MainWindow", "Forward-only", None, QtGui.QApplication.UnicodeUTF8)) 66 | self.label.setText(QtGui.QApplication.translate("MainWindow", "Accuracy:", None, QtGui.QApplication.UnicodeUTF8)) 67 | self.storeAnimation_pushButton.setText(QtGui.QApplication.translate("MainWindow", "Store Animation", None, QtGui.QApplication.UnicodeUTF8)) 68 | self.restoreAnimation_pushButton.setText(QtGui.QApplication.translate("MainWindow", "Restore Animation", None, QtGui.QApplication.UnicodeUTF8)) 69 | 70 | -------------------------------------------------------------------------------- /tapp/maya/animation/timing/resources/dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 513 10 | 115 11 | 12 | 13 | 14 | 15 | 16777215 16 | 115 17 | 18 | 19 | 20 | Timing Tool 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Bake 32 | 33 | 34 | 35 | 36 | 37 | 38 | Forward-only 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Accuracy: 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 100 65 | 40 66 | 67 | 68 | 69 | Store Animation 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 100 78 | 40 79 | 80 | 81 | 82 | Restore Animation 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | Qt::Horizontal 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /tapp/maya/animation/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/utils/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/utils/deleteRedundantKeys.mel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/utils/deleteRedundantKeys.mel -------------------------------------------------------------------------------- /tapp/maya/animation/utils/face/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/utils/face/__init__.py -------------------------------------------------------------------------------- /tapp/maya/animation/utils/face/gui.py: -------------------------------------------------------------------------------- 1 | from PyQt4 import QtCore, QtGui 2 | 3 | import maya.cmds as cmds 4 | import maya.OpenMayaUI as omu 5 | import sip 6 | 7 | from bbt_maya.bat.face import utils 8 | from bbt_maya import generic 9 | 10 | # MQtUtil class exists in Maya 2011 and up 11 | def maya_main_window(): 12 | ptr = omu.MQtUtil.mainWindow() 13 | return sip.wrapinstance(long(ptr), QtCore.QObject) 14 | 15 | class faceDialog(QtGui.QDialog): 16 | 17 | def __init__(self,camera,name,parent=maya_main_window()): 18 | QtGui.QDialog.__init__(self, parent) 19 | 20 | self.setObjectName('faceDialog') 21 | self.setWindowTitle(name+' Face Controls') 22 | self.resize(QtCore.QSize(500,500)) 23 | 24 | self.verticalLayout = QtGui.QVBoxLayout(self) 25 | # need to set a name so it can be referenced by maya node path 26 | self.verticalLayout.setObjectName('mainLayout') 27 | # First use SIP to unwrap the layout into a pointer 28 | # Then get the full path to the UI in maya as a string 29 | layout = omu.MQtUtil.fullName(long(sip.unwrapinstance(self.verticalLayout))) 30 | cmds.setParent(layout) 31 | 32 | nodeName = cmds.modelEditor(camera=camera) 33 | # Find a pointer to the modelPanel that we just created 34 | ptr = omu.MQtUtil.findControl(nodeName) 35 | # Wrap the pointer into a python QObject 36 | self.modelPanel = sip.wrapinstance(long(ptr), QtCore.QObject) 37 | 38 | # add our QObject reference to the modelPanel to our layout 39 | self.verticalLayout.addWidget(self.modelPanel) 40 | 41 | def show(): 42 | 43 | camera=utils.getFaceCam() 44 | 45 | if camera!=None: 46 | meta=generic.Meta() 47 | rootData=meta.getData(meta.upStream(camera, 'root')) 48 | 49 | win=faceDialog(camera,rootData['name']) 50 | win.show() -------------------------------------------------------------------------------- /tapp/maya/animation/utils/face/utils.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | from bbt_maya import generic 4 | 5 | def getFaceCam(): 6 | 7 | meta=generic.Meta() 8 | 9 | sel=cmds.ls(selection=True) 10 | 11 | faceCam='' 12 | 13 | if len(sel)<1: 14 | # warning if nothing is selected 15 | cmds.warning('Nothing is selected! Select a control first.') 16 | 17 | return 18 | else: 19 | node=sel[0] 20 | 21 | # warning if selection is not a control type 22 | if meta.getData(node)['type']!='control': 23 | cmds.warning('Selection is not a control! Select a control first.') 24 | 25 | return 26 | else: 27 | # getting root node 28 | root=meta.upStream(node,'root') 29 | 30 | # getting face camera from all cameras 31 | cameras=meta.downStream(root, 'camera',allNodes=True) 32 | for camera in cameras: 33 | if meta.getData(camera)['component']=='face': 34 | faceCam=cmds.listConnections('%s.message' % camera,type='transform')[0] 35 | 36 | return faceCam -------------------------------------------------------------------------------- /tapp/maya/animation/utils/imageplane.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | 4 | import maya.cmds as cmds 5 | 6 | def localizeImagePlane(): 7 | sel=cmds.ls(selection=True) 8 | 9 | if len(sel)==1: 10 | 11 | if cmds.nodeType(sel[0])=='imagePlane': 12 | 13 | ip=sel[0] 14 | 15 | f=cmds.getAttr(ip+'.imageName') 16 | 17 | user_profile = os.environ['USERPROFILE'] 18 | user_desktop = user_profile + "/Desktop" 19 | path=os.path.join(user_desktop,os.path.basename(f)) 20 | 21 | shutil.copy(f,path) 22 | 23 | cmds.setAttr(ip+'.imageName',path,type='string') 24 | 25 | else: 26 | cmds.warning('Selected node is not an image plane!') 27 | elif len(sel)==0: 28 | cmds.warning('Nothing is selected!') 29 | return 30 | else: 31 | cmds.warning('Multiple nodes selected. Please select one node only!') -------------------------------------------------------------------------------- /tapp/maya/animation/utils/zooChangeRoo.mel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/animation/utils/zooChangeRoo.mel -------------------------------------------------------------------------------- /tapp/maya/dialog.py: -------------------------------------------------------------------------------- 1 | from Qt import QtWidgets 2 | 3 | import animation.dialog as animation 4 | import Red9 5 | 6 | # Initialize Red9 7 | Red9.start() 8 | 9 | 10 | class Dialog(QtWidgets.QDialog): 11 | 12 | def __init__(self): 13 | super(Dialog, self).__init__() 14 | 15 | self.main_layout = QtWidgets.QVBoxLayout() 16 | self.main_layout.setContentsMargins(0, 10, 0, 0) 17 | self.setLayout(self.main_layout) 18 | 19 | self.main_tabs = QtWidgets.QTabWidget() 20 | self.main_layout.addWidget(self.main_tabs) 21 | 22 | self.main_tabs.addTab(animation.Dialog(), "Animation") 23 | -------------------------------------------------------------------------------- /tapp/maya/lighting/AddRimLight.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as mc 2 | 3 | def addRimRamp(): 4 | 5 | #get the selection 6 | currentSelection = mc.ls( selection=True ) 7 | 8 | #check if there's a texture node (file, ramp, checker etc., etc.) 9 | if (len(currentSelection) >0) and mc.objExists(currentSelection[0] + ".colorOffset"): 10 | 11 | #there is, so create a ramp and sampler info node 12 | ramp = mc.createNode( "ramp" ) 13 | samplerInfo = mc.shadingNode("samplerInfo", asUtility=True) 14 | 15 | #plug them in 16 | mc.connectAttr( ramp + ".outColor" , currentSelection[0] + ".colorOffset" ) 17 | mc.connectAttr( (samplerInfo + '.facingRatio'), (ramp + '.uCoord') ) 18 | mc.connectAttr( (samplerInfo + '.facingRatio'), (ramp + '.vCoord') ) 19 | 20 | #set some defaults 21 | mc.setAttr( ramp + ".colorEntryList[0].color", 1, 0.96, 0, type="double3") 22 | mc.setAttr( ramp + ".colorEntryList[1].color", 1, 0.22, 0, type="double3") 23 | mc.setAttr( ramp + ".colorEntryList[2].color", 0, 0, 0, type="double3") 24 | mc.setAttr( ramp + ".colorEntryList[1].position", 0.1) 25 | mc.setAttr( ramp + ".colorEntryList[2].position", 0.485) 26 | 27 | #there is no texture node, so add a ramp. 28 | elif (len(currentSelection) >0) and mc.objExists(currentSelection[0] + ".color"): 29 | 30 | #get current colour and make new ones based on it 31 | colour = mc.getAttr(currentSelection[0] + ".color") 32 | colour2 = [colour[0][0] + ((1-colour[0][0]) * 0.7),colour[0][1] + ((1-colour[0][1]) * 0.6),colour[0][2] + ((1-colour[0][2]) * 0.5)] 33 | colour3 = [colour2[0] + ((1-colour2[0]) * 0.6),colour2[1] + ((1-colour2[1]) * 0.6),colour2[2] + ((1-colour2[2]) * 0.6)] 34 | 35 | #create ramp and sampler info node 36 | ramp = mc.createNode( "ramp" ) 37 | samplerInfo = mc.shadingNode("samplerInfo", asUtility=True) 38 | 39 | #make the connections 40 | mc.connectAttr( ramp + ".outColor" , currentSelection[0] + ".color" ) 41 | mc.connectAttr( (samplerInfo + '.facingRatio'), (ramp + '.uCoord') ) 42 | mc.connectAttr( (samplerInfo + '.facingRatio'), (ramp + '.vCoord') ) 43 | 44 | #set ramp colours 45 | mc.setAttr( ramp + ".colorEntryList[0].color", colour3[0], colour3[1], colour3[2], type="double3") 46 | mc.setAttr( ramp + ".colorEntryList[1].color", colour2[0], colour2[1], colour2[2], type="double3") 47 | mc.setAttr( ramp + ".colorEntryList[2].color", colour[0][0], colour[0][1], colour[0][2], type="double3") 48 | mc.setAttr( ramp + ".colorEntryList[1].position", 0.1) 49 | mc.setAttr( ramp + ".colorEntryList[2].position", 0.485) 50 | else: 51 | mc.warning("Please select a Material or texutre node, i.e. a Vray Mtl, File, Ramp, Checker, Noise etc., node.") 52 | 53 | ''' 54 | Usage: 55 | Place the .py file in your scripts folder. 56 | Select a material or a texture node. 57 | In Mel: 58 | python "import AddRimLight"; python "AddRimLight.addRimRamp()"; 59 | In Python: 60 | import AddRimLight 61 | AddRimLight.addRimRamp() 62 | ''' -------------------------------------------------------------------------------- /tapp/maya/lighting/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/lighting/__init__.py -------------------------------------------------------------------------------- /tapp/maya/lighting/alembic/__init__.py: -------------------------------------------------------------------------------- 1 | from .utils import * 2 | -------------------------------------------------------------------------------- /tapp/maya/lighting/arnold.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | cmds.loadPlugin('mtoa.mll', quiet=True) 4 | 5 | import mtoa.core as core 6 | 7 | 8 | def Subdivision(iterations=2): 9 | 10 | #find shape nodes of current selection 11 | nodeList = cmds.ls(selection=True, dag=True, lf=True, type='mesh') 12 | 13 | for node in nodeList: 14 | 15 | cmds.setAttr(node + '.aiSubdivType', 1) 16 | cmds.setAttr(node + '.aiSubdivIterations', iterations) 17 | 18 | 19 | def MaskBuild(): 20 | 21 | sel = cmds.ls(selection=True) 22 | 23 | aiMaskSets = [] 24 | for node in sel: 25 | if cmds.nodeType(node) == 'objectSet': 26 | aiMaskSets.append(node) 27 | 28 | if not aiMaskSets: 29 | cmds.warning('No sets selected!') 30 | return 31 | 32 | core.createOptions() 33 | 34 | aiColor = cmds.shadingNode('aiUserDataColor', asShader=1) 35 | 36 | cmds.setAttr(aiColor + '.defaultValue', 1, 1, 1, typ='double3') 37 | 38 | for aiSet in xrange(0, len(aiMaskSets), 3): 39 | 40 | tSwitch = cmds.shadingNode('tripleShadingSwitch', au=1) 41 | cmds.setAttr(tSwitch + '.default', 0, 0, 0, typ='double3') 42 | 43 | aiUshader = cmds.shadingNode('aiUtility', asShader=1) 44 | cmds.setAttr(aiUshader + '.shadeMode', 2) 45 | cmds.connectAttr(tSwitch + '.output', aiUshader + '.color', f=1) 46 | 47 | for obj in cmds.listRelatives(cmds.sets(aiSet, q=1), pa=1): 48 | inpt = cmds.getAttr(tSwitch + '.input', s=1) 49 | if cmds.nodeType(obj) == 'mesh': 50 | cmds.connectAttr(obj + '.instObjGroups[0]', 51 | tSwitch + '.input[' + str(inpt) + '].inShape', f=1) 52 | cmds.connectAttr(aiColor + '.outColor', 53 | tSwitch + '.input[' + str(inpt) + '].inTriple', f=1) 54 | 55 | #AOV 56 | aovListSize = cmds.getAttr('defaultArnoldRenderOptions.aovList', s=1) 57 | 58 | customAOV = cmds.createNode('aiAOV', 59 | n='aiAOV_rgbMask', 60 | skipSelect=True) 61 | cmds.setAttr(customAOV + '.name', aiSet, 62 | type='string') 63 | cmds.connectAttr(customAOV + '.message', 64 | 'defaultArnoldRenderOptions.aovList[' + str(aovListSize) + ']', 65 | f=1) 66 | 67 | cmds.connectAttr('defaultArnoldDriver.message', 68 | customAOV + '.outputs[0].driver', f=1) 69 | cmds.connectAttr('defaultArnoldFilter.message', 70 | customAOV + '.outputs[0].filter', f=1) 71 | 72 | # connect to default shader 73 | cmds.connectAttr(aiUshader + '.outColor', 74 | customAOV + '.defaultValue', f=1) 75 | 76 | 77 | MaskBuild() 78 | 79 | def MaskFlush(): 80 | 81 | aovs = cmds.ls(type='aiAOV') 82 | nodes = [] 83 | for aov in aovs: 84 | if 'rgbMask' in aov: 85 | nodes.append(aov) 86 | ut = cmds.listConnections(aov, type='aiUtility') 87 | if ut: 88 | nodes.extend(ut) 89 | ts = cmds.listConnections(ut, type='tripleShadingSwitch') 90 | if ts: 91 | nodes.extend(ts) 92 | audc = cmds.listConnections(ts, type='aiUserDataColor') 93 | if audc: 94 | nodes.extend(audc) 95 | 96 | if nodes: 97 | cmds.delete(nodes) 98 | 99 | 100 | def Mask(): 101 | 102 | sel = cmds.ls(selection=True) 103 | 104 | if sel: 105 | cmds.sets(name='aiMask1') 106 | 107 | MaskFlush() 108 | MaskBuild() 109 | else: 110 | cmds.warning('No nodes selected!') 111 | -------------------------------------------------------------------------------- /tapp/maya/lighting/region/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/lighting/region/__init__.py -------------------------------------------------------------------------------- /tapp/maya/lighting/region/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/lighting/region/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/lighting/region/resources/region.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 392 10 | 259 11 | 12 | 13 | 14 | false 15 | 16 | 17 | Region Render 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 0 31 | 0 32 | 33 | 34 | 35 | Refresh 36 | 37 | 38 | 39 | 40 | 41 | 42 | Qt::Vertical 43 | 44 | 45 | 46 | 20 47 | 40 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Qt::Horizontal 56 | 57 | 58 | 59 | 60 | 61 | 62 | Qt::Vertical 63 | 64 | 65 | 66 | 20 67 | 40 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | Get Preview Region 76 | 77 | 78 | 79 | 80 | 81 | 82 | Get Object Region 83 | 84 | 85 | 86 | 87 | 88 | 89 | Qt::Vertical 90 | 91 | 92 | 93 | 20 94 | 40 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | Qt::Horizontal 103 | 104 | 105 | 106 | 107 | 108 | 109 | Qt::Vertical 110 | 111 | 112 | 113 | 20 114 | 40 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | Connect Preview 123 | 124 | 125 | 126 | 127 | 128 | 129 | Disconnect Preview 130 | 131 | 132 | 133 | 134 | 135 | 136 | Connect Arnold 137 | 138 | 139 | 140 | 141 | 142 | 143 | Disconnect Arnold 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /tapp/maya/lighting/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/lighting/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/modelling/RoadKill1_1.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/modelling/RoadKill1_1.exe -------------------------------------------------------------------------------- /tapp/maya/modelling/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/modelling/__init__.py -------------------------------------------------------------------------------- /tapp/maya/modelling/blendshapes.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | import maya.mel as mel 3 | 4 | 5 | def mirrorBlendshape(targets=[],original=''): 6 | 7 | #getting nodes 8 | sel = cmds.ls(selection=True) 9 | if len(sel) == 1: 10 | cmds.warning('Select all blendshapes first, then the original mesh last!') 11 | return 12 | if not targets: 13 | targets = sel[0:-1] 14 | if not original: 15 | original = sel[-1] 16 | 17 | #mirroring blendshape 18 | mirror = cmds.duplicate(original)[0] 19 | bldShp = cmds.blendShape(targets, mirror)[0] 20 | try: 21 | cmds.setAttr(mirror + '.sx', lock=False) 22 | except: 23 | pass 24 | cmds.setAttr(mirror + '.sx', -1) 25 | 26 | mirrorTrg = cmds.duplicate(original)[0] 27 | cmds.select(mirrorTrg, mirror) 28 | mel.eval('CreateWrap;') 29 | 30 | mirrorTrgs = [] 31 | for trg in targets: 32 | cmds.setAttr('%s.%s' % (bldShp, trg), 1) 33 | temp = cmds.duplicate(mirrorTrg)[0] 34 | temp = cmds.rename(temp, trg + '_mirror') 35 | mirrorTrgs.append(temp) 36 | cmds.setAttr('%s.%s' % (bldShp, trg), 0) 37 | 38 | cmds.delete(mirror) 39 | cmds.delete(mirrorTrg) 40 | 41 | return mirrorTrgs 42 | 43 | 44 | def symmetry(): 45 | 46 | #getting nodes 47 | sel = cmds.ls(selection=True) 48 | if len(sel) == 1: 49 | cmds.warning('Select the edited mesh first, then the original mesh last!') 50 | return 51 | if len(sel) > 2: 52 | cmds.warning('Select the edited mesh first, then the original mesh last!') 53 | return 54 | 55 | edit = sel[0] 56 | original = sel[1] 57 | 58 | #creating symmetry mesh 59 | mirror = mirrorBlendshape([edit], original)[0] 60 | copy = cmds.duplicate(original)[0] 61 | bldShp = cmds.blendShape(edit, mirror, copy)[0] 62 | cmds.setAttr('%s.%s' % (bldShp, edit), 1) 63 | cmds.setAttr('%s.%s' % (bldShp, mirror), 1) 64 | symmetry = cmds.duplicate(copy)[0] 65 | symmetry = cmds.rename(symmetry, edit + '_symmetry') 66 | 67 | cmds.delete(copy, mirror) 68 | 69 | return symmetry 70 | -------------------------------------------------------------------------------- /tapp/maya/modelling/detachSeparate.mel: -------------------------------------------------------------------------------- 1 | //detachSeparate.mel v1.1 2 | //Jeff Dobson 7/2/01 3 | //jeffdobs@swbell.net 4 | // 5 | //DESCRIPTION: This script will effectively detach and separate selected faces from a poly mesh. 6 | //Advantages of this script over Maya's built in detach/separate is that this script doesn't create 7 | //a third parent node. It also allows you to break off only the selected faces as opposed to exploding 8 | //every sub-mesh of an object. 9 | //SETUP: Create a shelf button or hotkey with the command detachSeparate; 10 | //ICON: detachSeparate.bmp 11 | //HISTORY: 7/20/01 - v1.1 -- Changed duplicate command to -un from -rr. Fixes bug that leaves an extra 12 | // shape node when script is run on an object with an extrude in its history. 13 | 14 | 15 | global proc detachSeparate() 16 | { 17 | string $nameSplitSkip[]; 18 | string $faceNum[]; 19 | string $temp[]; 20 | string $newObj[]; 21 | string $newFaceSel[]; 22 | 23 | string $origFaceSel[] = `filterExpand -ex 1 -sm 34`; 24 | string $origObjShape[] = `listRelatives -p $origFaceSel`; 25 | string $origObj[] = `listRelatives -p $origObjShape`; 26 | 27 | //Get my selected face numbers into $faceNum 28 | for ($step = 0, $skip = 0; $step < size($origFaceSel); $step++, $skip++) 29 | { 30 | tokenize $origFaceSel[$step] "." $temp; 31 | $nameSplitSkip[$skip] = $temp[0]; 32 | $skip++; 33 | $nameSplitSkip[$skip] = $temp[1]; 34 | clear $temp; 35 | } 36 | 37 | for ($step2 = 0, $skip2 = 1; $step2 < (size($nameSplitSkip)/2); $step2++, $skip2 = $skip2 + 2) 38 | { 39 | $faceNum[$step2] = $nameSplitSkip[$skip2]; //every other value 40 | } 41 | 42 | //Dupe original object 43 | $newObj = `duplicate -un $origObj[0]`; 44 | delete -ch $newObj[0]; 45 | string $newAllFaces[] = `ls ($newObj[0] + ".f[*]")`; 46 | 47 | //Make new array for face selection on $newObj 48 | for ($step3 = 0; $step3 < size($faceNum); $step3++) 49 | { 50 | $newFaceSel[$step3] = ($newObj[0] + "." + $faceNum[$step3]); 51 | } 52 | 53 | //Delete original face selection 54 | delete $origFaceSel; 55 | 56 | //Delete inverse face selection on duplicate 57 | select -r $newAllFaces; 58 | select -d $newFaceSel; 59 | delete; 60 | select -r $newObj[0]; 61 | } -------------------------------------------------------------------------------- /tapp/maya/modelling/kk_symmetry.mel: -------------------------------------------------------------------------------- 1 | /* This file downloaded from Highend3d.com 2 | '' 3 | '' Highend3d.com File Information: 4 | '' 5 | '' Script Name: kk_symmetry 6 | '' Author: 7 | '' Last Updated: Dec 19, 2008 8 | '' Update/Change this file at: 9 | '' http://Highend3d.com/maya/downloads/mel_scripts/modeling/poly_tools/5526.html 10 | '' 11 | '' Please do not alter any information above this line 12 | '' it is generated dynamically by Highend3d.com and will 13 | '' be changed automatically on any updates. 14 | */ 15 | ////////////////////////////// // // // kk_symmetry v1.2 // // // // karim kashefy (kk) // // karim_kashefy@yahoo.com // // // ////////////////////////////// global proc kk_symmetry() { if (`window -exists kk_symmetry`) deleteUI -window kk_symmetry; window -rtf 1 -title "kk_symmetry" kk_symmetry; columnLayout -adjustableColumn 1 mainco; separator -h 10; rowLayout -nc 2; radioCollection worldorobject; radioButton -label "Object Space" -select object; radioButton -label "World Space" world; setParent mainco; separator -h 10; rowLayout -nc 3; radioCollection planedirection; radioButton -label "YZ plane" -select x; radioButton -label "ZX plane" y; radioButton -label "XY plane" z; setParent mainco; separator -h 10; button -label "Symmetry" -h 30 -c symmetry; button -label "Finalise" -h 30 -c finalise; string $master_text = `textField -visible 0 -editable 0 -text "" tfm`; string $symmetry_text = `textField -editable 0 -text "" tfs`; progressBar -height 10 -maxValue 100 pgb; showWindow; } ///////////////////////////////////////////////////////////////////////////////// global proc symmetry () { progressBar -e -step 1 pgb; selectMode -component; selectMode -object; string $master[] = `ls -sl`; float $boundingBox[] = `xform -q -boundingBox $master`; progressBar -e -step 2 pgb; float $xmin = $boundingBox[0]; float $xmax = $boundingBox[3]; float $ymin = $boundingBox[1]; float $ymax = $boundingBox[4]; float $zmin = $boundingBox[2]; float $zmax = $boundingBox[5]; progressBar -e -step 3 pgb; float $xout = $xmin + $xmax; float $yout = $ymin + $ymax; float $zout = $zmin + $zmax; progressBar -e -step 4 pgb; textField -edit -text $master tfm; string $direction = `radioCollection -q -select planedirection`; makeIdentity -apply true -t 1 -r 1 -s 1 -n 0; progressBar -e -step 5 pgb; int $qx = `radioButton -q -select x`; int $qy = `radioButton -q -select y`; int $qz = `radioButton -q -select z`; int $world = `radioButton -q -select world`; progressBar -e -step 10 pgb; if ($world == 1) { xform -worldSpace -rotatePivot 0 0 0 -scalePivot 0 0 0; $kkpolycut = `polyCut -cuttingDirection $direction -deleteFaces 1`; rename $kkpolycut kk_symmetrypolycut; setAttr "kk_symmetrypolycut.cutPlaneCenterX" 0; setAttr "kk_symmetrypolycut.cutPlaneCenterY" 0; setAttr "kk_symmetrypolycut.cutPlaneCenterZ" 0; } else { xform -centerPivots; $kkpolycut = `polyCut -cuttingDirection $direction -deleteFaces 1`; rename $kkpolycut kk_symmetrypolycut; } progressBar -e -step 15 pgb; if ($qx == 1) { if ($xout < -.0 ) { setAttr "kk_symmetrypolycut.cutPlaneRotateX" 180; } } progressBar -e -step 20 pgb; if ($qy == 1) { if ($yout < -.0 ) { setAttr "kk_symmetrypolycut.cutPlaneRotateZ" 180; } } progressBar -e -step 25 pgb; if ($qz == 1) { if ($zout < -.0 ) { setAttr "kk_symmetrypolycut.cutPlaneRotateY" 180; } } progressBar -e -step 30 pgb; duplicate -instanceLeaf -name ($master[0]+" is symmetry"); progressBar -e -step 40 pgb; string $symmetry []= `ls -sl`; textField -edit -text $symmetry tfs; createDisplayLayer -noRecurse -name "symmetry_layer"; setAttr symmetry_layer.displayType 2; progressBar -e -step 45 pgb; if ($qx == 1) { scale -1 1 1; } if ($qy == 1) { scale 1 -1 1; } if ($qz == 1) { scale 1 1 -1; } progressBar -e -step 50 pgb; polyMergeVertex -d 0.0001; progressBar -e -step 70 pgb; select -cl; select $master; progressBar -e -step 80 pgb; delete -ch; selectMode -component; progressBar -e -step 100 pgb; progressBar -e -progress 0 pgb; } ///////////////////////////////////////////////////////////////////////// global proc finalise() { progressBar -e -step 10 pgb; selectMode -object; delete symmetry_layer; string $tfm = `textField -q -text tfm`; string $tfs = `textField -q -text tfs`; progressBar -e -step 20 pgb; polyUnite -name $tfm $tfm $tfs ; progressBar -e -step 60 pgb; polyMergeVertex -d 0.0001 ; progressBar -e -step 80 pgb; delete -ch; select -cl; progressBar -e -step 90 pgb; textField -edit -text "" tfm; textField -edit -text "" tfs; progressBar -e -step 100 pgb; delete $tfm; progressBar -e -progress 0 pgb; } kk_symmetry; -------------------------------------------------------------------------------- /tapp/maya/modelling/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/modelling/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/modelling/utils.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | import tapp.maya.rigging.utils as mru 4 | 5 | def MidPosition(posA,posB): 6 | ''' Calculates the middle position between posA and posB ''' 7 | 8 | posX=(posA[0]+posB[0])/2 9 | posY=(posA[1]+posB[1])/2 10 | posZ=(posA[2]+posB[2])/2 11 | 12 | midPos=[posX,posY,posZ] 13 | 14 | return midPos 15 | 16 | def triangulatePivot(posVerts,upvectorVert,locatorPivot=True,meshPivot=True): 17 | 18 | cmds.undoInfo(openChunk=True) 19 | 20 | posA=cmds.xform(posVerts[0],q=True,ws=True,translation=True) 21 | posB=cmds.xform(posVerts[1],q=True,ws=True,translation=True) 22 | posC=cmds.xform(upvectorVert,q=True,ws=True,translation=True) 23 | 24 | pivotPos=MidPosition(posA, posB) 25 | 26 | crs=mru.CrossProduct(posA, posB, posC) 27 | 28 | grp=cmds.group(empty=True) 29 | cmds.xform(grp,worldSpace=True,translation=posA) 30 | 31 | if locatorPivot: 32 | 33 | loc=cmds.spaceLocator() 34 | 35 | cmds.xform(loc,ws=True,translation=pivotPos) 36 | cmds.aimConstraint(grp,loc,worldUpType='vector',worldUpVector=crs) 37 | 38 | if meshPivot: 39 | 40 | posGrp=cmds.group(empty=True) 41 | 42 | cmds.xform(posGrp,ws=True,translation=pivotPos) 43 | cmds.aimConstraint(grp,posGrp,worldUpType='vector',worldUpVector=crs) 44 | 45 | pivotTranslate = cmds.xform (posGrp, q = True, ws = True, rotatePivot = True) 46 | 47 | shape=cmds.listRelatives(upvectorVert,parent=True) 48 | transform=cmds.listRelatives(shape,parent=True) 49 | parent=cmds.listRelatives(transform,parent=True) 50 | 51 | cmds.parent(transform, posGrp) 52 | cmds.makeIdentity(transform, a = True, t = True, r = True, s = True) 53 | cmds.xform (transform, ws = True, pivots = pivotTranslate) 54 | 55 | if parent!=None: 56 | cmds.parent(transform,parent) 57 | else: 58 | cmds.parent(transform,w=True) 59 | 60 | cmds.delete(posGrp) 61 | 62 | cmds.delete(grp) 63 | 64 | cmds.undoInfo(closeChunk=True) -------------------------------------------------------------------------------- /tapp/maya/rigging/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/__init__.py -------------------------------------------------------------------------------- /tapp/maya/rigging/bakeRadialBlendshape.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | _rbsAttrs = ('blend', 'twist', 'curvature') 4 | _unnamed = '' 5 | _nameSfx = ('_B', '_T', '_C') 6 | _rbsNodeName = 'radialBlendShape' 7 | 8 | def _getRBS(obj): 9 | rbsNodeList = [s for s in cmds.listHistory(obj, pdo=True, il=2) or [] if cmds.nodeType(s) == _rbsNodeName] 10 | return rbsNodeList and rbsNodeList[0] or None 11 | 12 | def _getTargetIndices(rbsNode): 13 | return cmds.getAttr('%s.%s' % (rbsNode, _rbsAttrs[0]), mi=True) or [] 14 | 15 | def _getTargetNames(rbsNode, idx=-1): 16 | if idx == -1: 17 | idxList = _getTargetIndices(rbsNode) 18 | return [_getTargetNames(rbsNode, i) for i in idxList] 19 | 20 | alias = cmds.aliasAttr('%s.%s[%d]' % (rbsNode, _rbsAttrs[0], idx), q=True) 21 | 22 | if not alias: 23 | return _unnamed 24 | 25 | elif alias.endswith(_nameSfx[0]): 26 | return alias[:-len(_nameSfx[0])] 27 | 28 | return alias 29 | 30 | accuracy=0.1 31 | 32 | sel=cmds.ls(selection=True) 33 | obj=sel[0] 34 | 35 | rb=_getRBS(obj) 36 | 37 | bs=cmds.blendShape(obj)[0] 38 | targets=_getTargetNames(rb) 39 | 40 | #zero attributes 41 | for target in targets: 42 | 43 | for sfx in _nameSfx: 44 | 45 | cmds.setAttr(rb+'.'+target+sfx,0) 46 | 47 | for target in targets: 48 | 49 | #duplicating target 50 | cmds.setAttr(rb+'.'+target+'_B',1) 51 | copy=cmds.duplicate(obj,n=target)[0] 52 | cmds.setAttr(rb+'.'+target+'_B',0) 53 | 54 | #adding to blendshape 55 | index=targets.index(target)+1 56 | cmds.blendShape(bs, edit=True, target=(obj, index, copy, 1)) 57 | 58 | cmds.delete(copy) 59 | 60 | for step in xrange(0,9): 61 | 62 | incr=(step+1.0)/10 63 | 64 | #duplicating target 65 | cmds.setAttr(rb+'.'+target+'_B',incr) 66 | copy=cmds.duplicate(obj,n=target)[0] 67 | cmds.setAttr(rb+'.'+target+'_B',0) 68 | 69 | #adding to blendshape 70 | index=targets.index(target)+1 71 | cmds.blendShape(bs, edit=True,inBetween=True, target=(obj, index, copy, incr)) 72 | 73 | cmds.delete(copy) -------------------------------------------------------------------------------- /tapp/maya/rigging/constraints.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | import json 3 | 4 | 5 | def GetData(nodeFilter='joint'): 6 | sel = cmds.ls(selection=True, type=nodeFilter) 7 | dataExport = [] 8 | transforms = ['tx', 'ty', 'tz', 9 | 'rx', 'ry', 'rz', 10 | 'sx', 'sy', 'sz'] 11 | for node in sel: 12 | data = {} 13 | data['name'] = node 14 | constraints = [] 15 | for attr in transforms: 16 | conn = cmds.listConnections('%s.%s' % (node, attr)) 17 | if conn: 18 | conn = conn[0] 19 | connType = cmds.nodeType(conn) 20 | if 'Constraint' in connType: 21 | constraints.append(conn) 22 | data[conn] = {} 23 | data[conn]['type'] = connType 24 | 25 | for con in set(constraints): 26 | targets = cmds.listConnections(con + '.target') 27 | data[con]['targets'] = list(set(targets) - set([con])) 28 | dataExport.append(data) 29 | 30 | return dataExport 31 | 32 | 33 | def ExportData(): 34 | data = GetData() 35 | multipleFilters = "JSON Files (*.json)" 36 | f = cmds.fileDialog2(fileMode=0, fileFilter=multipleFilters) 37 | if f: 38 | f = open(f[0], 'w') 39 | json.dump(data, f) 40 | f.close() 41 | 42 | 43 | def ImportData(f=None): 44 | multipleFilters = "JSON Files (*.json)" 45 | if not f: 46 | f = cmds.fileDialog2(fileMode=1, fileFilter=multipleFilters) 47 | if f: 48 | if isinstance(f, list): 49 | f = f[0] 50 | f = open(f, 'r') 51 | data = json.load(f) 52 | SetData(data) 53 | else: 54 | return None 55 | 56 | 57 | def SetData(data): 58 | 59 | cmds.undoInfo(openChunk=True) 60 | 61 | for node in data: 62 | for key in node: 63 | if not key == 'name': 64 | targets = node[key]['targets'] 65 | if node[key]['type'] == 'parentConstraint': 66 | cmds.parentConstraint(targets, node['name'], 67 | maintainOffset=True) 68 | if node[key]['type'] == 'orientConstraint': 69 | cmds.orientConstraint(targets, node['name'], 70 | maintainOffset=True) 71 | if node[key]['type'] == 'pointConstraint': 72 | cmds.pointConstraint(targets, node['name'], 73 | maintainOffset=True) 74 | if node[key]['type'] == 'scaleConstraint': 75 | cmds.scaleConstraint(targets, node['name'], 76 | maintainOffset=True) 77 | 78 | cmds.undoInfo(closeChunk=True) 79 | 80 | 81 | def Delete(): 82 | 83 | cmds.undoInfo(openChunk=True) 84 | 85 | sel = cmds.ls(selection=True, dagObjects=True) 86 | for node in sel: 87 | if 'Constraint' in cmds.nodeType(node): 88 | cmds.delete(node) 89 | 90 | cmds.undoInfo(closeChunk=True) 91 | -------------------------------------------------------------------------------- /tapp/maya/rigging/cylinderPreview.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | import maya.mel as mel 3 | 4 | 5 | def __create(targets): 6 | grp = cmds.group(empty=True, name='polevector_grp') 7 | 8 | locs = [] 9 | for trg in targets: 10 | loc = cmds.spaceLocator(name=trg + '_loc')[0] 11 | locs.append(loc) 12 | 13 | avg = cmds.spaceLocator()[0] 14 | cmds.setAttr(avg + '.v', 0) 15 | cmds.parent(avg, grp) 16 | cmds.pointConstraint(locs, avg) 17 | 18 | for trg in targets: 19 | index = targets.index(trg) 20 | loc = locs[index] 21 | pos = cmds.xform(trg, ws=True, q=True, translation=True) 22 | rot = cmds.xform(trg, ws=True, q=True, rotation=True) 23 | cmds.xform(loc, ws=True, translation=pos) 24 | cmds.xform(loc, ws=True, rotation=rot) 25 | 26 | cmds.addAttr(loc, ln='joint', at='message') 27 | cmds.connectAttr(trg + '.message', loc + '.joint') 28 | 29 | if index != 2: 30 | cmds.aimConstraint(locs[index + 1], loc, aimVector=[1, 0, 0], 31 | upVector=[0, 1, 0], worldUpType="object", 32 | worldUpObject=avg) 33 | else: 34 | cmds.orientConstraint(locs[index - 1], loc) 35 | 36 | cmds.parent(loc, grp) 37 | 38 | cyl = cmds.polyCylinder(radius=5, height=0.01)[0] 39 | cmds.delete(cmds.pointConstraint(locs[1], cyl, maintainOffset=False)) 40 | cmds.parent(cyl, locs[1]) 41 | cmds.delete(cmds.aimConstraint(locs[2], cyl, aimVector=[1, 0, 0], 42 | upVector=[0, 1, 0], worldUpType="object", 43 | worldUpObject=locs[0], 44 | maintainOffset=False)) 45 | 46 | cmds.rotate(90, 0, 0, cyl) 47 | cmds.aimConstraint(locs[2], cyl, aimVector=[1, 0, 0], upVector=[0, 1, 0], 48 | worldUpType="object", worldUpObject=locs[0], 49 | maintainOffset=True) 50 | cmds.setAttr(cyl + '.overrideEnabled', 1) 51 | cmds.setAttr(cyl + '.overrideDisplayType', 2) 52 | 53 | 54 | def Delete(): 55 | 56 | cmds.undoInfo(openChunk=True) 57 | 58 | cmds.select(cl=True) 59 | roots = [] 60 | jnts = [] 61 | for node in cmds.ls(type='transform'): 62 | if cmds.objExists(node + '.joint'): 63 | jnt = cmds.listConnections(node + '.joint')[0] 64 | jnts.append(jnt) 65 | parent = None 66 | if cmds.listRelatives(jnt, parent=True): 67 | parent = cmds.listRelatives(jnt, parent=True)[0] 68 | children = cmds.listRelatives(jnt, children=True) 69 | 70 | try: 71 | cmds.parent(jnt, w=True) 72 | cmds.parent(children, w=True) 73 | except: 74 | pass 75 | 76 | pos = cmds.xform(node, q=True, ws=True, translation=True) 77 | rot = cmds.xform(node, q=True, ws=True, rotation=True) 78 | cmds.xform(jnt, ws=True, translation=pos) 79 | cmds.xform(jnt, ws=True, rotation=rot) 80 | 81 | try: 82 | cmds.parent(jnt, parent) 83 | cmds.parent(children, jnt) 84 | except: 85 | pass 86 | 87 | roots.append(cmds.listRelatives(node, parent=True)[0]) 88 | 89 | cmds.delete(list(set(roots))) 90 | 91 | for jnt in jnts: 92 | cmds.select(jnt) 93 | mel.eval('FreezeTransformations;') 94 | 95 | cmds.ikHandle(sj=jnts[0], ee=jnts[-1], solver='ikRPsolver') 96 | 97 | cmds.undoInfo(closeChunk=True) 98 | 99 | 100 | def Create(): 101 | 102 | cmds.undoInfo(openChunk=True) 103 | 104 | sel = cmds.ls(selection=True) 105 | if not sel: 106 | cmds.warning('No nodes selected!') 107 | 108 | if len(sel) == 1: 109 | children = cmds.listRelatives(sel[0], ad=True) 110 | if children: 111 | if len(children) == 2: 112 | sel.append(children[-1]) 113 | sel.append(children[0]) 114 | __create(sel) 115 | else: 116 | cmds.warning('Select a 3 chain hierarchy!') 117 | else: 118 | cmds.warning('No children found on %s!' % sel[0]) 119 | elif len(sel) == 3: 120 | __create(sel) 121 | else: 122 | cmds.warning('Select 3 nodes, or first node of a 3 chain hierarchy!') 123 | 124 | cmds.undoInfo(closeChunk=True) 125 | -------------------------------------------------------------------------------- /tapp/maya/rigging/deformation.py: -------------------------------------------------------------------------------- 1 | import pymel.core as pm 2 | 3 | 4 | def SeparateDeform(nodes, attributes, values, interval=10.0): 5 | 6 | #setting keyframes 7 | for node in nodes: 8 | for attr in attributes: 9 | for value in values: 10 | currentTime = pm.currentTime() 11 | 12 | pm.currentTime(currentTime + interval, update=True) 13 | 14 | pm.setKeyframe(node, attribute=attr, value=value) 15 | 16 | for zeroAttr in attributes: 17 | if attr != zeroAttr: 18 | pm.setKeyframe(node, attribute=zeroAttr, value=0) 19 | 20 | if attr == attributes[0]: 21 | pm.setKeyframe(node, attribute=attr, value=0, 22 | time=currentTime - interval) 23 | 24 | if attr == attributes[-1]: 25 | pm.setKeyframe(node, attribute=attr, value=0, 26 | time=currentTime + (interval * 2)) 27 | 28 | 29 | def CombineDeform(nodes, attributes, values, interval=10.0): 30 | 31 | #setting keyframes 32 | for attr in attributes: 33 | for value in values: 34 | currentTime = pm.currentTime() 35 | 36 | pm.currentTime(currentTime + interval, update=True) 37 | 38 | pm.setKeyframe(nodes, attribute=attr, value=(value/len(nodes))) 39 | 40 | for zeroAttr in attributes: 41 | if attr != zeroAttr: 42 | pm.setKeyframe(nodes, attribute=zeroAttr, value=0) 43 | 44 | if attr == attributes[0]: 45 | pm.setKeyframe(nodes, attribute=attr, value=0, 46 | time=currentTime - interval) 47 | 48 | if attr == attributes[-1]: 49 | pm.setKeyframe(nodes, attribute=attr, value=0, 50 | time=currentTime + (interval * 2)) 51 | 52 | 53 | sel = pm.ls(selection=True) 54 | attributes = ['rx', 'ry', 'rz'] 55 | values = [90, -90] 56 | 57 | SeparateDeform(sel, attributes, values, 20.0) 58 | #CombineDeform(sel, attributes, values, 20.0) 59 | -------------------------------------------------------------------------------- /tapp/maya/rigging/gui.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import maya.mel as mel 4 | import maya.OpenMayaUI as omui 5 | 6 | from PySide import QtGui 7 | from shiboken import wrapInstance 8 | 9 | from .resources import dialog 10 | from . import spherePreview 11 | from . import constraints 12 | from . import wireColor 13 | 14 | 15 | def maya_main_window(): 16 | main_window_ptr = omui.MQtUtil.mainWindow() 17 | return wrapInstance(long(main_window_ptr), QtGui.QWidget) 18 | 19 | 20 | class Window(QtGui.QMainWindow, dialog.Ui_MainWindow): 21 | 22 | def __init__(self, parent=maya_main_window()): 23 | super(Window, self).__init__(parent) 24 | self.setupUi(self) 25 | 26 | self.modify_dialog() 27 | 28 | self.create_connections() 29 | 30 | def modify_dialog(self): 31 | 32 | layout = self.central_verticalLayout 33 | 34 | # Adding Sphere Preview to dialog 35 | layout.addWidget(spherePreview.Window()) 36 | 37 | def create_connections(self): 38 | 39 | self.doraSkin_pushButton.released.connect( 40 | self.doraSkin_pushButton_released 41 | ) 42 | self.sculptInbetweenEditor_pushButton.released.connect( 43 | self.sculptInbetweenEditor_pushButton_released 44 | ) 45 | self.zvRadialBlendshape_pushButton.released.connect( 46 | self.zvRadialBlendshape_pushButton_released 47 | ) 48 | self.si_poseDeformer_pushButton.released.connect( 49 | self.si_poseDeformer_pushButton_released 50 | ) 51 | self.wireColor_pushButton.released.connect( 52 | self.wireColor_pushButton_released 53 | ) 54 | 55 | self.cylinderPreviewCreate_pushButton.released.connect( 56 | self.on_cylinderPreviewCreate_pushButton_released 57 | ) 58 | self.cylinderPreviewDelete_pushButton.released.connect( 59 | self.on_cylinderPreviewDelete_pushButton_released 60 | ) 61 | 62 | self.latticeAdd_pushButton.released.connect( 63 | self.latticeAdd_pushButton_released 64 | ) 65 | self.latticeRemove_pushButton.released.connect( 66 | self.latticeRemove_pushButton_released 67 | ) 68 | 69 | self.constraintsExport_pushButton.released.connect( 70 | self.constraintsExport_pushButton_released 71 | ) 72 | self.constraintsImport_pushButton.released.connect( 73 | self.constraintsImport_pushButton_released 74 | ) 75 | self.constraintsDelete_pushButton.released.connect( 76 | self.constraintsDelete_pushButton_released 77 | ) 78 | 79 | def wireColor_pushButton_released(self): 80 | 81 | wireColor.Selection() 82 | 83 | def constraintsExport_pushButton_released(self): 84 | 85 | constraints.ExportData() 86 | 87 | def constraintsImport_pushButton_released(self): 88 | 89 | constraints.ImportData() 90 | 91 | def constraintsDelete_pushButton_released(self): 92 | 93 | constraints.Delete() 94 | 95 | def sculptInbetweenEditor_pushButton_released(self): 96 | 97 | from .sculptInbetweenEditor import dslSculptInbetweenEditor 98 | create = dslSculptInbetweenEditor.SculptInbetweenEditor() 99 | create.ui() 100 | 101 | def doraSkin_pushButton_released(self): 102 | 103 | path = os.path.dirname(__file__) 104 | 105 | #sourcing dora util 106 | melPath = path + '/DoraSkinWeightImpExp.mel' 107 | melPath = melPath.replace('\\', '/') 108 | mel.eval('source "%s"' % melPath) 109 | 110 | #launching dora gui 111 | mel.eval('DoraSkinWeightImpExp()') 112 | 113 | def si_poseDeformer_pushButton_released(self): 114 | 115 | path = os.path.dirname(__file__) 116 | 117 | #sourcing dora util 118 | melPath = path + '/si_poseDeformer.mel' 119 | melPath = melPath.replace('\\', '/') 120 | mel.eval('source "%s"' % melPath) 121 | 122 | #launching dora gui 123 | mel.eval('si_poseDeformer()') 124 | 125 | def zvRadialBlendshape_pushButton_released(self): 126 | 127 | from . import zvRadialBlendShape as zv 128 | 129 | zv.zvRadialBlendShape() 130 | 131 | def on_cylinderPreviewCreate_pushButton_released(self): 132 | 133 | from . import cylinderPreview 134 | cylinderPreview.Create() 135 | 136 | def on_cylinderPreviewDelete_pushButton_released(self): 137 | 138 | from . import cylinderPreview 139 | cylinderPreview.Delete() 140 | 141 | def latticeAdd_pushButton_released(self): 142 | 143 | from . import lattice 144 | lattice.latticeAdd() 145 | 146 | def latticeRemove_pushButton_released(self): 147 | 148 | from . import lattice 149 | lattice.latticeRemove() 150 | -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/__init__.py -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/icons.psd -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderA.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderA.PNG -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderB_east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderB_east.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderB_north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderB_north.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderB_south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderB_south.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderB_west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderB_west.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_east.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_east.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_horizontal.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_north.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_north.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_south.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_south.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_vertical.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderC_west.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderC_west.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderD_northeast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderD_northeast.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderD_northwest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderD_northwest.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderD_southeast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderD_southeast.png -------------------------------------------------------------------------------- /tapp/maya/rigging/joysticker/icons/sliderD_southwest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/joysticker/icons/sliderD_southwest.png -------------------------------------------------------------------------------- /tapp/maya/rigging/lattice.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | 4 | def latticeAdd(): 5 | 6 | #undo enable 7 | cmds.undoInfo(openChunk=True) 8 | 9 | #getting nodes 10 | sel = cmds.ls(selection=True) 11 | lat = sel[-1] 12 | objs = sel[0:-1] 13 | 14 | if cmds.nodeType(cmds.listRelatives(lat, shapes=True)[0]) != 'lattice': 15 | cmds.warning('Last selected is NOT a lattice!') 16 | return 17 | 18 | #adding to lattice 19 | for obj in objs: 20 | try: 21 | cmds.lattice(lat, e=True, geometry=obj) 22 | except: 23 | pass 24 | 25 | cmds.undoInfo(closeChunk=True) 26 | 27 | 28 | def latticeRemove(): 29 | 30 | #undo enable 31 | cmds.undoInfo(openChunk=True) 32 | 33 | #getting nodes 34 | sel = cmds.ls(selection=True) 35 | if not sel: 36 | cmds.warning('No nodes selected!') 37 | return 38 | 39 | lat = sel[-1] 40 | objs = sel[0:-1] 41 | 42 | if cmds.nodeType(cmds.listRelatives(lat, shapes=True)[0]) != 'lattice': 43 | cmds.warning('Last selected is NOT a lattice!') 44 | return 45 | 46 | #removing from lattice 47 | for obj in objs: 48 | try: 49 | cmds.lattice(lat, e=True, remove=True, geometry=obj) 50 | 51 | #disconnecting shapes 52 | shapes = cmds.listRelatives(obj, shapes=True) 53 | for shp in shapes: 54 | source = cmds.listConnections(shp + '.inMesh', source=True) 55 | if cmds.nodeType(source) == 'ffd': 56 | attr = cmds.listConnections(shp + '.inMesh', plugs=True)[0] 57 | cmds.disconnectAttr(attr, shp + '.inMesh') 58 | except: 59 | pass 60 | 61 | cmds.undoInfo(closeChunk=True) 62 | -------------------------------------------------------------------------------- /tapp/maya/rigging/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/rigging/sculptInbetweenEditor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/sculptInbetweenEditor/__init__.py -------------------------------------------------------------------------------- /tapp/maya/rigging/spherePreview/README.md: -------------------------------------------------------------------------------- 1 | This tool helps to preview joint deformations by showing the arc of rotation with a sphere. 2 | 3 | The tool creates a sphere and locator, which can be moved independently. 4 | When moving the sphere or locator, the sphere radius changes to show the arc of rotation. 5 | 6 | You can create the sphere from nothing, or select one or two object to start the process from. 7 | 8 | When deleting the spheres the tool creates a joint with a null, from the sphere centre to the locator. -------------------------------------------------------------------------------- /tapp/maya/rigging/spherePreview/__init__.py: -------------------------------------------------------------------------------- 1 | from gui import * 2 | -------------------------------------------------------------------------------- /tapp/maya/rigging/spherePreview/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/rigging/spherePreview/resources/__init__.py -------------------------------------------------------------------------------- /tapp/maya/rigging/spherePreview/resources/dialog.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'C:\Users\Chucky\Documents\GitHub\Tapp\Maya\rigging\spherePreview\resources/dialog.ui' 4 | # 5 | # Created: Mon Mar 03 21:37:05 2014 6 | # by: pyside-uic 0.2.14 running on PySide 1.1.1 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PySide import QtCore, QtGui 11 | 12 | class Ui_MainWindow(object): 13 | def setupUi(self, MainWindow): 14 | MainWindow.setObjectName("MainWindow") 15 | MainWindow.resize(222, 70) 16 | MainWindow.setWindowOpacity(1.0) 17 | self.centralwidget = QtGui.QWidget(MainWindow) 18 | self.centralwidget.setObjectName("centralwidget") 19 | self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) 20 | self.verticalLayout.setObjectName("verticalLayout") 21 | self.horizontalLayout_2 = QtGui.QHBoxLayout() 22 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 23 | self.line_23 = QtGui.QFrame(self.centralwidget) 24 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) 25 | sizePolicy.setHorizontalStretch(0) 26 | sizePolicy.setVerticalStretch(0) 27 | sizePolicy.setHeightForWidth(self.line_23.sizePolicy().hasHeightForWidth()) 28 | self.line_23.setSizePolicy(sizePolicy) 29 | self.line_23.setFrameShape(QtGui.QFrame.HLine) 30 | self.line_23.setFrameShadow(QtGui.QFrame.Sunken) 31 | self.line_23.setObjectName("line_23") 32 | self.horizontalLayout_2.addWidget(self.line_23) 33 | self.character_fkik_label = QtGui.QLabel(self.centralwidget) 34 | self.character_fkik_label.setObjectName("character_fkik_label") 35 | self.horizontalLayout_2.addWidget(self.character_fkik_label) 36 | self.line_2 = QtGui.QFrame(self.centralwidget) 37 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed) 38 | sizePolicy.setHorizontalStretch(0) 39 | sizePolicy.setVerticalStretch(0) 40 | sizePolicy.setHeightForWidth(self.line_2.sizePolicy().hasHeightForWidth()) 41 | self.line_2.setSizePolicy(sizePolicy) 42 | self.line_2.setFrameShape(QtGui.QFrame.HLine) 43 | self.line_2.setFrameShadow(QtGui.QFrame.Sunken) 44 | self.line_2.setObjectName("line_2") 45 | self.horizontalLayout_2.addWidget(self.line_2) 46 | self.verticalLayout.addLayout(self.horizontalLayout_2) 47 | self.horizontalLayout = QtGui.QHBoxLayout() 48 | self.horizontalLayout.setObjectName("horizontalLayout") 49 | self.create_pushButton = QtGui.QPushButton(self.centralwidget) 50 | self.create_pushButton.setObjectName("create_pushButton") 51 | self.horizontalLayout.addWidget(self.create_pushButton) 52 | self.delete_pushButton = QtGui.QPushButton(self.centralwidget) 53 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) 54 | sizePolicy.setHorizontalStretch(0) 55 | sizePolicy.setVerticalStretch(0) 56 | sizePolicy.setHeightForWidth(self.delete_pushButton.sizePolicy().hasHeightForWidth()) 57 | self.delete_pushButton.setSizePolicy(sizePolicy) 58 | self.delete_pushButton.setObjectName("delete_pushButton") 59 | self.horizontalLayout.addWidget(self.delete_pushButton) 60 | self.help_pushButton = QtGui.QPushButton(self.centralwidget) 61 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) 62 | sizePolicy.setHorizontalStretch(0) 63 | sizePolicy.setVerticalStretch(0) 64 | sizePolicy.setHeightForWidth(self.help_pushButton.sizePolicy().hasHeightForWidth()) 65 | self.help_pushButton.setSizePolicy(sizePolicy) 66 | self.help_pushButton.setMaximumSize(QtCore.QSize(40, 16777215)) 67 | self.help_pushButton.setObjectName("help_pushButton") 68 | self.horizontalLayout.addWidget(self.help_pushButton) 69 | self.verticalLayout.addLayout(self.horizontalLayout) 70 | spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 71 | self.verticalLayout.addItem(spacerItem) 72 | MainWindow.setCentralWidget(self.centralwidget) 73 | 74 | self.retranslateUi(MainWindow) 75 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 76 | 77 | def retranslateUi(self, MainWindow): 78 | MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "Sphere Preview", None, QtGui.QApplication.UnicodeUTF8)) 79 | self.character_fkik_label.setText(QtGui.QApplication.translate("MainWindow", "Sphere Preview", None, QtGui.QApplication.UnicodeUTF8)) 80 | self.create_pushButton.setText(QtGui.QApplication.translate("MainWindow", "Create", None, QtGui.QApplication.UnicodeUTF8)) 81 | self.delete_pushButton.setText(QtGui.QApplication.translate("MainWindow", "Delete All", None, QtGui.QApplication.UnicodeUTF8)) 82 | self.help_pushButton.setText(QtGui.QApplication.translate("MainWindow", "?", None, QtGui.QApplication.UnicodeUTF8)) 83 | 84 | -------------------------------------------------------------------------------- /tapp/maya/rigging/spherePreview/resources/dialog.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 222 10 | 70 11 | 12 | 13 | 14 | Sphere Preview 15 | 16 | 17 | 1.000000000000000 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 30 | 31 | 32 | Qt::Horizontal 33 | 34 | 35 | 36 | 37 | 38 | 39 | Sphere Preview 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 0 48 | 0 49 | 50 | 51 | 52 | Qt::Horizontal 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | Create 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 0 72 | 0 73 | 74 | 75 | 76 | Delete All 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 0 85 | 0 86 | 87 | 88 | 89 | 90 | 40 91 | 16777215 92 | 93 | 94 | 95 | ? 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | Qt::Vertical 105 | 106 | 107 | 108 | 20 109 | 40 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /tapp/maya/rigging/wireColor.py: -------------------------------------------------------------------------------- 1 | import pymel.core as pm 2 | import maya.OpenMayaUI as omui 3 | from PySide import QtGui, QtCore 4 | from shiboken import wrapInstance 5 | 6 | 7 | def maya_main_window(): 8 | 9 | main_window_ptr = omui.MQtUtil.mainWindow() 10 | return wrapInstance(long(main_window_ptr), QtGui.QWidget) 11 | 12 | 13 | class MPalette(QtGui.QDialog): 14 | 15 | def __init__(self, parent=None): 16 | super(MPalette, self).__init__(parent) 17 | self._color = -1 18 | self._styleSheet = "" 19 | self.setupUi() 20 | for i, b in enumerate(self.buttons): 21 | self.setButtonColor( 22 | b, [x * 255 for x in pm.colorIndex(i + 1, q=True)]) 23 | b.clicked.connect(lambda index=i + 1: self.accept(index)) 24 | 25 | def setupUi(self): 26 | self.setWindowTitle("ColorPicker") 27 | self.gridLayout = QtGui.QGridLayout(self) 28 | self.buttons = list() 29 | for i in range(31): 30 | btn = QtGui.QPushButton(self) 31 | sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, 32 | QtGui.QSizePolicy.Maximum) 33 | sizePolicy.setHorizontalStretch(0) 34 | sizePolicy.setVerticalStretch(0) 35 | sizePolicy.setHeightForWidth( 36 | btn.sizePolicy().hasHeightForWidth()) 37 | btn.setSizePolicy(sizePolicy) 38 | btn.setMaximumSize(QtCore.QSize(25, 25)) 39 | btn.setText(str(i + 1)) 40 | self.gridLayout.addWidget(btn, int(i / 8), i % 8, 1, 1) 41 | self.buttons.append(btn) 42 | 43 | def setButtonColor(self, button, color): 44 | s = "background-color: rgb({0}, {1}, {2});".format(*color) 45 | button.setStyleSheet(s) 46 | 47 | def accept(self, index=None): 48 | self._color = index 49 | super(MPalette, self).accept() 50 | 51 | @classmethod 52 | def getColor(cls, parent): 53 | palette = cls(parent) 54 | palette.exec_() 55 | return palette._color 56 | 57 | 58 | def Selection(): 59 | index = MPalette.getColor(parent=maya_main_window()) 60 | 61 | for node in pm.ls(selection=True): 62 | node.overrideEnabled.set(True) 63 | node.overrideColor.set(index) 64 | -------------------------------------------------------------------------------- /tapp/maya/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/maya/utils/__init__.py -------------------------------------------------------------------------------- /tapp/maya/utils/framerate.py: -------------------------------------------------------------------------------- 1 | import maya.cmds as cmds 2 | 3 | 4 | def FrameratePrompt(): 5 | 6 | framerate = cmds.currentUnit(q=True, time=True) 7 | 8 | if framerate != 'pal': 9 | message = 'Maya session is not working with 25 fps.\n' 10 | message += 'Do you want to switch to 25 fps?' 11 | result = cmds.confirmDialog(title='FRAMERATE', message=message, 12 | icon='warning', backgroundColor=(0.5, 0, 0)) 13 | 14 | if result == 'Confirm': 15 | 16 | cmds.currentUnit(time='pal') 17 | 18 | scriptJobNum = cmds.scriptJob(event=('SceneOpened', FrameratePrompt)) 19 | -------------------------------------------------------------------------------- /tapp/maya/utils/setProject.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import maya.cmds as cmds 4 | 5 | path = os.path.dirname(cmds.file(q=True, sn=True)) 6 | 7 | cmds.workspace(fileRule=['scenes', path]) 8 | 9 | cmds.workspace(path, openWorkspace=True) 10 | -------------------------------------------------------------------------------- /tapp/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bumpybox/Tapp/0d5ca78f2ca8f28f12a3a5f0565f99e8efe962de/tapp/utils/__init__.py -------------------------------------------------------------------------------- /tapp/utils/docked_widget.py: -------------------------------------------------------------------------------- 1 | from Qt import QtWidgets 2 | 3 | import utils 4 | 5 | 6 | class Dock(QtWidgets.QWidget): 7 | 8 | def __init__(self, parent=None): 9 | super(Dock, self).__init__(parent) 10 | QtWidgets.QVBoxLayout(self) 11 | self.setObjectName("tapp.dock") 12 | 13 | 14 | def get_docked_widget(): 15 | 16 | if "maya" in utils.get_host(): 17 | return get_maya_dock_widget() 18 | 19 | if "nuke" in utils.get_host(): 20 | return get_nuke_dock_widget() 21 | 22 | return None 23 | 24 | 25 | def get_maya_dock_widget(): 26 | import maya.cmds as cmds 27 | 28 | main_window = None 29 | for obj in QtWidgets.qApp.topLevelWidgets(): 30 | if obj.objectName() == "MayaWindow": 31 | main_window = obj 32 | 33 | if cmds.dockControl("MayaWindow|Tapp", q=True, ex=True): 34 | cmds.deleteUI("MayaWindow|Tapp") 35 | 36 | dock = Dock(parent=main_window) 37 | 38 | allowedAreas = ["right", "left"] 39 | cmds.dockControl("Tapp", label="Tapp", area="right", 40 | content="tapp.dock", allowedArea=allowedAreas, 41 | visible=True) 42 | 43 | return dock 44 | 45 | 46 | def get_nuke_dock_widget(): 47 | from nukescripts import panels 48 | import nuke 49 | 50 | # delete existing dock 51 | for obj in QtWidgets.QApplication.allWidgets(): 52 | if obj.objectName() == "tapp.dock": 53 | obj.deleteLater() 54 | 55 | pane = nuke.getPaneFor("Properties.1") 56 | panel = panels.registerWidgetAsPanel("tapp.docked_widget.Dock", 57 | "Tapp", 58 | "tapp.dock", 59 | True).addToPane(pane) 60 | 61 | return panel.customKnob.getObject().widget 62 | -------------------------------------------------------------------------------- /tapp/utils/lib.py: -------------------------------------------------------------------------------- 1 | import utils 2 | 3 | 4 | def setup(): 5 | 6 | if utils.get_host().startswith("maya"): 7 | add_filemenu_maya() 8 | 9 | if utils.get_host().startswith("nuke"): 10 | add_filemenu_nuke() 11 | 12 | print("tapp: Loaded successfully.") 13 | 14 | 15 | def add_filemenu_nuke(): 16 | 17 | import nuke 18 | 19 | menubar = nuke.menu("Nuke") 20 | menu = menubar.addMenu("Tapp") 21 | 22 | cmd = "import tapp;reload(tapp)" 23 | cmd += ";win = tapp.show()" 24 | menu.addCommand("Launch", cmd) 25 | 26 | 27 | def add_filemenu_maya(): 28 | 29 | import maya.cmds as cmds 30 | 31 | cmds.evalDeferred("tapp.utils.lib._add_filemenu_maya()") 32 | 33 | 34 | def _add_filemenu_maya(): 35 | 36 | import maya.cmds as cmds 37 | import maya.mel as mel 38 | 39 | gMainWindow = mel.eval("$tmpVar=$gMainWindow") 40 | 41 | menuList = cmds.window(gMainWindow, query=True, menuArray=True) 42 | if "tapp" in menuList: 43 | cmds.deleteUI("tapp") 44 | 45 | menu = cmds.menu("tapp", label="Tapp", 46 | parent=gMainWindow) 47 | 48 | cmd = "import tapp;reload(tapp)" 49 | cmd += ";win = tapp.show()" 50 | cmds.menuItem(label="Launch", parent=menu, command=cmd) 51 | -------------------------------------------------------------------------------- /tapp/utils/utils.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | 5 | def get_host(): 6 | base_executable = os.path.basename(sys.executable) 7 | 8 | if base_executable.lower().startswith("maya"): 9 | return "maya" 10 | 11 | if base_executable.lower().startswith("nuke"): 12 | return "nuke" 13 | 14 | return "standalone" 15 | --------------------------------------------------------------------------------