├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .gitmodules ├── AUTHORS.md ├── BUILD.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SConstruct ├── buildAll ├── buildAll.bat ├── deploy.bat ├── docs ├── Makefile ├── exts │ └── changelog_links.py ├── make.bat └── source │ ├── FAQ.rst │ ├── animbitsModules.rst │ ├── animbitsUserDocumentation.rst │ ├── baseModules.rst │ ├── conf.py │ ├── crankUserDocumentation.rst │ ├── framework.rst │ ├── generated │ └── mgear.rst │ ├── images │ ├── animbits │ │ ├── animbits_menu.png │ │ ├── channel_master.png │ │ ├── channel_master_add_tab.png │ │ ├── channel_master_buttons.png │ │ ├── channel_master_context_menu.png │ │ ├── channel_master_filter.png │ │ ├── channel_master_key_color_code.png │ │ ├── channel_master_key_context_menu.png │ │ ├── channel_master_menu_display.png │ │ ├── channel_master_menu_display_fullname.png │ │ ├── channel_master_menu_file.png │ │ ├── channel_master_menu_keyframe.png │ │ ├── channel_master_menu_tab.png │ │ ├── channel_master_middle_click_precision_slider.png │ │ ├── channel_master_node.png │ │ ├── channel_master_node2.png │ │ ├── gifs │ │ │ └── softtweak.gif │ │ ├── smartReset_hotkey.png │ │ ├── softtweak_ctl.png │ │ ├── softtweak_falloff.png │ │ └── softtweak_manager.png │ ├── banner.jpg │ ├── banner2.jpg │ ├── crank │ │ ├── autokey.png │ │ ├── context_menu.png │ │ ├── crank_GUI.png │ │ ├── crank_layer.png │ │ ├── crank_layer_cb.png │ │ ├── crank_sample_01.png │ │ └── random_color.png │ ├── quickstart │ │ ├── quickstart_animPicker.png │ │ ├── quickstart_bipedTemplate.png │ │ ├── quickstart_footTemplate.png │ │ ├── quickstart_handTemplate.png │ │ └── quickstart_viewportMenu.png │ ├── rigbits │ │ ├── channel_wrangler.png │ │ ├── connect_local_SRT_menu.png │ │ ├── eye_rigger.png │ │ ├── gif │ │ │ ├── Align_ref_axis.gif │ │ │ ├── interpolated_transform.gif │ │ │ └── replace_shape.gif │ │ ├── gimmick_joints.png │ │ ├── interpolated_transform.png │ │ ├── lips_rigger.png │ │ ├── menu.png │ │ ├── npo_after.png │ │ ├── npo_before.png │ │ ├── post_spring.png │ │ ├── rbf_manager_GUI.png │ │ ├── rbf_manager_add_rbf_GUI.png │ │ ├── rbf_manager_file_menu.png │ │ ├── rbf_manager_mirror_menu.png │ │ ├── rbf_manager_new_rbf_GUI.png │ │ ├── rbf_manager_new_setup.png │ │ ├── rbf_manager_settings_menu.png │ │ └── rope_tool.png │ ├── shifter │ │ ├── chain_init_settings.png │ │ ├── component_guides │ │ │ ├── arm_2jnt_01.png │ │ │ ├── arm_2jnt_freeTangents_01.png │ │ │ ├── arm_ms_2jnt_01.png │ │ │ └── chain_01.png │ │ ├── component_main_settings.png │ │ ├── component_settings │ │ │ ├── arm_2jnt_01.png │ │ │ ├── arm_2jnt_freeTangents_01.png │ │ │ ├── arm_ms_2jnt_01.png │ │ │ ├── chain_01.png │ │ │ ├── chain_FK_spline_01.png │ │ │ ├── control_01.png │ │ │ ├── eye_01.png │ │ │ ├── foot_bk_01.png │ │ │ ├── foot_bk_01_connector_settings.png │ │ │ ├── hydraulic_01.png │ │ │ ├── leg_2jnt_01.png │ │ │ ├── leg_2jnt_freeTangents_01.png │ │ │ ├── leg_3_jnt_01.png │ │ │ ├── leg_ms_2jnt_01.png │ │ │ ├── lite_chain_01.png │ │ │ ├── meta_01.png │ │ │ ├── neck_ik_01.png │ │ │ ├── shoulder_01.png │ │ │ ├── spine_S_shape_01.png │ │ │ ├── spine_ik_01.png │ │ │ ├── spine_ik_02.png │ │ │ ├── squash4Sides_01.png │ │ │ └── squash_01.png │ │ ├── components │ │ │ ├── arm_2jnt_0.png │ │ │ └── arm_2jnt_01_channels.png │ │ ├── components_lister_gui.png │ │ ├── game_tools.png │ │ ├── guide_settings.png │ │ ├── mocap_tools.png │ │ ├── plebes_ui.png │ │ └── shifter_menu.png │ ├── simplerig │ │ ├── simplerig_GUI.png │ │ ├── simplerig_auto.png │ │ ├── simplerig_convert.png │ │ ├── simplerig_delete.png │ │ ├── simplerig_extra.png │ │ └── simplerig_file.png │ ├── skinning │ │ └── skinning_menu.png │ ├── solvers │ │ ├── mgear_add10Scalar_attr.png │ │ ├── mgear_add10Scalar_node.png │ │ ├── mgear_curveCns_node.png │ │ ├── mgear_ikfk2Bone_attr.png │ │ ├── mgear_ikfk2Bone_attr2.png │ │ ├── mgear_ikfk2Bone_node.png │ │ ├── mgear_intMatrix_attr.png │ │ ├── mgear_intMatrix_node.png │ │ ├── mgear_inverseRotOrder_attr.png │ │ ├── mgear_inverseRotOrder_node.png │ │ ├── mgear_linearInterpolate3Dvector_attr.png │ │ ├── mgear_linearInterpolate3Dvector_node.png │ │ ├── mgear_mulMatrix_attr.png │ │ ├── mgear_mulMatrix_node.png │ │ ├── mgear_percentageToU_attr.png │ │ ├── mgear_percentageToU_node.png │ │ ├── mgear_rayCastPosition_attr.png │ │ ├── mgear_rayCastPosition_node.png │ │ ├── mgear_rollSplineKine_attr.png │ │ ├── mgear_rollSplineKine_node.png │ │ ├── mgear_rollSplineKine_subdivision.png │ │ ├── mgear_slideCurve_attr.png │ │ ├── mgear_slideCurve_node.png │ │ ├── mgear_spinePointAt_attr.png │ │ ├── mgear_spinePointAt_node.png │ │ ├── mgear_springNode_attr.png │ │ ├── mgear_springNode_node.png │ │ ├── mgear_squashStretch_attr.png │ │ ├── mgear_squashStretch_node.png │ │ ├── mgear_trigonometyAngle_attr.png │ │ ├── mgear_trigonometyAngle_node.png │ │ ├── mgear_vertexPosition_attr.png │ │ └── mgear_vertexPosition_node.png │ ├── studioAKA_mGear_A.jpg │ ├── studioAKA_mGear_B.jpg │ ├── synoptic │ │ ├── biped_tab.png │ │ ├── qtDesigner_ikfkSpine_properties.png │ │ ├── qtDesigner_ikfk_properties.png │ │ └── qtDesigner_spaceSwitch_properties.png │ ├── unofficial_guide │ │ └── pipeline.png │ └── utilities │ │ └── utilities_menu.png │ ├── index.rst │ ├── license.rst │ ├── mgear │ ├── animbits │ │ └── softTweaks.rst │ ├── core │ │ ├── anim_utils.rst │ │ ├── applyop.rst │ │ ├── attribute.rst │ │ ├── callbackManager.rst │ │ ├── core.rst │ │ ├── curve.rst │ │ ├── dag.rst │ │ ├── dagmenu.rst │ │ ├── dragdrop.rst │ │ ├── fcurve.rst │ │ ├── icon.rst │ │ ├── log.rst │ │ ├── meshNavigation.rst │ │ ├── node.rst │ │ ├── pickWalk.rst │ │ ├── primitive.rst │ │ ├── pyflow_widgets │ │ ├── pyflow_widgets.rst │ │ ├── pyqt.rst │ │ ├── skin.rst │ │ ├── string.rst │ │ ├── transform.rst │ │ ├── utils.rst │ │ ├── vector.rst │ │ ├── widgets.rst │ │ └── wmap.rst │ ├── mgear.rst │ ├── rigbits │ │ ├── blendshapes.rst │ │ ├── channelWrangler.rst │ │ ├── cycleTweaks.rst │ │ ├── eye_rigger.rst │ │ ├── ghost.rst │ │ ├── lips_rigger.rst │ │ ├── postSpring.rst │ │ ├── proxySlicer.rst │ │ ├── rbf_io.rst │ │ ├── rbf_manager_ui.rst │ │ ├── rbf_node.rst │ │ ├── rigbits.rst │ │ ├── rivet.rst │ │ ├── rope.rst │ │ ├── sdk_io.rst │ │ ├── tweaks.rst │ │ ├── utils.rst │ │ ├── weightNode_io.rst │ │ └── widgets.rst │ ├── shifter │ │ ├── gui.rst │ │ ├── guide.rst │ │ └── shifter.rst │ ├── shifter_classic_components │ │ ├── component.rst │ │ └── guide.rst │ ├── simpleRig │ │ ├── simpleRig.rst │ │ └── simpleRigTool.rst │ └── synoptic │ │ ├── synoptic.rst │ │ ├── utils.rst │ │ └── widgets.rst │ ├── modulesList.rst │ ├── official-unofficial-workflow.rst │ ├── overview.rst │ ├── quickStart.rst │ ├── releaseLog.rst │ ├── rigbitsModules.rst │ ├── rigbitsUserDocumentation.rst │ ├── shifterComponentReference.rst │ ├── shifterModules.rst │ ├── shifterUserDocumentation.rst │ ├── simpleRigModules.rst │ ├── solvers.rst │ ├── synopticModules.rst │ ├── synopticUserDocumentation.rst │ └── videoTutorials.rst ├── drag_n_drop_install.py ├── framework └── scripts │ ├── mgear │ ├── __init__.py │ ├── __init__.py.in │ ├── menu.py │ ├── vendor │ │ ├── Qt.py │ │ ├── __init__.py │ │ └── qjsonmodel.py │ ├── version.py │ └── version.py.in │ └── userSetup.py ├── mGear.mod.in ├── mgear.env ├── mgear.status └── releaseLog.rst /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | # C/C++ source files 4 | *.cpp text eol=lf 5 | *.cxx text eol=lf 6 | *.cc text eol=lf 7 | *.c text eol=lf 8 | *.hpp text eol=lf 9 | *.hxx text eol=lf 10 | *.hh text eol=lf 11 | *.h text eol=lf 12 | 13 | # Arnold files 14 | *.mtd text eol=lf 15 | *.ass text eol=lf 16 | 17 | # QT Designer files 18 | *.ui text eol=lf 19 | 20 | # Structured files 21 | *.xml text eol=lf 22 | *.json text eol=lf 23 | *.yml text eol=lf 24 | 25 | # C# source files 26 | *.cs text eol=lf 27 | 28 | # Python source files 29 | *.py text eol=lf 30 | 31 | # Ruby source files 32 | *.rb text eol=lf 33 | 34 | # Maya MEL source files 35 | *.mel text eol=lf 36 | 37 | # Environment files 38 | *.env text eol=lf 39 | *.template text eol=lf 40 | 41 | # Shader source files 42 | *.cg text eol=lf 43 | *.cginc text eol=lf 44 | *.shader text eol=lf 45 | *.glsl text eol=lf 46 | *.hlsl text eol=lf 47 | *.sl text eol=lf 48 | *.osl text eol=lf 49 | *.frag text eol=lf 50 | *.vert text eol=lf 51 | 52 | # Markdown files 53 | *.md text eol=lf 54 | 55 | # Unity metadata files 56 | *.meta text eol=lf 57 | 58 | # Shell scripts 59 | *.bat text eol=crlf 60 | *.sh text eol=lf 61 | 62 | # Visual Studio files 63 | *.sln text eol=crlf 64 | *.suo text eol=crlf 65 | *.vcxproj* text eol=crlf 66 | *.csproj text eol=crlf 67 | 68 | # Build system files 69 | SConstruct text eol=lf 70 | SConscript text eol=lf 71 | Makefile text eol=lf 72 | CMakeLists.txt text eol=lf 73 | 74 | # Source Version Control 75 | .git* text eol=lf 76 | .hg* text eol=lf 77 | 78 | # Other known text files 79 | *.desc text eol=lf 80 | *.txt text eol=lf 81 | LICENSE text eol=lf 82 | 83 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: What the hack is going on? 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 13 | **Screenshots** 14 | If applicable, add screenshots to help explain your problem. 15 | 16 | **Additional information** 17 | Add any other information about the problem here. 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Feature description** 8 | A simple explanation of what your request is. 9 | 10 | **Extra information** 11 | Any other information that can be relevant for the developers 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode/ 3 | 4 | *.py[cod] 5 | 6 | 7 | # C extensions 8 | 9 | 10 | # Packages 11 | *.egg 12 | *.egg-info 13 | dist 14 | build 15 | eggs 16 | parts 17 | bin 18 | var 19 | sdist 20 | develop-eggs 21 | .installed.cfg 22 | lib 23 | lib64 24 | 25 | # Installer logs 26 | pip-log.txt 27 | 28 | # Unit test / coverage reports 29 | .coverage 30 | .tox 31 | nosetests.xml 32 | 33 | # Translations 34 | *.mo 35 | 36 | # Mr Developer 37 | .mr.developer.cfg 38 | .project 39 | .pydevproject 40 | 41 | *.dblite 42 | excons.cache 43 | /.build/ 44 | /release/ 45 | /debug/ 46 | /eco/ 47 | /docs/source/generated/ 48 | /mgear.env.tmp 49 | /mgear.config 50 | /mGear_cmd.cmd 51 | /mgear.status 52 | /framework/scripts/mgear/__init__.py 53 | /framework/scripts/mgear/version.py 54 | /mGear.mod 55 | 56 | cover/ -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "excons"] 2 | path = excons 3 | url = https://github.com/mgear-dev/excons.git 4 | [submodule "Qtdotpy"] 5 | path = Qtdotpy 6 | url = https://github.com/mottosso/Qt.py 7 | [submodule "framework/animbits"] 8 | path = framework/animbits 9 | url = https://github.com/mgear-dev/animbits.git 10 | [submodule "framework/flex"] 11 | path = framework/flex 12 | url = https://github.com/mgear-dev/flex.git 13 | [submodule "framework/mgear_core"] 14 | path = framework/mgear_core 15 | url = https://github.com/mgear-dev/mgear_core.git 16 | [submodule "framework/rigbits"] 17 | path = framework/rigbits 18 | url = https://github.com/mgear-dev/rigbits.git 19 | [submodule "framework/shifter"] 20 | path = framework/shifter 21 | url = https://github.com/mgear-dev/shifter.git 22 | [submodule "framework/shifter_classic_components"] 23 | path = framework/shifter_classic_components 24 | url = https://github.com/mgear-dev/shifter_classic_components.git 25 | [submodule "framework/simpleRig"] 26 | path = framework/simpleRig 27 | url = https://github.com/mgear-dev/simpleRig.git 28 | [submodule "framework/synoptic"] 29 | path = framework/synoptic 30 | url = https://github.com/mgear-dev/synoptic.git 31 | [submodule "plugins/maya-math-nodes"] 32 | path = plugins/maya-math-nodes 33 | url = https://github.com/mgear-dev/maya-math-nodes.git 34 | [submodule "plugins/mgear_solvers"] 35 | path = plugins/mgear_solvers 36 | url = https://github.com/mgear-dev/mgear_solvers.git 37 | [submodule "plugins/grim_IK"] 38 | path = plugins/grim_IK 39 | url = https://github.com/mgear-dev/grim_IK.git 40 | [submodule "plugins/cvwrap"] 41 | path = plugins/cvwrap 42 | url = https://github.com/mgear-dev/cvwrap.git 43 | [submodule "framework/crank"] 44 | path = framework/crank 45 | url = https://github.com/mgear-dev/crank.git 46 | [submodule "vendor/QJsonModel"] 47 | path = vendor/QJsonModel 48 | url = https://github.com/mgear-dev/QJsonModel.git 49 | [submodule "plugins/weightDriver"] 50 | path = plugins/weightDriver 51 | url = https://github.com/mgear-dev/weightDriver.git 52 | [submodule "framework/anim_picker"] 53 | path = framework/anim_picker 54 | url = https://github.com/mgear-dev/anim_picker.git 55 | [submodule "framework/cfxbits"] 56 | path = framework/cfxbits 57 | url = https://github.com/mgear-dev/cfxbits.git 58 | [submodule "framework/shifter_epic_components"] 59 | path = framework/shifter_epic_components 60 | url = https://github.com/mgear-dev/shifter_epic_components.git 61 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | ### AUTHORS 2 | 3 | 4 | ## mGear Dev team: 5 | - [Jerome Drese](https://github.com/jdrese) 6 | - [Miquel Campos](https://github.com/miquelcampos) 7 | - [Rafael Villar](https://github.com/RafaelVillar) 8 | 9 | 10 | ## Contributors: 11 | - [Akagi-san](https://github.com/akiwoRM/) 12 | - [Chris Lesage](https://github.com/chris-lesage/) 13 | - [Gaetan Guidet](https://github.com/gatgui/) 14 | - [Ivo Grigull](https://github.com/ivogrig/) 15 | - [Jascha Wohlkinger](https://github.com/JaschaW/) 16 | - [Jeroen Hoolmans](https://github.com/jhoolmans/) 17 | - [Justin Pedersen](https://github.com/JustinPedersen) 18 | - [Krzysztof Marcinowski](https://github.com/krzymRR/) 19 | - [Lior Ben Horin](https://github.com/liorbenhorin/) 20 | - [Marcus Ottosson](https://github.com/mottosso) 21 | - [Marthinus Wessels](https://github.com/Lohult) 22 | - [Matsumoto-san](https://github.com/yamahigashi) 23 | - [Miles Cheng](https://github.com/milesckt/) 24 | - [Nate Allison](https://github.com/juggernate) 25 | - [Nestor Colt](https://github.com/nestorcolt/) 26 | - [niteshms04](https://github.com/niteshms04) 27 | - [Oda-san](https://github.com/Gotetz/) 28 | - [Ragnar Brynjúlfsson](https://github.com/ragtag) 29 | - [Ruuttu](https://github.com/Ruuttu/) 30 | - [Toke Jepsen](https://github.com/tokejepsen/) 31 | 32 | ## Forks: 33 | - Anim_picker: [Guillaume Barlier](https://github.com/gbarlier/anim_picker) 34 | - Excons: [Gaetan Guidet](https://github.com/gatgui/excons) 35 | - Grim IK: [Charles Wardlaw](https://github.com/kattkieru/grim_IK) 36 | - Maya Math Nodes: [Serguei Kalentchouk](https://github.com/serguei-k/maya-math-nodes) 37 | - QJsonModel Python port: [Marcus Ottosson](https://github.com/mottosso) 38 | - QJsonModel: [sacha schutz](https://github.com/dridk) 39 | - Qt: [Marcus Ottosson](https://github.com/mottosso) 40 | - Weight Driver: [Ingo Clemens](https://github.com/IngoClemens) 41 | 42 | ** All listed in alphabetical order 43 | ** My apologies is we forget any name. Please contact us! :) 44 | 45 | 46 | -------------------------------------------------------------------------------- /BUILD.md: -------------------------------------------------------------------------------- 1 | # How to build mGear 2 | 3 | ## Prerequisites 4 | 5 | Git (of course) 6 | 7 | Python 2.7 8 | 9 | SCons 10 | 11 | Maya 2014 ~ 2018 (*) 12 | 13 | A C++ compiler: (*) 14 | - gcc on linux 15 | - clang on OSX 16 | - Visual Studio on windows (**) 17 | 18 | (*) Only when building the plugins 19 | 20 | (**) The version should match the one used by the target Maya version 21 | 22 | ## Step by step process 23 | 24 | 1. Clone the repository and initialize it 25 | 26 | ``` 27 | $ git clone git@github.com:mgear-dev/mgear_dist.git 28 | $ cd mgear_dist 29 | $ git submodule update --init 30 | $ git submodule foreach --recursive git checkout master 31 | ``` 32 | 33 | 2. Checkout the desired branch or tag 34 | 35 | - **develop** : latest developments 36 | - **master** : latest official release 37 | - **RB-x.x** : latest version in x.x series (i.e. 2.2.5 in RB-2.2) 38 | 39 | ``` 40 | $ git submodule foreach --recursive git checkout develop 41 | $ git submodule foreach git pull origin develop 42 | ``` 43 | 44 | 3. Compile 45 | 46 | The available targets are: 47 | - **mgear_core** : Only mgear python module. 48 | - **mgear_solvers** : Solvers maya plugin. 49 | - **cvwrap** : cvwrap maya plugin. 50 | - **mgear** : everything (*default*) 51 | 52 | ``` 53 | $ scons with-maya=2017 54 | ... 55 | (let it cook) 56 | ``` 57 | 58 | To show all available build options: 59 | 60 | ```$ scons -h``` 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@miquel-campos.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing to mGear 2 | 3 | ### Argument shorthands 4 | 5 | In Maya, some arguments have a short equivalent. Don't use it. 6 | 7 | **Wrong** 8 | 9 | ```python 10 | pm.workspace(q=True, rd=True) 11 | ``` 12 | 13 | **Right** 14 | 15 | ```python 16 | pm.workspace(query=True, rootDirectory=True) 17 | ``` 18 | 19 | The reason is readability. The second reason is that these shorthands are provided not to make *your* code shorter, but to reduce the filesize of Maya's own internal scene format, the `.ma` files. It's not Pythonic, it's an optimisation. 20 | 21 |
22 | 23 | ### Members & `__init__` 24 | 25 | Always declare all members of a class in the `__init__` method. 26 | 27 | **Wrong** 28 | 29 | ```python 30 | class MyClass(object): 31 | def __init__(self): 32 | super(MyClass, self).__init__() 33 | 34 | self.height = 5 35 | 36 | def resize(self, width, height): 37 | self.height = height 38 | self.width = width 39 | ``` 40 | 41 | **Right** 42 | 43 | ```python 44 | class MyClass(object): 45 | def __init__(self): 46 | super(MyClass, self).__init__() 47 | 48 | self.height = 5 49 | self.width = 5 50 | 51 | def resize(self, width, height): 52 | self.height = height 53 | self.width = width 54 | ``` 55 | 56 | The reason is discoverability. When members are attached to `self` in any subsequent method, it becomes difficult to tell whether it is being created, or modified. More importantly, it becomes impossible to tell which member is used externally. 57 | 58 | ```python 59 | from mymodule import MyClass 60 | 61 | myclass = MyClass() 62 | myclass.width = 5 63 | print(myclass.other_member) 64 | ``` 65 | 66 | And at that point, impossible to maintain backwards compatibility should any of the methods creating new members be removed or refactored. 67 | 68 |
69 | 70 | ### Relative imports 71 | 72 | Where possible, relatively reference the root mgear package. 73 | 74 | **Wrong** 75 | 76 | ```python 77 | from mgear.core import rigbits 78 | ``` 79 | 80 | **Right** 81 | 82 | ```python 83 | from .maya import rigbits 84 | ``` 85 | 86 | This enables mgear to be bundled together with another library, e.g. `from .vendor.mgear import maya` and also avoids mgear being picked up from another location on a user's machine and PYTHONPATH. It also shortens the import line, which is always nice. 87 | 88 |
89 | 90 | ### Avoid `import as` 91 | 92 | Where possible, avoid the use of `import ... as ...`. 93 | 94 | ```python 95 | from mgear.core import rigbits as rb 96 | ``` 97 | 98 | This makes it more difficult to understand where a particular call is coming from, when read by someone who didn't initially make that import. 99 | 100 | ```python 101 | swg.run_important_function() 102 | # What does this do? :O 103 | ``` 104 | 105 |
106 | 107 | ### Tuple versus List 108 | 109 | Use List when mutability is required or intended, tuple otherwise. 110 | 111 | ```python 112 | for item in ("good", "use", "of", "tuple"): 113 | pass 114 | ``` 115 | 116 | Tuples will tell you and the user when used them in an unintended way. 117 | 118 | ```python 119 | # You 120 | immutable = (1, 2, 3) 121 | 122 | # User 123 | immutable.append(4) 124 | # ERROR 125 | ``` 126 | 127 | Whereas a list would not, and cause a difficult-to-debug error. The fabled "Works on my machine (tm)". 128 | 129 |
130 | 131 | ### Mutable arguments 132 | 133 | Never use a mutable object in an argument signature. 134 | 135 | ```python 136 | def function(wrong=[]): 137 | wrong.append(1) 138 | print(wrong) 139 | 140 | 141 | function() 142 | # [1] 143 | function() 144 | # [1, 1] 145 | function() 146 | # [1, 1, 1] 147 | ``` 148 | 149 | The same goes for `{}`. Instead, pass `None` and convert internally. 150 | 151 | ```python 152 | def function(wrong=None): 153 | wrong = wrong or [] 154 | wrong.append(1) 155 | print(wrong) 156 | 157 | function() 158 | # [1] 159 | function() 160 | # [1] 161 | function() 162 | # [1] 163 | ``` 164 | 165 |
166 | 167 | ### Docstrings 168 | 169 | All docstrings are written in Google Napoleon format. 170 | 171 | ```python 172 | def function(a, b=True): 173 | """Summary here, no line breaks 174 | 175 | Long description here. 176 | 177 | Arguments: 178 | a (str): A first argument, mandatory 179 | b (bool, optional): A second argument 180 | 181 | Example: 182 | >>> print("A doctest") 183 | 'A doctest' 184 | 185 | """ 186 | ``` 187 | 188 |
189 | 190 | ### Quotation Marks 191 | 192 | Default to double-ticks, fallback to single-tick. 193 | 194 | ```python 195 | # Right 196 | side = "Right" 197 | 198 | # Wrong 199 | side = 'Left' 200 | 201 | # Right 202 | def function(): 203 | """It's a single tick""" 204 | 205 | # Wrong 206 | def function(): 207 | '''It's a single tick""" 208 | ``` 209 | 210 |
211 | 212 | ### Code Style 213 | 214 | We are refactoring all the code to [PEP8](https://www.python.org/dev/peps/pep-0008/) 215 | If you want to contribute please follow the PEP8 standard 216 | 217 |
218 | 219 | #### Ignore PEP8 Errors 220 | 221 | "W503": [Break bfore or after binary operator](https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator) 222 | 223 | #### Line break for long arguments 224 | 225 | ```python 226 | 227 | # No 228 | function(arg1, arg2, 229 | kwarg=False, kwarg2=True) 230 | 231 | # No 232 | function( 233 | arg1, arg2, 234 | kwarg=False, kwarg2=True) 235 | 236 | # Yes 237 | function(arg1, 238 | arg2, 239 | kwarg=False, 240 | kwarg2=True) 241 | # Yes 242 | function( 243 | arg1, arg2, kwarg=False, kwarg2=True) 244 | 245 | # OK 246 | function( 247 | arg1, 248 | arg2, 249 | kwarg=False, 250 | kwarg2=True) 251 | 252 | ``` -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2011-2018 Jeremie Passerin, Miquel Campos - 2018-2019 The mGear-Dev Organization 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### mGear: Rigging framework for Autodesk Maya 2 | 3 | End-user distribution of mgear. 4 | 5 |
6 | 7 | mgear consists of many parts, developed independently. Some of these parts fit together at particular versions, this repository maintains a collection of versions that are compatible with each other. 8 | 9 | - See [**Releases**](../../releases) for a ready-to-use distribution of mgear. 10 | 11 | The general rule is; each individual repository MUST be usable standalone (in conjuntion with core) to facilitate independent development of each part in isolation from each other. This repository is then an *additional* method with which to distribute and consume mgear, primarily intended for the end-user who *does not* want to contribute back to the project through GitHub. 12 |
13 | 14 | mGear is a rigging framework for Autodesk Maya. mGear provides a set of convenient modules, tools and c++ solvers to streamline the development of rigging and animation tools. 15 | 16 | Originally mGear was design and develope by Jeremie Passerin and Miquel Campos. Currently mGear is maintained by the mgear-dev organization team. 17 | 18 | **MGEAR is under the terms of the MIT License** 19 | 20 | ### Useful links: 21 | 22 | - [mGear Web](http://www.mgear-framework.com/) 23 | - [mGear Forum](http://forum.mgear-framework.com/) 24 | - [mGear Youtube channel](https://www.youtube.com/c/mgearriggingframework) 25 | - [API Docs](https://www.mgear-framework.com/mgear_dist/) 26 | - [Release Log](http://www.mgear-framework.com/mgear/releaseLog.html) 27 | - For the official release, with compiled solvers: [Releases](https://github.com/mgear-dev/mgear/releases) 28 | 29 | ### [Latest release](https://github.com/mgear-dev/mgear_dist/releases) 30 | 31 | 32 | ### How to start your local git repository to build ([more instructions](https://github.com/mgear-dev/mgear_dist/blob/master/BUILD.md)) 33 | 34 | ``` 35 | git clone https://github.com/mgear-dev/mgear_dist.git --recursive 36 | ``` 37 | 38 | **Also to sync to the latest commit in every submodule** 39 | 40 | ``` 41 | git submodule foreach git pull origin master 42 | ``` 43 | 44 | ### Architecture 45 | 46 | -------------------------------------------------------------------------------- /SConstruct: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import excons 4 | import excons.config 5 | import excons.tools.maya as maya 6 | import excons.tools.gl as gl 7 | 8 | maya.SetupMscver() 9 | env = excons.MakeBaseEnv() 10 | 11 | 12 | version = (3, 7, 11) 13 | versionstr = "%d.%d.%d" % version 14 | platname = {"win32": "windows", "darwin": "osx"}.get(sys.platform, "linux") 15 | outprefix = "platforms/%s/%s/%s/plug-ins" % (maya.Version(nice=True), platname, excons.arch_dir) 16 | 17 | outdir = excons.OutputBaseDirectory() 18 | 19 | gen = excons.config.AddGenerator(env, "mgear", {"MGEAR_VERSION": "[%d, %d, %d]" % version, 20 | "MGEAR_MAJMIN_VERSION": "%d.%d" % (version[0], version[1]), 21 | "MGEAR_VERSION_MAJOR": "%d" % version[0], 22 | "MGEAR_VERSION_MINOR": "%d" % version[1], 23 | "MGEAR_VERSION_PATCH": "%d" % version[2]}) 24 | 25 | mgearinit = gen("framework/scripts/mgear/__init__.py", "framework/scripts/mgear/__init__.py.in") 26 | mgearversion = gen("framework/scripts/mgear/version.py", "framework/scripts/mgear/version.py.in") 27 | mgearmod = gen("mGear.mod", "mGear.mod.in") 28 | mgearpy = filter(lambda x: not os.path.basename(x).startswith("__init__.py"), excons.glob("scripts/mgear/*")) 29 | qtpy = ["Qtdotpy/Qt.py"] 30 | qjason = ["vendor/QJsonModel/qjsonmodel.py"] 31 | NoClean(mgearinit + mgearmod) 32 | 33 | defines = [] 34 | if sys.platform == "win32": 35 | defines.append("NOMINMAX") 36 | 37 | 38 | def maya_math_nodes_setup(env): 39 | env.Append(CPPDEFINES=[('NODE_NAME_PREFIX', '\"\\\"math_\\\"\"')]) 40 | env.Append(CCFLAGS=["-Os"]) 41 | env.Append(CPPFLAGS=" -DPROJECT_VERSION=\"\\\"1.4.0\\\"\"") 42 | 43 | 44 | def CVWrapSetup(env): 45 | if sys.platform == "win32": 46 | env.Append(CCFLAGS=["/arch:AVX"]) 47 | else: 48 | env.Append(CCFLAGS=["-mavx"]) 49 | 50 | 51 | targets = [ 52 | { 53 | "name": "mgear_core", 54 | "type": "install", 55 | "desc": "mgear core python modules", 56 | "install": {"scripts": excons.glob("framework/scripts/*.py"), 57 | "scripts/mgear": mgearpy + mgearinit + mgearversion, 58 | "scripts/mgear/": excons.glob("framework/scripts/mgear/menu.py"), 59 | "scripts/mgear/vendor": qjason + qtpy + excons.glob("framework/scripts/mgear/vendor/__init__.py"), 60 | "scripts/mgear/core": excons.glob("framework/mgear_core/scripts/mgear/core/*"), 61 | "scripts/mgear/crank": excons.glob("framework/crank/scripts/mgear/crank/*"), 62 | "scripts/mgear/animbits": excons.glob("framework/animbits/scripts/mgear/animbits/*"), 63 | "scripts/mgear/anim_picker": excons.glob("framework/anim_picker/scripts/mgear/anim_picker/*"), 64 | "scripts/mgear/rigbits": excons.glob("framework/rigbits/scripts/mgear/rigbits/*"), 65 | "scripts/mgear/simpleRig": excons.glob("framework/simpleRig/scripts/mgear/simpleRig/*"), 66 | "scripts/mgear/synoptic": excons.glob("framework/synoptic/scripts/mgear/synoptic/*"), 67 | "scripts/mgear/shifter": excons.glob("framework/shifter/scripts/mgear/shifter/*"), 68 | "scripts/mgear/flex": excons.glob("framework/flex/scripts/mgear/flex/*"), 69 | "scripts/mgear/shifter_classic_components": excons.glob("framework/shifter_classic_components/scripts/mgear/shifter_classic_components/*"), 70 | "scripts/mgear/shifter_epic_components": excons.glob("framework/shifter_epic_components/scripts/mgear/shifter_epic_components/*"), 71 | "scripts/mgear/cfxbits": excons.glob("framework/cfxbits/scripts/mgear/cfxbits/*"), 72 | "": mgearmod} 73 | }, 74 | { 75 | "name": "cvwrap", 76 | "type": "dynamicmodule", 77 | "desc": "wrap deformer plugin", 78 | "prefix": outprefix, 79 | "bldprefix": maya.Version(), 80 | "ext": maya.PluginExt(), 81 | "defs": defines, 82 | "incdirs": ["src"], 83 | "srcs": excons.glob("plugins/cvwrap/src/*.cpp"), 84 | "custom": [maya.Require, CVWrapSetup], 85 | "libs": ([] if maya.Version(asString=False) < 201600 else ["clew"]), 86 | "install": {"scripts": excons.glob("plugins/cvwrap/scripts/*")} 87 | }, 88 | { 89 | "name": "mgear_solvers", 90 | "type": "dynamicmodule", 91 | "desc": "mgear solvers plugin", 92 | "prefix": outprefix, 93 | "bldprefix": maya.Version(), 94 | "ext": maya.PluginExt(), 95 | "defs": defines, 96 | "incdirs": ["plugins/mgear_solvers/src"], 97 | "srcs": excons.glob("plugins/mgear_solvers/src/*.cpp"), 98 | "custom": [maya.Require] 99 | }, 100 | { 101 | "name": "maya-math-nodes", 102 | "type": "dynamicmodule", 103 | "desc": "math nodes plugin", 104 | "prefix": outprefix, 105 | "bldprefix": maya.Version(), 106 | "ext": maya.PluginExt(), 107 | "defs": defines, 108 | "incdirs": ["plugins/src"], 109 | "srcs": excons.glob("plugins/maya-math-nodes/src/*.cpp"), 110 | "custom": [maya.Require, maya_math_nodes_setup] 111 | }, 112 | { 113 | "name": "grim_IK", 114 | "type": "dynamicmodule", 115 | "desc": "grim IK solver", 116 | "prefix": outprefix, 117 | "bldprefix": maya.Version(), 118 | "ext": maya.PluginExt(), 119 | "defs": defines, 120 | "incdirs": ["plugins/grim_IK"], 121 | "srcs": excons.glob("plugins/grim_IK/*.cpp"), 122 | "custom": [maya.Require] 123 | }, 124 | { 125 | "name": "weightDriver", 126 | "type": "dynamicmodule", 127 | "desc": "weightDriver node", 128 | "prefix": outprefix, 129 | "bldprefix": maya.Version(), 130 | "ext": maya.PluginExt(), 131 | "defs": defines, 132 | "incdirs": ["plugins/weightDriver"], 133 | "srcs": excons.glob("plugins/weightDriver/source/*.cpp"), 134 | "custom": [maya.Require, gl.Require], 135 | "install": {"scripts": excons.glob("plugins/weightDriver/modules/weightDriver/scripts/*")} 136 | } 137 | ] 138 | 139 | excons.AddHelpTargets(mgear="mgear maya framework (mgear_core, mgear_solvers, cvwrap, grim_IK, maya-math-nodes)") 140 | 141 | td = excons.DeclareTargets(env, targets) 142 | 143 | env.Alias("mgear", [td["mgear_core"], td["mgear_solvers"], td["cvwrap"], td["grim_IK"], td["maya-math-nodes"], td["weightDriver"]]) 144 | 145 | td["python"] = filter(lambda x: os.path.splitext(str(x))[1] != ".mel", Glob(outdir + "scripts/*")) 146 | td["scripts"] = Glob(outdir + "scripts/*.mel") 147 | 148 | pluginsdir = "/plug-ins/%s/%s" % (maya.Version(nice=True), excons.EcosystemPlatform()) 149 | 150 | ecodirs = {"mgear_solvers": pluginsdir, 151 | "cvwrap": pluginsdir, 152 | "grim_IK": pluginsdir, 153 | "maya-math-nodes": pluginsdir, 154 | "weightDriver": pluginsdir, 155 | "python": "/python", 156 | "scripts": "/scripts"} 157 | 158 | excons.EcosystemDist(env, "mgear.env", ecodirs, version=versionstr, targets=td) 159 | 160 | Default(["mgear"]) 161 | -------------------------------------------------------------------------------- /buildAll: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | scons -j8 no-cache=1 with-maya=2014 4 | scons -j8 no-cache=1 with-maya=2015 5 | scons -j8 no-cache=1 with-maya=2016 with-mayadevkit=/usr/autodesk/maya2016/devkitBase 6 | scons -j8 no-cache=1 with-maya=2017 with-mayadevkit=/usr/autodesk/maya2017/devkitBase 7 | scons -j8 no-cache=1 with-maya=2018 with-mayadevkit=/usr/autodesk/maya2018/devkitBase 8 | scons -j8 no-cache=1 with-maya=2019 with-mayadevkit=/usr/autodesk/maya2019/devkitBase 9 | -------------------------------------------------------------------------------- /buildAll.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | scons -j8 no-cache=1 with-maya=2018 4 | scons -j8 no-cache=1 with-maya=2019 5 | scons -j8 no-cache=1 with-maya=2020 6 | -------------------------------------------------------------------------------- /deploy.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | git submodule update --recursive --remote 4 | scons -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | PAPER = 8 | BUILDDIR = build 9 | 10 | # User-friendly check for sphinx-build 11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) 12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) 13 | endif 14 | 15 | # Internal variables. 16 | PAPEROPT_a4 = -D latex_paper_size=a4 17 | PAPEROPT_letter = -D latex_paper_size=letter 18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source 19 | # the i18n builder cannot share the environment and doctrees with the others 20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source 21 | 22 | .PHONY: help 23 | help: 24 | @echo "Please use \`make ' where is one of" 25 | @echo " html to make standalone HTML files" 26 | @echo " dirhtml to make HTML files named index.html in directories" 27 | @echo " singlehtml to make a single large HTML file" 28 | @echo " pickle to make pickle files" 29 | @echo " json to make JSON files" 30 | @echo " htmlhelp to make HTML files and a HTML help project" 31 | @echo " qthelp to make HTML files and a qthelp project" 32 | @echo " applehelp to make an Apple Help Book" 33 | @echo " devhelp to make HTML files and a Devhelp project" 34 | @echo " epub to make an epub" 35 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" 36 | @echo " latexpdf to make LaTeX files and run them through pdflatex" 37 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" 38 | @echo " text to make text files" 39 | @echo " man to make manual pages" 40 | @echo " texinfo to make Texinfo files" 41 | @echo " info to make Texinfo files and run them through makeinfo" 42 | @echo " gettext to make PO message catalogs" 43 | @echo " changes to make an overview of all changed/added/deprecated items" 44 | @echo " xml to make Docutils-native XML files" 45 | @echo " pseudoxml to make pseudoxml-XML files for display purposes" 46 | @echo " linkcheck to check all external links for integrity" 47 | @echo " doctest to run all doctests embedded in the documentation (if enabled)" 48 | @echo " coverage to run coverage check of the documentation (if enabled)" 49 | 50 | .PHONY: clean 51 | clean: 52 | rm -rf $(BUILDDIR)/* 53 | 54 | .PHONY: html 55 | html: 56 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 57 | @echo 58 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 59 | 60 | .PHONY: dirhtml 61 | dirhtml: 62 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml 63 | @echo 64 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 65 | 66 | .PHONY: singlehtml 67 | singlehtml: 68 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml 69 | @echo 70 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." 71 | 72 | .PHONY: pickle 73 | pickle: 74 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle 75 | @echo 76 | @echo "Build finished; now you can process the pickle files." 77 | 78 | .PHONY: json 79 | json: 80 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json 81 | @echo 82 | @echo "Build finished; now you can process the JSON files." 83 | 84 | .PHONY: htmlhelp 85 | htmlhelp: 86 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp 87 | @echo 88 | @echo "Build finished; now you can run HTML Help Workshop with the" \ 89 | ".hhp project file in $(BUILDDIR)/htmlhelp." 90 | 91 | .PHONY: qthelp 92 | qthelp: 93 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp 94 | @echo 95 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ 96 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:" 97 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/mGearMayariggingframework.qhcp" 98 | @echo "To view the help file:" 99 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/mGearMayariggingframework.qhc" 100 | 101 | .PHONY: applehelp 102 | applehelp: 103 | $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp 104 | @echo 105 | @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." 106 | @echo "N.B. You won't be able to view it unless you put it in" \ 107 | "~/Library/Documentation/Help or install it in your application" \ 108 | "bundle." 109 | 110 | .PHONY: devhelp 111 | devhelp: 112 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp 113 | @echo 114 | @echo "Build finished." 115 | @echo "To view the help file:" 116 | @echo "# mkdir -p $$HOME/.local/share/devhelp/mGearMayariggingframework" 117 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/mGearMayariggingframework" 118 | @echo "# devhelp" 119 | 120 | .PHONY: epub 121 | epub: 122 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub 123 | @echo 124 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub." 125 | 126 | .PHONY: latex 127 | latex: 128 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 129 | @echo 130 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." 131 | @echo "Run \`make' in that directory to run these through (pdf)latex" \ 132 | "(use \`make latexpdf' here to do that automatically)." 133 | 134 | .PHONY: latexpdf 135 | latexpdf: 136 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 137 | @echo "Running LaTeX files through pdflatex..." 138 | $(MAKE) -C $(BUILDDIR)/latex all-pdf 139 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 140 | 141 | .PHONY: latexpdfja 142 | latexpdfja: 143 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 144 | @echo "Running LaTeX files through platex and dvipdfmx..." 145 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja 146 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 147 | 148 | .PHONY: text 149 | text: 150 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text 151 | @echo 152 | @echo "Build finished. The text files are in $(BUILDDIR)/text." 153 | 154 | .PHONY: man 155 | man: 156 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man 157 | @echo 158 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man." 159 | 160 | .PHONY: texinfo 161 | texinfo: 162 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 163 | @echo 164 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." 165 | @echo "Run \`make' in that directory to run these through makeinfo" \ 166 | "(use \`make info' here to do that automatically)." 167 | 168 | .PHONY: info 169 | info: 170 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 171 | @echo "Running Texinfo files through makeinfo..." 172 | make -C $(BUILDDIR)/texinfo info 173 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." 174 | 175 | .PHONY: gettext 176 | gettext: 177 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale 178 | @echo 179 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 180 | 181 | .PHONY: changes 182 | changes: 183 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes 184 | @echo 185 | @echo "The overview file is in $(BUILDDIR)/changes." 186 | 187 | .PHONY: linkcheck 188 | linkcheck: 189 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck 190 | @echo 191 | @echo "Link check complete; look for any errors in the above output " \ 192 | "or in $(BUILDDIR)/linkcheck/output.txt." 193 | 194 | .PHONY: doctest 195 | doctest: 196 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest 197 | @echo "Testing of doctests in the sources finished, look at the " \ 198 | "results in $(BUILDDIR)/doctest/output.txt." 199 | 200 | .PHONY: coverage 201 | coverage: 202 | $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage 203 | @echo "Testing of coverage in the sources finished, look at the " \ 204 | "results in $(BUILDDIR)/coverage/python.txt." 205 | 206 | .PHONY: xml 207 | xml: 208 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml 209 | @echo 210 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml." 211 | 212 | .PHONY: pseudoxml 213 | pseudoxml: 214 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml 215 | @echo 216 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." 217 | -------------------------------------------------------------------------------- /docs/exts/changelog_links.py: -------------------------------------------------------------------------------- 1 | # Licensed under a 3-clause BSD style license - see LICENSE.rst 2 | """ 3 | This sphinx extension makes the issue numbers in the changelog into links to 4 | GitHub issues. 5 | """ 6 | 7 | from __future__ import print_function 8 | 9 | import re 10 | 11 | from docutils.nodes import Text, reference 12 | 13 | BLOCK_PATTERN = re.compile('\[.+#.+\]', flags=re.DOTALL) 14 | ISSUE_PATTERN = re.compile('#[0-9]+') 15 | REPO_PATTERN = re.compile('[a-zA-Z_]+#') #"^[a-zA-Z0-9_]*$" 16 | 17 | 18 | def process_changelog_links(app, doctree, docname): 19 | 20 | # if 'changelog' in docname and app.config.github_issues_url is not None: 21 | if app.config.github_issues_url is not None: 22 | 23 | for item in doctree.traverse(): 24 | 25 | if isinstance(item, Text): 26 | 27 | # We build a new list of items to replace the current item. If 28 | # a link is found, we need to use a 'reference' item. 29 | children = [] 30 | 31 | # First cycle through blocks of issues (delimited by []) then 32 | # iterate inside each one to find the individual issues. 33 | prev_block_end = 0 34 | for block in BLOCK_PATTERN.finditer(item): 35 | block_start, block_end = block.start(), block.end() 36 | children.append(Text(item[prev_block_end:block_start])) 37 | block = item[block_start:block_end] 38 | prev_end = 0 39 | for m, rm in zip(ISSUE_PATTERN.finditer(block), REPO_PATTERN.finditer(block)): 40 | start, end = m.start(), m.end() 41 | children.append(Text(block[prev_end:start])) 42 | issue_number = block[start:end] 43 | 44 | start2, end2 = rm.start(),rm.end() 45 | # children.append(Text(block[prev_end:start])) 46 | repo = block[start2:end2][:-1] 47 | aurl = app.config.github_issues_url.replace("mgear_dist", repo) 48 | print(aurl) 49 | 50 | children.append(reference(text=issue_number, 51 | name=issue_number, 52 | refuri=aurl + issue_number[1:])) 53 | print(issue_number) 54 | print(repo) 55 | print(item) 56 | 57 | # for m in REPO_PATTERN.finditer(block): 58 | # start, end = m.start(), m.end() 59 | # children.append(Text(block[prev_end:start])) 60 | # issue_number = block[start:end] 61 | # children.append(reference(text=issue_number, 62 | # name=issue_number, 63 | # refuri=app.config.github_issues_url + issue_number[1:])) 64 | # # print(app.config.github_issues_url) 65 | # print(issue_number) 66 | # # print(item) 67 | 68 | prev_end = end 69 | 70 | 71 | prev_block_end = block_end 72 | 73 | # If no issues were found, this adds the whole item, 74 | # otherwise it adds the remaining text. 75 | children.append(Text(block[prev_end:block_end])) 76 | 77 | # If no blocks were found, this adds the whole item, otherwise 78 | # it adds the remaining text. 79 | children.append(Text(item[prev_block_end:])) 80 | 81 | # Replace item by the new list of items we have generated, 82 | # which may contain links. 83 | item.parent.replace(item, children) 84 | 85 | 86 | def setup(app): 87 | app.connect('doctree-resolved', process_changelog_links) 88 | app.add_config_value('github_issues_url', None, True) 89 | -------------------------------------------------------------------------------- /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 | set I18NSPHINXOPTS=%SPHINXOPTS% source 11 | if NOT "%PAPER%" == "" ( 12 | set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% 13 | set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% 14 | ) 15 | 16 | if "%1" == "" goto help 17 | 18 | if "%1" == "help" ( 19 | :help 20 | echo.Please use `make ^` where ^ is one of 21 | echo. html to make standalone HTML files 22 | echo. dirhtml to make HTML files named index.html in directories 23 | echo. singlehtml to make a single large HTML file 24 | echo. pickle to make pickle files 25 | echo. json to make JSON files 26 | echo. htmlhelp to make HTML files and a HTML help project 27 | echo. qthelp to make HTML files and a qthelp project 28 | echo. devhelp to make HTML files and a Devhelp project 29 | echo. epub to make an epub 30 | echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter 31 | echo. text to make text files 32 | echo. man to make manual pages 33 | echo. texinfo to make Texinfo files 34 | echo. gettext to make PO message catalogs 35 | echo. changes to make an overview over all changed/added/deprecated items 36 | echo. xml to make Docutils-native XML files 37 | echo. pseudoxml to make pseudoxml-XML files for display purposes 38 | echo. linkcheck to check all external links for integrity 39 | echo. doctest to run all doctests embedded in the documentation if enabled 40 | echo. coverage to run coverage check of the documentation if enabled 41 | goto end 42 | ) 43 | 44 | if "%1" == "clean" ( 45 | for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i 46 | del /q /s %BUILDDIR%\* 47 | goto end 48 | ) 49 | 50 | 51 | REM Check if sphinx-build is available and fallback to Python version if any 52 | %SPHINXBUILD% 1>NUL 2>NUL 53 | if errorlevel 9009 goto sphinx_python 54 | goto sphinx_ok 55 | 56 | :sphinx_python 57 | 58 | set SPHINXBUILD=python -m sphinx.__init__ 59 | %SPHINXBUILD% 2> nul 60 | if errorlevel 9009 ( 61 | echo. 62 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 63 | echo.installed, then set the SPHINXBUILD environment variable to point 64 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 65 | echo.may add the Sphinx directory to PATH. 66 | echo. 67 | echo.If you don't have Sphinx installed, grab it from 68 | echo.http://sphinx-doc.org/ 69 | exit /b 1 70 | ) 71 | 72 | :sphinx_ok 73 | 74 | 75 | if "%1" == "html" ( 76 | %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 77 | if errorlevel 1 exit /b 1 78 | echo. 79 | echo.Build finished. The HTML pages are in %BUILDDIR%/html. 80 | goto end 81 | ) 82 | 83 | if "%1" == "dirhtml" ( 84 | %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml 85 | if errorlevel 1 exit /b 1 86 | echo. 87 | echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. 88 | goto end 89 | ) 90 | 91 | if "%1" == "singlehtml" ( 92 | %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml 93 | if errorlevel 1 exit /b 1 94 | echo. 95 | echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. 96 | goto end 97 | ) 98 | 99 | if "%1" == "pickle" ( 100 | %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle 101 | if errorlevel 1 exit /b 1 102 | echo. 103 | echo.Build finished; now you can process the pickle files. 104 | goto end 105 | ) 106 | 107 | if "%1" == "json" ( 108 | %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json 109 | if errorlevel 1 exit /b 1 110 | echo. 111 | echo.Build finished; now you can process the JSON files. 112 | goto end 113 | ) 114 | 115 | if "%1" == "htmlhelp" ( 116 | %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp 117 | if errorlevel 1 exit /b 1 118 | echo. 119 | echo.Build finished; now you can run HTML Help Workshop with the ^ 120 | .hhp project file in %BUILDDIR%/htmlhelp. 121 | goto end 122 | ) 123 | 124 | if "%1" == "qthelp" ( 125 | %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp 126 | if errorlevel 1 exit /b 1 127 | echo. 128 | echo.Build finished; now you can run "qcollectiongenerator" with the ^ 129 | .qhcp project file in %BUILDDIR%/qthelp, like this: 130 | echo.^> qcollectiongenerator %BUILDDIR%\qthelp\mGearMayariggingframework.qhcp 131 | echo.To view the help file: 132 | echo.^> assistant -collectionFile %BUILDDIR%\qthelp\mGearMayariggingframework.ghc 133 | goto end 134 | ) 135 | 136 | if "%1" == "devhelp" ( 137 | %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp 138 | if errorlevel 1 exit /b 1 139 | echo. 140 | echo.Build finished. 141 | goto end 142 | ) 143 | 144 | if "%1" == "epub" ( 145 | %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub 146 | if errorlevel 1 exit /b 1 147 | echo. 148 | echo.Build finished. The epub file is in %BUILDDIR%/epub. 149 | goto end 150 | ) 151 | 152 | if "%1" == "latex" ( 153 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 154 | if errorlevel 1 exit /b 1 155 | echo. 156 | echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. 157 | goto end 158 | ) 159 | 160 | if "%1" == "latexpdf" ( 161 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 162 | cd %BUILDDIR%/latex 163 | make all-pdf 164 | cd %~dp0 165 | echo. 166 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 167 | goto end 168 | ) 169 | 170 | if "%1" == "latexpdfja" ( 171 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex 172 | cd %BUILDDIR%/latex 173 | make all-pdf-ja 174 | cd %~dp0 175 | echo. 176 | echo.Build finished; the PDF files are in %BUILDDIR%/latex. 177 | goto end 178 | ) 179 | 180 | if "%1" == "text" ( 181 | %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text 182 | if errorlevel 1 exit /b 1 183 | echo. 184 | echo.Build finished. The text files are in %BUILDDIR%/text. 185 | goto end 186 | ) 187 | 188 | if "%1" == "man" ( 189 | %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man 190 | if errorlevel 1 exit /b 1 191 | echo. 192 | echo.Build finished. The manual pages are in %BUILDDIR%/man. 193 | goto end 194 | ) 195 | 196 | if "%1" == "texinfo" ( 197 | %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo 198 | if errorlevel 1 exit /b 1 199 | echo. 200 | echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. 201 | goto end 202 | ) 203 | 204 | if "%1" == "gettext" ( 205 | %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale 206 | if errorlevel 1 exit /b 1 207 | echo. 208 | echo.Build finished. The message catalogs are in %BUILDDIR%/locale. 209 | goto end 210 | ) 211 | 212 | if "%1" == "changes" ( 213 | %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes 214 | if errorlevel 1 exit /b 1 215 | echo. 216 | echo.The overview file is in %BUILDDIR%/changes. 217 | goto end 218 | ) 219 | 220 | if "%1" == "linkcheck" ( 221 | %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck 222 | if errorlevel 1 exit /b 1 223 | echo. 224 | echo.Link check complete; look for any errors in the above output ^ 225 | or in %BUILDDIR%/linkcheck/output.txt. 226 | goto end 227 | ) 228 | 229 | if "%1" == "doctest" ( 230 | %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest 231 | if errorlevel 1 exit /b 1 232 | echo. 233 | echo.Testing of doctests in the sources finished, look at the ^ 234 | results in %BUILDDIR%/doctest/output.txt. 235 | goto end 236 | ) 237 | 238 | if "%1" == "coverage" ( 239 | %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage 240 | if errorlevel 1 exit /b 1 241 | echo. 242 | echo.Testing of coverage in the sources finished, look at the ^ 243 | results in %BUILDDIR%/coverage/python.txt. 244 | goto end 245 | ) 246 | 247 | if "%1" == "xml" ( 248 | %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml 249 | if errorlevel 1 exit /b 1 250 | echo. 251 | echo.Build finished. The XML files are in %BUILDDIR%/xml. 252 | goto end 253 | ) 254 | 255 | if "%1" == "pseudoxml" ( 256 | %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml 257 | if errorlevel 1 exit /b 1 258 | echo. 259 | echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. 260 | goto end 261 | ) 262 | 263 | :end 264 | -------------------------------------------------------------------------------- /docs/source/FAQ.rst: -------------------------------------------------------------------------------- 1 | === 2 | FAQ 3 | === 4 | 5 | What is mGear? 6 | *************** 7 | 8 | mGear is a rigging and animation framework for Autodesk Maya. mGear provides a set of convenient modules, tools and c++ solvers to streamline the development of rigging and animation tools. 9 | 10 | Is mGear a modular rigging system? 11 | **************************************** 12 | 13 | Yes, mGear have modular rigging system called **Shifter**. 14 | 15 | Is mGear providing animation tools? 16 | **************************************** 17 | 18 | Yes. Synoptic, Crank and softTweaks are animation tools. And we have more in the kitchen. 19 | 20 | Will be always free and open source? 21 | ************************************** 22 | 23 | **Yes!** 24 | 25 | Who can use mGear? 26 | ******************** 27 | 28 | mGear is for everybody who needs to create a rigs or develop rigging tools. For example riggers and animators without programming knowledge can use it out of the box to generate infinite variety of rigs combinations. TDs with Python and C++ knowledge can also extend the functionality and adapt it to her/his needs/pipeline. 29 | 30 | Why mGear's Shifter use custom solvers instead of Maya standard solvers? 31 | ************************************************************************* 32 | 33 | The default components provides with **Shifter** are using custom solvers to simplify the rig construction encapsulating complex functionality and improve the playback performance. 34 | But you can create your own component without using the custom solvers. 35 | 36 | Does mGear have the same functions/tools of Gear Softimage? 37 | ************************************************************ 38 | 39 | No, mGear doesn’t have all the functions that Gear has. Some of the functions will be implemented in the future, some of them never will be implemented. It depends if the tool can be apply to Maya workflow and philosophy. 40 | 41 | 42 | What I get out of the box? 43 | *************************** 44 | 45 | * Shifter: Modular rigging system. (Exp: bipeds, quadrupeds, birds, creatures, robots, mechanical props, unlimited limbs, etc... ) 46 | * C++ Solvers: High performance rigs. 47 | * Synoptic viewer: Animators interface and picker 48 | * Rigbits: General purpose rigging tools. 49 | 50 | Why should I add mGear to my pipeline? 51 | ************************************** 52 | 53 | * mGear is free and open source 54 | * Don’t have any license cost, so it is ideal for scalability. 55 | * mGear is production proven tool since 2010 (Softimage Gear 1.0) 56 | * Shifter modular rigging system is easy to learn and fun to use. 57 | * Ready for game engine. 58 | 59 | 60 | Who is currently developing mGear? 61 | **************************************** 62 | 63 | The mGear Development Team. Please check the website or github for more information. 64 | -------------------------------------------------------------------------------- /docs/source/animbitsModules.rst: -------------------------------------------------------------------------------- 1 | ######## 2 | Animbits 3 | ######## 4 | 5 | **Content:** 6 | 7 | * `Introduction`_ 8 | * `Modules`_ 9 | 10 | Introduction 11 | ------------ 12 | 13 | Animbits is a animation commont library with tools and functions for the animators. 14 | 15 | 16 | 17 | Modules 18 | ------- 19 | 20 | .. autosummary:: 21 | :toctree: generated 22 | 23 | mgear.animbits 24 | mgear.animbits.menu 25 | mgear.animbits.softTweaks 26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/source/animbitsUserDocumentation.rst: -------------------------------------------------------------------------------- 1 | Animbits User Documentation 2 | ########################### 3 | 4 | Tools for animators. 5 | 6 | .. image:: images/animbits/animbits_menu.png 7 | :align: center 8 | :scale: 95% 9 | 10 | 11 | Channel Master 12 | ============== 13 | 14 | Channel Master is an alternative ChannelBox, but allowing the user to create custom configurations and store it. 15 | 16 | .. image:: images/animbits/channel_master.png 17 | :align: center 18 | :scale: 95% 19 | 20 | The configuration is stored in a persistent node in the scene. The data can be exported and imported. 21 | 22 | .. image:: images/animbits/channel_master_node2.png 23 | :align: center 24 | :scale: 95% 25 | 26 | The channels can be a mix from different objects. The only rule is that the object that contains the channel and the channel master node should be in the same namespace. 27 | 28 | However the internal data is not stored with name spaces, so the same configuration can be re-used in different name spaces. 29 | 30 | The Main tab works like the regular ChannelBox and the data is rebuild on the flight. The advantage is that is possible to lock the content using the lock icon. Also create a node is not required to use the main tab 31 | 32 | To create custom configuration, require a custom node. 33 | 34 | .. warning:: 35 | Custom configurations needs to be saved. If to be stored in the node. Missing to save the new configuration will revert the channel configuration to the previous state when the node is refresh or change node in the drop-down menu 36 | 37 | 38 | .. warning:: 39 | The tool has been design to avoid bottleneck the evaluation while playback by turning off the refresh and updating on demand in some situations. 40 | When scrubbing the timeline still updating the channel values. This will take some FPS away (Only when Scrubbing, not in Playback). 41 | 42 | If you need to do scrubbing a lot and need the performance. You can change the Channel Master to empty Main tab, by lock the tab when nothing is selected. Or Just close Channel Master 43 | 44 | We planning to add more control over this in the future. 45 | 46 | 47 | 48 | 49 | **File Menu:** 50 | 51 | .. image:: images/animbits/channel_master_menu_file.png 52 | :align: center 53 | :scale: 95% 54 | 55 | 56 | * **New Node:** Creates a new node 57 | 58 | Also is possible to add nodes from the node bar in the UI 59 | 60 | .. image:: images/animbits/channel_master_node.png 61 | :align: center 62 | :scale: 95% 63 | 64 | * **Save Current Node:** Save the current node configuration 65 | * **Export All Tabs:** Export the current node configuration to a Json file 66 | * **Export Current Tab:** Export current tab configuration to Json file 67 | * **Import:** Import and create a new node 68 | * **Import Add:** Import and add the configuration to an existing node 69 | 70 | 71 | **Display Menu:** 72 | 73 | .. image:: images/animbits/channel_master_menu_display.png 74 | :align: center 75 | :scale: 95% 76 | 77 | 78 | * **Channel Full Name:** Display the full name of the channel 79 | 80 | .. image:: images/animbits/channel_master_menu_display_fullname.png 81 | :align: center 82 | :scale: 95% 83 | 84 | * **Order:** Arrange the channels by Alphabetic or Default order 85 | 86 | 87 | **Keyframe Menu:** 88 | 89 | .. image:: images/animbits/channel_master_menu_keyframe.png 90 | :align: center 91 | :scale: 95% 92 | 93 | 94 | * **Keyframe:** Toggle a keyframe for all the channels in the current tab. If there is a channel that doesn't have keyframe will add keyframe. If all channels have keyframe it will remove the keyframe. 95 | * **Copy key:** Copy current values in the buffer 96 | * **Paste key:** Paste from buffer and set keyframe 97 | * **Delete current keyframe:** Delete the current tab keyframe 98 | * **Keyframe all tabs:** Keyframe command will be applied to all tabs. With this option active the toggle functionality will change to always key. 99 | 100 | 101 | **Tabs Menu:** 102 | 103 | .. image:: images/animbits/channel_master_menu_tab.png 104 | :align: center 105 | :scale: 95% 106 | 107 | * **New Tab:** Create new tab. 108 | * **Duplicate Tab:** Duplicate current Tab 109 | * **Rename Tab:** Rename current tab 110 | * **Delete Current Tab:** Delete current Tab 111 | 112 | Tabs can be added using the + icon in the tabs row 113 | 114 | .. image:: images/animbits/channel_master_add_tab.png 115 | :align: center 116 | :scale: 95% 117 | 118 | 119 | 120 | Channels 121 | -------- 122 | 123 | .. image:: images/animbits/channel_master_buttons.png 124 | :align: center 125 | :scale: 95% 126 | 127 | 1) **Keyframe button:** Same command as keyframe menu 128 | 2) **Copy key button:** Same command as keyframe menu 129 | 3) **Copy paste button:** Same command as keyframe menu 130 | 4) **Plus Button:** Add selected channels from ChannelBox to Channel Master 131 | 5) **Minus Button:** Remove SelecteT channels 132 | 6) **Lock refresh:** in Main Tab 133 | 134 | **Search channel:** will filter the channel list 135 | 136 | .. image:: images/animbits/channel_master_filter.png 137 | :align: center 138 | :scale: 95% 139 | 140 | 141 | **In the channels area we will find 2 context menus and a middle click slider precision widget.** 142 | 143 | 144 | **Channel context menu:** The actions in this menu can be apply to multiple selection 145 | 146 | .. image:: images/animbits/channel_master_context_menu.png 147 | :align: center 148 | :scale: 95% 149 | 150 | * **Set Color:** Set a custom color for easy identification. 151 | * **Clear Color:** Clear custom color. 152 | * **Set Range:** Set range min and max for the slider. 153 | * **Reset Value to Default:** Reset the channel value. 154 | * **Select Host:** Select the object that owns the channel. 155 | 156 | **Keyframe channel button context menu.:** 157 | 158 | .. image:: images/animbits/channel_master_key_context_menu.png 159 | :align: center 160 | :scale: 95% 161 | 162 | * **Next Keyframe:** Move time to the next keyframe. 163 | * **Previous Keyframe:** Move time to the previous keyframe. 164 | * **Remove Animation:** Delete channel animation. 165 | 166 | **Keyframe button color coding:** 167 | 168 | .. image:: images/animbits/channel_master_key_color_code.png 169 | :align: center 170 | :scale: 95% 171 | 172 | * **Red:** Keyframe in the current frame. 173 | * **Green:** Animation but not keyframe in the current frame. 174 | * **Yellow:** Current value changed. 175 | 176 | 177 | 178 | 179 | **The slider precision** widget is similar to the one from Houdini 180 | 181 | .. image:: images/animbits/channel_master_middle_click_precision_slider.png 182 | :align: center 183 | :scale: 95% 184 | 185 | 186 | 187 | 188 | 189 | Soft Tweaks 190 | =========== 191 | 192 | This tool create and manage SoftTweaks (ST for short) and also provide as simple API to import and export configurations, so is possible to integrate with your pipeline and animation publishing system. 193 | 194 | .. image:: images/animbits/gifs/softtweak.gif 195 | :align: center 196 | 197 | SoftTweak is a dynamic position tweak using softmod deformer 198 | The credit of the idea goes to `Vasil Shotarov `_ , thanks! 199 | 200 | The SoftTweak have 2 controls. The Base represents the bind position where the ST will not have any effect. The main control will trigger the deformation when is not in the reset position.. 201 | 202 | .. image:: images/animbits/softtweak_ctl.png 203 | :align: center 204 | :scale: 95% 205 | 206 | In the ST main control we can find a falloff channel to control the area of deformation 207 | 208 | .. image:: images/animbits/softtweak_falloff.png 209 | :align: center 210 | :scale: 95% 211 | 212 | 213 | SoftTweak Manager GUI 214 | --------------------- 215 | 216 | By default the SoftTweak is design to be used by shot and not part of a rig. However if is needed to publish a rig with some SoftTweaks there is an option to flag (is_asset_softTweak) the SoftTweak as asset tweak. So the tool will make a distinction between the ones that need to be publish with the shot and the ones that are included in the asset. 217 | 218 | .. image:: images/animbits/softtweak_manager.png 219 | :align: center 220 | :scale: 95% 221 | 222 | 223 | **File Menu:** 224 | 225 | * **Export Selected:** Exports selected ST from the list 226 | * **Export All:** Exports all the ST from the list. If search filter is used, will not affect the export. But export will make a distinction between regular SoftTweak and asset SoftTweak 227 | * **Import:** Import ST configuration from a file. 228 | 229 | 230 | **GUI:** 231 | 232 | * **Search Filter:** (1) Quick search filter of the SoftTweak list. 233 | * **SoftTweaks List:** (2) ST selection list. 234 | * **Create Auto Tweak:** Create a tweak based on the current selection. 235 | 236 | 1. Select the objects to apply the ST 237 | 2. Last element selected should be a control. This will be the parent of the ST. Also the ST will take the Name and the group(set) from the parent 238 | 3. Click Crete Auto Tweak 239 | 240 | * **Name:** Name of the new ST. 241 | * **Ctl grp:** Group of controls to add the new ST controls. 242 | * **Parent:** Parent of the new ST. 243 | * **Ctl Size:** Parent of the new ST. 244 | * **New Tweak:** Create a new ST. 245 | * **Delete Tweak:** Delete the tweaks selected in the ST list. 246 | * **Add Object to Selected Tweak:** Add selected objects to the tweaks selected in the ST list. 247 | * **Remove Object from Selected Tweak:** Remove selected objects from the tweaks selected in the ST list. 248 | * **Select Ctl:** Select the control from the tweaks selected in the ST list. 249 | * **Select Base Ctl:** Select the Base control from the tweaks selected in the ST list. 250 | * **Select Affected Objects:** Select the object affected by the the tweaks selected in the ST list. 251 | * **is_asset_softTweak:** Tag the new created ST as an asset ST. This will also change the ST selection list to show the asset ST. 252 | * **Use Custom Extension:** The new ST will have a custom suffix. 253 | * **Suffix Name:** (3) Suffix name for the new ST. 254 | 255 | 256 | API 257 | ----- 258 | 259 | .. code-block:: python 260 | 261 | # To import a softTweak configuration from script editor or Shifter Custom Step: 262 | 263 | from mgear.animbits import softTweaks as st 264 | st.importConfigurationFromFile(filePath= path to the .smt configuration file) 265 | 266 | # to export configuration 267 | # list the softtweaks in the scene 268 | softtweaks = st._listSoftModTweaks(is_asset=False) 269 | # export 270 | st.exportConfiguration(softtweaks) 271 | 272 | 273 | Smart reset Attribute/SRT 274 | ========================= 275 | 276 | This command will reset the SRT (Scale, rotation and Translation of any selected object). If an attribute is higlighted in the Channel Box, will reset the channel instead. 277 | 278 | **TIP:** Set a hotkey for this command using mGear Hotkey creator in utilities menu. 279 | 280 | .. image:: images/animbits/smartReset_hotkey.png 281 | :align: center 282 | :scale: 95% 283 | 284 | 285 | -------------------------------------------------------------------------------- /docs/source/baseModules.rst: -------------------------------------------------------------------------------- 1 | Base Modules 2 | =================== 3 | 4 | .. autosummary:: 5 | :toctree: generated 6 | 7 | mgear 8 | mgear.core 9 | mgear.core.anim_utils 10 | mgear.core.applyop 11 | mgear.core.attribute 12 | mgear.core.callbackManager 13 | mgear.core.curve 14 | mgear.core.dag 15 | mgear.core.dagmenu 16 | mgear.core.dragdrop 17 | mgear.core.fcurve 18 | mgear.core.icon 19 | mgear.core.log 20 | mgear.core.menu 21 | mgear.core.meshNavigation 22 | mgear.core.node 23 | mgear.core.pickWalk 24 | mgear.core.primitive 25 | mgear.core.pyflow_widgets 26 | mgear.core.pyqt 27 | mgear.core.skin 28 | mgear.core.string 29 | mgear.core.transform 30 | mgear.core.utils 31 | mgear.core.vector 32 | mgear.core.widgets 33 | mgear.core.wmap 34 | 35 | -------------------------------------------------------------------------------- /docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # mGear: Maya rigging framework documentation build configuration file, created by 4 | # sphinx-quickstart on Thu Feb 04 19:02:39 2016. 5 | # 6 | # This file is execfile()d with the current directory set to its 7 | # containing dir. 8 | # 9 | # Note that not all possible configuration values are present in this 10 | # autogenerated file. 11 | # 12 | # All configuration values have a default; values that are commented out 13 | # serve to show the default. 14 | 15 | import sys 16 | import os 17 | 18 | # If extensions (or modules to document with autodoc) are in another directory, 19 | # add these directories to sys.path here. If the directory is relative to the 20 | # documentation root, use os.path.abspath to make it absolute, like shown here. 21 | # sys.path.insert(0, os.path.abspath('.')) 22 | # sys.path.insert(0, os.path.abspath('C:\\datawork\\repo\\mgear\\scripts')) 23 | sys.path.insert(0, os.path.abspath('../')) 24 | # -- General configuration ------------------------------------------------ 25 | 26 | # If your documentation needs a minimal Sphinx version, state it here. 27 | #needs_sphinx = '1.0' 28 | 29 | # Add any Sphinx extension module names here, as strings. They can be 30 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 31 | # ones. 32 | sys.path.append(os.path.abspath('../exts')) 33 | extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon', 'sphinx.ext.autosummary', 'sphinx.ext.changelog_links'] 34 | # extensions = ['sphinx.ext.autodoc', 'sphinxcontrib.napoleon', 'sphinx.ext.autosummary', 'changelog_links'] 35 | 36 | # Add any paths that contain templates here, relative to this directory. 37 | templates_path = ['_templates'] 38 | 39 | # The suffix(es) of source filenames. 40 | # You can specify multiple suffix as a list of string: 41 | # source_suffix = ['.rst', '.md'] 42 | source_suffix = '.rst' 43 | 44 | # The encoding of source files. 45 | #source_encoding = 'utf-8-sig' 46 | 47 | # The master toctree document. 48 | master_doc = 'index' 49 | 50 | # General information about the project. 51 | project = u'mGear: Rigging Framework' 52 | copyright = u'2011-2018, Jeremie Passerin, Miquel Campos, 2018-2021 The mGear Dev Team' 53 | author = u'The mGear Dev Team' 54 | 55 | # The version info for the project you're documenting, acts as replacement for 56 | # |version| and |release|, also used in various other places throughout the 57 | # built documents. 58 | # 59 | # The short X.Y version. 60 | version = u'3.7' 61 | # The full version, including alpha/beta/rc tags. 62 | release = u'3.7.7' 63 | 64 | # The language for content autogenerated by Sphinx. Refer to documentation 65 | # for a list of supported languages. 66 | # 67 | # This is also used if you do content translation via gettext catalogs. 68 | # Usually you set "language" from the command line for these cases. 69 | language = None 70 | 71 | # There are two options for replacing |today|: either, you set today to some 72 | # non-false value, then it is used: 73 | #today = '' 74 | # Else, today_fmt is used as the format for a strftime call. 75 | #today_fmt = '%B %d, %Y' 76 | 77 | # List of patterns, relative to source directory, that match files and 78 | # directories to ignore when looking for source files. 79 | exclude_patterns = [] 80 | 81 | # The reST default role (used for this markup: `text`) to use for all 82 | # documents. 83 | #default_role = None 84 | 85 | # If true, '()' will be appended to :func: etc. cross-reference text. 86 | #add_function_parentheses = True 87 | 88 | # If true, the current module name will be prepended to all description 89 | # unit titles (such as .. function::). 90 | #add_module_names = True 91 | 92 | # If true, sectionauthor and moduleauthor directives will be shown in the 93 | # output. They are ignored by default. 94 | #show_authors = False 95 | 96 | # The name of the Pygments (syntax highlighting) style to use. 97 | pygments_style = 'sphinx' 98 | 99 | # A list of ignored prefixes for module index sorting. 100 | #modindex_common_prefix = [] 101 | 102 | # If true, keep warnings as "system message" paragraphs in the built documents. 103 | #keep_warnings = False 104 | 105 | # If true, `todo` and `todoList` produce output, else they produce nothing. 106 | todo_include_todos = False 107 | 108 | 109 | # -- Options for HTML output ---------------------------------------------- 110 | 111 | # The theme to use for HTML and HTML Help pages. See the documentation for 112 | # a list of builtin themes. 113 | # html_theme = 'alabaster' 114 | html_theme = 'sphinx_rtd_theme' 115 | 116 | # Theme options are theme-specific and customize the look and feel of a theme 117 | # further. For a list of options available for each theme, see the 118 | # documentation. 119 | #html_theme_options = {} 120 | 121 | # Add any paths that contain custom themes here, relative to this directory. 122 | #html_theme_path = [] 123 | 124 | # The name for this set of Sphinx documents. If None, it defaults to 125 | # " v documentation". 126 | #html_title = None 127 | 128 | # A shorter title for the navigation bar. Default is the same as html_title. 129 | #html_short_title = None 130 | 131 | # The name of an image file (relative to this directory) to place at the top 132 | # of the sidebar. 133 | #html_logo = None 134 | 135 | # The name of an image file (within the static path) to use as favicon of the 136 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 137 | # pixels large. 138 | #html_favicon = None 139 | 140 | # Add any paths that contain custom static files (such as style sheets) here, 141 | # relative to this directory. They are copied after the builtin static files, 142 | # so a file named "default.css" will overwrite the builtin "default.css". 143 | html_static_path = ['_static'] 144 | 145 | # Add any extra paths that contain custom files (such as robots.txt or 146 | # .htaccess) here, relative to this directory. These files are copied 147 | # directly to the root of the documentation. 148 | #html_extra_path = [] 149 | 150 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 151 | # using the given strftime format. 152 | #html_last_updated_fmt = '%b %d, %Y' 153 | 154 | # If true, SmartyPants will be used to convert quotes and dashes to 155 | # typographically correct entities. 156 | #html_use_smartypants = True 157 | 158 | # Custom sidebar templates, maps document names to template names. 159 | #html_sidebars = {} 160 | 161 | # Additional templates that should be rendered to pages, maps page names to 162 | # template names. 163 | #html_additional_pages = {} 164 | 165 | # If false, no module index is generated. 166 | #html_domain_indices = True 167 | 168 | # If false, no index is generated. 169 | #html_use_index = True 170 | 171 | # If true, the index is split into individual pages for each letter. 172 | #html_split_index = False 173 | 174 | # If true, links to the reST sources are added to the pages. 175 | #html_show_sourcelink = True 176 | 177 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. 178 | #html_show_sphinx = True 179 | 180 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. 181 | #html_show_copyright = True 182 | 183 | # If true, an OpenSearch description file will be output, and all pages will 184 | # contain a tag referring to it. The value of this option must be the 185 | # base URL from which the finished HTML is served. 186 | #html_use_opensearch = '' 187 | 188 | # This is the file name suffix for HTML files (e.g. ".xhtml"). 189 | #html_file_suffix = None 190 | 191 | # Language to be used for generating the HTML full-text search index. 192 | # Sphinx supports the following languages: 193 | # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' 194 | # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' 195 | #html_search_language = 'en' 196 | 197 | # A dictionary with options for the search language support, empty by default. 198 | # Now only 'ja' uses this config value 199 | #html_search_options = {'type': 'default'} 200 | 201 | # The name of a javascript file (relative to the configuration directory) that 202 | # implements a search results scorer. If empty, the default will be used. 203 | #html_search_scorer = 'scorer.js' 204 | 205 | # Output file base name for HTML help builder. 206 | htmlhelp_basename = 'mGearMayariggingframeworkdoc' 207 | 208 | # -- Options for LaTeX output --------------------------------------------- 209 | 210 | latex_elements = { 211 | # The paper size ('letterpaper' or 'a4paper'). 212 | #'papersize': 'letterpaper', 213 | 214 | # The font size ('10pt', '11pt' or '12pt'). 215 | #'pointsize': '10pt', 216 | 217 | # Additional stuff for the LaTeX preamble. 218 | #'preamble': '', 219 | 220 | # Latex figure (float) alignment 221 | #'figure_align': 'htbp', 222 | } 223 | 224 | # Grouping the document tree into LaTeX files. List of tuples 225 | # (source start file, target name, title, 226 | # author, documentclass [howto, manual, or own class]). 227 | latex_documents = [ 228 | (master_doc, 'mGearMayariggingframework.tex', u'mGear: Maya Rigging Framework Documentation', 229 | u'Jeremie Passerin, Miquel Campos', 'manual'), 230 | ] 231 | 232 | # The name of an image file (relative to this directory) to place at the top of 233 | # the title page. 234 | #latex_logo = None 235 | 236 | # For "manual" documents, if this is true, then toplevel headings are parts, 237 | # not chapters. 238 | #latex_use_parts = False 239 | 240 | # If true, show page references after internal links. 241 | #latex_show_pagerefs = False 242 | 243 | # If true, show URL addresses after external links. 244 | #latex_show_urls = False 245 | 246 | # Documents to append as an appendix to all manuals. 247 | #latex_appendices = [] 248 | 249 | # If false, no module index is generated. 250 | #latex_domain_indices = True 251 | 252 | 253 | # -- Options for manual page output --------------------------------------- 254 | 255 | # One entry per manual page. List of tuples 256 | # (source start file, name, description, authors, manual section). 257 | man_pages = [ 258 | (master_doc, 'mgearmayariggingframework', u'mGear: Maya rigging framework Documentation', 259 | [author], 1) 260 | ] 261 | 262 | # If true, show URL addresses after external links. 263 | #man_show_urls = False 264 | 265 | 266 | # -- Options for Texinfo output ------------------------------------------- 267 | 268 | # Grouping the document tree into Texinfo files. List of tuples 269 | # (source start file, target name, title, author, 270 | # dir menu entry, description, category) 271 | texinfo_documents = [ 272 | (master_doc, 'mGearMayariggingframework', u'mGear: Maya rigging framework Documentation', 273 | author, 'mGearMayariggingframework', 'One line description of project.', 274 | 'Miscellaneous'), 275 | ] 276 | 277 | # Documents to append as an appendix to all manuals. 278 | #texinfo_appendices = [] 279 | 280 | # If false, no module index is generated. 281 | #texinfo_domain_indices = True 282 | 283 | # How to display URL addresses: 'footnote', 'no', or 'inline'. 284 | #texinfo_show_urls = 'footnote' 285 | 286 | # If true, do not generate a @detailmenu in the "Top" node's menu. 287 | #texinfo_no_detailmenu = False 288 | 289 | # mGear config 290 | # autodoc_member_order = 'bysource' 291 | autosummary_generate = True 292 | # autodoc_default_flags = ['special-members'] 293 | autoclass_content = "both" 294 | github_issues_url = 'https://github.com/mgear-dev/mgear_dist/issues/' 295 | 296 | # exclude_patterns = ['mgear/maya/*'] 297 | -------------------------------------------------------------------------------- /docs/source/crankUserDocumentation.rst: -------------------------------------------------------------------------------- 1 | Crank User Documentation 2 | ########################### 3 | 4 | Crank is a shot sculpting tool specially designed to handle several object and the same time. This tools can be used for general deformation correction, cloth simulation correction or animation exaggeration. 5 | 6 | .. image:: images/crank/crank_sample_01.png 7 | :align: center 8 | :scale: 95% 9 | 10 | Crank uses only default Maya nodes and blendshape nodes. So not extra plugins are required to open as shot sculpted scene. 11 | 12 | Sculpting can be apply to rigged meshes (local or referenced) or to cached animations (Alembic) 13 | 14 | In order to deform an object. First we should create a "Crank Layer". 15 | The layer can contain one or more objects. Also, an object can be included in more than one layer. 16 | 17 | Crank Layers are represented in the scene with a regular Maya's transform node. This node contains a series of custom attributes and connections to handle and store the shot sculpting information and animation. 18 | 19 | .. image:: images/crank/crank_layer.png 20 | :align: center 21 | :scale: 95% 22 | 23 | Several layers can be edit at the same time. But be careful if the same object is in several of this layers. 24 | 25 | The blendshape nodes are created at the end of the chain and the deltas are set to use tangent space. 26 | 27 | This should give the most stable result when the same sculpt is hold in several frames. However in areas where the geometry have collapse a lot (i.e: the internal part of the elbow when the arm is flexed), can result in a unstable interpolation if the sculpt is hold more than one frame. 28 | Used in combination with Deltamush can mitigate some of the possible issues 29 | 30 | 31 | .. image:: images/crank/crank_GUI.png 32 | :align: center 33 | :scale: 95% 34 | 35 | 36 | **GUI:** 37 | 38 | * **Create Layer:** Create a new layer from the selected objects. 39 | * **Refresh:** Refresh layers list. 40 | * **Search Filter:** Quick search filter of the Crank Layer list. 41 | * **Layers List:** Crank Layers list. 42 | * LMB click will select the layer. 43 | * RMB click show the context menu. 44 | 45 | .. image:: images/crank/autokey.png 46 | :align: center 47 | :scale: 95% 48 | 49 | * **Auto Keyframe:** If checked, crank will auto keyframe a range of frames, based on the. Starting from value 0 50 | * **Ease In:** Ease In frames. 51 | * **Pre Hold:** Pre hold frames before current frame. This are the frames where the value of the sculpt blendshape will be 1. 52 | * **Post Hold:** Post hold frames after the current frame. This are the frames where the value of the sculpt blendshape will be 1. 53 | * **Ease Out:** Ease In frames. 54 | 55 | * **Add Sculpt Frame:** Add a new sculpt frame for the selected layers. If there is more than one sculpt for each frame it will and a version index. This can be useful to tackle different areas in the same layer. 56 | * **Add Sculpt Frame:** Edit the selected sculpt frame. In order to edit the frame should be first highlighted in the layer channel box. Only one frame can be edited at the same time. 57 | 58 | 59 | 60 | **Context Menu:** 61 | 62 | .. image:: images/crank/context_menu.png 63 | :align: center 64 | :scale: 95% 65 | 66 | * **Select Members:** Select the objects affected by the layer. 67 | * **Selected Layer Edit OFF:** Turn off the editing status of the selected layers 68 | 69 | .. note:: 70 | 71 | When we add a new sculpt or edit a sculpt frame. The blendshape target of each affected object is set to "Edit" status. To avoid any issue if we forget to set it OFF, a callback is initialized to turn off this edit status if we move the current frame in the timeline. 72 | 73 | * **All Layers Edit OFF:** Turn off the editing status of all layers. This is can be also achieved by changing the current frame in the timeline. 74 | 75 | .. image:: images/crank/random_color.png 76 | :align: center 77 | :scale: 95% 78 | 79 | * **Random Color + Isolate:** Create a render layer with random color for better visualization. This works based on shading groups, not individual objects. 80 | * **Clear Random Color:** Delete the random color render layer. 81 | 82 | 83 | **WARNING:** Currently is not possible to edit (add or remove objects) from a Crank Layer. Also any deleting option have been implemented. in order to deactivate the effect just set the Envelope value of the layer to 0. 84 | 85 | .. image:: images/crank/crank_layer_cb.png 86 | :align: center 87 | :scale: 95% -------------------------------------------------------------------------------- /docs/source/framework.rst: -------------------------------------------------------------------------------- 1 | Framework 2 | ======================= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | animbitsModules 8 | baseModules 9 | rigbitsModules 10 | shifterModules 11 | simpleRigModules 12 | synopticModules 13 | 14 | .. toctree:: 15 | :maxdepth: 0 16 | :hidden: 17 | 18 | modulesList 19 | 20 | -------------------------------------------------------------------------------- /docs/source/generated/mgear.rst: -------------------------------------------------------------------------------- 1 | mgear 2 | ===== 3 | 4 | .. automodule:: mgear 5 | 6 | 7 | 8 | .. rubric:: Functions 9 | 10 | .. autosummary:: 11 | 12 | getInfos 13 | getVersion 14 | install 15 | log 16 | logInfos 17 | reloadModule 18 | setDebug 19 | toggleDebug 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | .. rubric:: Exceptions 30 | 31 | .. autosummary:: 32 | 33 | FakeException 34 | 35 | -------------------------------------------------------------------------------- /docs/source/images/animbits/animbits_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/animbits_menu.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_add_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_add_tab.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_buttons.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_context_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_context_menu.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_filter.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_key_color_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_key_color_code.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_key_context_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_key_context_menu.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_menu_display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_menu_display.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_menu_display_fullname.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_menu_display_fullname.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_menu_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_menu_file.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_menu_keyframe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_menu_keyframe.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_menu_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_menu_tab.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_middle_click_precision_slider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_middle_click_precision_slider.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_node.png -------------------------------------------------------------------------------- /docs/source/images/animbits/channel_master_node2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/channel_master_node2.png -------------------------------------------------------------------------------- /docs/source/images/animbits/gifs/softtweak.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/gifs/softtweak.gif -------------------------------------------------------------------------------- /docs/source/images/animbits/smartReset_hotkey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/smartReset_hotkey.png -------------------------------------------------------------------------------- /docs/source/images/animbits/softtweak_ctl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/softtweak_ctl.png -------------------------------------------------------------------------------- /docs/source/images/animbits/softtweak_falloff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/softtweak_falloff.png -------------------------------------------------------------------------------- /docs/source/images/animbits/softtweak_manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/animbits/softtweak_manager.png -------------------------------------------------------------------------------- /docs/source/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/banner.jpg -------------------------------------------------------------------------------- /docs/source/images/banner2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/banner2.jpg -------------------------------------------------------------------------------- /docs/source/images/crank/autokey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/autokey.png -------------------------------------------------------------------------------- /docs/source/images/crank/context_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/context_menu.png -------------------------------------------------------------------------------- /docs/source/images/crank/crank_GUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/crank_GUI.png -------------------------------------------------------------------------------- /docs/source/images/crank/crank_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/crank_layer.png -------------------------------------------------------------------------------- /docs/source/images/crank/crank_layer_cb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/crank_layer_cb.png -------------------------------------------------------------------------------- /docs/source/images/crank/crank_sample_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/crank_sample_01.png -------------------------------------------------------------------------------- /docs/source/images/crank/random_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/crank/random_color.png -------------------------------------------------------------------------------- /docs/source/images/quickstart/quickstart_animPicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/quickstart/quickstart_animPicker.png -------------------------------------------------------------------------------- /docs/source/images/quickstart/quickstart_bipedTemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/quickstart/quickstart_bipedTemplate.png -------------------------------------------------------------------------------- /docs/source/images/quickstart/quickstart_footTemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/quickstart/quickstart_footTemplate.png -------------------------------------------------------------------------------- /docs/source/images/quickstart/quickstart_handTemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/quickstart/quickstart_handTemplate.png -------------------------------------------------------------------------------- /docs/source/images/quickstart/quickstart_viewportMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/quickstart/quickstart_viewportMenu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/channel_wrangler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/channel_wrangler.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/connect_local_SRT_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/connect_local_SRT_menu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/eye_rigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/eye_rigger.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/gif/Align_ref_axis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/gif/Align_ref_axis.gif -------------------------------------------------------------------------------- /docs/source/images/rigbits/gif/interpolated_transform.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/gif/interpolated_transform.gif -------------------------------------------------------------------------------- /docs/source/images/rigbits/gif/replace_shape.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/gif/replace_shape.gif -------------------------------------------------------------------------------- /docs/source/images/rigbits/gimmick_joints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/gimmick_joints.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/interpolated_transform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/interpolated_transform.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/lips_rigger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/lips_rigger.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/menu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/npo_after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/npo_after.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/npo_before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/npo_before.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/post_spring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/post_spring.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_GUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_GUI.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_add_rbf_GUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_add_rbf_GUI.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_file_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_file_menu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_mirror_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_mirror_menu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_new_rbf_GUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_new_rbf_GUI.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_new_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_new_setup.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rbf_manager_settings_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rbf_manager_settings_menu.png -------------------------------------------------------------------------------- /docs/source/images/rigbits/rope_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/rigbits/rope_tool.png -------------------------------------------------------------------------------- /docs/source/images/shifter/chain_init_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/chain_init_settings.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_guides/arm_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_guides/arm_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_guides/arm_2jnt_freeTangents_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_guides/arm_2jnt_freeTangents_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_guides/arm_ms_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_guides/arm_ms_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_guides/chain_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_guides/chain_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_main_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_main_settings.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/arm_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/arm_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/arm_2jnt_freeTangents_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/arm_2jnt_freeTangents_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/arm_ms_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/arm_ms_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/chain_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/chain_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/chain_FK_spline_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/chain_FK_spline_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/control_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/control_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/eye_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/eye_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/foot_bk_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/foot_bk_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/foot_bk_01_connector_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/foot_bk_01_connector_settings.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/hydraulic_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/hydraulic_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/leg_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/leg_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/leg_2jnt_freeTangents_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/leg_2jnt_freeTangents_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/leg_3_jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/leg_3_jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/leg_ms_2jnt_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/leg_ms_2jnt_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/lite_chain_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/lite_chain_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/meta_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/meta_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/neck_ik_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/neck_ik_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/shoulder_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/shoulder_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/spine_S_shape_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/spine_S_shape_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/spine_ik_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/spine_ik_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/spine_ik_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/spine_ik_02.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/squash4Sides_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/squash4Sides_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/component_settings/squash_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/component_settings/squash_01.png -------------------------------------------------------------------------------- /docs/source/images/shifter/components/arm_2jnt_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/components/arm_2jnt_0.png -------------------------------------------------------------------------------- /docs/source/images/shifter/components/arm_2jnt_01_channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/components/arm_2jnt_01_channels.png -------------------------------------------------------------------------------- /docs/source/images/shifter/components_lister_gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/components_lister_gui.png -------------------------------------------------------------------------------- /docs/source/images/shifter/game_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/game_tools.png -------------------------------------------------------------------------------- /docs/source/images/shifter/guide_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/guide_settings.png -------------------------------------------------------------------------------- /docs/source/images/shifter/mocap_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/mocap_tools.png -------------------------------------------------------------------------------- /docs/source/images/shifter/plebes_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/plebes_ui.png -------------------------------------------------------------------------------- /docs/source/images/shifter/shifter_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/shifter/shifter_menu.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_GUI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_GUI.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_auto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_auto.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_convert.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_delete.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_extra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_extra.png -------------------------------------------------------------------------------- /docs/source/images/simplerig/simplerig_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/simplerig/simplerig_file.png -------------------------------------------------------------------------------- /docs/source/images/skinning/skinning_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/skinning/skinning_menu.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_add10Scalar_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_add10Scalar_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_add10Scalar_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_add10Scalar_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_curveCns_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_curveCns_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_ikfk2Bone_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_ikfk2Bone_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_ikfk2Bone_attr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_ikfk2Bone_attr2.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_ikfk2Bone_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_ikfk2Bone_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_intMatrix_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_intMatrix_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_intMatrix_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_intMatrix_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_inverseRotOrder_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_inverseRotOrder_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_inverseRotOrder_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_inverseRotOrder_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_linearInterpolate3Dvector_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_linearInterpolate3Dvector_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_linearInterpolate3Dvector_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_linearInterpolate3Dvector_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_mulMatrix_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_mulMatrix_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_mulMatrix_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_mulMatrix_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_percentageToU_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_percentageToU_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_percentageToU_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_percentageToU_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_rayCastPosition_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_rayCastPosition_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_rayCastPosition_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_rayCastPosition_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_rollSplineKine_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_rollSplineKine_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_rollSplineKine_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_rollSplineKine_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_rollSplineKine_subdivision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_rollSplineKine_subdivision.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_slideCurve_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_slideCurve_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_slideCurve_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_slideCurve_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_spinePointAt_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_spinePointAt_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_spinePointAt_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_spinePointAt_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_springNode_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_springNode_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_springNode_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_springNode_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_squashStretch_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_squashStretch_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_squashStretch_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_squashStretch_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_trigonometyAngle_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_trigonometyAngle_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_trigonometyAngle_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_trigonometyAngle_node.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_vertexPosition_attr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_vertexPosition_attr.png -------------------------------------------------------------------------------- /docs/source/images/solvers/mgear_vertexPosition_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/solvers/mgear_vertexPosition_node.png -------------------------------------------------------------------------------- /docs/source/images/studioAKA_mGear_A.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/studioAKA_mGear_A.jpg -------------------------------------------------------------------------------- /docs/source/images/studioAKA_mGear_B.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/studioAKA_mGear_B.jpg -------------------------------------------------------------------------------- /docs/source/images/synoptic/biped_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/synoptic/biped_tab.png -------------------------------------------------------------------------------- /docs/source/images/synoptic/qtDesigner_ikfkSpine_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/synoptic/qtDesigner_ikfkSpine_properties.png -------------------------------------------------------------------------------- /docs/source/images/synoptic/qtDesigner_ikfk_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/synoptic/qtDesigner_ikfk_properties.png -------------------------------------------------------------------------------- /docs/source/images/synoptic/qtDesigner_spaceSwitch_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/synoptic/qtDesigner_spaceSwitch_properties.png -------------------------------------------------------------------------------- /docs/source/images/unofficial_guide/pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/unofficial_guide/pipeline.png -------------------------------------------------------------------------------- /docs/source/images/utilities/utilities_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/docs/source/images/utilities/utilities_menu.png -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | .. mGear: Maya rigging framework documentation master file, created by 2 | sphinx-quickstart on Thu Feb 04 19:02:39 2016. 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 mGear: Rigging Framework for Autodesk Maya 7 | =========================================================== 8 | 9 | .. figure:: images/banner.jpg 10 | :width: 800px 11 | :align: center 12 | :height: 200px 13 | :alt: alternate text 14 | :figclass: align-center 15 | 16 | mGear 17 | 18 | `mGear website `_ 19 | `Join mGear Community Forum `_ 20 | 21 | **Contents:** 22 | 23 | .. toctree:: 24 | :maxdepth: 2 25 | 26 | overview 27 | quickStart 28 | official-unofficial-workflow 29 | framework 30 | solvers 31 | animbitsUserDocumentation 32 | crankUserDocumentation 33 | shifterUserDocumentation 34 | shifterComponentReference 35 | synopticUserDocumentation 36 | videoTutorials 37 | FAQ 38 | releaseLog 39 | license 40 | 41 | 42 | Indices and tables 43 | ================== 44 | 45 | * :ref:`genindex` 46 | * :ref:`modindex` 47 | * :ref:`search` 48 | 49 | -------------------------------------------------------------------------------- /docs/source/license.rst: -------------------------------------------------------------------------------- 1 | License 2 | ============= 3 | MGEAR is under the terms of the MIT License 4 | 5 | Copyright (c) 2011-2018 Jeremie Passerin, Miquel Campos - 2018-2021 The mGear-Dev Organization 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /docs/source/mgear/animbits/softTweaks.rst: -------------------------------------------------------------------------------- 1 | mgear.animbits.softTweaks 2 | ============================== 3 | 4 | .. automodule:: mgear.animbits.softTweaks 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/core/anim_utils.rst: -------------------------------------------------------------------------------- 1 | mgear.core.anim_utils 2 | ===================== 3 | 4 | 5 | .. automodule:: mgear.core.anim_utils 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/applyop.rst: -------------------------------------------------------------------------------- 1 | mgear.core.applyop 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.applyop 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/attribute.rst: -------------------------------------------------------------------------------- 1 | mgear.core.attribute 2 | ===================== 3 | 4 | 5 | .. automodule:: mgear.core.attribute 6 | :members: 7 | :undoc-members: 8 | 9 | -------------------------------------------------------------------------------- /docs/source/mgear/core/callbackManager.rst: -------------------------------------------------------------------------------- 1 | mgear.core.callbackManager 2 | ========================== 3 | 4 | 5 | .. automodule:: mgear.core.callbackManager 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/core.rst: -------------------------------------------------------------------------------- 1 | mgear.core 2 | ========== 3 | 4 | .. automodule:: mgear.core 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/core/curve.rst: -------------------------------------------------------------------------------- 1 | mgear.core.curve 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.curve 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/dag.rst: -------------------------------------------------------------------------------- 1 | mgear.core.dag 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.dag 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/dagmenu.rst: -------------------------------------------------------------------------------- 1 | mgear.core.dagmenu 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.dagmenu 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/dragdrop.rst: -------------------------------------------------------------------------------- 1 | mgear.core.dragdrop 2 | =================== 3 | 4 | 5 | .. automodule:: mgear.core.dragdrop 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/fcurve.rst: -------------------------------------------------------------------------------- 1 | mgear.core.fcurve 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.fcurve 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/icon.rst: -------------------------------------------------------------------------------- 1 | mgear.core.icon 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.icon 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/log.rst: -------------------------------------------------------------------------------- 1 | mgear.core.log 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.log 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/meshNavigation.rst: -------------------------------------------------------------------------------- 1 | mgear.core.meshNavigation 2 | ========================= 3 | 4 | 5 | .. automodule:: mgear.core.meshNavigation 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/node.rst: -------------------------------------------------------------------------------- 1 | mgear.core.node 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.node 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/pickWalk.rst: -------------------------------------------------------------------------------- 1 | mgear.core.pickWalk 2 | =================== 3 | 4 | 5 | .. automodule:: mgear.core.pickWalk 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/primitive.rst: -------------------------------------------------------------------------------- 1 | mgear.core.primitive 2 | ===================== 3 | 4 | 5 | .. automodule:: mgear.core.primitive 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/pyflow_widgets: -------------------------------------------------------------------------------- 1 | anim_utils 2 | callbackManager 3 | dagmenu 4 | dragdrop 5 | pyflow_widgets 6 | wmap -------------------------------------------------------------------------------- /docs/source/mgear/core/pyflow_widgets.rst: -------------------------------------------------------------------------------- 1 | mgear.core.pyflow_widgets 2 | ========================= 3 | 4 | 5 | .. automodule:: mgear.core.pyflow_widgets 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/pyqt.rst: -------------------------------------------------------------------------------- 1 | mgear.core.pyqt 2 | =================== 3 | 4 | 5 | .. automodule:: mgear.core.pyqt 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/skin.rst: -------------------------------------------------------------------------------- 1 | mgear.core.skin 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.skin 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/string.rst: -------------------------------------------------------------------------------- 1 | mgear.string 2 | ======================= 3 | 4 | .. automodule:: mgear.string 5 | :members: 6 | :undoc-members: 7 | 8 | -------------------------------------------------------------------------------- /docs/source/mgear/core/transform.rst: -------------------------------------------------------------------------------- 1 | mgear.core.transform 2 | ==================== 3 | 4 | 5 | .. automodule:: mgear.core.transform 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/utils.rst: -------------------------------------------------------------------------------- 1 | mgear.core.utils 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.utils 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/vector.rst: -------------------------------------------------------------------------------- 1 | mgear.core.vector 2 | ================== 3 | 4 | 5 | .. automodule:: mgear.core.vector 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/widgets.rst: -------------------------------------------------------------------------------- 1 | mgear.core.widgets 2 | =================== 3 | 4 | 5 | .. automodule:: mgear.core.widgets 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/core/wmap.rst: -------------------------------------------------------------------------------- 1 | mgear.core.wmap 2 | =============== 3 | 4 | 5 | .. automodule:: mgear.core.wmap 6 | :members: 7 | :undoc-members: 8 | -------------------------------------------------------------------------------- /docs/source/mgear/mgear.rst: -------------------------------------------------------------------------------- 1 | mgear 2 | ======================= 3 | 4 | .. automodule:: mgear 5 | :members: 6 | :undoc-members: 7 | 8 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/blendshapes.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.blendShapes 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.blendShapes 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/channelWrangler.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.channelWrangler 2 | ================================== 3 | 4 | .. automodule:: mgear.rigbits.channelWrangler 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/cycleTweaks.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.cycleTweaks 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.cycleTweaks 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/eye_rigger.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.eye_rigger 2 | ============================= 3 | 4 | .. automodule:: mgear.rigbits.eye_rigger 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/ghost.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.ghost 2 | ======================== 3 | 4 | .. automodule:: mgear.rigbits.ghost 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/lips_rigger.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.lips_rigger 2 | ============================= 3 | 4 | .. automodule:: mgear.rigbits.lips_rigger 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/postSpring.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.postSpring 2 | ============================= 3 | 4 | .. automodule:: mgear.rigbits.postSpring 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/proxySlicer.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.proxySlicer 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.proxySlicer 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rbf_io.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.rbf_io 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.rbf_io 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rbf_manager_ui.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.rbf_manager_ui 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.rbf_manager_ui 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rbf_node.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.rbf_node 2 | ============================== 3 | 4 | .. automodule:: mgear.rigbits.rbf_node 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rigbits.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits 2 | =================== 3 | 4 | .. automodule:: mgear.rigbits 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rivet.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.rivet 2 | ======================== 3 | 4 | .. automodule:: mgear.rigbits.rivet 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/rope.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.rope 2 | ======================= 3 | 4 | .. automodule:: mgear.rigbits.rope 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/sdk_io.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.sdk_io 2 | ================================= 3 | 4 | .. automodule:: mgear.rigbits.sdk_io 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/tweaks.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.tweaks 2 | ========================= 3 | 4 | .. automodule:: mgear.rigbits.tweaks 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/utils.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.utils 2 | ======================== 3 | 4 | .. automodule:: mgear.rigbits.utils 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/weightNode_io.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.weightNode_io 2 | ================================= 3 | 4 | .. automodule:: mgear.rigbits.weightNode_io 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/rigbits/widgets.rst: -------------------------------------------------------------------------------- 1 | mgear.rigbits.widgets 2 | ================================= 3 | 4 | .. automodule:: mgear.rigbits.widgets 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/shifter/gui.rst: -------------------------------------------------------------------------------- 1 | mgear.shifter.gui 2 | ====================== 3 | 4 | 5 | .. automodule:: mgear.shifter.gui 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/shifter/guide.rst: -------------------------------------------------------------------------------- 1 | mgear.shifter.guide 2 | ======================== 3 | 4 | 5 | .. automodule:: mgear.shifter.guide 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/shifter/shifter.rst: -------------------------------------------------------------------------------- 1 | mgear.shifter 2 | ================== 3 | 4 | .. automodule:: mgear.shifter 5 | :members: 6 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/shifter_classic_components/component.rst: -------------------------------------------------------------------------------- 1 | mgear.shifter_classic_components 2 | ================================ 3 | 4 | .. automodule:: mgear.shifter_classic_components 5 | :members: 6 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/shifter_classic_components/guide.rst: -------------------------------------------------------------------------------- 1 | mgear.shifter_classic_components.guide 2 | ====================================== 3 | 4 | 5 | .. automodule:: mgear.shifter_classic_components.guide 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/mgear/simpleRig/simpleRig.rst: -------------------------------------------------------------------------------- 1 | mgear.simpleRig 2 | =================== 3 | 4 | .. automodule:: mgear.simpleRig 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/simpleRig/simpleRigTool.rst: -------------------------------------------------------------------------------- 1 | mgear.simpleRig.simpleRigTool 2 | ============================= 3 | 4 | .. automodule:: mgear.simpleRig.simpleRigTool 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/synoptic/synoptic.rst: -------------------------------------------------------------------------------- 1 | mgear.synoptic 2 | =================== 3 | 4 | .. automodule:: mgear.synoptic 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/synoptic/utils.rst: -------------------------------------------------------------------------------- 1 | mgear.synoptic.utils 2 | ========================= 3 | 4 | .. automodule:: mgear.synoptic.utils 5 | :members: 6 | :undoc-members: 7 | -------------------------------------------------------------------------------- /docs/source/mgear/synoptic/widgets.rst: -------------------------------------------------------------------------------- 1 | mgear.synoptic.widgets 2 | =========================== 3 | 4 | 5 | .. automodule:: mgear.synoptic.widgets 6 | :members: 7 | :undoc-members: -------------------------------------------------------------------------------- /docs/source/modulesList.rst: -------------------------------------------------------------------------------- 1 | 2 | Modules flat List 3 | ================= 4 | 5 | Just a complete list of all modules. 6 | 7 | .. toctree:: 8 | 9 | mgear/core/core 10 | mgear/core/applyop 11 | mgear/core/attribute 12 | mgear/core/curve 13 | mgear/core/dag 14 | mgear/core/fcurve 15 | mgear/core/icon 16 | mgear/core/log 17 | mgear/core/menu 18 | mgear/core/meshNavigation 19 | mgear/core/node 20 | mgear/core/pickWalk 21 | mgear/core/primitive 22 | mgear/core/skin 23 | mgear/core/string 24 | mgear/core/transform 25 | mgear/core/utils 26 | mgear/core/vector 27 | mgear/core/widgets 28 | 29 | mgear/shifter/shifter 30 | mgear/shifter/guide 31 | mgear/shifter/menu 32 | mgear/shifter/gui 33 | mgear/shifter/component/component 34 | mgear/shifter/component/guide 35 | 36 | mgear/synoptic/synoptic 37 | mgear/synoptic/utils 38 | mgear/synoptic/widgets 39 | 40 | mgear/simpleRig/menu 41 | mgear/simpleRig/simpleRigTool 42 | -------------------------------------------------------------------------------- /docs/source/overview.rst: -------------------------------------------------------------------------------- 1 | Overview 2 | ======== 3 | 4 | mGear is a rigging and animation framework for Autodesk Maya. mGear provides a set of convenient modules, tools and c++ solvers to streamline the development of rigging and animation tools. 5 | 6 | Originally mGear was design and develope by `Jeremie Passerin `_ , since 2013 `Miquel Campos `_ continued the project and evolved to the current design. From 2018 mGear is developed by the `mGear Dev team `_ 7 | 8 | `Join mGear Community Forum `_ 9 | 10 | `Big Thanks! to all contributors `_ 11 | 12 | .. note:: 13 | 14 | from Miquel: 15 | Big thanks to `Jeremie Passerin `_ , he is the real master behind mGear design. I am just following his steps and continuing what he started. 16 | 17 | Also special big thanks to `Ingo Clemens `_ for the OSX solver compilation and `Gaetan Guidet `_ for the Linux solver compilation and guidance in my C++ desert of knowledge. 18 | 19 | Thanks to `Chad Vernon `_ , for his fantastic tutorials and open-source tools. Some of mGear's parts wouldn't be possible without it. 20 | 21 | And thanks!! to all the people who help me and support this project :) 22 | 23 | 24 | .. figure:: images/studioAKA_mGear_A.jpg 25 | :width: 800px 26 | :align: center 27 | :height: 475px 28 | :alt: alternate text 29 | :figclass: align-center 30 | 31 | mGear have been used at Studio AKA for San Pellegrino ‘Dining By Starlight’. Rigged by Adam Avery 32 | 33 | .. warning:: 34 | 35 | I can't promise any kind of support and this tool is provided “AS IS”. Please read the LICENSE for more information. 36 | 37 | However, I am committed to continue developing mGear. So please, do not hesitate contact us if you found any bug or possible improvement. 38 | -------------------------------------------------------------------------------- /docs/source/quickStart.rst: -------------------------------------------------------------------------------- 1 | Quick Start 2 | ########### 3 | 4 | This is a quick guide to get you up and running with mGear's Shifter. Shifter is the character rigging part of mGear, with which you can combine various components (arms, legs, spines, chains etc.) to rig most kinds of characters, creatures and mechanical contraptions. Shifter currently ships with over 40 different components, and more are constantly being added. Here we'll only focus on building a basic human biped. 5 | 6 | Installation 7 | ============ 8 | 9 | To install mGear on your computer: 10 | 11 | 1) Download the latest mGear release from here_. 12 | 2) Unzip it 13 | 3) Copy the content of the mGear **release** folder to your maya/modules folder: 14 | a) Windows: \Users\\Documents\Maya\modules 15 | b) Linux: ~/maya/modules 16 | c) Mac OS X: ~/maya/modules 17 | 4) Start Maya 18 | 19 | You should now have an mGear menu in Maya. 20 | 21 | Rigging a Biped 22 | =============== 23 | 24 | Rigging a biped character is very quick and easy with mGear's Shifter, as it comes with ready made guide templates for both a standard biped and a quadruped. The steps involved in building a rig are: 25 | 26 | #) Load the guide template 27 | #) Position the guides to match your characters anatomy 28 | #) Build the animation rig 29 | #) Adjust the control curves if needed 30 | #) Skin the character to the deformer joints 31 | #) Animate! 32 | 33 | Build Guides from a Template 34 | ---------------------------- 35 | 36 | Start by selecting mGear>Shifter>Guide Template Samples>Biped Template from the menu. 37 | 38 | .. image:: images/quickstart/quickstart_bipedTemplate.png 39 | :align: center 40 | 41 | This builds all the guides we need to build a biped rig. The biped guides consist of multiple components that we will position to match the proportions of our character. Each guide component consists of a: 42 | 43 | - **root:** (red cubes) These are the top level node of each component. 44 | - **position:** (yellow spheres) These are the positions of each joint (e.g. elbow, wrist etc). 45 | - **blade:** (red triangular wedges) These controls the up axis of some components. 46 | - **curve:** (gray lines) These are only for reference, to show how evrything connects together. 47 | 48 | .. note:: 49 | All components have a **root**, but not all have **position**, **blade** or **curve**. 50 | 51 | You can position, rotate and scale the **root** and **position** guides to fit your character, and use the Blade Roll Offset attribute to adjust the **blade** guides. 52 | 53 | Since we don't want to do double work, we can start by deleting the right side **root** guides; the **eye_R0_root**, **shouler_R0_root** and **leg_R0_root**. Once we're happy with the placement of the guides on the left side, we can simply use mGear>Shifter>Duplicate Sym to mirror them over to the right side. 54 | 55 | 56 | .. note:: 57 | You can test your rig at any point, by simply selecting the **guide** node from the Outliner and running mGear>Shifter>Build from Selection. The will bulid the complete animation rig. Once finished testing, you simply delete the **rig** node from the Outliner, and continue adjusting your guides. 58 | 59 | Positioning the Guides 60 | ---------------------- 61 | 62 | Start by selecting the top **guide** node in the oulinter and scale it so the hip is in the correct place. Then work your way down the hierarchy, from the spine and out to the different bodyparts, positioning each one in turn. If you need to re-position a parent guide, after positioning it's children, you can temporarily de-parent the children, while moving the parent. 63 | 64 | .. note:: 65 | We'll only be covering what you need to get your character rigged here. For details on each component, see the :ref:`shifter-component-reference`. (TODO! Broken link) 66 | 67 | **Settings** 68 | 69 | Each **guide** has settings you can adjust to change the behaviour of that component. To access the settings of **guide**, simply got the mGear>Shifter>Settings menu. For this quick start, we won't be touching the settings, but it's good to know they are there. 70 | 71 | 72 | **Host Guides** 73 | 74 | You'll notice that next to the hand and feet, and above the head and one of the shouder there are **root** nodes that are seemingly not connected to anything. These are used to position Host controllers from which you can control things like IK/FK blending, arm/leg stretching and more. 75 | 76 | **Hip and Spine** 77 | 78 | There are two **root** nodes at the hip. The bigger one controls the position of the hips and where the controler that moves the entire upper body will be, while the smaller one sets the position of the controller that only moves the hips, keeping the torso in place. The yellow **position** guide controls the length of the flexible part of the spine. 79 | 80 | **Neck** 81 | 82 | The neck has two yellow **position** tangent guides, that control the neck curve. These are more usefull for rigs with longer necks with more neck joints. 83 | 84 | **Thumb Rotation** 85 | 86 | .. image:: images/quickstart/quickstart_handTemplate.png 87 | :align: center 88 | 89 | You'll notice that the thumbRoll **root** guide has an RGB axis. This controls the orientation of the thumbRoll controller. In addition the thumbs and each of the fingers have a **blade** guides to control the plane fingers should rotate on. 90 | 91 | **Feet** 92 | 93 | .. image:: images/quickstart/quickstart_footTemplate.png 94 | :align: center 95 | 96 | The foot has a lot of guides, but most of them are quite straight forward. The bottom three, the **heel** and **in/outpivot** set the pivot points when you rotate the foot. The one in front of the ankle called **eff** controls the direction of the FK foot control. The remaining ones are simply to position the characters joints and toes. 97 | 98 | .. note:: 99 | You'll notice there are no guides for the pole vectors for the knees and elbows. These are positioned automatically based on the direction the knee or elbow is pointing in when you build the rig. 100 | 101 | 102 | Building the Animation Rig 103 | -------------------------- 104 | 105 | Once you are ready to build the rig, you can simply select the **guide** node from the Outliner and run mGear>Shifter>Build from Selection from the menu. This will bulid the complete animation rig, with all controls ready to use. You can now hide the **guide** node in the Outliner, and test out the rig. If you need to adjust something, simply delete the **rig** group from the outliner, adjust your **guides** and rebuild it. 106 | 107 | **Adjusting Controls** 108 | 109 | Some times the shape or size of the default control curves doesn't fit well with the proportions of your character. You can easily fix this by selecting the vertcies of the control curves, and positining and scaling them as needed. 110 | 111 | Once you're happy with your new control curves, select the ones you've modified and store them by choosing mGear>Shifter>Extract Controls from the menu. This will store them under **guide**|**controllers_org**, so that if you delete the rig and rebuild it, it will get your modified control curves instead of the default ones. 112 | 113 | **Skinning** 114 | 115 | When you built the rig a selection set was added under **rig_sets_grp** called **rig_deformers_grp** that contains all the joints in the rig you can skin to. Simply skin your mesh to these joints, and the rig is ready for animation. 116 | 117 | 118 | .. note:: 119 | You may be thinking, what do you do if you need to adjust the position of a joint after skinning and adding blend shapes? You can't simply delete the rig, and rebuild, as that will break the skinning. Shifter is built around the idea of `Data Centric Rigging`_. In short this means that rather storing all the skinning data, blend shapes, model and rig in one file, we store each in separate files, and bring it all together when we build the rig. This is a bit beyond the scope of this quick start, so hop on over to the mGear YouTube channel and check out the `Data Centric Rigging`_ workshop. 120 | 121 | 122 | Animating the Biped 123 | =================== 124 | 125 | The Shifter biped rig comes with a lot of functionality straight out of the box, including IK/FK blending, stretchy arms, legs and spines, space shifting and even rubber hosing, should you need it. It also performs quite well, so should be able to run in real-time on most modern hardware. Before starting animation, let's cover some of the interfaces to make your work easier. 126 | 127 | mGear Viewport Menu 128 | ------------------- 129 | 130 | At the top of the mGear menu, there is a checkbox for the mGear Viewport Menu. If you have this enabled it will replace Maya's default right click menu if you have Shifter animation controls selected. Note that the normal right click menu still work as normal, if you have something else selected. 131 | 132 | This menu is dynamic, and changes based on what kind of controller you have selected. For most controllers and host controllers it will look like this: 133 | 134 | .. image:: images/quickstart/quickstart_viewportMenu.png 135 | :align: right 136 | 137 | **Controller Viewport Menu** 138 | 139 | * **Select host**: Select the host controller for this bodypart, from which you can do IK/FK blending and more. 140 | * **Select child controls**: Selects the child controls underneath the current one. 141 | * **Reset**: Resets the selected control to it's default position (similar to bind pose) 142 | * **Reset all below**: First does Select Child Controls, and then Reset like above. 143 | * **Reset translate/rotate/scale**: Same as the normal Reset above, but for translate, rotate and scale specifically. 144 | * **Mirror**: Mirrors the selected controllers pose over to the opposite side. 145 | * **Mirror all below**: Same as Mirror, but for all the child controls 146 | * **Flip**: Flip the selected controllers pose to the other side 147 | * **Flip all below**: Same as fliip, but for all the child controls 148 | * **Rotate Order switch**: Change the rotate order, while attempting to keep animation intact 149 | 150 | **Host Viewport Menu** 151 | 152 | * **Switch arm/leg to Ik/Fk**: Toggle between IK and FK, while keeping the pose intact 153 | * **Switch arm/leg to Ik/Fk + Key**: Toggle between IK and FK, while keeping the pose intact. Adds keyframes before and after the switch. 154 | * **Range switch**: WIP 155 | * **Parent [various]**: Drop down menus for various controllers, such as the IK controller, that set what space that controller follows. You can, for instance switch between the arm's IK controller following the shoulder, body or global controller. If you have keyframes on the component already, this will add keyframes before and after the switch. 156 | * **Select all controls**: Selects all the controllers of the rig 157 | * **Keyframe child controls**: Keyframes all the child controls of the current selection 158 | 159 | 160 | Anim Picker 161 | ----------- 162 | 163 | mGear comes with a customizable Anim Picker interface to give you easy access to all controls. Choose mGear>Anim Picker>Anim Picker. When you first open it up, it will be empty. Hit the **Load** button and the **Selecte File** and navigate to the biped.pkr file (it comes with mGear and can be found in anim_picker/picker_templates/biped.pkr). 164 | 165 | Once you've selected the biped.pkr file, hit the **Load Picker** button. A dialog will pop up askin you to enter a node name for the character. This will create a node in Maya that stores the Anim Picker layout in your scene. You should now see a dialog that looks like this: 166 | 167 | .. image:: images/quickstart/quickstart_animPicker.png 168 | :align: center 169 | 170 | From this interface you can select any of the controls by simply clicking the different colored boxes. You can also box select or shift-select multiple controls at a time. The little guy at the top left of the interface gives you access to the **host** controllers, while the two dots and a square on the right are eye controllers. In addition, there are a number of buttons you can use to switch between different spaces or toggle between IK and FK. 171 | 172 | Finally if you right-click outside the boxes, you can choose Frame Selection, to zoom in on parts of the interface, or Reset View, to reset the zoom. 173 | 174 | **Adding Multiple Characters to the Anim Picker** 175 | 176 | If you have multiple rigs in your scene, you can switch between the characters using the Character Selector menu in the Anim Picker. Note that you can have multiple Anim Pickers windows open at the same time, if you have the screen space for it. 177 | 178 | 179 | Animate 180 | ------- 181 | 182 | That's it. You should now be ready to animate with mGear and Shifter. For more in-depth tutorials, please check out the `mGear Youtube channel `_ 183 | 184 | 185 | 186 | .. _Data Centric Rigging: https://www.youtube.com/playlist?list=PL9LaIDCCDjfimQVcMdh0rG0MPabPG9FK- 187 | .. _here: https://github.com/mgear-dev/mgear_dist/releases 188 | 189 | -------------------------------------------------------------------------------- /docs/source/releaseLog.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../releaseLog.rst -------------------------------------------------------------------------------- /docs/source/rigbitsModules.rst: -------------------------------------------------------------------------------- 1 | ####### 2 | Rigbits 3 | ####### 4 | 5 | **Content:** 6 | 7 | * `Introduction`_ 8 | * `Modules`_ 9 | 10 | Introduction 11 | ------------ 12 | 13 | Rigbits is a rigging commont library with tools and functions to help the rigging workflow. This library is meant to be use with custom steps or other rigging tools. 14 | 15 | 16 | 17 | Modules 18 | ------- 19 | 20 | .. autosummary:: 21 | :toctree: generated 22 | 23 | mgear.rigbits 24 | mgear.rigbits.blendShapes 25 | mgear.rigbits.channelWrangler 26 | mgear.rigbits.cycleTweaks 27 | mgear.rigbits.eye_rigger 28 | mgear.rigbits.ghost 29 | mgear.rigbits.lips_rigger 30 | mgear.rigbits.menu 31 | mgear.rigbits.postSpring 32 | mgear.rigbits.proxySlicer 33 | mgear.rigbits.rbf_io 34 | mgear.rigbits.rbf_manager_ui 35 | mgear.rigbits.rbf_node 36 | mgear.rigbits.rivet 37 | mgear.rigbits.rope 38 | mgear.rigbits.sdk_io 39 | mgear.rigbits.tweaks 40 | mgear.rigbits.utils 41 | mgear.rigbits.weightNode_io 42 | mgear.rigbits.widgets 43 | 44 | -------------------------------------------------------------------------------- /docs/source/rigbitsUserDocumentation.rst: -------------------------------------------------------------------------------- 1 | Rigbits User Documentation 2 | ########################### 3 | 4 | Rigging tools 5 | 6 | .. image:: images/rigbits/menu.png 7 | :align: center 8 | :scale: 95% 9 | 10 | 11 | Add NPO 12 | =========== 13 | 14 | Add a transform as parent of each selected object in order to neutralize the local values to the reset position 15 | 16 | .. figure:: images/rigbits/npo_before.png 17 | :align: center 18 | :scale: 95% 19 | 20 | The tranlate X and Y have some values 21 | 22 | .. figure:: images/rigbits/npo_after.png 23 | :align: center 24 | :scale: 95% 25 | 26 | All the local transform values are reset 27 | 28 | 29 | Gimmick Joints 30 | ============== 31 | 32 | Joint helper tools. 33 | 34 | Add Joint 35 | --------------------- 36 | 37 | Add a deformer joint to each selected object. 38 | 39 | This command will try to add the joint to "rig_deformers_grp" or create it if doesn't exist. 40 | Also will parent the joint under "jnt_org" if exist. If doesn't exist will parent the joint under the corresponding object. 41 | 42 | Add Blended Joint 43 | --------------------- 44 | 45 | Add a blended joint under a chain of joints. This joint will rotat 50% between 2 joints. 46 | 47 | .. image:: images/rigbits/gimmick_joints.png 48 | :align: center 49 | :scale: 95% 50 | 51 | Add Support Joint 52 | --------------------- 53 | 54 | Support joint are created under a blended joint and are design to help with deformation. Typically this kind of joints will also be driven by a SDK or similar. 55 | 56 | 57 | Replace Shape 58 | ============== 59 | 60 | Replace the shape of one object shape with another 61 | 62 | .. image:: images/rigbits/gif/replace_shape.gif 63 | :align: center 64 | :scale: 95% 65 | 66 | 67 | Match All Transform 68 | =================== 69 | 70 | Align one object to another object using the world Matrix reference. 71 | 72 | 73 | Match Pos with BBox 74 | =================== 75 | 76 | Center the position of an object in the center of the bounding box of an object. 77 | 78 | 79 | Align Ref Axis 80 | ============== 81 | 82 | Create a reference locator axis based on a point selection. This command needs at less 3 points. 83 | 84 | .. image:: images/rigbits/gif/Align_ref_axis.gif 85 | :align: center 86 | :scale: 95% 87 | 88 | .. Tip:: 89 | 90 | Very useful to find rotation axis in mechanical rigs if the transformations of the mesh have been freeze. 91 | 92 | 93 | CTL as Parent 94 | ============== 95 | 96 | Create a control of the selected shape as parent of each selected object. 97 | 98 | 99 | Ctl as Child 100 | ============== 101 | 102 | Create a control of the selected shape as child of each selected object. 103 | 104 | 105 | Duplicate Symmetrical 106 | ====================== 107 | 108 | Duplicate and mirror the selected object and his children. This is done by negating some axis scaling and inverting some of the values. This will provide a mirror behavior. 109 | Also handle some renaming. i.e: from _L to _R 110 | 111 | RBF Manager 112 | =========== 113 | 114 | A tool to manage a number of RBF type nodes under a user defined setup(name) 115 | 116 | Steps - 117 | set Driver 118 | set Control for driver(optional, recommended) 119 | select attributes to driver RBF nodes 120 | Select Node to be driven in scene(Animation control, transform) 121 | Name newly created setup 122 | select attributes to be driven by the setup 123 | add any additional driven nodes 124 | position driver(via the control) 125 | position the driven node(s) 126 | select add pose 127 | 128 | Add notes - 129 | Please ensure the driver node is NOT in the same position more than once. This 130 | will cause the RBFNode to fail while calculating. This can be fixed by deleting 131 | any two poses with the same input values. 132 | 133 | Edit Notes - 134 | Edit a pose by selecting "pose #" in the table. (which recalls recorded pose) 135 | reposition any controls involved in the setup 136 | select "Edit Pose" 137 | 138 | Delete notes - 139 | select desired "pose #" 140 | select "Delete Pose" 141 | 142 | Mirror notes - 143 | setups/Controls will succefully mirror if they have had their inverseAttrs 144 | configured previously. 145 | 146 | Space Jumper 147 | ============== 148 | 149 | Interpolate Transform 150 | ===================== 151 | 152 | Connect Local SRT 153 | ================= 154 | 155 | 156 | Spring 157 | ====== 158 | 159 | Rope 160 | ==== 161 | 162 | Channel Wrangler 163 | ================ 164 | 165 | Eye Rigger 166 | ========== 167 | 168 | Lips Rigger 169 | =========== 170 | 171 | Proxy Slicer 172 | ============ 173 | 174 | Proxy Slicer Parenting 175 | ====================== 176 | -------------------------------------------------------------------------------- /docs/source/shifterComponentReference.rst: -------------------------------------------------------------------------------- 1 | .. _shifter-component-reference: 2 | Shifter Component Reference 3 | ########################### 4 | 5 | Shifter comes with over 40 components you can build your rig from. This section covers the functionality and settings of each one in detail. 6 | 7 | Guide Settings 8 | ============== 9 | 10 | Main Settings 11 | ============= 12 | 13 | Settings shared by all components. 14 | 15 | * **Name**: The base name of the component, all the parts of the component get renmaed. 16 | * **Side**: Which side the component is on; Left, Right or Center 17 | * **Component Index**: WIP 18 | * **Connector**: WIP 19 | 20 | Joint Connection Settings 21 | ------------------------- 22 | 23 | * **Use Joint Index**: WIP 24 | * **Parent Joint Index**: WIP 25 | 26 | Channel Host Settings 27 | --------------------- 28 | 29 | * **Host**: The guide that stores the extra attributes for this component, such as IK/FK blendering and more. This will generally be a control_01 component. 30 | 31 | Custom Ctonrollers Group 32 | ------------------------ 33 | 34 | WIP 35 | 36 | ---------------------------------------------------------------------------------------------------------------- 37 | 38 | Shifter Components 39 | ================== 40 | 41 | arm_2jnt_01 42 | ----------- 43 | 44 | Two bone arm setup with: 45 | 46 | * **IK/FK blending** for switching between animating with IK or FK 47 | * **Roll** attribute that lets you adjust the elbow direction, without moving the pole vector 48 | * **Twist joints** for better deformations around the shoulder and wrist joints 49 | * **Armpit roll** to manually adjust the twist joints around the shoulder joint 50 | * **Scale** of the entire arm 51 | * **Stretching** so the arm can elongate when the IK control is too far away to reach, including a maximum stretch limit 52 | * **Sliding** of the elbow, which elongates the upper arm while shortening the lower arm, or vice versa 53 | * **Softness** to prevent popping when the IK arm is stretched out straight 54 | * **Reverse** to make the arm bend in the opposite direction when using IK 55 | * **Roundness** for rubber hose style animation 56 | * **Volume** preservation during stretching 57 | * **Elbow** controller for accurately positioning the elbow, for instance when a character is resting her elbows on a table 58 | * **Space switchers** for the IK, Up Vector and Elbow controllers that controls which space they follow 59 | 60 | This is the default arm comoponent used by the biped template rig. 61 | 62 | Guide Positioning 63 | +++++++++++++++++ 64 | 65 | WIP 66 | 67 | Compoent Settings 68 | +++++++++++++++++ 69 | 70 | TODO! Should this be tools tips in the interface itself. 71 | 72 | * **IK/FK Blender**: Default 73 | 74 | Source 75 | ++++++ 76 | 77 | Link to Module (how) 78 | 79 | arm_2jnt_02 80 | ----------- 81 | WIP 82 | 83 | arm_2jnt_03 84 | ----------- 85 | WIP 86 | 87 | arm_2jnt_04 88 | ----------- 89 | WIP 90 | 91 | arm_2jnt_freeTangents_01 92 | ------------------------ 93 | WIP 94 | 95 | arm_ms_2jnt_01 96 | -------------- 97 | WIP 98 | 99 | cable_01 100 | -------- 101 | WIP 102 | 103 | chain_01 104 | -------- 105 | WIP 106 | 107 | chain_FK_spline_01 108 | ------------------ 109 | WIP 110 | 111 | chain_FK_spline_02 112 | ------------------ 113 | WIP 114 | 115 | chain_FK_spline_variable_IK_01 116 | ------------------------------ 117 | WIP 118 | 119 | chain_IK_spline_variable_FK_01 120 | ------------------------------ 121 | WIP 122 | 123 | chain_IK_spline_variable_FK_stack_01 124 | ------------------------------------ 125 | WIP 126 | 127 | chain_net_01 128 | ------------ 129 | WIP 130 | 131 | chain_spring_01 132 | --------------- 133 | WIP 134 | 135 | chain_stack_01 136 | -------------- 137 | WIP 138 | 139 | chain_whip_01 140 | ------------- 141 | WIP 142 | 143 | control_01 144 | ---------- 145 | WIP 146 | 147 | eye_01 148 | ------ 149 | WIP 150 | 151 | foot_bk_01 152 | ---------- 153 | WIP 154 | 155 | hydraulic_01 156 | ------------ 157 | WIP 158 | 159 | leg_2jnt_01 160 | ----------- 161 | WIP 162 | 163 | leg_2jnt_02 164 | ----------- 165 | WIP 166 | 167 | leg_2jnt_freeTangents_01 168 | ------------------------ 169 | WIP 170 | 171 | leg_3jnt_01 172 | ----------- 173 | WIP 174 | 175 | leg_ms_2jnt_01 176 | -------------- 177 | WIP 178 | 179 | lite_chain_01 180 | ------------- 181 | WIP 182 | 183 | lite_chain_stack_01 184 | ------------------- 185 | WIP 186 | 187 | meta_01 188 | ------- 189 | WIP 190 | 191 | mouth_01 192 | -------- 193 | WIP 194 | 195 | mouth_02 196 | -------- 197 | WIP 198 | 199 | neck_ik_01 200 | ---------- 201 | WIP 202 | 203 | sdk_control_01 204 | -------------- 205 | WIP 206 | 207 | shoulder_01 208 | ----------- 209 | WIP 210 | 211 | shoulder_02 212 | ----------- 213 | WIP 214 | 215 | shoulder_ms_01 216 | -------------- 217 | WIP 218 | 219 | spine_FK_01 220 | ----------- 221 | WIP 222 | 223 | spine_S_shape_01 224 | ---------------- 225 | WIP 226 | 227 | spine_ik_01 228 | ----------- 229 | WIP 230 | 231 | spine_ik_02 232 | ----------- 233 | WIP 234 | 235 | squash4Sides_01 236 | --------------- 237 | WIP 238 | 239 | squash_01 240 | --------- 241 | WIP 242 | 243 | tangent_spline_01 244 | ----------------- 245 | WIP 246 | 247 | ui_container_01 248 | --------------- 249 | WIP 250 | 251 | ui_slider_01 252 | ------------ 253 | WIP 254 | -------------------------------------------------------------------------------- /docs/source/shifterModules.rst: -------------------------------------------------------------------------------- 1 | Shifter Rig Builder 2 | =================== 3 | 4 | **Content:** 5 | 6 | * `Introduction`_ 7 | * `Modules`_ 8 | 9 | Introduction 10 | ------------ 11 | 12 | Shifter is the default autorigging modular system included with mGear. This system is provided with the hope to solve the majority of your rigging necesities. From a freelancer or small boutique to a big studio. 13 | 14 | Shifter can be use in a wide variety of projects. Animated feature films, video games, VR, VFX, TV series, etc... and can build rigs for any kind of asset. i.e: cartoon characters, creatures, robots, props, vehicles, etc... 15 | 16 | Shifter have been build on top of mGear framework and can co-exist with other rigging systems inside mGear framework. In other words, if Shifter's paradigm doesn't fit your rigging needs, you can create another rigging system using the same mGear base modules. 17 | 18 | 19 | 20 | Modules 21 | -------- 22 | 23 | .. autosummary:: 24 | :toctree: generated 25 | 26 | mgear.shifter 27 | mgear.shifter.guide 28 | mgear.shifter.gui 29 | mgear.shifter.component 30 | mgear.shifter.component.guide 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/source/shifterUserDocumentation.rst: -------------------------------------------------------------------------------- 1 | Shifter User Documentation 2 | ########################## 3 | 4 | WIP section: Please visit: 5 | `mGear Youtube channel `_ 6 | 7 | * components 8 | * creating new components 9 | * guides templates and basic rig building 10 | * stepped rig building 11 | * scalability and reusability 12 | * gotchas 13 | * tips 14 | 15 | 16 | Plebes - Instant Rigged Characters Using mGear 17 | ============================================== 18 | 19 | Plebes is a simple template based tool to quickly rig characters from various character generators, such as DazStudio, Character Creator 3, MakeHuman or Mixamo. What it does is build an mGear rig that matches the proportions of your character, and then constrains the joints of that character to the rig with just a few clicks. 20 | 21 | .. image:: images/shifter/plebes_ui.png 22 | 23 | How to Rig Plebes 24 | ----------------- 25 | 26 | 1) Open Plebes interface from the mGear>Shifter>Plebes... menu. 27 | 2) Export the character from the character generator as FBX and bring it into Maya. 28 | 3) Select the **Character Template** that matches your character generator. 29 | 4) Follow the template specific instructions in the Plebes interface. 30 | 5) Press **Import Guides** to import the mGear biped guides. 31 | 6) Press **Align Guides** to align the mGear guides to your character's joints. 32 | 7) Look over the guides, and manually adjust any that are off (e.g. typically the heel and sides of the feet). 33 | 8) Press **Build Rig** to build the rig. 34 | 9) Press **Attach Plebe to Rig** to constrain the character to the mGear rig. This also removes any locks, keys/connections and/or limits on the translate, rotate and scale attributes on the character's original joints. 35 | 36 | You can delete the rig, adjust the guides and rebuild it, like you can normally with mGear, by simply deleting the "rig" group and running the last two steps again. 37 | 38 | .. note:: 39 | Some character generators build their characters with completely straight or misaligned elbows and knees, which makes it impossible for mGear to figure out where to aim the knee or elbow, so you may need to rotate the joints slightly before aligning the guides to them, to make sure they are pointing in the right direction. 40 | 41 | Known Limitations 42 | ----------------- 43 | 44 | Plebes is meant to quickly rig generic characters, typically for use in the background or for crowd agents, so has some limitations. If you need more of a hero rig, you can use the guide placement as a starting point, but it's probably a good idea to skin the character directly to your mGear joints, rather than using **Attach Plebe to Rig**. Other known limitations include: 45 | 46 | - Stretching and scaling of limbs may not work correctly for all templates, though it should work fine for all "normal" animation. 47 | - Some characters come with additional joints, such as face joints, that Plebes does not add any controls to. 48 | 49 | Plebe Templates 50 | --------------- 51 | 52 | What gets aligned and constrained to what is defined by simple JSON templates. Plebes ships with templates for the several commonly used character genrators, but should you want to add more or modify the existing ones, you can easily do so. You can define the location of additional templates by defining the environment variable PLEBE_TEMPLATES_DIR. You can have multiple template dirs, so you can add your custom ones from your home folder or project specific ones as needed, just make sure each tamplate has a unique name. 53 | 54 | The templates look like this: 55 | 56 | 57 | .. code-block:: json 58 | 59 | { 60 | "help": "This show up when you hover over the template menu.", 61 | "root": "CC_Base_BoneRoot", 62 | "guides": [ 63 | {"guide": "CC_Base_BoneRoot"}, 64 | {"neck_C0_tan0": [ 65 | "CC_Base_NeckTwist01", 66 | "CC_Base_NeckTwist02" 67 | ]} 68 | ], 69 | "settings": [ 70 | {"arm_L0_root": [ 71 | { "div0": 1 }, 72 | { "div1": 1 }, 73 | { "supportJoints": 0} 74 | ]} 75 | ], 76 | "joints": [ 77 | {"local_C0_ctl": { 78 | "joint": "CC_Base_BoneRoot", 79 | "constrain": "111"} 80 | }, 81 | {"spine_C0_0_jnt": { 82 | "joint": "CC_Base_Hip", 83 | "constrain": "110"} 84 | } 85 | ] 86 | } 87 | 88 | - **help** - Documentation that shows up in the interface, detaling any specific things you need to do to work with this template. 89 | - **root** - The top level joint/node from the character generator. 90 | - **guides** - List of which guides to position at which joints. 91 | - If you match it to a list of joints, like with the neck above, it will be placed between them. 92 | - **settings** - Settings to adjust on the guides before building the rig. Typically this is number of twist joints, but can be any attribute and value combination. 93 | - **joints** - List of mGear joints and which of the character's joints to constrain to it. 94 | - **joint** - Name of the character's joint to constrain to mGear. 95 | - **constain** - Three 0 or 1's. First is if to point constraint, second is orient and third is scale. 96 | -------------------------------------------------------------------------------- /docs/source/simpleRigModules.rst: -------------------------------------------------------------------------------- 1 | ########## 2 | Simple Rig 3 | ########## 4 | 5 | * `Introduction`_ 6 | * `Modules`_ 7 | 8 | 9 | Introduction 10 | ------------ 11 | 12 | Simple rigging system with option to conver to Shifter rigging system. 13 | 14 | `Simple Rig 2.0 Intro `_ 15 | 16 | 17 | Modules 18 | ------- 19 | 20 | .. autosummary:: 21 | :toctree: generated 22 | 23 | mgear.simpleRig 24 | mgear.simpleRig.menu 25 | mgear.simpleRig.simpleRigTool 26 | -------------------------------------------------------------------------------- /docs/source/solvers.rst: -------------------------------------------------------------------------------- 1 | Custom Solvers/Deformers 2 | ========================== 3 | 4 | mGear custom C++ Solvers/Deformers Documentation 5 | 6 | 7 | mgear_add10Scalar 8 | ----------------- 9 | 10 | .. image:: images/solvers/mgear_add10Scalar_node.png 11 | :align: center 12 | :scale: 95% 13 | 14 | Add 10 scalar values. This node is deprecated. Only kept for backwards compatibility reasons. 15 | 16 | .. image:: images/solvers/mgear_add10Scalar_attr.png 17 | :align: center 18 | :scale: 95% 19 | 20 | mgear_curveCns 21 | ----------------- 22 | 23 | .. image:: images/solvers/mgear_curveCns_node.png 24 | :align: center 25 | :scale: 95% 26 | 27 | Generate a curve based on the input positions. 28 | This is used in the Shifter guides to create the visual connections with the guide locations. 29 | 30 | 31 | mgear_ikfk2Bone 32 | ----------------- 33 | 34 | .. image:: images/solvers/mgear_ikfk2Bone_node.png 35 | :align: center 36 | :scale: 95% 37 | 38 | IK FK 2 bones chain solver. 39 | 40 | Mainly used for legs and arms. The solver encapsulate many functions that will be very complex and expensive to evaluate using vanilla Maya nodes and other techniques like expressions. 41 | 42 | Some of the features are, soft IK, reverse IK, squash, stretch, independent bone length, slide and roll. 43 | 44 | .. image:: images/solvers/mgear_ikfk2Bone_attr.png 45 | :width: 45% 46 | .. image:: images/solvers/mgear_ikfk2Bone_attr2.png 47 | :width: 45% 48 | 49 | * **Blend:** IK fk blend 50 | * **Length A:** Rest length of the bone A (Arm) 51 | * **Length B:** Rest length of the bone B (Forearm) 52 | * **Negate:** Negate the solver direction (i.e: the right side arm negates the direction) 53 | * **Scale A:** Length multiplier for the arm. 54 | * **Scale B:** Length multiplier for the forearm. 55 | * **Roll:** Roll value. This value is complementarity to the Up Vector control. 56 | * **Max stretch:** Maximum stretching value for the IK behavior. Value 1 will represent the original size and not scale. 57 | * **Slide:** Slide the elbow position between the lengths of the arm and forearm. Value of .5 represents the middle point, whatever the proportions ratio is between the arm and forearm. 58 | * **Reverse:** Reverse the IK solver direction. (i.e: human leg vs Chicken leg) 59 | * **root:** Matrix. Root of the component world matrix 60 | * **ikref:** Matrix. IK control world matrix 61 | * **upv:** Matrix. Up vector control world matrix 62 | * **FK0:** Matrix. FK arm control world matrix 63 | * **FK1:** Matrix. FK forearm control world matrix 64 | * **FK2:** Matrix. FK hand control world matrix 65 | * **in A parent:** Matrix. Output bone A parent matrix (arm) 66 | * **in B parent:** Matrix. Output bone A parent matrix (forearm) 67 | * **in Center parent:** Matrix. Output elbow parent matrix 68 | * **in Eff parent:** Matrix. Output effector parent matrix (hand) 69 | * **out A:** Matrix. Output world matrix for bone A (arm) 70 | * **out B:** Matrix. Output world matrix for bone B (forearm) 71 | * **out Center:** Matrix. Output world matrix for elbow 72 | * **out Eff:** Matrix. Output world matrix for effector (hand) 73 | 74 | 75 | mgear_intMatrix 76 | ----------------- 77 | 78 | .. image:: images/solvers/mgear_intMatrix_node.png 79 | :align: center 80 | :scale: 95% 81 | 82 | Interpolate between 2 input matrix using a blend value. The rotation is calculated in quaternion. 83 | 84 | .. image:: images/solvers/mgear_intMatrix_attr.png 85 | :align: center 86 | :scale: 95% 87 | 88 | * **Blend:** Blend between the 2 input matrix 89 | * **Matrix A:** Input Matrix 90 | * **Matrix B:** Input Matrix 91 | * **Output:** Output Matrix 92 | 93 | 94 | mgear_inverseRotOrder 95 | ---------------------- 96 | 97 | .. image:: images/solvers/mgear_inverseRotOrder_node.png 98 | :align: center 99 | :scale: 95% 100 | 101 | Invert the rotation order. For example and input of "XYZ" will output ZYX. 102 | This is very useful when you need to negate an animated rotation order to avoid gimbal. 103 | 104 | .. image:: images/solvers/mgear_inverseRotOrder_attr.png 105 | :align: center 106 | :scale: 95% 107 | 108 | * **Rot Order:** Rotation order to invert 109 | 110 | 111 | mgear_linearInterpolate3Dvector 112 | ------------------------------- 113 | 114 | .. image:: images/solvers/mgear_linearInterpolate3Dvector_node.png 115 | :align: center 116 | :scale: 95% 117 | 118 | Interpolate between 2 input vector using a blend value. 119 | i.e: the XYZ position of 2 transforms. 120 | 121 | .. image:: images/solvers/mgear_linearInterpolate3Dvector_attr.png 122 | :align: center 123 | :scale: 95% 124 | 125 | * **Blend:** Blend between the 2 input matrix 126 | * **Vector A:** Input Vector 127 | * **Vector B:** Input Vector 128 | * **Out Vector:** Output Vector 129 | 130 | 131 | mgear_mulMatrix 132 | ----------------- 133 | 134 | .. image:: images/solvers/mgear_mulMatrix_node.png 135 | :align: center 136 | :scale: 95% 137 | 138 | Multiply 2 input matrix. The only advantage between this node and the default one, is that with this you can visualize the values in the attribute editor. 139 | With the default Maya's multMatrix node the values are not visible, this make very difficult debugging rigs in some situations. 140 | For the rest are exactly the same and interchangeable. In terms of performance there is not noticeable difference. 141 | 142 | .. image:: images/solvers/mgear_mulMatrix_attr.png 143 | :align: center 144 | :scale: 95% 145 | 146 | * **Matrix A:** Input Matrix 147 | * **Matrix B:** Input Matrix 148 | * **Output:** Output Matrix 149 | 150 | mgear_percentageToU 151 | ------------------- 152 | 153 | .. image:: images/solvers/mgear_percentageToU_node.png 154 | :align: center 155 | :scale: 95% 156 | 157 | Converts a percentage values to a curve U value. 158 | 159 | .. image:: images/solvers/mgear_percentageToU_attr.png 160 | :align: center 161 | :scale: 95% 162 | 163 | * **Curve:** Input curve. 164 | * **Normalized U:** If active will normalize U value between 0 and 1. 165 | * **Percentage:** Percentage value. 166 | * **Steps:** Interpolation steps. 167 | 168 | 169 | mgear_rayCastPosition 170 | --------------------- 171 | 172 | .. image:: images/solvers/mgear_rayCastPosition_node.png 173 | :align: center 174 | :scale: 95% 175 | 176 | Raycast the contact position using a vector from 2 position inputs 177 | The operation is set using Matrix, but usually we will use it only to get the position. 178 | 179 | .. image:: images/solvers/mgear_rayCastPosition_attr.png 180 | :align: center 181 | :scale: 95% 182 | 183 | * **Mesh Input:** Contact Mesh. 184 | * **Ray Source:** Matrix. starting position for the vector 185 | * **Ray Direction:** Matrix. Aim position for the vector 186 | * **Output:** Output Matrix with the position on the Contact Mesh 187 | 188 | mgear_rollSplineKine 189 | --------------------- 190 | 191 | .. image:: images/solvers/mgear_rollSplineKine_node.png 192 | :align: center 193 | :scale: 95% 194 | 195 | Roll Spline kinematic is a Bezier curve style with roll support. 196 | This solver is used in several Shifter components. Mainly arms and legs. 197 | This will be the equivalent of or similar to a ribbon setup, with the advantage of been much more lightweight at evaluation time. 198 | Every input transform (world matrix plug) represents a point in the Bezier curve. And the scale in X axis of each transform represents the length of the Bezier tangents. 199 | The main limitation is that the 2 tangents are always of the same length for each point. 200 | In order to workaround this you can use 2 transforms in the same position. One representing each tangent, so the scale can be control independently. 201 | Each mgear_rollSplineKine node, outputs only one point in the U value of the curve. 202 | 203 | .. image:: images/solvers/mgear_rollSplineKine_attr.png 204 | :align: center 205 | :scale: 95% 206 | 207 | * **Ctl Input:** Array of Matrix. Input control points parent matrix. 208 | * **inputs:** Array of Matrix. Transform controls world matrix 209 | * **inputs Roll:** Array of Rotations. Transform controls rotation. 210 | * **Output Parent:** Output transform parent Matrix. 211 | * **U:** U percentage position represented from 0 to 1. NOTE: Usually the value should be always between 0.0001 and 0.999. The most extreme values are not taking in consideration the tangency for the output transform. 212 | * **Resample:** Resample the output curve. 213 | * **Subdiv:** Number of subdivision in the curve. Higher values will create a smoother curve but slower evaluation. Small values will create a more stepped curve, this can cause artifacts when sliding a transform on the U value. NOTE: Also, can have a little discordance between the same component in the left and right side. Due inversion of the direction. Usually the solution is simple as increase the subdivision. 214 | 215 | .. image:: images/solvers/mgear_rollSplineKine_subdivision.png 216 | :align: center 217 | :scale: 50% 218 | 219 | * **Absolute:** Change the way that the subdivision are distributed in the curve. 220 | * **Output:** Output transform Matrix. 221 | 222 | 223 | mgear_slideCurve 224 | ----------------- 225 | 226 | .. image:: images/solvers/mgear_slideCurve_node.png 227 | :align: center 228 | :scale: 95% 229 | 230 | Deform a curve, sliding it on top of other. i.e: It is used in the Shifter spine component. 231 | Use this function to apply the deformer: mgear.core.applyop.gear_curveslide2_op 232 | 233 | .. image:: images/solvers/mgear_slideCurve_attr.png 234 | :align: center 235 | :scale: 95% 236 | 237 | * **Master Crv:** Input Curve. 238 | * **Master Mat:** Master curve matrix. 239 | * **Slave Length:** Slave curve length. 240 | * **Master Length:** Master curve length. 241 | * **Position:** Slave curve position. 242 | * **Max stretch:** Maximum stretch of the slave curve. 243 | * **Max squash:** Maximum squash of the slave curve. 244 | * **Softness:** Soft clamping for squash and stretch. 245 | 246 | 247 | mgear_spinePointAt 248 | ------------------- 249 | 250 | .. image:: images/solvers/mgear_spinePointAt_node.png 251 | :align: center 252 | :scale: 95% 253 | 254 | Point at an axis direction base in 2 input rotations. Note: This solver was design to handle the spine twist, but currently is not used in any component. 255 | 256 | .. image:: images/solvers/mgear_spinePointAt_attr.png 257 | :align: center 258 | :scale: 95% 259 | 260 | * **Rot A:** Input rotation A. 261 | * **Rot B:** Input rotation B. 262 | * **Axe:** Aim axis. 263 | * **Blend:** Blend value between the 2 rotations 264 | 265 | mgear_springNode 266 | ------------------- 267 | 268 | .. image:: images/solvers/mgear_springNode_node.png 269 | :align: center 270 | :scale: 95% 271 | 272 | Spring dynamic solver based in goal position. 273 | 274 | .. image:: images/solvers/mgear_springNode_attr.png 275 | :align: center 276 | :scale: 95% 277 | 278 | * **Goal:** Position goal. 279 | * **Time:** Current time input. 280 | * **Stiffness:** Stiffness value. 281 | * **Damping:** Damping value. 282 | * **Intensity:** Intensity value. 283 | 284 | 285 | mgear_squashStretch_attr 286 | ------------------- 287 | 288 | .. image:: images/solvers/mgear_squashStretch_node.png 289 | :align: center 290 | :scale: 95% 291 | 292 | Squash and stretch solver. 293 | 294 | .. image:: images/solvers/mgear_squashStretch_attr.png 295 | :align: center 296 | :scale: 95% 297 | 298 | * **Global Scale:** Global scale reference. 299 | * **Blend:** Blend to deal down the squash and stretch effect. 300 | * **Driver:** Driver rest value. 301 | * **Driver Min:** Driver minimum value where the squash and stretch effect will be calculated. 302 | * **Driver ctr:** Driver control value. 303 | * **Driver Max:** Driver maximum value where the squash and stretch effect will be calculated. 304 | * **Axis:** Axis along the squash and stretch value will be calculated. 305 | * **Squash:** Multiplication value for the squash direction. 306 | * **Stretch:** Multiplication value for the stretch direction. 307 | 308 | 309 | mgear_trigonometyAngle 310 | ---------------------- 311 | 312 | .. image:: images/solvers/mgear_trigonometyAngle_node.png 313 | :align: center 314 | :scale: 95% 315 | 316 | Sine and cosine trigonometry node 317 | 318 | .. image:: images/solvers/mgear_trigonometyAngle_attr.png 319 | :align: center 320 | :scale: 95% 321 | 322 | * **Operation:** Sine or Cosine. 323 | * **Angle:** Input angle. 324 | 325 | 326 | mgear_vertexPosition 327 | ---------------------- 328 | 329 | .. image:: images/solvers/mgear_vertexPosition_node.png 330 | :align: center 331 | :scale: 95% 332 | 333 | Get the world position of a given vertex 334 | 335 | .. image:: images/solvers/mgear_vertexPosition_attr.png 336 | :align: center 337 | :scale: 95% 338 | 339 | * **Input Shape:** Input mesh shape. 340 | * **Vertex:** Vertex index number to track. 341 | * **Output:** Output position. 342 | * **Driven parent invert Matrix:** Driven parent invert matrix. 343 | 344 | -------------------------------------------------------------------------------- /docs/source/synopticModules.rst: -------------------------------------------------------------------------------- 1 | ########## 2 | Synoptic 3 | ########## 4 | 5 | **Content:** 6 | 7 | * `Introduction`_ 8 | * Creating a new synoptic tab 9 | * Adding Synoptic to a Shifter rig 10 | * Adding Synoptic to any rig 11 | * `Modules`_ 12 | 13 | Introduction 14 | ------------ 15 | 16 | Synoptic view is a user interface to help the animators to interact better and faster with the rigs. Synoptic view can be use to select rig parts, save keyframes, mirror poses, switch spaces and many other functions that an animator would need. 17 | 18 | 19 | 20 | Modules 21 | ------- 22 | 23 | .. autosummary:: 24 | :toctree: generated 25 | 26 | mgear.synoptic 27 | mgear.synoptic.utils 28 | mgear.synoptic.widgets 29 | -------------------------------------------------------------------------------- /docs/source/synopticUserDocumentation.rst: -------------------------------------------------------------------------------- 1 | Synoptic User Documentation 2 | ============================ 3 | 4 | WIP section: Please visit: 5 | `mGear Youtube channel `_ 6 | 7 | 8 | * Basic operations 9 | * Space Switcher 10 | * Animation transfer IK/FK 11 | -------------------------------------------------------------------------------- /docs/source/videoTutorials.rst: -------------------------------------------------------------------------------- 1 | Video Tutorials 2 | =============== 3 | 4 | WIP section: Please visit: 5 | `mGear Youtube channel `_ 6 | -------------------------------------------------------------------------------- /framework/scripts/mgear/__init__.py: -------------------------------------------------------------------------------- 1 | """mGear init module""" 2 | 3 | # imports 4 | from pkgutil import extend_path 5 | import sys 6 | import exceptions 7 | from . import menu 8 | 9 | # extend mGear python package by adding the current module 10 | __path__ = extend_path(__path__, __name__) 11 | 12 | # Debug mode for the logger 13 | logDebug = False 14 | 15 | # Severity for logged messages 16 | sev_fatal = 1 17 | sev_error = 2 18 | sev_warning = 4 19 | sev_info = 8 20 | sev_verbose = 16 21 | sev_comment = 32 22 | 23 | # gear version 24 | VERSION = [3, 7, 11] 25 | 26 | self = sys.modules[__name__] 27 | self.menu_id = None 28 | 29 | 30 | def install(): 31 | self.menu_id = menu.create() 32 | 33 | 34 | def logInfos(): 35 | """Log version of Gear""" 36 | print "GEAR version : " + getVersion() 37 | 38 | 39 | def getVersion(): 40 | """Get mGear version 41 | 42 | Returns: 43 | mgear version 44 | 45 | """ 46 | return ".".join([str(i) for i in VERSION]) 47 | 48 | 49 | def reloadModule(name="mgear", *args): 50 | """Reload a module and its sub-modules from a given module name. 51 | 52 | Args: 53 | name (str): Module Name. Default value is "mgear". 54 | 55 | """ 56 | debugMode = setDebug(False) 57 | 58 | for mod in sys.modules.keys(): 59 | if mod.startswith(name): 60 | log("Removing module: {}".format(mod)) 61 | del sys.modules[mod] 62 | 63 | setDebug(debugMode) 64 | 65 | ########################################################## 66 | # LOGGER 67 | ########################################################## 68 | 69 | 70 | def setDebug(b): 71 | """Set the debug mode to given value. 72 | 73 | Args: 74 | b (bool): boolean 75 | 76 | Returns: 77 | bool: The previous value of the debug mode 78 | 79 | """ 80 | global logDebug 81 | original_value = logDebug 82 | logDebug = b 83 | return original_value 84 | 85 | 86 | def toggleDebug(): 87 | """Toggle the debug mode value. 88 | 89 | Returns; 90 | bool: The new debug mode value. 91 | 92 | """ 93 | global logDebug 94 | logDebug = not logDebug 95 | return logDebug 96 | 97 | 98 | def log(message, severity=sev_comment, infos=False): 99 | """Log a message using severity and additional info from the file itself. 100 | 101 | Severity has been taken from Softimage one: 102 | * 1. Fatal 103 | * 2. Error 104 | * 4. Warning 105 | * 8. Info 106 | * 16. Verbose 107 | * 32. Comment 108 | 109 | Args: 110 | messages(str): The message 111 | severity (int): Severity level. 112 | infos (bool): Add extra infos from the module, class, method and 113 | line number. 114 | 115 | """ 116 | message = str(message) 117 | 118 | if infos or logDebug: 119 | message = getInfos(1) + "\n" + message 120 | 121 | sys.stdout.write(message + "\n") 122 | 123 | # ======================================================== 124 | # Exception 125 | 126 | 127 | class FakeException(exceptions.Exception): 128 | pass 129 | 130 | 131 | def getInfos(level): 132 | """Get information from where the method has been fired. 133 | Such as module name, method, line number... 134 | 135 | Args: 136 | level (int): Level 137 | 138 | Returns: 139 | str: The info 140 | 141 | """ 142 | try: 143 | raise FakeException("this is fake") 144 | except Exception: 145 | # get the current execution frame 146 | f = sys.exc_info()[2].tb_frame 147 | 148 | # go back as many call-frames as was specified 149 | while level >= 0: 150 | f = f.f_back 151 | level = level - 1 152 | 153 | infos = "" 154 | 155 | # Module Name 156 | moduleName = f.f_globals["__name__"] 157 | if moduleName != "__ax_main__": 158 | infos += moduleName + " | " 159 | 160 | # Class Name 161 | # if there is a self variable in the caller's local namespace then 162 | # we'll make the assumption that the caller is a class method 163 | obj = f.f_locals.get("self", None) 164 | if obj: 165 | infos += obj.__class__.__name__ + "::" 166 | 167 | # Function Name 168 | functionName = f.f_code.co_name 169 | if functionName != "": 170 | infos += functionName + "()" 171 | 172 | # Line Number 173 | lineNumber = str(f.f_lineno) 174 | infos += " line " + lineNumber + "" 175 | 176 | if infos: 177 | infos = "[" + infos + "]" 178 | 179 | return infos 180 | -------------------------------------------------------------------------------- /framework/scripts/mgear/__init__.py.in: -------------------------------------------------------------------------------- 1 | """mGear init module""" 2 | 3 | # imports 4 | from pkgutil import extend_path 5 | import sys 6 | # import exceptions 7 | from . import menu 8 | 9 | # extend mGear python package by adding the current module 10 | __path__ = extend_path(__path__, __name__) 11 | 12 | # Debug mode for the logger 13 | logDebug = False 14 | 15 | # Severity for logged messages 16 | sev_fatal = 1 17 | sev_error = 2 18 | sev_warning = 4 19 | sev_info = 8 20 | sev_verbose = 16 21 | sev_comment = 32 22 | 23 | # gear version 24 | VERSION = @MGEAR_VERSION@ 25 | 26 | self = sys.modules[__name__] 27 | self.menu_id = None 28 | 29 | 30 | def install(): 31 | self.menu_id = menu.create() 32 | 33 | 34 | def logInfos(): 35 | """Log version of Gear""" 36 | print("GEAR version : " + getVersion()) 37 | 38 | 39 | def getVersion(): 40 | """Get mGear version 41 | 42 | Returns: 43 | mgear version 44 | 45 | """ 46 | return ".".join([str(i) for i in VERSION]) 47 | 48 | 49 | def reloadModule(name="mgear", *args): 50 | """Reload a module and its sub-modules from a given module name. 51 | 52 | Args: 53 | name (str): Module Name. Default value is "mgear". 54 | 55 | """ 56 | debugMode = setDebug(False) 57 | 58 | for mod in sys.modules.keys(): 59 | if mod.startswith(name): 60 | log("Removing module: {}".format(mod)) 61 | del sys.modules[mod] 62 | 63 | setDebug(debugMode) 64 | 65 | ########################################################## 66 | # LOGGER 67 | ########################################################## 68 | 69 | 70 | def setDebug(b): 71 | """Set the debug mode to given value. 72 | 73 | Args: 74 | b (bool): boolean 75 | 76 | Returns: 77 | bool: The previous value of the debug mode 78 | 79 | """ 80 | global logDebug 81 | original_value = logDebug 82 | logDebug = b 83 | return original_value 84 | 85 | 86 | def toggleDebug(): 87 | """Toggle the debug mode value. 88 | 89 | Returns; 90 | bool: The new debug mode value. 91 | 92 | """ 93 | global logDebug 94 | logDebug = not logDebug 95 | return logDebug 96 | 97 | 98 | def log(message, severity=sev_comment, infos=False): 99 | """Log a message using severity and additional info from the file itself. 100 | 101 | Severity has been taken from Softimage one: 102 | * 1. Fatal 103 | * 2. Error 104 | * 4. Warning 105 | * 8. Info 106 | * 16. Verbose 107 | * 32. Comment 108 | 109 | Args: 110 | messages(str): The message 111 | severity (int): Severity level. 112 | infos (bool): Add extra infos from the module, class, method and 113 | line number. 114 | 115 | """ 116 | message = str(message) 117 | 118 | if infos or logDebug: 119 | message = getInfos(1) + "\n" + message 120 | 121 | sys.stdout.write(message + "\n") 122 | 123 | # ======================================================== 124 | # Exception 125 | 126 | 127 | class FakeException(Exception): 128 | pass 129 | 130 | 131 | def getInfos(level): 132 | """Get information from where the method has been fired. 133 | Such as module name, method, line number... 134 | 135 | Args: 136 | level (int): Level 137 | 138 | Returns: 139 | str: The info 140 | 141 | """ 142 | try: 143 | raise FakeException("this is fake") 144 | except Exception: 145 | # get the current execution frame 146 | f = sys.exc_info()[2].tb_frame 147 | 148 | # go back as many call-frames as was specified 149 | while level >= 0: 150 | f = f.f_back 151 | level = level - 1 152 | 153 | infos = "" 154 | 155 | # Module Name 156 | moduleName = f.f_globals["__name__"] 157 | if moduleName != "__ax_main__": 158 | infos += moduleName + " | " 159 | 160 | # Class Name 161 | # if there is a self variable in the caller's local namespace then 162 | # we'll make the assumption that the caller is a class method 163 | obj = f.f_locals.get("self", None) 164 | if obj: 165 | infos += obj.__class__.__name__ + "::" 166 | 167 | # Function Name 168 | functionName = f.f_code.co_name 169 | if functionName != "": 170 | infos += functionName + "()" 171 | 172 | # Line Number 173 | lineNumber = str(f.f_lineno) 174 | infos += " line " + lineNumber + "" 175 | 176 | if infos: 177 | infos = "[" + infos + "]" 178 | 179 | return infos 180 | -------------------------------------------------------------------------------- /framework/scripts/mgear/menu.py: -------------------------------------------------------------------------------- 1 | import pymel.core as pm 2 | import mgear 3 | 4 | menuId = "mGear" 5 | 6 | 7 | def create(menuId=menuId): 8 | """Create mGear main menu 9 | 10 | Args: 11 | menuId (str, optional): Main menu name 12 | 13 | Returns: 14 | str: main manu name 15 | """ 16 | 17 | if pm.menu(menuId, exists=True): 18 | pm.deleteUI(menuId) 19 | 20 | pm.menu(menuId, 21 | parent="MayaWindow", 22 | tearOff=True, 23 | allowOptionBoxes=True, 24 | label=menuId) 25 | 26 | return menuId 27 | 28 | 29 | def install_help_menu(menuId=menuId): 30 | """Install help menu section 31 | 32 | Args: 33 | menuId (str, optional): Main menu name 34 | """ 35 | 36 | # Help 37 | pm.setParent(menuId, menu=True) 38 | pm.menuItem(divider=True) 39 | pm.menuItem(parent=menuId, subMenu=True, tearOff=True, label="Help") 40 | pm.menuItem(label="Web", command=str_web) 41 | pm.menuItem(label="Forum", command=str_forum) 42 | pm.menuItem(divider=True) 43 | pm.menuItem(label="Documentation", command=str_docs) 44 | pm.menuItem(divider=True) 45 | pm.menuItem(label="About", command=str_about) 46 | 47 | 48 | def install_utils_menu(): 49 | """Install Utilities submenu 50 | """ 51 | pm.setParent(mgear.menu_id, menu=True) 52 | pm.menuItem(divider=True) 53 | commands = [("Reload", str_reload)] 54 | 55 | m = install("Utilities", commands) 56 | return m 57 | 58 | 59 | def install(label, commands, parent=menuId): 60 | """Installer Function for sub menus 61 | 62 | Args: 63 | label (str): Name of the sub menu 64 | commands (list): List of commands to install 65 | parent (str, optional): Parent menu for the submenu 66 | """ 67 | try: 68 | m = pm.menuItem(parent=parent, 69 | subMenu=True, 70 | tearOff=True, 71 | label=label) 72 | for label, command in commands: 73 | if not command: 74 | pm.menuItem(divider=True) 75 | continue 76 | if not label: 77 | command(m) 78 | pm.setParent(m, menu=True) 79 | continue 80 | 81 | pm.menuItem(label=label, command=command) 82 | 83 | return m 84 | 85 | except Exception as ex: 86 | template = ("An exception of type {0} occured. " 87 | "Arguments:\n{1!r}") 88 | message = template.format(type(ex).__name__, ex.args) 89 | pm.displayError(message) 90 | 91 | 92 | str_web = """ 93 | import webbrowser 94 | webbrowser.open("http://www.mgear-framework.com/") 95 | """ 96 | 97 | str_forum = """ 98 | import webbrowser 99 | webbrowser.open("http://forum.mgear-framework.com/") 100 | """ 101 | 102 | str_docs = """ 103 | import webbrowser 104 | webbrowser.open("https://www.mgear-framework.com/mgear_dist/") 105 | """ 106 | 107 | str_about = """ 108 | import mgear 109 | mgear.core.aboutMgear() 110 | """ 111 | 112 | 113 | str_reload = """ 114 | import mgear 115 | mgear.reloadModule("mgear") 116 | """ 117 | -------------------------------------------------------------------------------- /framework/scripts/mgear/vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mgear-dev/mgear_dist/24477b05a1ea3c615f313dbdfa56710326894fdb/framework/scripts/mgear/vendor/__init__.py -------------------------------------------------------------------------------- /framework/scripts/mgear/vendor/qjsonmodel.py: -------------------------------------------------------------------------------- 1 | # mGear Dev version. 2 | # this module is not sync with the latest version 3 | """Python adaptation of https://github.com/dridk/QJsonModel 4 | 5 | Supports Python 2 and 3 with PySide, PySide2, PyQt4 or PyQt5. 6 | Requires https://github.com/mottosso/Qt.py 7 | 8 | Usage: 9 | Use it like you would the C++ version. 10 | 11 | >>> import qjsonmodel 12 | >>> model = qjsonmodel.QJsonModel() 13 | >>> model.load({"key": "value"}) 14 | 15 | Test: 16 | Run the provided example to sanity check your Python, 17 | dependencies and Qt binding. 18 | 19 | $ python qjsonmodel.py 20 | 21 | Changes: 22 | This module differs from the C++ version in the following ways. 23 | 24 | 1. Setters and getters are replaced by Python properties 25 | 2. Objects are sorted by default, disabled via load(sort=False) 26 | 3. load() takes a Python dictionary as opposed to 27 | a string or file handle. 28 | 29 | - To load from a string, use built-in `json.loads()` 30 | >>> import json 31 | >>> document = json.loads("{'key': 'value'}") 32 | >>> model.load(document) 33 | 34 | - To load from a file, use `with open(fname)` 35 | >>> import json 36 | >>> with open("file.json") as f: 37 | ... document = json.load(f) 38 | ... model.load(document) 39 | 40 | """ 41 | 42 | import json 43 | 44 | from Qt import QtWidgets, QtCore, __binding__ 45 | 46 | 47 | class QJsonTreeItem(object): 48 | def __init__(self, parent=None): 49 | self._parent = parent 50 | 51 | self._key = "" 52 | self._value = "" 53 | self._type = None 54 | self._children = list() 55 | 56 | def appendChild(self, item): 57 | self._children.append(item) 58 | 59 | def child(self, row): 60 | return self._children[row] 61 | 62 | def parent(self): 63 | return self._parent 64 | 65 | def childCount(self): 66 | return len(self._children) 67 | 68 | def row(self): 69 | return ( 70 | self._parent._children.index(self) 71 | if self._parent else 0 72 | ) 73 | 74 | @property 75 | def key(self): 76 | return self._key 77 | 78 | @key.setter 79 | def key(self, key): 80 | self._key = key 81 | 82 | @property 83 | def value(self): 84 | return self._value 85 | 86 | @value.setter 87 | def value(self, value): 88 | self._value = value 89 | 90 | @property 91 | def type(self): 92 | return self._type 93 | 94 | @type.setter 95 | def type(self, typ): 96 | self._type = typ 97 | 98 | @classmethod 99 | def load(self, value, parent=None, sort=True): 100 | rootItem = QJsonTreeItem(parent) 101 | rootItem.key = "root" 102 | 103 | if isinstance(value, dict): 104 | items = ( 105 | sorted(value.items()) 106 | if sort else value.items() 107 | ) 108 | 109 | for key, value in items: 110 | child = self.load(value, rootItem) 111 | child.key = key 112 | child.type = type(value) 113 | rootItem.appendChild(child) 114 | 115 | elif isinstance(value, list): 116 | for index, value in enumerate(value): 117 | child = self.load(value, rootItem) 118 | child.key = str(index) 119 | child.type = type(value) 120 | rootItem.appendChild(child) 121 | 122 | else: 123 | rootItem.value = value 124 | rootItem.type = type(value) 125 | 126 | return rootItem 127 | 128 | 129 | class QJsonModel(QtCore.QAbstractItemModel): 130 | def __init__(self, parent=None): 131 | super(QJsonModel, self).__init__(parent) 132 | 133 | self._rootItem = QJsonTreeItem() 134 | self._headers = ("key", "value") 135 | 136 | def load(self, document): 137 | """Load from dictionary 138 | 139 | Arguments: 140 | document (dict): JSON-compatible dictionary 141 | 142 | """ 143 | 144 | assert isinstance(document, (dict, list, tuple)), ( 145 | "`document` must be of dict, list or tuple, " 146 | "not %s" % type(document) 147 | ) 148 | 149 | self.beginResetModel() 150 | 151 | self._rootItem = QJsonTreeItem.load(document) 152 | self._rootItem.type = type(document) 153 | 154 | self.endResetModel() 155 | 156 | return True 157 | 158 | def json(self, root=None): 159 | """Serialise model as JSON-compliant dictionary 160 | 161 | Arguments: 162 | root (QJsonTreeItem, optional): Serialise from here 163 | defaults to the the top-level item 164 | 165 | Returns: 166 | model as dict 167 | 168 | """ 169 | 170 | root = root or self._rootItem 171 | return self.genJson(root) 172 | 173 | def data(self, index, role): 174 | if not index.isValid(): 175 | return None 176 | 177 | item = index.internalPointer() 178 | 179 | if role == QtCore.Qt.DisplayRole: 180 | if index.column() == 0: 181 | return item.key 182 | 183 | if index.column() == 1: 184 | return item.value 185 | 186 | elif role == QtCore.Qt.EditRole: 187 | if index.column() == 1: 188 | return item.value 189 | 190 | def setData(self, index, value, role): 191 | if role == QtCore.Qt.EditRole: 192 | if index.column() == 1: 193 | item = index.internalPointer() 194 | item.value = value 195 | 196 | if __binding__ in ("PySide", "PyQt4"): 197 | self.dataChanged.emit(index, index) 198 | else: 199 | self.dataChanged.emit(index, index, [QtCore.Qt.EditRole]) 200 | 201 | return True 202 | 203 | return False 204 | 205 | def headerData(self, section, orientation, role): 206 | if role != QtCore.Qt.DisplayRole: 207 | return None 208 | 209 | if orientation == QtCore.Qt.Horizontal: 210 | return self._headers[section] 211 | 212 | def index(self, row, column, parent=QtCore.QModelIndex()): 213 | if not self.hasIndex(row, column, parent): 214 | return QtCore.QModelIndex() 215 | 216 | if not parent.isValid(): 217 | parentItem = self._rootItem 218 | else: 219 | parentItem = parent.internalPointer() 220 | 221 | childItem = parentItem.child(row) 222 | if childItem: 223 | return self.createIndex(row, column, childItem) 224 | else: 225 | return QtCore.QModelIndex() 226 | 227 | def parent(self, index): 228 | if not index.isValid(): 229 | return QtCore.QModelIndex() 230 | 231 | childItem = index.internalPointer() 232 | parentItem = childItem.parent() 233 | 234 | if parentItem == self._rootItem: 235 | return QtCore.QModelIndex() 236 | 237 | return self.createIndex(parentItem.row(), 0, parentItem) 238 | 239 | def rowCount(self, parent=QtCore.QModelIndex()): 240 | if parent.column() > 0: 241 | return 0 242 | 243 | if not parent.isValid(): 244 | parentItem = self._rootItem 245 | else: 246 | parentItem = parent.internalPointer() 247 | 248 | return parentItem.childCount() 249 | 250 | def columnCount(self, parent=QtCore.QModelIndex()): 251 | return 2 252 | 253 | def flags(self, index): 254 | flags = super(QJsonModel, self).flags(index) 255 | 256 | if index.column() == 1: 257 | return QtCore.Qt.ItemIsEditable | flags 258 | else: 259 | return flags 260 | 261 | def genJson(self, item): 262 | nchild = item.childCount() 263 | 264 | if item.type is dict: 265 | document = {} 266 | for i in range(nchild): 267 | ch = item.child(i) 268 | document[ch.key] = self.genJson(ch) 269 | return document 270 | 271 | elif item.type == list: 272 | document = [] 273 | for i in range(nchild): 274 | ch = item.child(i) 275 | document.append(self.genJson(ch)) 276 | return document 277 | 278 | else: 279 | return item.value 280 | 281 | 282 | if __name__ == '__main__': 283 | import sys 284 | 285 | app = QtWidgets.QApplication(sys.argv) 286 | view = QtWidgets.QTreeView() 287 | model = QJsonModel() 288 | 289 | view.setModel(model) 290 | 291 | document = json.loads("""\ 292 | { 293 | "firstName": "John", 294 | "lastName": "Smith", 295 | "age": 25, 296 | "address": { 297 | "streetAddress": "21 2nd Street", 298 | "city": "New York", 299 | "state": "NY", 300 | "postalCode": "10021" 301 | }, 302 | "phoneNumber": [ 303 | { 304 | "type": "home", 305 | "number": "212 555-1234" 306 | }, 307 | { 308 | "type": "fax", 309 | "number": "646 555-4567" 310 | } 311 | ] 312 | } 313 | """) 314 | 315 | model.load(document) 316 | model.clear() 317 | model.load(document) 318 | 319 | # Sanity check 320 | assert ( 321 | json.dumps(model.json(), sort_keys=True) == 322 | json.dumps(document, sort_keys=True) 323 | ) 324 | 325 | view.show() 326 | view.resize(500, 300) 327 | app.exec_() 328 | -------------------------------------------------------------------------------- /framework/scripts/mgear/version.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | VERSION_MAJOR = 3 4 | VERSION_MINOR = 7 5 | VERSION_PATCH = 11 6 | 7 | version_info = (VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH) 8 | version = '%i.%i.%i' % version_info 9 | __version__ = version 10 | 11 | __all__ = ['version', 'version_info', '__version__'] -------------------------------------------------------------------------------- /framework/scripts/mgear/version.py.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | VERSION_MAJOR = @MGEAR_VERSION_MAJOR@ 4 | VERSION_MINOR = @MGEAR_VERSION_MINOR@ 5 | VERSION_PATCH = @MGEAR_VERSION_PATCH@ 6 | 7 | version_info = (VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH) 8 | version = '%i.%i.%i' % version_info 9 | __version__ = version 10 | 11 | __all__ = ['version', 'version_info', '__version__'] -------------------------------------------------------------------------------- /framework/scripts/userSetup.py: -------------------------------------------------------------------------------- 1 | 2 | # imports 3 | from maya import cmds 4 | from pymel import mayautils 5 | from cvwrap.menu import create_menuitems 6 | 7 | print(""" 8 | ____________________________________ 9 | | _____ | 10 | | / ____| | 11 | | _ __ ___ | | __ ___ __ _ _ __ | 12 | | | '_ ` _ \| | |_ |/ _ \/ _` | '__| | 13 | | | | | | | | |__| | __/ (_| | | | 14 | | |_| |_| |_|\_____|\___|\__,_|_| | 15 | |____________________________________| 16 | 17 | """) 18 | 19 | 20 | def mGear_menu_loader(): 21 | """Create mGear menu""" 22 | 23 | # Install mGear Menu 24 | import mgear 25 | mgear.install() 26 | 27 | # Install Dag Menu option 28 | import mgear.core.dagmenu 29 | mgear.core.dagmenu.install() 30 | 31 | # Install Shifter Menu 32 | import mgear.shifter.menu 33 | mgear.shifter.menu.install() 34 | 35 | # Install Simple Rig Menu 36 | import mgear.simpleRig.menu 37 | mgear.simpleRig.menu.install() 38 | 39 | # Install Skinning Menu 40 | import mgear.core.menu 41 | mgear.core.menu.install_skinning_menu() 42 | 43 | # Install Rigbits Menu 44 | import mgear.rigbits.menu 45 | mgear.rigbits.menu.install() 46 | 47 | # Install Animbits Menu 48 | import mgear.animbits.menu 49 | mgear.animbits.menu.install() 50 | 51 | # Install CFXbits Menu 52 | import mgear.cfxbits.menu 53 | mgear.cfxbits.menu.install() 54 | 55 | # Install Crank Menu 56 | import mgear.crank.menu 57 | mgear.crank.menu.install() 58 | 59 | # Install Anim Picker Menu 60 | import mgear.anim_picker.menu 61 | mgear.anim_picker.menu.install() 62 | 63 | # Install Synoptic Menu 64 | import mgear.synoptic.menu 65 | mgear.synoptic.menu.install() 66 | 67 | # Install Flex Menu 68 | import mgear.flex.menu 69 | mgear.flex.menu.install() 70 | 71 | # Install Utilities Menu 72 | import mgear.menu 73 | m = mgear.menu.install_utils_menu() 74 | mgear.core.menu.install_utils_menu(m) 75 | mgear.rigbits.menu.install_utils_menu(m) 76 | 77 | # install dragdrop override in utilities 78 | import mgear.core.dragdrop 79 | mgear.core.dragdrop.install_utils_menu(m) 80 | 81 | # Install Help Menu 82 | mgear.menu.install_help_menu() 83 | 84 | 85 | if not cmds.about(batch=True): 86 | mayautils.executeDeferred(mGear_menu_loader) 87 | mayautils.executeDeferred(create_menuitems) 88 | -------------------------------------------------------------------------------- /mGear.mod.in: -------------------------------------------------------------------------------- 1 | + MAYAVERSION:2018 PLATFORM:win64 mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/windows/x64 2 | scripts: ../../../../scripts 3 | 4 | + MAYAVERSION:2018 PLATFORM:linux mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/linux/x64 5 | scripts: ../../../../scripts 6 | 7 | + MAYAVERSION:2018 PLATFORM:mac mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2018/osx/x64 8 | scripts: ../../../../scripts 9 | 10 | + MAYAVERSION:2019 PLATFORM:win64 mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2019/windows/x64 11 | scripts: ../../../../scripts 12 | 13 | + MAYAVERSION:2019 PLATFORM:linux mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2019/linux/x64 14 | scripts: ../../../../scripts 15 | 16 | + MAYAVERSION:2019 PLATFORM:mac mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2019/osx/x64 17 | scripts: ../../../../scripts 18 | 19 | + MAYAVERSION:2020 PLATFORM:win64 mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2020/windows/x64 20 | scripts: ../../../../scripts 21 | 22 | + MAYAVERSION:2020 PLATFORM:linux mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2020/linux/x64 23 | scripts: ../../../../scripts 24 | 25 | + MAYAVERSION:2020 PLATFORM:mac mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2020/osx/x64 26 | scripts: ../../../../scripts 27 | 28 | + MAYAVERSION:2022 PLATFORM:win64 mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2022/windows/x64 29 | scripts: ../../../../scripts 30 | 31 | + MAYAVERSION:2022 PLATFORM:linux mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2022/linux/x64 32 | scripts: ../../../../scripts 33 | 34 | + MAYAVERSION:2022 PLATFORM:mac mGear @MGEAR_MAJMIN_VERSION@ ./platforms/2022/osx/x64 35 | scripts: ../../../../scripts 36 | -------------------------------------------------------------------------------- /mgear.env: -------------------------------------------------------------------------------- 1 | { 2 | "tool": "mgear", 3 | "requires": ["maya"], 4 | "platforms": ["darwin", "linux", "windows"], 5 | "environment": 6 | { 7 | "MGEAR_ROOT": {"strict": True, "common": "@path/@tool/@version"}, 8 | "PYTHONPATH": "${MGEAR_ROOT}/python", 9 | "MAYA_SCRIPT_PATH": "${MGEAR_ROOT}/scripts", 10 | "MAYA_PLUG_IN_PATH": "${MGEAR_ROOT}/plug-ins/${MAYA_VERSION}/@platform", 11 | "MGEAR_SYNOPTIC_PATH": {"strict": True, "common": ""}, 12 | "MGEAR_PYTHON_QT_BINDING": {"strict": True, "common": ""} 13 | } 14 | } -------------------------------------------------------------------------------- /mgear.status: -------------------------------------------------------------------------------- 1 | MGEAR_VERSION [3, 7, 11] 2 | MGEAR_VERSION_MINOR 7 3 | MGEAR_MAJMIN_VERSION 3.7 4 | MGEAR_VERSION_MAJOR 3 5 | MGEAR_VERSION_PATCH 11 6 | 7 | --------------------------------------------------------------------------------