├── .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 |
--------------------------------------------------------------------------------