├── LICENSE
├── README.md
├── install.bat
└── scripts
├── __init__.py
├── __pycache__
├── menu.cpython-37.pyc
├── picker.cpython-37.pyc
└── riggingtoolkit.cpython-37.pyc
├── menu.py
├── picker.py
├── riggingtoolkit.py
└── userSetup.py
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021-2022 Aji Aditya Darmawan
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 |
2 | Awan's Auto Rigging Toolkit for Autodesk Maya
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | ## Introduction
11 |
12 | With this Auto Rigging tool you can build a 3D character rig without building it yourself from scratch. All you have to do is place a few markers, and then the script will do the rest. **This tool will save you hours if not days of rigging work**.
13 |
14 | ## Getting Started
15 | ### Installation
16 |
17 | 1. Clone/download the zip file
18 | 2. Extract it (you can do it wherever you want)
19 |
20 | Now you have two options:
21 |
22 | 3. Run `install.bat` (for windows, this file will do the steps below automatically)
23 |
24 | or
25 |
26 | 3. Create a new `.mod` file, you can name it whatever you want (e.g. awtorigger.mod)
27 | 4. Inside that file, type in `+ AwtoRigger 1.0 [your awtorigger full directory]`
28 |
29 | e.g.
30 |
31 | + AwtoRigger 1.0 C:\Users\awwwan\Awan-Auto-Rigger
32 |
33 | 5. Move the `.mod` file into one of these directories :
34 |
35 | **Default for Windows**
36 | ```
37 | /My Documents/Maya//modules
38 |
39 | /My Documents/Maya/modules
40 |
41 | C:/Program Files/Common Files/Autodesk Shared/Modules/Maya/
42 |
43 | C:/Program Files/Common Files/Autodesk Shared/Modules/Maya
44 |
45 | /modules/
46 | ```
47 |
48 | **Default for Mac OS X, Linux**
49 | ```
50 | $MAYA_APP_DIR/Maya//modules
51 |
52 | $MAYA_APP_DIR/Maya/modules
53 |
54 | /usr/autodesk/modules/Maya/
55 |
56 | /usr/autodesk/modules/Maya
57 | ```
58 |
59 | More about this [here](https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/ENU/Maya-EnvVar/files/GUID-228CCA33-4AFE-4380-8C3D-18D23F7EAC72-htm.html) and [here](https://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__files_GUID_CB76E356_753B_4837_8C5B_3296C14872CA_htm)
60 |
61 | ## Usage
62 |
63 | 1. **Launch Maya** (or restart Maya if you already have it opened).
64 | 2. If everything was set up correctly, you should see the menu for `Awto Rigger` on the menu bar.
65 |
66 | 
67 |
68 | 3. **Create guides**, and adjust the markers based on the shape of your character model. You can rotate and scale them when needed, but you must not delete any marker individually.
69 | 4. **Awto Rig!** Sit back and relax while the script is building the rig for you.
70 |
71 | ## Support
72 | If you are having issues or found a bug, feel free to [open an issue](https://github.com/adamscript/Auto-Rigger/issues). Also if you have questions about the project, feel free to reach out at: .
73 |
74 | ## Features
75 | ### Toolkit
76 | The main interface for this tool. It covers main functionalities such as guide marker creation and automatic rig generation. It includes options for IK Control, Reverse Foot Control, and custom Picker GUI creation. It also includes some tools needed for curves editing, which can be used to fit the generated controller shapes on the character model better.
77 |
78 |
79 |
80 |
81 |
82 | ### Picker GUI
83 | Optional GUI for controller selection. Locations of the buttons will be adjusted dynamically with the shape of the 3D model of the character on the rig.
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 | ## Reflection
94 | For my college final project, I created an Auto Rigging tool for Autodesk Maya that can be used to speed up the rigging process for humanoid 3D character creation. I’m not really a fan of building a rig from scratch for every character that I made. So I wrote this tool to make the rigging process quicker by letting the script do the repetitive work. I used this tool to rig this character (I'm not best at animation yet but I tried 😂).
95 |
96 |
97 |
98 |
99 |
100 | Hopefully this tool can be useful for any 3D artist who needs it.
101 |
102 | ## Inspiration
103 | This project is inspired by these awesome tools. Check them out!
104 | - [mGear](http://www.mgear-framework.com/)
105 | - [Advanced Skeleton](https://www.animationstudios.com.au/advanced-skeleton)
106 |
--------------------------------------------------------------------------------
/install.bat:
--------------------------------------------------------------------------------
1 | echo.>awtorigger.mod + AwtoRigger 1.0 %CD%
2 | if not exist %USERPROFILE%\Documents\maya\modules\ md %USERPROFILE%\Documents\maya\modules\
3 | move %CD%\awtorigger.mod %USERPROFILE%\Documents\maya\modules\awtorigger.mod
4 |
5 | echo Installation finished
6 |
7 | pause
--------------------------------------------------------------------------------
/scripts/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adamscript/Auto-Rigger/da65eda7f01ad7c8d01275367fdefe10d5eda456/scripts/__init__.py
--------------------------------------------------------------------------------
/scripts/__pycache__/menu.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adamscript/Auto-Rigger/da65eda7f01ad7c8d01275367fdefe10d5eda456/scripts/__pycache__/menu.cpython-37.pyc
--------------------------------------------------------------------------------
/scripts/__pycache__/picker.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adamscript/Auto-Rigger/da65eda7f01ad7c8d01275367fdefe10d5eda456/scripts/__pycache__/picker.cpython-37.pyc
--------------------------------------------------------------------------------
/scripts/__pycache__/riggingtoolkit.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adamscript/Auto-Rigger/da65eda7f01ad7c8d01275367fdefe10d5eda456/scripts/__pycache__/riggingtoolkit.cpython-37.pyc
--------------------------------------------------------------------------------
/scripts/menu.py:
--------------------------------------------------------------------------------
1 | import pymel.core as pm
2 |
3 | import riggingtoolkit as toolkit
4 | import picker
5 |
6 | mainMayaWindow = pm.language.melGlobals['gMainWindow']
7 | awtoRigMenu = pm.menu('Awto Rigger', parent = mainMayaWindow)
8 |
9 | def opentoolkit(*args):
10 | toolkit.window.show(dockable = True)
11 | toolkit.checkGuides()
12 | toolkit.checkRig()
13 |
14 | def openpicker(*args):
15 | picker.pickerwin.show(dockable = True)
16 | picker.getNamespace_list()
17 | picker.setNamespace()
18 |
19 | pm.menuItem(label = "Auto Rigging Toolkit", command = opentoolkit, parent = awtoRigMenu)
20 | pm.menuItem(label = "Picker GUI", command = openpicker, parent = awtoRigMenu)
21 |
--------------------------------------------------------------------------------
/scripts/picker.py:
--------------------------------------------------------------------------------
1 | from PySide2.QtWidgets import *
2 | from PySide2.QtGui import *
3 | from PySide2.QtCore import*
4 |
5 | import maya.OpenMayaUI as OpenMayaUI
6 | from pymel.core import *
7 |
8 | import maya.OpenMaya as om
9 | from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
10 |
11 | scriptJob(ka = True)
12 |
13 | picker_bg = QLabel()
14 |
15 | namespace_label = QLabel()
16 | namespace_label.setText("Namespace :")
17 | namespace_label.setAlignment(Qt.AlignRight)
18 |
19 | namespace_sel = QComboBox()
20 |
21 | class PickerWindow(MayaQWidgetDockableMixin, QDialog):
22 | def __init__(self):
23 | super(PickerWindow, self).__init__()
24 |
25 | # It is crucial we set a unique object name as this is used internally by Maya
26 | self.setWindowTitle("Awan's Character Rig Picker GUI")
27 |
28 | self.setFixedWidth(470)
29 | self.setFixedHeight(560)
30 | self.setWindowFlags(Qt.WindowStaysOnTopHint)
31 |
32 | self.layout = QVBoxLayout()
33 | self.setLayout(self.layout)
34 |
35 | self.header_layout = QHBoxLayout()
36 | self.footer_layout = QHBoxLayout()
37 |
38 | def addLayout(self, layout):
39 | self.layout.addLayout(layout)
40 |
41 | pickerwin = PickerWindow()
42 |
43 | def setNamespace():
44 | if ls("*guiData", r = True):
45 | spine_gui.show().move(offsetX = -60)
46 |
47 | hip_gui.show().move()
48 | waist_gui.show().move()
49 | chest_gui.show().move()
50 | collarbone_gui.show().move()
51 |
52 | head_gui.show().move(offsetX = -70)
53 | jaw_gui.show().move()
54 |
55 | l_eye_gui.show()
56 | r_eye_gui.show()
57 | eyesLookAt_gui.show()
58 |
59 | l_clavicle_gui.show().move()
60 | r_clavicle_gui.show().move()
61 |
62 | l_fingers_thumb_gui.show()
63 | l_fingers_index_gui.show()
64 | l_fingers_middlef_gui.show()
65 | l_fingers_ring_gui.show()
66 | l_fingers_pinky_gui.show()
67 |
68 | l_fingers_metacarpal_gui.show()
69 | l_fingers_proximal_gui.show()
70 | l_fingers_middlep_gui.show()
71 | l_fingers_distal_gui.show()
72 | l_fingers_tip_gui.show()
73 |
74 | l_finger_thumb_metacarpal_gui.show()
75 | l_finger_thumb_proximal_gui.show()
76 | l_finger_thumb_distal_gui.show()
77 | l_finger_thumb_tip_gui.show()
78 |
79 | l_finger_index_metacarpal_gui.show()
80 | l_finger_index_proximal_gui.show()
81 | l_finger_index_middlep_gui.show()
82 | l_finger_index_distal_gui.show()
83 | l_finger_index_tip_gui.show()
84 |
85 | l_finger_middlef_metacarpal_gui.show()
86 | l_finger_middlef_proximal_gui.show()
87 | l_finger_middlef_middlep_gui.show()
88 | l_finger_middlef_distal_gui.show()
89 | l_finger_middlef_tip_gui.show()
90 |
91 | l_finger_ring_metacarpal_gui.show()
92 | l_finger_ring_proximal_gui.show()
93 | l_finger_ring_middlep_gui.show()
94 | l_finger_ring_distal_gui.show()
95 | l_finger_ring_tip_gui.show()
96 |
97 | l_finger_pinky_metacarpal_gui.show()
98 | l_finger_pinky_proximal_gui.show()
99 | l_finger_pinky_middlep_gui.show()
100 | l_finger_pinky_distal_gui.show()
101 | l_finger_pinky_tip_gui.show()
102 |
103 | r_fingers_thumb_gui.show()
104 | r_fingers_index_gui.show()
105 | r_fingers_middlef_gui.show()
106 | r_fingers_ring_gui.show()
107 | r_fingers_pinky_gui.show()
108 |
109 | r_fingers_metacarpal_gui.show()
110 | r_fingers_proximal_gui.show()
111 | r_fingers_middlep_gui.show()
112 | r_fingers_distal_gui.show()
113 | r_fingers_tip_gui.show()
114 |
115 | r_finger_thumb_metacarpal_gui.show()
116 | r_finger_thumb_proximal_gui.show()
117 | r_finger_thumb_distal_gui.show()
118 | r_finger_thumb_tip_gui.show()
119 |
120 | r_finger_index_metacarpal_gui.show()
121 | r_finger_index_proximal_gui.show()
122 | r_finger_index_middlep_gui.show()
123 | r_finger_index_distal_gui.show()
124 | r_finger_index_tip_gui.show()
125 |
126 | r_finger_middlef_metacarpal_gui.show()
127 | r_finger_middlef_proximal_gui.show()
128 | r_finger_middlef_middlep_gui.show()
129 | r_finger_middlef_distal_gui.show()
130 | r_finger_middlef_tip_gui.show()
131 |
132 | r_finger_ring_metacarpal_gui.show()
133 | r_finger_ring_proximal_gui.show()
134 | r_finger_ring_middlep_gui.show()
135 | r_finger_ring_distal_gui.show()
136 | r_finger_ring_tip_gui.show()
137 |
138 | r_finger_pinky_metacarpal_gui.show()
139 | r_finger_pinky_proximal_gui.show()
140 | r_finger_pinky_middlep_gui.show()
141 | r_finger_pinky_distal_gui.show()
142 | r_finger_pinky_tip_gui.show()
143 |
144 | l_foot_ankle_gui.show()
145 | r_foot_ankle_gui.show()
146 |
147 | l_foot_ankle_fk_gui.show()
148 | l_foot_ball_gui.show()
149 | l_foot_toes_gui.show()
150 | r_foot_ankle_fk_gui.show()
151 | r_foot_ball_gui.show()
152 | r_foot_toes_gui.show()
153 |
154 | namespaceik = ls("*" + namespace_sel.currentText() + ":guiData", r = True)
155 | for i in namespaceik:
156 | if getAttr(i + ".isIK"):
157 | l_shoulder_fk_gui.show().move()
158 | l_elbow_fk_gui.show().move()
159 | l_wrist_fk_gui.show().move()
160 | r_shoulder_fk_gui.show().move()
161 | r_elbow_fk_gui.show().move()
162 | r_wrist_fk_gui.show().move()
163 |
164 | l_arm_ikpole_gui.show().move()
165 | l_arm_ik_gui.show().move()
166 | r_arm_ikpole_gui.show().move()
167 | r_arm_ik_gui.show().move()
168 |
169 | l_thigh_fk_gui.show().move()
170 | l_knee_fk_gui.show().move()
171 | l_ankle_fk_gui.show().move()
172 | r_thigh_fk_gui.show().move()
173 | r_knee_fk_gui.show().move()
174 | r_ankle_fk_gui.show().move()
175 |
176 | l_leg_ikpole_gui.show().move()
177 | l_leg_ik_gui.show().move()
178 | r_leg_ikpole_gui.show().move()
179 | r_leg_ik_gui.show().move()
180 |
181 | l_foot_ankle_fk_gui.show()
182 | r_foot_ankle_fk_gui.show()
183 |
184 | l_arm_ikfk_switch_gui.show()
185 | r_arm_ikfk_switch_gui.show()
186 | l_leg_ikfk_switch_gui.show()
187 | r_leg_ikfk_switch_gui.show()
188 |
189 | l_leg_ikfk_switch_select_gui.show()
190 | r_leg_ikfk_switch_select_gui.show()
191 |
192 | l_shoulder_gui.hide()
193 | l_elbow_gui.hide()
194 | l_wrist_gui.hide()
195 | r_shoulder_gui.hide()
196 | r_elbow_gui.hide()
197 | r_wrist_gui.hide()
198 |
199 | l_thigh_gui.hide()
200 | l_knee_gui.hide()
201 | l_ankle_gui.hide()
202 | r_thigh_gui.hide()
203 | r_knee_gui.hide()
204 | r_ankle_gui.hide()
205 |
206 | ikfkuichange()
207 | elif not getAttr(i + ".isIK"):
208 | l_shoulder_gui.show().move()
209 | l_elbow_gui.show().move()
210 | l_wrist_gui.show().move()
211 | r_shoulder_gui.show().move()
212 | r_elbow_gui.show().move()
213 | r_wrist_gui.show().move()
214 |
215 | l_thigh_gui.show().move()
216 | l_knee_gui.show().move()
217 | l_ankle_gui.show().move()
218 | r_thigh_gui.show().move()
219 | r_knee_gui.show().move()
220 | r_ankle_gui.show().move()
221 |
222 | l_shoulder_fk_gui.hide()
223 | l_elbow_fk_gui.hide()
224 | l_wrist_fk_gui.hide()
225 | r_shoulder_fk_gui.hide()
226 | r_elbow_fk_gui.hide()
227 | r_wrist_fk_gui.hide()
228 |
229 | l_arm_ikpole_gui.hide()
230 | l_arm_ik_gui.hide()
231 | r_arm_ikpole_gui.hide()
232 | r_arm_ik_gui.hide()
233 |
234 | l_thigh_fk_gui.hide()
235 | l_knee_fk_gui.hide()
236 | l_ankle_fk_gui.hide()
237 | r_thigh_fk_gui.hide()
238 | r_knee_fk_gui.hide()
239 | r_ankle_fk_gui.hide()
240 |
241 | l_leg_ikpole_gui.hide()
242 | l_leg_ik_gui.hide()
243 | r_leg_ikpole_gui.hide()
244 | r_leg_ik_gui.hide()
245 |
246 | l_foot_ankle_fk_gui.hide()
247 | r_foot_ankle_fk_gui.hide()
248 |
249 | l_arm_ikfk_switch_gui.hide()
250 | r_arm_ikfk_switch_gui.hide()
251 | l_leg_ikfk_switch_gui.hide()
252 | r_leg_ikfk_switch_gui.hide()
253 |
254 | l_leg_ikfk_switch_select_gui.hide()
255 | r_leg_ikfk_switch_select_gui.hide()
256 |
257 | picker_bg.setPixmap(workspace(q = True, rd = True) + "images/" + namespace_sel.currentText() +'_pb.1.jpg')
258 | elif not ls("*guiData", r = True):
259 | print("NO GUI DATA")
260 |
261 | spine_gui.hide()
262 |
263 | hip_gui.hide()
264 | waist_gui.hide()
265 | chest_gui.hide()
266 | collarbone_gui.hide()
267 |
268 | root_gui.hide()
269 | ctrlgrp_gui.hide()
270 |
271 | head_gui.hide()
272 | jaw_gui.hide()
273 |
274 | l_eye_gui.hide()
275 | r_eye_gui.hide()
276 | eyesLookAt_gui.hide()
277 |
278 | l_clavicle_gui.hide()
279 | r_clavicle_gui.hide()
280 |
281 | l_shoulder_gui.hide()
282 | l_elbow_gui.hide()
283 | l_wrist_gui.hide()
284 | r_shoulder_gui.hide()
285 | r_elbow_gui.hide()
286 | r_wrist_gui.hide()
287 |
288 | l_thigh_gui.hide()
289 | l_knee_gui.hide()
290 | l_ankle_gui.hide()
291 | r_thigh_gui.hide()
292 | r_knee_gui.hide()
293 | r_ankle_gui.hide()
294 |
295 | l_shoulder_fk_gui.hide()
296 | l_elbow_fk_gui.hide()
297 | l_wrist_fk_gui.hide()
298 | r_shoulder_fk_gui.hide()
299 | r_elbow_fk_gui.hide()
300 | r_wrist_fk_gui.hide()
301 |
302 | l_fingers_thumb_gui.hide()
303 | l_fingers_index_gui.hide()
304 | l_fingers_middlef_gui.hide()
305 | l_fingers_ring_gui.hide()
306 | l_fingers_pinky_gui.hide()
307 |
308 | l_fingers_metacarpal_gui.hide()
309 | l_fingers_proximal_gui.hide()
310 | l_fingers_middlep_gui.hide()
311 | l_fingers_distal_gui.hide()
312 | l_fingers_tip_gui.hide()
313 |
314 | l_finger_thumb_metacarpal_gui.hide()
315 | l_finger_thumb_proximal_gui.hide()
316 | l_finger_thumb_distal_gui.hide()
317 | l_finger_thumb_tip_gui.hide()
318 |
319 | l_finger_index_metacarpal_gui.hide()
320 | l_finger_index_proximal_gui.hide()
321 | l_finger_index_middlep_gui.hide()
322 | l_finger_index_distal_gui.hide()
323 | l_finger_index_tip_gui.hide()
324 |
325 | l_finger_middlef_metacarpal_gui.hide()
326 | l_finger_middlef_proximal_gui.hide()
327 | l_finger_middlef_middlep_gui.hide()
328 | l_finger_middlef_distal_gui.hide()
329 | l_finger_middlef_tip_gui.hide()
330 |
331 | l_finger_ring_metacarpal_gui.hide()
332 | l_finger_ring_proximal_gui.hide()
333 | l_finger_ring_middlep_gui.hide()
334 | l_finger_ring_distal_gui.hide()
335 | l_finger_ring_tip_gui.hide()
336 |
337 | l_finger_pinky_metacarpal_gui.hide()
338 | l_finger_pinky_proximal_gui.hide()
339 | l_finger_pinky_middlep_gui.hide()
340 | l_finger_pinky_distal_gui.hide()
341 | l_finger_pinky_tip_gui.hide()
342 |
343 | r_fingers_thumb_gui.hide()
344 | r_fingers_index_gui.hide()
345 | r_fingers_middlef_gui.hide()
346 | r_fingers_ring_gui.hide()
347 | r_fingers_pinky_gui.hide()
348 |
349 | r_fingers_metacarpal_gui.hide()
350 | r_fingers_proximal_gui.hide()
351 | r_fingers_middlep_gui.hide()
352 | r_fingers_distal_gui.hide()
353 | r_fingers_tip_gui.hide()
354 |
355 | r_finger_thumb_metacarpal_gui.hide()
356 | r_finger_thumb_proximal_gui.hide()
357 | r_finger_thumb_distal_gui.hide()
358 | r_finger_thumb_tip_gui.hide()
359 |
360 | r_finger_index_metacarpal_gui.hide()
361 | r_finger_index_proximal_gui.hide()
362 | r_finger_index_middlep_gui.hide()
363 | r_finger_index_distal_gui.hide()
364 | r_finger_index_tip_gui.hide()
365 |
366 | r_finger_middlef_metacarpal_gui.hide()
367 | r_finger_middlef_proximal_gui.hide()
368 | r_finger_middlef_middlep_gui.hide()
369 | r_finger_middlef_distal_gui.hide()
370 | r_finger_middlef_tip_gui.hide()
371 |
372 | r_finger_ring_metacarpal_gui.hide()
373 | r_finger_ring_proximal_gui.hide()
374 | r_finger_ring_middlep_gui.hide()
375 | r_finger_ring_distal_gui.hide()
376 | r_finger_ring_tip_gui.hide()
377 |
378 | r_finger_pinky_metacarpal_gui.hide()
379 | r_finger_pinky_proximal_gui.hide()
380 | r_finger_pinky_middlep_gui.hide()
381 | r_finger_pinky_distal_gui.hide()
382 | r_finger_pinky_tip_gui.hide()
383 |
384 | l_arm_ikpole_gui.hide()
385 | l_arm_ik_gui.hide()
386 | r_arm_ikpole_gui.hide()
387 | r_arm_ik_gui.hide()
388 |
389 | l_thigh_fk_gui.hide()
390 | l_knee_fk_gui.hide()
391 | l_ankle_fk_gui.hide()
392 | r_thigh_fk_gui.hide()
393 | r_knee_fk_gui.hide()
394 | r_ankle_fk_gui.hide()
395 |
396 | l_leg_ikpole_gui.hide()
397 | l_leg_ik_gui.hide()
398 | r_leg_ikpole_gui.hide()
399 | r_leg_ik_gui.hide()
400 |
401 | l_foot_ankle_fk_gui.hide()
402 | r_foot_ankle_fk_gui.hide()
403 |
404 | l_arm_ikfk_switch_gui.hide()
405 | r_arm_ikfk_switch_gui.hide()
406 | l_leg_ikfk_switch_gui.hide()
407 | r_leg_ikfk_switch_gui.hide()
408 |
409 | l_leg_ikfk_switch_select_gui.hide()
410 | r_leg_ikfk_switch_select_gui.hide()
411 |
412 | l_foot_ankle_gui.hide()
413 | r_foot_ankle_gui.hide()
414 |
415 | l_foot_ankle_fk_gui.hide()
416 | l_foot_ball_gui.hide()
417 | l_foot_toes_gui.hide()
418 | r_foot_ankle_fk_gui.hide()
419 | r_foot_ball_gui.hide()
420 | r_foot_toes_gui.hide()
421 |
422 | picker_bg.setPixmap(None)
423 |
424 | def ikfkuichange():
425 | for x in ls("*" + namespace_sel.currentText() + ":*_ikfk_switch_ctrl"):
426 | if((str(x).partition(namespace_sel.currentText() + ':')[2]).startswith("l_arm")):
427 | if(getAttr('*' + namespace_sel.currentText() + ':l_arm_ikfk_switch_ctrl.IK_FK_switch') == 0):
428 | l_arm_ikfk_switch_gui.setText("FK")
429 | l_shoulder_fk_gui.show()
430 | l_elbow_fk_gui.show()
431 | l_wrist_fk_gui.show()
432 | l_arm_ikpole_gui.hide()
433 | l_arm_ik_gui.hide()
434 | elif(getAttr('*' + namespace_sel.currentText() + ':l_arm_ikfk_switch_ctrl.IK_FK_switch') == 1):
435 | l_arm_ikfk_switch_gui.setText("IK")
436 | l_shoulder_fk_gui.hide()
437 | l_elbow_fk_gui.hide()
438 | l_wrist_fk_gui.hide()
439 | l_arm_ikpole_gui.show()
440 | l_arm_ik_gui.show()
441 | elif((str(x).partition(namespace_sel.currentText() + ':')[2]).startswith("r_arm")):
442 | if(getAttr('*' + namespace_sel.currentText() + ':r_arm_ikfk_switch_ctrl.IK_FK_switch') == 0):
443 | r_arm_ikfk_switch_gui.setText("FK")
444 | r_shoulder_fk_gui.show()
445 | r_elbow_fk_gui.show()
446 | r_wrist_fk_gui.show()
447 | r_arm_ikpole_gui.hide()
448 | r_arm_ik_gui.hide()
449 | elif(getAttr('*' + namespace_sel.currentText() + ':r_arm_ikfk_switch_ctrl.IK_FK_switch') == 1):
450 | r_arm_ikfk_switch_gui.setText("IK")
451 | r_shoulder_fk_gui.hide()
452 | r_elbow_fk_gui.hide()
453 | r_wrist_fk_gui.hide()
454 | r_arm_ikpole_gui.show()
455 | r_arm_ik_gui.show()
456 | elif((str(x).partition(namespace_sel.currentText() + ':')[2]).startswith("l_leg")):
457 | if(getAttr('*' + namespace_sel.currentText() + ':l_leg_ikfk_switch_ctrl.IK_FK_switch') == 0):
458 | l_leg_ikfk_switch_gui.setText("FK")
459 | l_thigh_fk_gui.show()
460 | l_knee_fk_gui.show()
461 | l_ankle_fk_gui.show()
462 | l_leg_ikpole_gui.hide()
463 | l_leg_ik_gui.hide()
464 | elif(getAttr('*' + namespace_sel.currentText() + ':l_leg_ikfk_switch_ctrl.IK_FK_switch') == 1):
465 | l_leg_ikfk_switch_gui.setText("IK")
466 | l_thigh_fk_gui.hide()
467 | l_knee_fk_gui.hide()
468 | l_ankle_fk_gui.hide()
469 | l_leg_ikpole_gui.show()
470 | l_leg_ik_gui.show()
471 | elif((str(x).partition(namespace_sel.currentText() + ':')[2]).startswith("r_leg")):
472 | if(getAttr('*' + namespace_sel.currentText() + ':r_leg_ikfk_switch_ctrl.IK_FK_switch') == 0):
473 | r_leg_ikfk_switch_gui.setText("FK")
474 | r_thigh_fk_gui.show()
475 | r_knee_fk_gui.show()
476 | r_ankle_fk_gui.show()
477 | r_leg_ikpole_gui.hide()
478 | r_leg_ik_gui.hide()
479 | elif(getAttr('*' + namespace_sel.currentText() + ':r_leg_ikfk_switch_ctrl.IK_FK_switch') == 1):
480 | r_leg_ikfk_switch_gui.setText("IK")
481 | r_thigh_fk_gui.hide()
482 | r_knee_fk_gui.hide()
483 | r_ankle_fk_gui.hide()
484 | r_leg_ikpole_gui.show()
485 | r_leg_ik_gui.show()
486 |
487 | namespaceik = ls("*" + namespace_sel.currentText() + ":guiData", r = True)
488 | for i in namespaceik:
489 | if getAttr(i + ".isIK"):
490 | for i in ls("*_ikfk_switch_ctrl", r = True):
491 | scriptJob(ac = [i + '.IK_FK_switch', ikfkuichange])
492 | elif not getAttr(i + ".isIK"):
493 | pass
494 |
495 | def getNamespace_list():
496 | namespace_sel.clear()
497 | namespace_list = ls("*guiData", r = True)
498 | for i in namespace_list:
499 | namespace_sel.addItem(getAttr(i + ".name"))
500 |
501 | getNamespace_list()
502 | namespace_sel.activated.connect(setNamespace)
503 |
504 | pickerwin.header_layout.addWidget(namespace_label)
505 | pickerwin.header_layout.addWidget(namespace_sel)
506 |
507 | pickerwin.layout.addLayout(pickerwin.header_layout)
508 | pickerwin.layout.addWidget(picker_bg)
509 | pickerwin.layout.addLayout(pickerwin.footer_layout)
510 |
511 | class GUI():
512 |
513 | def __init__(self, name, shape, p = (0, 0), radius = 1, width = 1, height = 1, color = "", text = "", selections = ""):
514 | self.name = name
515 | self.shape = shape
516 | self.pos = p
517 | self.radius = radius
518 | self.width = width
519 | self.height = height
520 | self.color = color
521 | self.text = text
522 | self.selections = selections
523 |
524 | def drawUIButton(self, command, txt = ""):
525 | self.button = QPushButton()
526 | self.button.setText(txt)
527 | self.button.clicked.connect(command)
528 | pickerwin.footer_layout.addWidget(self.button)
529 |
530 | def drawSelectionButton(self, posX = 0, posY = 0):
531 | if (self.shape == "square"):
532 | self.button = QPushButton(pickerwin)
533 | self.button.setText(self.text)
534 | self.button.setGeometry(posX - (self.radius/2), posY - (self.radius/2), self.radius, self.radius)
535 | self.button.setStyleSheet("background-color: " + self.color + ";")
536 | self.button.clicked.connect(self.selection)
537 | elif(self.shape == "rect"):
538 | self.button = QPushButton(pickerwin)
539 | self.button.setText(self.text)
540 | self.button.setGeometry(posX - (self.width/2), posY - (self.height/2), self.width, self.height)
541 | self.button.setStyleSheet("background-color: " + self.color + ";")
542 | self.button.clicked.connect(self.selection)
543 | elif(self.shape == "circle"):
544 | self.button = QPushButton(pickerwin)
545 | self.button.setText(self.text)
546 | self.button.setGeometry(posX - (self.radius/2), posY - (self.radius/2), self.radius, self.radius)
547 | self.button.setStyleSheet("background-color: " + self.color + "; border-radius: " + str(self.radius/2) + "px;")
548 | self.button.clicked.connect(self.selection)
549 |
550 | def drawMultipleSelectionButton(self, posX = 0, posY = 0):
551 | self.button = QPushButton(pickerwin)
552 | self.button.setText(self.text)
553 | self.button.setGeometry(posX - (self.radius/2), posY - (self.radius/2), self.radius, self.radius)
554 | self.button.setStyleSheet("background-color: " + self.color + "; border-radius: " + str(self.radius/2) + "px;")
555 | self.button.clicked.connect(self.multipleSelection)
556 |
557 | def drawToggleButton(self, posX = 0, posY = 0):
558 | self.button = QPushButton(pickerwin)
559 | self.button.setText(self.text)
560 | self.button.setGeometry(posX - (self.radius/2), posY - (self.radius/2), self.radius, self.radius)
561 | self.button.setStyleSheet("background-color: " + self.color + "; font-size : 15px; font-weight : bold;")
562 | self.button.clicked.connect(self.toggle)
563 |
564 | def selection(self):
565 | if (self.name.startswith("l_finger_") or self.name.startswith("r_finger_")):
566 | self.select = ls("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl", r = True)
567 | for i in self.select:
568 | select(i, add = True)
569 | else:
570 | self.select = ls("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl", r = True)
571 | for i in self.select:
572 | select(i)
573 | print(self.name + " clicked!")
574 |
575 | def multipleSelection(self):
576 | selects = ls("*" + namespace_sel.currentText() + ":" + self.name.partition(self.selections)[0] + "*" + self.name.partition(self.selections)[1] + "*_ctrl")
577 | for x in selects:
578 | select(x, add = True)
579 | print(x)
580 |
581 | def toggle(self):
582 | if(getAttr("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl.IK_FK_switch") == 0):
583 | setAttr("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl.IK_FK_switch", 1)
584 | elif(getAttr("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl.IK_FK_switch") == 1):
585 | setAttr("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl.IK_FK_switch", 0)
586 | ikfkuichange()
587 | select("*" + namespace_sel.currentText() + ":" + self.name + "_ctrl")
588 |
589 | def move(self, offsetX = 0, offsetY = 0):
590 | self.namespace = ls("*" + namespace_sel.currentText() + ":guiData", r = True)
591 | for i in self.namespace:
592 | if(self.shape != "rect"):
593 | self.button.move((getAttr(i + "." + self.name + "_ctrl_guiDataX")) - (self.radius/2) + offsetX, (getAttr(i + "." + self.name + "_ctrl_guiDataY")) - (self.radius/2) + offsetY)
594 | else:
595 | self.button.move((getAttr(i + "." + self.name + "_ctrl_guiDataX")) - (self.width/2) + offsetX, (getAttr(i + "." + self.name + "_ctrl_guiDataY")) - (self.height/2) + offsetY)
596 |
597 | def setText(self, txt = ""):
598 | self.button.setText(txt)
599 |
600 | def hide(self):
601 | self.button.hide()
602 | return self
603 |
604 | def show(self):
605 | self.button.show()
606 | return self
607 |
608 | # UI #
609 |
610 | def key_cmd():
611 | if not ls(sl = True, r = True):
612 | om.MGlobal.displayError("There is no object to key!")
613 | else:
614 | setKeyframe()
615 |
616 | def keyall_cmd():
617 | for i in ls("*" + namespace_sel.currentText() + ":*ctrl", r = True):
618 | select(i)
619 | setKeyframe()
620 |
621 | def resetpose_cmd():
622 | for i in ls("*" + namespace_sel.currentText() + ":*ctrl", r = True):
623 | xform(i, t = (0, 0, 0), ro = (0, 0, 0), s = (1, 1, 1), os = True)
624 |
625 | def deselectall_cmd():
626 | select(cl = True)
627 |
628 | key_btn = GUI("key", "rect")
629 | keyall_btn = GUI("keyall", "rect")
630 | resetpose_btn = GUI("resetpose", "rect")
631 | deselectall_btn = GUI("deselectall", "rect")
632 |
633 | key_btn.drawUIButton(key_cmd, txt = "Key")
634 | keyall_btn.drawUIButton(keyall_cmd, txt = "Key All")
635 | resetpose_btn.drawUIButton(resetpose_cmd, txt = "Reset Pose")
636 | deselectall_btn.drawUIButton(deselectall_cmd, txt = "Deselect All")
637 |
638 | # ROOT #
639 |
640 | root_gui = GUI("root", "rect", width = 150, height = 10, color = "#3696d9")
641 | ctrlgrp_gui = GUI("grp", "rect", width = 50, height = 10, color = "#3696d9")
642 |
643 | root_gui.drawSelectionButton(235, 505)
644 | ctrlgrp_gui.drawSelectionButton(235, 490)
645 |
646 | # SPINE #
647 | spine_gui = GUI("spine", "square", radius = 20, color = "#cad936")
648 |
649 | hip_gui = GUI("hip", "rect", width = 80, height = 10, color = "#cad936")
650 | waist_gui = GUI("waist", "rect", width = 60, height = 10, color = "#cad936")
651 | chest_gui = GUI("chest", "rect", width = 60, height = 10, color = "#cad936")
652 | collarbone_gui = GUI("collarbone", "square", radius = 18, color = "#cad936")
653 |
654 | spine_gui.drawSelectionButton()
655 |
656 | hip_gui.drawSelectionButton()
657 | waist_gui.drawSelectionButton()
658 | chest_gui.drawSelectionButton()
659 | collarbone_gui.drawSelectionButton()
660 |
661 | # HEAD #
662 | head_gui = GUI("head", "square", radius = 50, color = "#cad936")
663 | jaw_gui = GUI("jaw", "circle", radius = 10, color = "#cad936")
664 | l_eye_gui = GUI("l_eye", "circle", radius = 16, color = "#3d9b2f")
665 | r_eye_gui = GUI("r_eye", "circle", radius = 16, color = "#9b3b2f")
666 | eyesLookAt_gui = GUI("eyesLookAt", "rect", width = 50, height = 7, color = "#cad936")
667 |
668 | head_gui.drawSelectionButton()
669 | jaw_gui.drawSelectionButton()
670 | l_eye_gui.drawSelectionButton(340, 90)
671 | r_eye_gui.drawSelectionButton(316, 90)
672 | eyesLookAt_gui.drawSelectionButton(328, 110)
673 |
674 | # ARMS #
675 | l_clavicle_gui = GUI("l_clavicle", "square", radius = 12, color = "#3d9b2f")
676 | r_clavicle_gui = GUI("r_clavicle", "square", radius = 12, color = "#9b3b2f")
677 |
678 | l_shoulder_gui = GUI("l_shoulder", "circle", radius = 20, color = "#3d9b2f")
679 | l_elbow_gui = GUI("l_elbow", "circle", radius = 20, color = "#3d9b2f")
680 | l_wrist_gui = GUI("l_wrist", "circle", radius = 20, color = "#3d9b2f")
681 | r_shoulder_gui = GUI("r_shoulder", "circle", radius = 20, color = "#9b3b2f")
682 | r_elbow_gui = GUI("r_elbow", "circle", radius = 20, color = "#9b3b2f")
683 | r_wrist_gui = GUI("r_wrist", "circle", radius = 20, color = "#9b3b2f")
684 |
685 | l_shoulder_fk_gui = GUI("l_shoulder_fk", "circle", radius = 20, color = "#3d9b2f")
686 | l_elbow_fk_gui = GUI("l_elbow_fk", "circle", radius = 20, color = "#3d9b2f")
687 | l_wrist_fk_gui = GUI("l_wrist_fk", "circle", radius = 20, color = "#3d9b2f")
688 | r_shoulder_fk_gui = GUI("r_shoulder_fk", "circle", radius = 20, color = "#9b3b2f")
689 | r_elbow_fk_gui = GUI("r_elbow_fk", "circle", radius = 20, color = "#9b3b2f")
690 | r_wrist_fk_gui = GUI("r_wrist_fk", "circle", radius = 20, color = "#9b3b2f")
691 |
692 | l_arm_ikpole_gui = GUI("l_arm_ikpole", "circle", radius = 14, color = "#3d9b2f")
693 | l_arm_ik_gui = GUI("l_arm_ik", "square", radius = 20, color = "#3d9b2f")
694 | r_arm_ikpole_gui = GUI("r_arm_ikpole", "circle", radius = 14, color = "#9b3b2f")
695 | r_arm_ik_gui = GUI("r_arm_ik", "square", radius = 20, color = "#9b3b2f")
696 |
697 | l_clavicle_gui.drawSelectionButton()
698 | r_clavicle_gui.drawSelectionButton()
699 |
700 | l_shoulder_gui.drawSelectionButton()
701 | l_elbow_gui.drawSelectionButton()
702 | l_wrist_gui.drawSelectionButton()
703 | r_shoulder_gui.drawSelectionButton()
704 | r_elbow_gui.drawSelectionButton()
705 | r_wrist_gui.drawSelectionButton()
706 |
707 | l_shoulder_fk_gui.drawSelectionButton()
708 | l_elbow_fk_gui.drawSelectionButton()
709 | l_wrist_fk_gui.drawSelectionButton()
710 | r_shoulder_fk_gui.drawSelectionButton()
711 | r_elbow_fk_gui.drawSelectionButton()
712 | r_wrist_fk_gui.drawSelectionButton()
713 |
714 | l_arm_ikpole_gui.drawSelectionButton()
715 | l_arm_ik_gui.drawSelectionButton()
716 | r_arm_ikpole_gui.drawSelectionButton()
717 | r_arm_ik_gui.drawSelectionButton()
718 |
719 | # L FINGERS #
720 | #THUMB#
721 | l_finger_thumb_metacarpal_gui = GUI("l_finger_thumb_metacarpal", "rect", width = 15, height = 25, color = "#3d9b2f")
722 | l_finger_thumb_proximal_gui = GUI("l_finger_thumb_proximal", "rect", width = 15, height = 10, color = "#3d9b2f")
723 | l_finger_thumb_distal_gui = GUI("l_finger_thumb_distal", "rect", width = 15, height = 10, color = "#3d9b2f")
724 | l_finger_thumb_tip_gui = GUI("l_finger_thumb_tip", "rect", width = 15, height = 10, color = "#3d9b2f")
725 | #INDEX#
726 | l_finger_index_metacarpal_gui = GUI("l_finger_index_metacarpal", "rect", width = 10, height = 25, color = "#3d9b2f")
727 | l_finger_index_proximal_gui = GUI("l_finger_index_proximal", "square", radius = 10, color = "#3d9b2f")
728 | l_finger_index_middlep_gui = GUI("l_finger_index_middlep", "square", radius = 10, color = "#3d9b2f")
729 | l_finger_index_distal_gui = GUI("l_finger_index_distal", "square", radius = 10, color = "#3d9b2f")
730 | l_finger_index_tip_gui = GUI("l_finger_index_tip", "square", radius = 10, color = "#3d9b2f")
731 | #MIDDLE#
732 | l_finger_middlef_metacarpal_gui = GUI("l_finger_middlef_metacarpal", "rect", width = 10, height = 25, color = "#3d9b2f")
733 | l_finger_middlef_proximal_gui = GUI("l_finger_middlef_proximal", "square", radius = 10, color = "#3d9b2f")
734 | l_finger_middlef_middlep_gui = GUI("l_finger_middlef_middlep", "square", radius = 10, color = "#3d9b2f")
735 | l_finger_middlef_distal_gui = GUI("l_finger_middlef_distal", "square", radius = 10, color = "#3d9b2f")
736 | l_finger_middlef_tip_gui = GUI("l_finger_middlef_tip", "square", radius = 10, color = "#3d9b2f")
737 | #RING#
738 | l_finger_ring_metacarpal_gui = GUI("l_finger_ring_metacarpal", "rect", width = 10, height = 25, color = "#3d9b2f")
739 | l_finger_ring_proximal_gui = GUI("l_finger_ring_proximal", "square", radius = 10, color = "#3d9b2f")
740 | l_finger_ring_middlep_gui = GUI("l_finger_ring_middlep", "square", radius = 10, color = "#3d9b2f")
741 | l_finger_ring_distal_gui = GUI("l_finger_ring_distal", "square", radius = 10, color = "#3d9b2f")
742 | l_finger_ring_tip_gui = GUI("l_finger_ring_tip", "square", radius = 10, color = "#3d9b2f")
743 | #PINKY#
744 | l_finger_pinky_metacarpal_gui = GUI("l_finger_pinky_metacarpal", "rect", width = 10, height = 25, color = "#3d9b2f")
745 | l_finger_pinky_proximal_gui = GUI("l_finger_pinky_proximal", "square", radius = 10, color = "#3d9b2f")
746 | l_finger_pinky_middlep_gui = GUI("l_finger_pinky_middlep", "square", radius = 10, color = "#3d9b2f")
747 | l_finger_pinky_distal_gui = GUI("l_finger_pinky_distal", "square", radius = 10, color = "#3d9b2f")
748 | l_finger_pinky_tip_gui = GUI("l_finger_pinky_tip", "square", radius = 10, color = "#3d9b2f")
749 | #EXTRA CONTROLS
750 | l_fingers_thumb_gui = GUI("l_finger_thumb", "circle", radius = 12, color = "#3d9b2f", selections = "thumb")
751 | l_fingers_index_gui = GUI("l_finger_index", "circle", radius = 12, color = "#3d9b2f", selections = "index")
752 | l_fingers_middlef_gui = GUI("l_finger_middlef", "circle", radius = 12, color = "#3d9b2f", selections = "middlef")
753 | l_fingers_ring_gui = GUI("l_finger_ring", "circle", radius = 12, color = "#3d9b2f", selections = "ring")
754 | l_fingers_pinky_gui = GUI("l_finger_pinky", "circle", radius = 12, color = "#3d9b2f", selections = "pinky")
755 |
756 | l_fingers_metacarpal_gui = GUI("l_finger_metacarpal", "circle", radius = 12, color = "#3d9b2f", selections = "metacarpal")
757 | l_fingers_proximal_gui = GUI("l_finger_proximal", "circle", radius = 12, color = "#3d9b2f", selections = "proximal")
758 | l_fingers_middlep_gui = GUI("l_finger_middlep", "circle", radius = 12, color = "#3d9b2f", selections = "middlep")
759 | l_fingers_distal_gui = GUI("l_finger_distal", "circle", radius = 12, color = "#3d9b2f", selections = "distal")
760 | l_fingers_tip_gui = GUI("l_finger_tip", "circle", radius = 12, color = "#3d9b2f", selections = "tip")
761 |
762 | l_fingers_thumb_gui.drawMultipleSelectionButton(posX = 370, posY = 420)
763 | l_fingers_index_gui.drawMultipleSelectionButton(posX = 385, posY = 420)
764 | l_fingers_middlef_gui.drawMultipleSelectionButton(posX = 400, posY = 420)
765 | l_fingers_ring_gui.drawMultipleSelectionButton(posX = 415, posY = 420)
766 | l_fingers_pinky_gui.drawMultipleSelectionButton(posX = 430, posY = 420)
767 |
768 | l_fingers_metacarpal_gui.drawMultipleSelectionButton(posX = 445, posY = 345)
769 | l_fingers_proximal_gui.drawMultipleSelectionButton(posX = 445, posY = 360)
770 | l_fingers_middlep_gui.drawMultipleSelectionButton(posX = 445, posY = 375)
771 | l_fingers_distal_gui.drawMultipleSelectionButton(posX = 445, posY = 390)
772 | l_fingers_tip_gui.drawMultipleSelectionButton(posX = 445, posY = 405)
773 |
774 | l_finger_thumb_metacarpal_gui.drawSelectionButton(posX = 370, posY = 340)
775 | l_finger_thumb_proximal_gui.drawSelectionButton(posX = 370, posY = 360)
776 | l_finger_thumb_distal_gui.drawSelectionButton(posX = 370, posY = 375)
777 | l_finger_thumb_tip_gui.drawSelectionButton(posX = 370, posY = 390)
778 |
779 | l_finger_index_metacarpal_gui.drawSelectionButton(posX = 385, posY = 340)
780 | l_finger_index_proximal_gui.drawSelectionButton(posX = 385, posY = 360)
781 | l_finger_index_middlep_gui.drawSelectionButton(posX = 385, posY = 375)
782 | l_finger_index_distal_gui.drawSelectionButton(posX = 385, posY = 390)
783 | l_finger_index_tip_gui.drawSelectionButton(posX = 385, posY = 405)
784 |
785 | l_finger_middlef_metacarpal_gui.drawSelectionButton(posX = 400, posY = 340)
786 | l_finger_middlef_proximal_gui.drawSelectionButton(posX = 400, posY = 360)
787 | l_finger_middlef_middlep_gui.drawSelectionButton(posX = 400, posY = 375)
788 | l_finger_middlef_distal_gui.drawSelectionButton(posX = 400, posY = 390)
789 | l_finger_middlef_tip_gui.drawSelectionButton(posX = 400, posY = 405)
790 |
791 | l_finger_ring_metacarpal_gui.drawSelectionButton(posX = 415, posY = 340)
792 | l_finger_ring_proximal_gui.drawSelectionButton(posX = 415, posY = 360)
793 | l_finger_ring_middlep_gui.drawSelectionButton(posX = 415, posY = 375)
794 | l_finger_ring_distal_gui.drawSelectionButton(posX = 415, posY = 390)
795 | l_finger_ring_tip_gui.drawSelectionButton(posX = 415, posY = 405)
796 |
797 | l_finger_pinky_metacarpal_gui.drawSelectionButton(posX = 430, posY = 340)
798 | l_finger_pinky_proximal_gui.drawSelectionButton(posX = 430, posY = 360)
799 | l_finger_pinky_middlep_gui.drawSelectionButton(posX = 430, posY = 375)
800 | l_finger_pinky_distal_gui.drawSelectionButton(posX = 430, posY = 390)
801 | l_finger_pinky_tip_gui.drawSelectionButton(posX = 430, posY = 405)
802 |
803 | # R FINGERS #
804 | #THUMB#
805 | r_finger_thumb_metacarpal_gui = GUI("r_finger_thumb_metacarpal", "rect", width = 15, height = 25, color = "#9b3b2f")
806 | r_finger_thumb_proximal_gui = GUI("r_finger_thumb_proximal", "rect", width = 15, height = 10, color = "#9b3b2f")
807 | r_finger_thumb_distal_gui = GUI("r_finger_thumb_distal", "rect", width = 15, height = 10, color = "#9b3b2f")
808 | r_finger_thumb_tip_gui = GUI("r_finger_thumb_tip", "rect", width = 15, height = 10, color = "#9b3b2f")
809 | #INDEX#
810 | r_finger_index_metacarpal_gui = GUI("r_finger_index_metacarpal", "rect", width = 10, height = 25, color = "#9b3b2f")
811 | r_finger_index_proximal_gui = GUI("r_finger_index_proximal", "square", radius = 10, color = "#9b3b2f")
812 | r_finger_index_middlep_gui = GUI("r_finger_index_middlep", "square", radius = 10, color = "#9b3b2f")
813 | r_finger_index_distal_gui = GUI("r_finger_index_distal", "square", radius = 10, color = "#9b3b2f")
814 | r_finger_index_tip_gui = GUI("r_finger_index_tip", "square", radius = 10, color = "#9b3b2f")
815 | #MIDDLE#
816 | r_finger_middlef_metacarpal_gui = GUI("r_finger_middlef_metacarpal", "rect", width = 10, height = 25, color = "#9b3b2f")
817 | r_finger_middlef_proximal_gui = GUI("r_finger_middlef_proximal", "square", radius = 10, color = "#9b3b2f")
818 | r_finger_middlef_middlep_gui = GUI("r_finger_middlef_middlep", "square", radius = 10, color = "#9b3b2f")
819 | r_finger_middlef_distal_gui = GUI("r_finger_middlef_distal", "square", radius = 10, color = "#9b3b2f")
820 | r_finger_middlef_tip_gui = GUI("r_finger_middlef_tip", "square", radius = 10, color = "#9b3b2f")
821 | #RING#
822 | r_finger_ring_metacarpal_gui = GUI("r_finger_ring_metacarpal", "rect", width = 10, height = 25, color = "#9b3b2f")
823 | r_finger_ring_proximal_gui = GUI("r_finger_ring_proximal", "square", radius = 10, color = "#9b3b2f")
824 | r_finger_ring_middlep_gui = GUI("r_finger_ring_middlep", "square", radius = 10, color = "#9b3b2f")
825 | r_finger_ring_distal_gui = GUI("r_finger_ring_distal", "square", radius = 10, color = "#9b3b2f")
826 | r_finger_ring_tip_gui = GUI("r_finger_ring_tip", "square", radius = 10, color = "#9b3b2f")
827 | #PINKY#
828 | r_finger_pinky_metacarpal_gui = GUI("r_finger_pinky_metacarpal", "rect", width = 10, height = 25, color = "#9b3b2f")
829 | r_finger_pinky_proximal_gui = GUI("r_finger_pinky_proximal", "square", radius = 10, color = "#9b3b2f")
830 | r_finger_pinky_middlep_gui = GUI("r_finger_pinky_middlep", "square", radius = 10, color = "#9b3b2f")
831 | r_finger_pinky_distal_gui = GUI("r_finger_pinky_distal", "square", radius = 10, color = "#9b3b2f")
832 | r_finger_pinky_tip_gui = GUI("r_finger_pinky_tip", "square", radius = 10, color = "#9b3b2f")
833 | #EXTRA CONTROLS
834 | r_fingers_thumb_gui = GUI("r_finger_thumb", "circle", radius = 12, color = "#9b3b2f", selections = "thumb")
835 | r_fingers_index_gui = GUI("r_finger_index", "circle", radius = 12, color = "#9b3b2f", selections = "index")
836 | r_fingers_middlef_gui = GUI("r_finger_middlef", "circle", radius = 12, color = "#9b3b2f", selections = "middlef")
837 | r_fingers_ring_gui = GUI("r_finger_ring", "circle", radius = 12, color = "#9b3b2f", selections = "ring")
838 | r_fingers_pinky_gui = GUI("r_finger_pinky", "circle", radius = 12, color = "#9b3b2f", selections = "pinky")
839 |
840 | r_fingers_metacarpal_gui = GUI("r_finger_metacarpal", "circle", radius = 12, color = "#9b3b2f", selections = "metacarpal")
841 | r_fingers_proximal_gui = GUI("r_finger_proximal", "circle", radius = 12, color = "#9b3b2f", selections = "proximal")
842 | r_fingers_middlep_gui = GUI("r_finger_middlep", "circle", radius = 12, color = "#9b3b2f", selections = "middlep")
843 | r_fingers_distal_gui = GUI("r_finger_distal", "circle", radius = 12, color = "#9b3b2f", selections = "distal")
844 | r_fingers_tip_gui = GUI("r_finger_tip", "circle", radius = 12, color = "#9b3b2f", selections = "tip")
845 |
846 | r_fingers_thumb_gui.drawMultipleSelectionButton(posX = 100, posY = 420)
847 | r_fingers_index_gui.drawMultipleSelectionButton(posX = 85, posY = 420)
848 | r_fingers_middlef_gui.drawMultipleSelectionButton(posX = 70, posY = 420)
849 | r_fingers_ring_gui.drawMultipleSelectionButton(posX = 55, posY = 420)
850 | r_fingers_pinky_gui.drawMultipleSelectionButton(posX = 40, posY = 420)
851 |
852 | r_fingers_metacarpal_gui.drawMultipleSelectionButton(posX = 25, posY = 345)
853 | r_fingers_proximal_gui.drawMultipleSelectionButton(posX = 25, posY = 360)
854 | r_fingers_middlep_gui.drawMultipleSelectionButton(posX = 25, posY = 375)
855 | r_fingers_distal_gui.drawMultipleSelectionButton(posX = 25, posY = 390)
856 | r_fingers_tip_gui.drawMultipleSelectionButton(posX = 25, posY = 405)
857 |
858 | r_finger_thumb_metacarpal_gui.drawSelectionButton(posX = 100, posY = 340)
859 | r_finger_thumb_proximal_gui.drawSelectionButton(posX = 100, posY = 360)
860 | r_finger_thumb_distal_gui.drawSelectionButton(posX = 100, posY = 375)
861 | r_finger_thumb_tip_gui.drawSelectionButton(posX = 100, posY = 390)
862 |
863 | r_finger_index_metacarpal_gui.drawSelectionButton(posX = 85, posY = 340)
864 | r_finger_index_proximal_gui.drawSelectionButton(posX = 85, posY = 360)
865 | r_finger_index_middlep_gui.drawSelectionButton(posX = 85, posY = 375)
866 | r_finger_index_distal_gui.drawSelectionButton(posX = 85, posY = 390)
867 | r_finger_index_tip_gui.drawSelectionButton(posX = 85, posY = 405)
868 |
869 | r_finger_middlef_metacarpal_gui.drawSelectionButton(posX = 70, posY = 340)
870 | r_finger_middlef_proximal_gui.drawSelectionButton(posX = 70, posY = 360)
871 | r_finger_middlef_middlep_gui.drawSelectionButton(posX = 70, posY = 375)
872 | r_finger_middlef_distal_gui.drawSelectionButton(posX = 70, posY = 390)
873 | r_finger_middlef_tip_gui.drawSelectionButton(posX = 70, posY = 405)
874 |
875 | r_finger_ring_metacarpal_gui.drawSelectionButton(posX = 55, posY = 340)
876 | r_finger_ring_proximal_gui.drawSelectionButton(posX = 55, posY = 360)
877 | r_finger_ring_middlep_gui.drawSelectionButton(posX = 55, posY = 375)
878 | r_finger_ring_distal_gui.drawSelectionButton(posX = 55, posY = 390)
879 | r_finger_ring_tip_gui.drawSelectionButton(posX = 55, posY = 405)
880 |
881 | r_finger_pinky_metacarpal_gui.drawSelectionButton(posX = 40, posY = 340)
882 | r_finger_pinky_proximal_gui.drawSelectionButton(posX = 40, posY = 360)
883 | r_finger_pinky_middlep_gui.drawSelectionButton(posX = 40, posY = 375)
884 | r_finger_pinky_distal_gui.drawSelectionButton(posX = 40, posY = 390)
885 | r_finger_pinky_tip_gui.drawSelectionButton(posX = 40, posY = 405)
886 |
887 | # LEGS #
888 |
889 | l_thigh_gui = GUI("l_thigh", "circle", radius = 20, color = "#3d9b2f")
890 | l_knee_gui = GUI("l_knee", "circle", radius = 20, color = "#3d9b2f")
891 | l_ankle_gui = GUI("l_ankle", "circle", radius = 20, color = "#3d9b2f")
892 | r_thigh_gui = GUI("r_thigh", "circle", radius = 20, color = "#9b3b2f")
893 | r_knee_gui = GUI("r_knee", "circle", radius = 20, color = "#9b3b2f")
894 | r_ankle_gui = GUI("r_ankle", "circle", radius = 20, color = "#9b3b2f")
895 |
896 | l_thigh_fk_gui = GUI("l_thigh_fk", "circle", radius = 20, color = "#3d9b2f")
897 | l_knee_fk_gui = GUI("l_knee_fk", "circle", radius = 20, color = "#3d9b2f")
898 | l_ankle_fk_gui = GUI("l_ankle_fk", "circle", radius = 20, color = "#3d9b2f")
899 | r_thigh_fk_gui = GUI("r_thigh_fk", "circle", radius = 20, color = "#9b3b2f")
900 | r_knee_fk_gui = GUI("r_knee_fk", "circle", radius = 20, color = "#9b3b2f")
901 | r_ankle_fk_gui = GUI("r_ankle_fk", "circle", radius = 20, color = "#9b3b2f")
902 |
903 | l_leg_ikpole_gui = GUI("l_leg_ikpole", "circle", radius = 14, color = "#3d9b2f")
904 | l_leg_ik_gui = GUI("l_leg_ik", "square", radius = 20, color = "#3d9b2f")
905 | r_leg_ikpole_gui = GUI("r_leg_ikpole", "circle", radius = 14, color = "#9b3b2f")
906 | r_leg_ik_gui = GUI("r_leg_ik", "square", radius = 20, color = "#9b3b2f")
907 |
908 | l_thigh_gui.drawSelectionButton()
909 | l_knee_gui.drawSelectionButton()
910 | l_ankle_gui.drawSelectionButton()
911 | r_thigh_gui.drawSelectionButton()
912 | r_knee_gui.drawSelectionButton()
913 | r_ankle_gui.drawSelectionButton()
914 |
915 | l_thigh_fk_gui.drawSelectionButton()
916 | l_knee_fk_gui.drawSelectionButton()
917 | l_ankle_fk_gui.drawSelectionButton()
918 | r_thigh_fk_gui.drawSelectionButton()
919 | r_knee_fk_gui.drawSelectionButton()
920 | r_ankle_fk_gui.drawSelectionButton()
921 |
922 | l_leg_ikpole_gui.drawSelectionButton()
923 | l_leg_ik_gui.drawSelectionButton()
924 | r_leg_ikpole_gui.drawSelectionButton()
925 | r_leg_ik_gui.drawSelectionButton()
926 |
927 | # FOOT #
928 |
929 | l_foot_ankle_gui = GUI("l_ankle", "rect", width = 55, height = 20, color = "#3d9b2f")
930 | r_foot_ankle_gui = GUI("r_ankle", "rect", width = 55, height = 20, color = "#9b3b2f")
931 |
932 | l_foot_ankle_fk_gui = GUI("l_ankle_fk", "rect", width = 55, height = 20, color = "#3d9b2f")
933 | l_foot_ball_gui = GUI("l_foot_ball", "rect", width = 15, height = 15, color = "#3d9b2f")
934 | l_foot_toes_gui = GUI("l_foot_toes", "rect", width = 20, height = 10, color = "#3d9b2f")
935 | r_foot_ankle_fk_gui = GUI("r_ankle_fk", "rect", width = 55, height = 20, color = "#9b3b2f")
936 | r_foot_ball_gui = GUI("r_foot_ball", "rect", width = 15, height = 15, color = "#9b3b2f")
937 | r_foot_toes_gui = GUI("r_foot_toes", "rect", width = 20, height = 10, color = "#9b3b2f")
938 |
939 | l_foot_ankle_gui.drawSelectionButton(370, 489)
940 | r_foot_ankle_gui.drawSelectionButton(100, 489)
941 |
942 | l_foot_ankle_fk_gui.drawSelectionButton(370, 489)
943 | l_foot_ball_gui.drawSelectionButton(408, 492)
944 | l_foot_toes_gui.drawSelectionButton(428, 494)
945 | r_foot_ankle_fk_gui.drawSelectionButton(100, 489)
946 | r_foot_ball_gui.drawSelectionButton(62, 492)
947 | r_foot_toes_gui.drawSelectionButton(42, 494)
948 |
949 | # IK FK #
950 |
951 | l_arm_ikfk_switch_gui = GUI("l_arm_ikfk_switch", "square", radius = 30, color = "#3d9b2f")
952 | r_arm_ikfk_switch_gui = GUI("r_arm_ikfk_switch", "square", radius = 30, color = "#9b3b2f")
953 | l_leg_ikfk_switch_gui = GUI("l_leg_ikfk_switch", "square", radius = 30, color = "#3d9b2f")
954 | r_leg_ikfk_switch_gui = GUI("r_leg_ikfk_switch", "square", radius = 30, color = "#9b3b2f")
955 |
956 | l_leg_ikfk_switch_select_gui = GUI("l_leg_ikfk_switch", "rect", width = 30, height = 9, color = "#3d9b2f")
957 | r_leg_ikfk_switch_select_gui = GUI("r_leg_ikfk_switch", "rect", width = 30, height = 9, color = "#9b3b2f")
958 |
959 | l_arm_ikfk_switch_gui.drawToggleButton(420, 300)
960 | r_arm_ikfk_switch_gui.drawToggleButton(55, 300)
961 | l_leg_ikfk_switch_gui.drawToggleButton(360, 450)
962 | r_leg_ikfk_switch_gui.drawToggleButton(110, 450)
963 |
964 | l_leg_ikfk_switch_select_gui.drawSelectionButton(360, 472)
965 | r_leg_ikfk_switch_select_gui.drawSelectionButton(110, 472)
966 |
967 | #print(pickerwin.frameGeometry().width())
968 | setNamespace()
969 | ikfkuichange()
970 |
971 | #pickerwin.show(dockable=True)
972 |
973 | def helloitsme():
974 | print("hello from the other side")
--------------------------------------------------------------------------------
/scripts/riggingtoolkit.py:
--------------------------------------------------------------------------------
1 | from PySide2.QtWidgets import *
2 | from PySide2.QtGui import *
3 | from PySide2.QtCore import*
4 |
5 | from pymel.core import *
6 | from pymel.core.nodetypes import *
7 |
8 | import math
9 | import maya.cmds as cmds
10 | import maya.OpenMayaUI as OpenMayaUI
11 |
12 | import webbrowser as web
13 |
14 | import maya.OpenMaya as om
15 | from maya.app.general.mayaMixin import MayaQWidgetDockableMixin
16 |
17 | guide_layout = QVBoxLayout()
18 |
19 | guidecreate_layout = QHBoxLayout()
20 | guidecreate_layout.setContentsMargins(50, 0, 50, 0)
21 | guideedit_layout = QHBoxLayout()
22 | guideedit_layout.setSpacing(2)
23 |
24 | settings_layout = QVBoxLayout()
25 |
26 | namespace_layout = QHBoxLayout()
27 | namespace_layout.setSpacing(2)
28 |
29 | class ToolkitWindow(MayaQWidgetDockableMixin, QDialog):
30 | def __init__(self):
31 | super(ToolkitWindow, self).__init__()
32 |
33 | # It is crucial we set a unique object name as this is used internally by Maya
34 | self.setWindowTitle("Awan's Auto Rigging Toolkit")
35 | self.setMinimumSize(265, 500)
36 | self.resize(265, 500)
37 |
38 | self.layout = QVBoxLayout()
39 | self.setLayout(self.layout)
40 |
41 | self.menubar = QMenuBar(self)
42 | self.showmenu = self.menubar.addMenu("Show")
43 | self.showmenu.addAction("Local Rotation Axes", self.displayAxes)
44 | self.showmenu.addSeparator()
45 | self.showmenu.addAction("Build Log", self.openlog)
46 | self.showmenu.addAction("Picker GUI", self.openpicker)
47 |
48 | self.addmenu = self.menubar.addMenu("Help")
49 | self.addmenu.addAction("Help on Awan's Auto Rigging Toolkit", self.openhelp)
50 | self.addmenu.addSeparator()
51 | self.addmenu.addAction("Support Me on Gumroad", self.opengumroad)
52 | self.addmenu.addAction("Support Me on Ko-Fi", self.openkofi)
53 | self.addmenu.addAction("Support Me on Sketchfab", self.opensketchfab)
54 | self.addmenu.addSeparator()
55 | self.addmenu.addAction("Developed with ❤ by awwwan", self.opengithub)
56 |
57 | self.layout.addWidget(self.menubar)
58 |
59 | def addLayout(self, layout):
60 | self.layout.addLayout(layout)
61 |
62 | def displayAxes(self):
63 | selectedJoints = ls(type = 'joint', sl = True)
64 |
65 | if not selectedJoints:
66 | allJoints = ls(type = 'joint')
67 | switch(allJoints, la = True)
68 | else:
69 | switch(selectedJoints, la = True)
70 | print("Axes Displayed!")
71 |
72 | def openlog(self):
73 | progresswin.show()
74 |
75 | def openpicker(self):
76 | import picker
77 | picker.pickerwin.show(dockable = True)
78 | picker.getNamespace_list()
79 | picker.setNamespace()
80 |
81 | def openhelp(self):
82 | web.open('https://github.com/awwwan/Auto-Rigger')
83 |
84 | def opengumroad(self):
85 | web.open('https://gumroad.com')
86 |
87 | def openkofi(self):
88 | web.open('https://ko-fi.com/')
89 |
90 | def opensketchfab(self):
91 | web.open('https://sketchfab.com/airy27/')
92 |
93 | def opengithub(self):
94 | web.open('https://github.com/awwwan/')
95 |
96 | #if __name__ == "__main__":
97 | window = ToolkitWindow()
98 | #window.show(dockable=True)
99 |
100 | class ProgressWindow(MayaQWidgetDockableMixin, QDialog):
101 | def __init__(self):
102 | super(ProgressWindow, self).__init__()
103 | self.setWindowTitle("Build Log")
104 | self.setFixedWidth(450)
105 | self.setModal(True)
106 |
107 | self.layout = QVBoxLayout()
108 | self.setLayout(self.layout)
109 |
110 | self.headerlayout = QHBoxLayout()
111 | self.headerlayout.alignment()
112 | self.layout.addLayout(self.headerlayout)
113 |
114 | self.headerlayout.addStretch()
115 | self.button = QPushButton()
116 | self.button.setText("Ok")
117 | self.button.clicked.connect(self.close)
118 | self.headerlayout.addWidget(self.button)
119 |
120 | self.textbox = QTextEdit()
121 | self.textbox.setReadOnly(True)
122 | self.layout.addWidget(self.textbox)
123 |
124 | def close(self):
125 | self.done(True)
126 |
127 | progresswin = ProgressWindow()
128 |
129 | class UI():
130 | def __init__(self, label = ""):
131 | self.label = label
132 |
133 | def drawTextLabel(self):
134 | self.gui = QLabel()
135 | self.gui.setText(self.label)
136 | return self
137 |
138 | def drawButton(self, command, height = 25):
139 | self.gui = QPushButton()
140 | self.gui.setText(self.label)
141 | self.gui.setFixedHeight(height)
142 | self.gui.clicked.connect(command)
143 | window.layout.addWidget(self.gui)
144 | return self
145 |
146 | def drawToggleButton(self, command, height = 25):
147 | self.gui = QPushButton()
148 | self.gui.setText(self.label)
149 | self.gui.setCheckable(True)
150 | self.gui.setFixedHeight(height)
151 | self.gui.clicked.connect(command)
152 | window.layout.addWidget(self.gui)
153 | return self
154 |
155 | def drawCheckBox(self):
156 | self.gui = QCheckBox()
157 | self.gui.setText(self.label)
158 | self.gui.setChecked(True)
159 | return self
160 |
161 | def drawComboBox(self):
162 | self.gui = QComboBox(editable = True)
163 | window.layout.addWidget(self.gui)
164 | return self
165 |
166 | def addItem(self, item):
167 | self.gui.addItem(item)
168 |
169 | def setLayout(self, layout):
170 | layout.addWidget(self.gui)
171 |
172 | class FrameLayout(QGroupBox):
173 | def __init__(self, title='', parent=None):
174 | super(FrameLayout, self).__init__(title, parent)
175 |
176 | layout = QVBoxLayout()
177 | layout.setContentsMargins(0, 7, 0, 0)
178 | layout.setSpacing(0)
179 | super(FrameLayout, self).setLayout(layout)
180 |
181 | self.__widget = QFrame(parent)
182 | self.__widget.setFrameShape(QFrame.Panel)
183 | self.__widget.setFrameShadow(QFrame.Plain)
184 | self.__widget.setLineWidth(0)
185 | layout.addWidget(self.__widget)
186 |
187 | self.__collapsed = False
188 |
189 | def setLayout(self, layout):
190 | self.__widget.setLayout(layout)
191 |
192 | def expandCollapseRect(self):
193 | return QRect(0, 0, self.width(), 20)
194 |
195 | def mouseReleaseEvent(self, event):
196 | if self.expandCollapseRect().contains(event.pos()):
197 | self.toggleCollapsed()
198 | event.accept()
199 | else:
200 | event.ignore()
201 |
202 | def toggleCollapsed(self):
203 | self.setCollapsed(not self.__collapsed)
204 |
205 | def setCollapsed(self, state=True):
206 | self.__collapsed = state
207 |
208 | if state:
209 | self.setMinimumHeight(20)
210 | self.setMaximumHeight(20)
211 | self.__widget.setVisible(False)
212 | else:
213 | self.setMinimumHeight(0)
214 | self.setMaximumHeight(1000000)
215 | self.__widget.setVisible(True)
216 |
217 | def paintEvent(self, event):
218 | painter = QPainter()
219 | painter.begin(self)
220 |
221 | font = painter.font()
222 | font.setBold(True)
223 | painter.setFont(font)
224 |
225 | x = self.rect().x()
226 | y = self.rect().y()
227 | w = self.rect().width()
228 | offset = 25
229 |
230 | painter.setRenderHint(painter.Antialiasing)
231 | painter.fillRect(self.expandCollapseRect(), QColor(93, 93, 93))
232 | painter.drawText(
233 | x + offset, y + 3, w, 16,
234 | Qt.AlignLeft | Qt.AlignTop,
235 | self.title()
236 | )
237 | self.__drawTriangle(painter, x, y)#(1)
238 | painter.setRenderHint(QPainter.Antialiasing, False)
239 | painter.end()
240 |
241 | def __drawTriangle(self, painter, x, y):#(2)
242 | if not self.__collapsed:#(3)
243 | points = [ QPoint(x+10, y+6 ),
244 | QPoint(x+20, y+6 ),
245 | QPoint(x+15, y+11)
246 | ]
247 |
248 | else:
249 | points = [ QPoint(x+10, y+4 ),
250 | QPoint(x+15, y+9 ),
251 | QPoint(x+10, y+14)
252 | ]
253 |
254 | currentBrush = painter.brush()#(4)
255 | currentPen = painter.pen()
256 |
257 | painter.setBrush(
258 | QBrush(
259 | QColor(187, 187, 187),
260 | Qt.SolidPattern
261 | )
262 | )#(5)
263 | painter.setPen(QPen(Qt.NoPen))#(6)
264 | painter.drawPolygon(QPolygon(points))#(7)
265 | painter.setBrush(currentBrush)#(8)
266 | painter.setPen(currentPen)
267 |
268 | def checkGuides():
269 | if ls("*guides", r = True):
270 | guides_btn.gui.setEnabled(False)
271 | mirrorguides_btn.gui.setEnabled(True)
272 | deleteguides_btn.gui.setEnabled(True)
273 | autorig_btn.gui.setEnabled(True)
274 | else:
275 | guides_btn.gui.setEnabled(True)
276 | mirrorguides_btn.gui.setEnabled(False)
277 | deleteguides_btn.gui.setEnabled(False)
278 | autorig_btn.gui.setEnabled(False)
279 |
280 | def checkRig():
281 | if ls("*" + namespace_cmb.gui.currentText() + ":*rig", r = True):
282 | mirrorctrl_btn.gui.setEnabled(True)
283 | deleterig_btn.gui.setEnabled(True)
284 | else:
285 | mirrorctrl_btn.gui.setEnabled(False)
286 | deleterig_btn.gui.setEnabled(False)
287 |
288 | def createGuides(*args):
289 | progresswin.textbox.clear()
290 |
291 | progresswin.setWindowTitle("Awan is creating your guides...")
292 | progresswin.show()
293 |
294 | group(n = "guides")
295 | global prog
296 | prog = 1
297 |
298 | hip.createGuide(s = 10)
299 | waist.createGuide(s = 10)
300 | chest.createGuide(s = 10)
301 | collarbone.createGuide(s = 10)
302 | l_clavicle.createGuide(s = 5)
303 | r_clavicle.createGuide(s = 5)
304 |
305 | neck.createGuide(s = 5)
306 | head.createGuide(s = 5)
307 | jaw.createGuide(s = 5)
308 | chin.createGuide(s = 5)
309 | l_eye.createGuide(s = 5)
310 | r_eye.createGuide(s = 5)
311 |
312 | l_shoulder.createGuide(s = 5)
313 | l_elbow.createGuide(s = 5)
314 | l_wrist.createGuide(s = 5)
315 | r_shoulder.createGuide(s = 5)
316 | r_elbow.createGuide(s = 5)
317 | r_wrist.createGuide(s = 5)
318 |
319 | l_finger_thumb_metacarpal.createGuide()
320 | l_finger_thumb_proximal.createGuide()
321 | l_finger_thumb_distal.createGuide()
322 | l_finger_thumb_tip.createGuide()
323 | r_finger_thumb_metacarpal.createGuide()
324 | r_finger_thumb_proximal.createGuide()
325 | r_finger_thumb_distal.createGuide()
326 | r_finger_thumb_tip.createGuide()
327 |
328 | l_finger_index_metacarpal.createGuide()
329 | l_finger_index_proximal.createGuide()
330 | l_finger_index_middlep.createGuide()
331 | l_finger_index_distal.createGuide()
332 | l_finger_index_tip.createGuide()
333 | r_finger_index_metacarpal.createGuide()
334 | r_finger_index_proximal.createGuide()
335 | r_finger_index_middlep.createGuide()
336 | r_finger_index_distal.createGuide()
337 | r_finger_index_tip.createGuide()
338 |
339 | l_finger_middlef_metacarpal.createGuide()
340 | l_finger_middlef_proximal.createGuide()
341 | l_finger_middlef_middlep.createGuide()
342 | l_finger_middlef_distal.createGuide()
343 | l_finger_middlef_tip.createGuide()
344 | r_finger_middlef_metacarpal.createGuide()
345 | r_finger_middlef_proximal.createGuide()
346 | r_finger_middlef_middlep.createGuide()
347 | r_finger_middlef_distal.createGuide()
348 | r_finger_middlef_tip.createGuide()
349 |
350 | l_finger_ring_metacarpal.createGuide()
351 | l_finger_ring_proximal.createGuide()
352 | l_finger_ring_middlep.createGuide()
353 | l_finger_ring_distal.createGuide()
354 | l_finger_ring_tip.createGuide()
355 | r_finger_ring_metacarpal.createGuide()
356 | r_finger_ring_proximal.createGuide()
357 | r_finger_ring_middlep.createGuide()
358 | r_finger_ring_distal.createGuide()
359 | r_finger_ring_tip.createGuide()
360 |
361 | l_finger_pinky_metacarpal.createGuide()
362 | l_finger_pinky_proximal.createGuide()
363 | l_finger_pinky_middlep.createGuide()
364 | l_finger_pinky_distal.createGuide()
365 | l_finger_pinky_tip.createGuide()
366 | r_finger_pinky_metacarpal.createGuide()
367 | r_finger_pinky_proximal.createGuide()
368 | r_finger_pinky_middlep.createGuide()
369 | r_finger_pinky_distal.createGuide()
370 | r_finger_pinky_tip.createGuide()
371 |
372 | l_thigh.createGuide(s = 5)
373 | l_knee.createGuide(s = 5)
374 | l_ankle.createGuide(s = 5)
375 | l_foot_ball.createGuide(s = 5)
376 | l_foot_toes.createGuide(s = 5)
377 | l_foot_heel.createGuide(s = 5)
378 | l_foot_inner.createGuide(s = 5)
379 | l_foot_outer.createGuide(s = 5)
380 | r_thigh.createGuide(s = 5)
381 | r_knee.createGuide(s = 5)
382 | r_ankle.createGuide(s = 5)
383 | r_foot_ball.createGuide(s = 5)
384 | r_foot_toes.createGuide(s = 5)
385 | r_foot_heel.createGuide(s = 5)
386 | r_foot_inner.createGuide(s = 5)
387 | r_foot_outer.createGuide(s = 5)
388 |
389 | select(cl = True)
390 |
391 | checkGuides()
392 | checkRig()
393 | print("Guides Created!")
394 | progresswin.textbox.append("Guides Created!")
395 |
396 | def mirrorGuides(*args):
397 | selectedGuide = ls(sl = True, l = True)
398 |
399 | if not selectedGuide:
400 | om.MGlobal.displayError ("No guide selected!")
401 | else:
402 | for x in selectedGuide:
403 | if (x.startswith("l_")):
404 | #print(x.partition("l_")[2])
405 | mirrorpos = xform(x, q = True, t = True, ws = True)
406 | print(mirrorpos)
407 | xform("r_" + x.partition("l_")[2], t = (mirrorpos[0]*-1, mirrorpos[1], mirrorpos[2]), ws = True)
408 | print("r_" + x.partition("l_")[2])
409 | selectedGuideChildren = listRelatives(x, typ = "locator", ad = True)
410 |
411 | for i in selectedGuideChildren:
412 | #print(mirrorchildpos)
413 | mirrorchildpos = xform(i.partition("Shape")[0], q = True, t = True, ws = True)
414 | print(i.partition("Shape")[0])
415 | xform("r_" + (i.partition("Shape")[0]).partition("l_")[2], t = (mirrorchildpos[0]*-1, mirrorchildpos[1], mirrorchildpos[2]), ws = True)
416 | elif (x.startswith("r_")):
417 | #print(x.partition("r_")[2])
418 | mirrorpos = xform(x, q = True, t = True, ws = True)
419 | print(mirrorpos)
420 | xform("l_" + x.partition("r_")[2], t = (mirrorpos[0]*-1, mirrorpos[1], mirrorpos[2]), ws = True)
421 | print("l_" + x.partition("r_")[2])
422 | selectedGuideChildren = listRelatives(x, typ = "locator", ad = True)
423 |
424 | for i in selectedGuideChildren:
425 | mirrorchildpos = xform(i.partition("Shape")[0], q = True, t = True, ws = True)
426 | print(i.partition("Shape")[0])
427 | xform("l_" + (i.partition("Shape")[0]).partition("r_")[2], t = (mirrorchildpos[0]*-1, mirrorchildpos[1], mirrorchildpos[2]), ws = True)
428 | else:
429 | om.MGlobal.displayWarning("Selected guide has no symmetry")
430 | print("Guides Mirrored!")
431 |
432 | def deleteGuides(*args):
433 | allGuides = ls("guides")
434 | delete(allGuides)
435 | global prog
436 | prog = 1
437 |
438 | checkGuides()
439 | checkRig()
440 | print("Guides Deleted!")
441 |
442 | def componentMode(*args):
443 | if componentmode_btn.gui.isChecked():
444 | selectMode(co = True)
445 | selectType(alc = True)
446 | print("Control editing on!")
447 | else:
448 | selectMode(o = True)
449 | print("Control editing off")
450 |
451 | def mirrorControl(*args):
452 | selectedControl = ls(sl = True, l = True, r = True)
453 |
454 | if not selectedControl:
455 | om.MGlobal.displayError ("No control selected!")
456 | else:
457 | for x in selectedControl:
458 | if (x.startswith(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_")):
459 |
460 | mirrorpos = xform(x + "Shape.cv[0:8]", q = True, t = True, ws = True)
461 |
462 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[0]", t = (mirrorpos[21]*-1, mirrorpos[22], mirrorpos[23]), ws = True)
463 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[1]", t = (mirrorpos[18]*-1, mirrorpos[19], mirrorpos[20]), ws = True)
464 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[2]", t = (mirrorpos[15]*-1, mirrorpos[16], mirrorpos[17]), ws = True)
465 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[3]", t = (mirrorpos[12]*-1, mirrorpos[13], mirrorpos[14]), ws = True)
466 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[4]", t = (mirrorpos[9]*-1, mirrorpos[10], mirrorpos[11]), ws = True)
467 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[5]", t = (mirrorpos[6]*-1, mirrorpos[7], mirrorpos[8]), ws = True)
468 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[6]", t = (mirrorpos[3]*-1, mirrorpos[4], mirrorpos[5]), ws = True)
469 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_" + x.partition("l_")[2] + "Shape.cv[7]", t = (mirrorpos[0]*-1, mirrorpos[1], mirrorpos[2]), ws = True)
470 |
471 | print("Control mirrored!")
472 | elif (x.startswith(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":r_")):
473 |
474 | mirrorpos = xform(x + "Shape.cv[0:8]", q = True, t = True, ws = True)
475 |
476 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[0]", t = (mirrorpos[21]*-1, mirrorpos[22], mirrorpos[23]), ws = True)
477 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[1]", t = (mirrorpos[18]*-1, mirrorpos[19], mirrorpos[20]), ws = True)
478 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[2]", t = (mirrorpos[15]*-1, mirrorpos[16], mirrorpos[17]), ws = True)
479 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[3]", t = (mirrorpos[12]*-1, mirrorpos[13], mirrorpos[14]), ws = True)
480 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[4]", t = (mirrorpos[9]*-1, mirrorpos[10], mirrorpos[11]), ws = True)
481 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[5]", t = (mirrorpos[6]*-1, mirrorpos[7], mirrorpos[8]), ws = True)
482 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[6]", t = (mirrorpos[3]*-1, mirrorpos[4], mirrorpos[5]), ws = True)
483 | xform(x.partition(namespace_cmb.gui.currentText())[0] + namespace_cmb.gui.currentText() + ":l_" + x.partition("r_")[2] + "Shape.cv[7]", t = (mirrorpos[0]*-1, mirrorpos[1], mirrorpos[2]), ws = True)
484 |
485 | print("Control mirrored!")
486 | else:
487 | om.MGlobal.displayWarning("Selected control has no symmetry")
488 |
489 | def deleteRig(*args):
490 | if not namespace_cmb.gui.currentText():
491 | om.MGlobal.displayError("Select an existing Namespace!")
492 | return
493 | else:
494 | pass
495 |
496 | for i in ls("*" + namespace_cmb.gui.currentText() + ":rig", r = True):
497 | delete(i)
498 | mel.eval('MLdeleteUnused;')
499 | namespace(rm = namespace_cmb.gui.currentText())
500 | namespace_list()
501 |
502 | checkGuides()
503 | checkRig()
504 |
505 | import picker
506 | picker.getNamespace_list()
507 | picker.setNamespace()
508 |
509 | print("Rig Deleted!")
510 |
511 | def createPickerGUI():
512 | setAttr('guides.visibility', 0)
513 | picker_cam = Camera(n = "picker_cam")
514 | #picker_cam.rename("picker_cam")
515 | picker_cam.setOrtho(orthoState = True)
516 | bb = xform(charmodel, q = True, bb = True, ws = True)
517 | viewFit("picker_cam1")
518 | setAttr('picker_camShape1.orthographicWidth', (max(bb)*105)/100)
519 |
520 | lookThru("picker_cam1")
521 | pb = playblast(st = 1, et = 1, fmt = 'image', f = workspace(q = True, rd = True) + "images/" + namespace_cmb.gui.currentText() + "_pb", fp = 0, p = 10, c = 'jpg', qlt = 100, w = 450 * 10, h = 480 * 10, orn = False, v = False)
522 |
523 | group(em = True, n = "guiData")
524 | parent("guiData", namespace_cmb.gui.currentText() + ':rig')
525 |
526 | def createRig(*args):
527 | if not ls("*guides", r = True):
528 | om.MGlobal.displayError("Can't create rig because you deleted the 'guides' object, please return it :(")
529 | return
530 | else:
531 | pass
532 |
533 | if not namespace_cmb.gui.currentText():
534 | om.MGlobal.displayError("Namespace must not be empty! (Try your character's name)")
535 | return
536 | else:
537 | pass
538 |
539 | if createpickergui_chkbox.gui.isChecked():
540 | if not ls(sl = True):
541 | om.MGlobal.displayError("Select a character model!")
542 | return
543 | else:
544 | pass
545 | else:
546 | pass
547 |
548 | progresswin.textbox.clear()
549 |
550 | global prognum
551 | prognum = 333
552 |
553 | if not createpickergui_chkbox.gui.isChecked():
554 | prognum -= 93
555 | else:
556 | pass
557 |
558 | progresswin.setWindowTitle("Awan is creating your rig...")
559 | progresswin.show()
560 |
561 | namespace(add = namespace_cmb.gui.currentText(), f = True)
562 |
563 | getSelection()
564 |
565 | group(n = namespace_cmb.gui.currentText() + ':rig', em = True)
566 | parent(namespace_cmb.gui.currentText() + ':rig', w = True)
567 | if createpickergui_chkbox.gui.isChecked():
568 | createPickerGUI()
569 | elif not createpickergui_chkbox.gui.isChecked():
570 | pass
571 |
572 | root_ctrl = MakeNurbCircle(r = 50, n = "root_ctrl")
573 | root_ctrl.setNormalY(1)
574 | root_ctrl.setNormalZ(0)
575 | group('root_ctrl', n = "root_ctrl_offset")
576 | parent('root_ctrl_offset', namespace_cmb.gui.currentText() + ':rig')
577 |
578 | grp_ctrl = MakeNurbCircle(r = 30, n = "grp_ctrl")
579 | grp_ctrl.setNormalY(1)
580 | grp_ctrl.setNormalZ(0)
581 | group('grp_ctrl', n = "grp_ctrl_offset")
582 | xform('grp_ctrl_offset', t = xform("hip_guide", q = True, t = True, ws = True))
583 | parent('grp_ctrl_offset', 'root_ctrl')
584 |
585 | spine_ctrl = MakeNurbCircle(r = 25, n = "spine_ctrl")
586 | spine_ctrl.setNormalY(1)
587 | spine_ctrl.setNormalZ(0)
588 | group('spine_ctrl', n = "spine_ctrl_offset")
589 | xform('spine_ctrl_offset', t = xform("hip_guide", q = True, t = True, ws = True))
590 | parent('spine_ctrl_offset', 'grp_ctrl')
591 |
592 | group(n = "l_hand_ctrl", em = True)
593 | group("l_hand_ctrl", n = "l_hand_ctrl_offset")
594 | group(n = "r_hand_ctrl", em = True)
595 | group("r_hand_ctrl", n = "r_hand_ctrl_offset")
596 |
597 | group(em = True, n = "ikpole_ctrl_connector_offset")
598 | parent("ikpole_ctrl_connector_offset", "root_ctrl_offset")
599 |
600 | global prog
601 | prog = 1
602 |
603 | # JOINTS #
604 |
605 | hip.createJoint()
606 | waist.createJoint()
607 | chest.createJoint()
608 | collarbone.createJoint()
609 |
610 | neck.createJoint()
611 | head.createJoint()
612 | jaw.createJoint()
613 | chin.createJoint()
614 | l_eye.createJoint()
615 | r_eye.createJoint()
616 |
617 |
618 | l_clavicle.createJoint()
619 | l_shoulder.createJoint(ik = createikctrl_chkbox.gui.isChecked())
620 | l_elbow.createJoint(ik = createikctrl_chkbox.gui.isChecked())
621 | l_wrist.createJoint(ik = createikctrl_chkbox.gui.isChecked())
622 | r_clavicle.createJoint()
623 | r_shoulder.createJoint(ik = createikctrl_chkbox.gui.isChecked())
624 | r_elbow.createJoint(ik = createikctrl_chkbox.gui.isChecked())
625 | r_wrist.createJoint(ik = createikctrl_chkbox.gui.isChecked())
626 |
627 | l_finger_thumb_metacarpal.createJoint()
628 | l_finger_thumb_proximal.createJoint()
629 | l_finger_thumb_distal.createJoint()
630 | l_finger_thumb_tip.createJoint()
631 | r_finger_thumb_metacarpal.createJoint()
632 | r_finger_thumb_proximal.createJoint()
633 | r_finger_thumb_distal.createJoint()
634 | r_finger_thumb_tip.createJoint()
635 |
636 | l_finger_index_metacarpal.createJoint()
637 | l_finger_index_proximal.createJoint()
638 | l_finger_index_middlep.createJoint()
639 | l_finger_index_distal.createJoint()
640 | l_finger_index_tip.createJoint()
641 | r_finger_index_metacarpal.createJoint()
642 | r_finger_index_proximal.createJoint()
643 | r_finger_index_middlep.createJoint()
644 | r_finger_index_distal.createJoint()
645 | r_finger_index_tip.createJoint()
646 |
647 | l_finger_middlef_metacarpal.createJoint()
648 | l_finger_middlef_proximal.createJoint()
649 | l_finger_middlef_middlep.createJoint()
650 | l_finger_middlef_distal.createJoint()
651 | l_finger_middlef_tip.createJoint()
652 | r_finger_middlef_metacarpal.createJoint()
653 | r_finger_middlef_proximal.createJoint()
654 | r_finger_middlef_middlep.createJoint()
655 | r_finger_middlef_distal.createJoint()
656 | r_finger_middlef_tip.createJoint()
657 |
658 | l_finger_ring_metacarpal.createJoint()
659 | l_finger_ring_proximal.createJoint()
660 | l_finger_ring_middlep.createJoint()
661 | l_finger_ring_distal.createJoint()
662 | l_finger_ring_tip.createJoint()
663 | r_finger_ring_metacarpal.createJoint()
664 | r_finger_ring_proximal.createJoint()
665 | r_finger_ring_middlep.createJoint()
666 | r_finger_ring_distal.createJoint()
667 | r_finger_ring_tip.createJoint()
668 |
669 | l_finger_pinky_metacarpal.createJoint()
670 | l_finger_pinky_proximal.createJoint()
671 | l_finger_pinky_middlep.createJoint()
672 | l_finger_pinky_distal.createJoint()
673 | l_finger_pinky_tip.createJoint()
674 | r_finger_pinky_metacarpal.createJoint()
675 | r_finger_pinky_proximal.createJoint()
676 | r_finger_pinky_middlep.createJoint()
677 | r_finger_pinky_distal.createJoint()
678 | r_finger_pinky_tip.createJoint()
679 |
680 | l_thigh.createJoint(ik = createikctrl_chkbox.gui.isChecked())
681 | l_knee.createJoint(ik = createikctrl_chkbox.gui.isChecked())
682 | l_ankle.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
683 | l_foot_ball.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
684 | l_foot_toes.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
685 | l_foot_heel.createJoint(rev = True)
686 | l_foot_inner.createJoint()
687 | l_foot_outer.createJoint()
688 | r_thigh.createJoint(ik = createikctrl_chkbox.gui.isChecked())
689 | r_knee.createJoint(ik = createikctrl_chkbox.gui.isChecked())
690 | r_ankle.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
691 | r_foot_ball.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
692 | r_foot_toes.createJoint(ik = createikctrl_chkbox.gui.isChecked(), rev = True)
693 | r_foot_heel.createJoint(rev = True)
694 | r_foot_inner.createJoint()
695 | r_foot_outer.createJoint()
696 |
697 | #Orient Joint
698 | hip.orientJoint()
699 | waist.orientJoint()
700 | chest.orientJoint()
701 | collarbone.orientJoint()
702 |
703 | neck.orientJoint()
704 | head.orientJoint()
705 | jaw.orientJoint()
706 | chin.orientJoint(oj = False)
707 | l_eye.orientJoint(oj = False)
708 | r_eye.orientJoint(oj = False)
709 |
710 | l_clavicle.orientJoint()
711 | l_shoulder.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
712 | l_elbow.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
713 | l_wrist.orientJoint(oj = False, ik = createikctrl_chkbox.gui.isChecked())
714 | r_clavicle.orientJoint()
715 | r_shoulder.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
716 | r_elbow.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
717 | r_wrist.orientJoint(oj = False, ik = createikctrl_chkbox.gui.isChecked())
718 |
719 | l_finger_thumb_metacarpal.orientJoint()
720 | l_finger_thumb_proximal.orientJoint()
721 | l_finger_thumb_distal.orientJoint()
722 | l_finger_thumb_tip.orientJoint(oj = False)
723 | r_finger_thumb_metacarpal.orientJoint()
724 | r_finger_thumb_proximal.orientJoint()
725 | r_finger_thumb_distal.orientJoint()
726 | r_finger_thumb_tip.orientJoint(oj = False)
727 |
728 | l_finger_index_metacarpal.orientJoint()
729 | l_finger_index_proximal.orientJoint()
730 | l_finger_index_middlep.orientJoint()
731 | l_finger_index_distal.orientJoint()
732 | l_finger_index_tip.orientJoint(oj = False)
733 | r_finger_index_metacarpal.orientJoint()
734 | r_finger_index_proximal.orientJoint()
735 | r_finger_index_middlep.orientJoint()
736 | r_finger_index_distal.orientJoint()
737 | r_finger_index_tip.orientJoint(oj = False)
738 |
739 | l_finger_middlef_metacarpal.orientJoint()
740 | l_finger_middlef_proximal.orientJoint()
741 | l_finger_middlef_middlep.orientJoint()
742 | l_finger_middlef_distal.orientJoint()
743 | l_finger_middlef_tip.orientJoint(oj = False)
744 | r_finger_middlef_metacarpal.orientJoint()
745 | r_finger_middlef_proximal.orientJoint()
746 | r_finger_middlef_middlep.orientJoint()
747 | r_finger_middlef_distal.orientJoint()
748 | r_finger_middlef_tip.orientJoint(oj = False)
749 |
750 | l_finger_ring_metacarpal.orientJoint()
751 | l_finger_ring_proximal.orientJoint()
752 | l_finger_ring_middlep.orientJoint()
753 | l_finger_ring_distal.orientJoint()
754 | l_finger_ring_tip.orientJoint(oj = False)
755 | r_finger_ring_metacarpal.orientJoint()
756 | r_finger_ring_proximal.orientJoint()
757 | r_finger_ring_middlep.orientJoint()
758 | r_finger_ring_distal.orientJoint()
759 | r_finger_ring_tip.orientJoint(oj = False)
760 |
761 | l_finger_pinky_metacarpal.orientJoint()
762 | l_finger_pinky_proximal.orientJoint()
763 | l_finger_pinky_middlep.orientJoint()
764 | l_finger_pinky_distal.orientJoint()
765 | l_finger_pinky_tip.orientJoint(oj = False)
766 | r_finger_pinky_metacarpal.orientJoint()
767 | r_finger_pinky_proximal.orientJoint()
768 | r_finger_pinky_middlep.orientJoint()
769 | r_finger_pinky_distal.orientJoint()
770 | r_finger_pinky_tip.orientJoint(oj = False)
771 |
772 | l_thigh.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
773 | l_knee.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
774 | l_ankle.orientJoint(oj = False, ik = createikctrl_chkbox.gui.isChecked())
775 | l_foot_ball.orientJoint()
776 | l_foot_toes.orientJoint(oj = False)
777 | #l_foot_heel.orientJoint()
778 | #l_foot_inner.orientJoint()
779 | #l_foot_outer.orientJoint()
780 | r_thigh.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
781 | r_knee.orientJoint(ik = createikctrl_chkbox.gui.isChecked())
782 | r_ankle.orientJoint(oj = False, ik = createikctrl_chkbox.gui.isChecked())
783 | r_foot_ball.orientJoint()
784 | r_foot_toes.orientJoint(oj = False)
785 | #r_foot_heel.orientJoint()
786 | #r_foot_inner.orientJoint()
787 | #r_foot_outer.orientJoint()
788 |
789 | if createikctrl_chkbox.gui.isChecked():
790 | #IK FK SYSTEMS
791 |
792 | group('l_thigh_ik', 'l_thigh_fk', n = 'l_leg_ik_fk')
793 | group('l_shoulder_ik', 'l_shoulder_fk', n = 'l_arm_ik_fk')
794 |
795 | group('r_thigh_ik', 'r_thigh_fk', n = 'r_leg_ik_fk')
796 | group('r_shoulder_ik', 'r_shoulder_fk', n = 'r_arm_ik_fk')
797 |
798 | group('l_leg_ik_fk', 'l_arm_ik_fk', 'r_leg_ik_fk', 'r_arm_ik_fk', n = 'ik_fk_joints')
799 | parent('ik_fk_joints', 'root_ctrl')
800 | elif not createikctrl_chkbox.gui.isChecked():
801 | pass
802 |
803 | # CONTROLLERS #
804 |
805 | hip.createControl(r = 25)
806 | waist.createControl(r = 20)
807 | chest.createControl(r = 20)
808 | collarbone.createControl(r = 10)
809 |
810 | neck.createControl(r = 10)
811 | head.createControl(r = 15, nr = 'z')
812 | jaw.createControl(r = 2)
813 | #chin.createControl(r = 2)
814 | l_eye.createControl(r = 2)
815 | r_eye.createControl(r = 2)
816 |
817 | l_clavicle.createControl(r = 5)
818 | l_shoulder.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
819 | l_elbow.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
820 | l_wrist.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
821 | r_clavicle.createControl(r = 5)
822 | r_shoulder.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
823 | r_elbow.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
824 | r_wrist.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
825 |
826 | if createikctrl_chkbox.gui.isChecked():
827 | l_arm.createIKControl(sj = 'l_shoulder', ee = 'l_wrist', mj = 'l_elbow')
828 | r_arm.createIKControl(sj = 'r_shoulder', ee = 'r_wrist', mj = 'r_elbow')
829 | elif not createikctrl_chkbox.gui.isChecked():
830 | pass
831 |
832 | l_finger_thumb_metacarpal.createControl(r = 1)
833 | l_finger_thumb_proximal.createControl()
834 | l_finger_thumb_distal.createControl()
835 | l_finger_thumb_tip.createControl()
836 | r_finger_thumb_metacarpal.createControl(r = 1)
837 | r_finger_thumb_proximal.createControl()
838 | r_finger_thumb_distal.createControl()
839 | r_finger_thumb_tip.createControl()
840 |
841 | l_finger_index_metacarpal.createControl(r = 1)
842 | l_finger_index_proximal.createControl()
843 | l_finger_index_middlep.createControl()
844 | l_finger_index_distal.createControl()
845 | l_finger_index_tip.createControl()
846 | r_finger_index_metacarpal.createControl(r = 1)
847 | r_finger_index_proximal.createControl()
848 | r_finger_index_middlep.createControl()
849 | r_finger_index_distal.createControl()
850 | r_finger_index_tip.createControl()
851 |
852 | l_finger_middlef_metacarpal.createControl(r = 1)
853 | l_finger_middlef_proximal.createControl()
854 | l_finger_middlef_middlep.createControl()
855 | l_finger_middlef_distal.createControl()
856 | l_finger_middlef_tip.createControl()
857 | r_finger_middlef_metacarpal.createControl(r = 1)
858 | r_finger_middlef_proximal.createControl()
859 | r_finger_middlef_middlep.createControl()
860 | r_finger_middlef_distal.createControl()
861 | r_finger_middlef_tip.createControl()
862 |
863 | l_finger_ring_metacarpal.createControl(r = 1)
864 | l_finger_ring_proximal.createControl()
865 | l_finger_ring_middlep.createControl()
866 | l_finger_ring_distal.createControl()
867 | l_finger_ring_tip.createControl()
868 | r_finger_ring_metacarpal.createControl(r = 1)
869 | r_finger_ring_proximal.createControl()
870 | r_finger_ring_middlep.createControl()
871 | r_finger_ring_distal.createControl()
872 | r_finger_ring_tip.createControl()
873 |
874 | l_finger_pinky_metacarpal.createControl(r = 1)
875 | l_finger_pinky_proximal.createControl()
876 | l_finger_pinky_middlep.createControl()
877 | l_finger_pinky_distal.createControl()
878 | l_finger_pinky_tip.createControl()
879 | r_finger_pinky_metacarpal.createControl(r = 1)
880 | r_finger_pinky_proximal.createControl()
881 | r_finger_pinky_middlep.createControl()
882 | r_finger_pinky_distal.createControl()
883 | r_finger_pinky_tip.createControl()
884 |
885 | l_thigh.createControl(r = 15, fk = createikctrl_chkbox.gui.isChecked())
886 | l_knee.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
887 | l_ankle.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
888 | l_foot_ball.createControl(r = 5)
889 | l_foot_toes.createControl(r = 5)
890 | #l_foot_heel.createControl()
891 | #l_foot_inner.createControl()
892 | #l_foot_outer.createControl()
893 | r_thigh.createControl(r = 15, fk = createikctrl_chkbox.gui.isChecked())
894 | r_knee.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
895 | r_ankle.createControl(r = 10, fk = createikctrl_chkbox.gui.isChecked())
896 | r_foot_ball.createControl(r = 5)
897 | r_foot_toes.createControl(r = 5)
898 | #r_foot_heel.createControl()
899 | #r_foot_inner.createControl()
900 | #r_foot_outer.createControl()
901 |
902 | if createikctrl_chkbox.gui.isChecked():
903 | l_leg.createIKControl(sj = 'l_thigh', ee = 'l_ankle', mj = 'l_knee')
904 | r_leg.createIKControl(sj = 'r_thigh', ee = 'r_ankle', mj = 'r_knee')
905 | elif not createikctrl_chkbox.gui.isChecked():
906 | pass
907 |
908 | if createrevctrl_chkbox.gui.isChecked():
909 | l_foot.createReverseControl(sj = 'l_ankle', ee = 'l_foot_toes', mj = 'l_foot_ball', bj = 'l_foot_heel')
910 | r_foot.createReverseControl(sj = 'r_ankle', ee = 'r_foot_toes', mj = 'r_foot_ball', bj = 'r_foot_heel')
911 | elif not createrevctrl_chkbox.gui.isChecked():
912 | pass
913 |
914 | editControlShape()
915 |
916 | parent("l_clavicle_ctrl_offset", 'collarbone_ctrl')
917 | parent("r_clavicle_ctrl_offset", 'collarbone_ctrl')
918 |
919 | if createikctrl_chkbox.gui.isChecked():
920 | #IK FK SYSTEMS
921 |
922 | parentConstraint('hip_ctrl', 'l_leg_ik_fk', mo = True)
923 | parentConstraint('l_clavicle_ctrl', 'l_arm_ik_fk', mo = True)
924 |
925 | parentConstraint('hip_ctrl', 'r_leg_ik_fk', mo = True)
926 | parentConstraint('r_clavicle_ctrl', 'r_arm_ik_fk', mo = True)
927 | elif not createikctrl_chkbox.gui.isChecked():
928 | pass
929 |
930 | #lock and hide attributes
931 |
932 | offsetAttr = ['tx','ty','tz','rx','ry','rz','sx','sy','sz']
933 | offsetGroup = ls('*_offset')
934 |
935 | for i in offsetGroup:
936 | for j in offsetAttr:
937 | setAttr(i + '.' + j, l = True, k = False, cb = False)
938 |
939 | if createikctrl_chkbox.gui.isChecked():
940 | ikfkswitch = ls('*ikfk_switch_ctrl')
941 |
942 | for i in ikfkswitch:
943 | for j in offsetAttr:
944 | setAttr(i + '.' + j, l = True, k = False, cb = False)
945 | elif not createikctrl_chkbox.gui.isChecked():
946 | pass
947 |
948 | #colour overrides
949 |
950 | all_ctrl = ls('*ctrl')
951 | all_l_ctrl = ls('l_*ctrl')
952 | all_r_ctrl = ls('r_*ctrl')
953 |
954 | for i in all_ctrl:
955 | setAttr(i + ".overrideEnabled", 1)
956 | setAttr(i + ".overrideColor", 17)
957 |
958 | for i in all_l_ctrl:
959 | setAttr(i + ".overrideColor", 14)
960 |
961 | for i in all_r_ctrl:
962 | setAttr(i + ".overrideColor", 13)
963 |
964 | setAttr("grp_ctrl.overrideColor", 18)
965 | setAttr("root_ctrl.overrideColor", 18)
966 |
967 | all_joint = ls(type = 'joint')
968 |
969 | for i in all_joint:
970 | setAttr(i + ".overrideEnabled", 1)
971 | setAttr(i + ".overrideColor", 0)
972 |
973 | #Delete All Non Deformer History
974 | bakePartialHistory(all = True)
975 |
976 | #Hide Guides
977 | setAttr('guides.visibility', 0)
978 |
979 | if createpickergui_chkbox.gui.isChecked():
980 | #GUI Data
981 | addAttr("guiData", ln = "name", type = "string")
982 | setAttr("guiData.name", namespace_cmb.gui.currentText(), type = "string")
983 |
984 | addAttr("guiData", ln = "isIK", type = "bool")
985 | setAttr("guiData.isIK", createikctrl_chkbox.gui.isChecked())
986 |
987 | allCtrl = ls("*_ctrl")
988 | for i in allCtrl:
989 | addAttr("guiData", ln = i + "_guiDataX")
990 | addAttr("guiData", ln = i + "_guiDataY")
991 | setAttr("guiData." + i + "_guiDataX", worldToScreen(xform(i, q = True, t = True, ws = True))[0])
992 | setAttr("guiData." + i + "_guiDataY", worldToScreen(xform(i, q = True, t = True, ws = True))[1])
993 |
994 | progress_msg = "Creating Picker GUI... (" + progressNum(prognum) + "%) " + i
995 | print(progress_msg)
996 | progresswin.textbox.append(progress_msg)
997 | QApplication.processEvents()
998 |
999 | elif not createpickergui_chkbox.gui.isChecked():
1000 | pass
1001 |
1002 | #Set Namespace
1003 | rigRelatives = listRelatives(namespace_cmb.gui.currentText() + ':rig', ad = True)
1004 | for x in rigRelatives:
1005 | rename(x, namespace_cmb.gui.currentText() + ":" + x)
1006 |
1007 | switches = ls("*switch")
1008 | for x in switches:
1009 | rename(x, namespace_cmb.gui.currentText() + ":" + x)
1010 |
1011 | conditions = ls("*condition")
1012 | for x in conditions:
1013 | rename(x, namespace_cmb.gui.currentText() + ":" + x)
1014 |
1015 | pma = ls("*pma")
1016 | for x in pma:
1017 | rename(x, namespace_cmb.gui.currentText() + ":" + x)
1018 |
1019 | multi = ls("*multi")
1020 | for x in multi:
1021 | rename(x, namespace_cmb.gui.currentText() + ":" + x)
1022 |
1023 | namespace_list()
1024 |
1025 | if createpickergui_chkbox.gui.isChecked():
1026 | #Delete Playblast Camera
1027 | delete("picker_cam1")
1028 | elif not createpickergui_chkbox.gui.isChecked():
1029 | pass
1030 |
1031 | checkGuides()
1032 | checkRig()
1033 |
1034 | import picker
1035 | picker.getNamespace_list()
1036 | picker.setNamespace()
1037 |
1038 | print("Rig Created!")
1039 | progresswin.textbox.append("Rig Created!")
1040 |
1041 | def progressNum(max):
1042 | global prog
1043 | prog+=1
1044 | return str(int((prog/max)*100))
1045 |
1046 | def worldToScreen(point):
1047 | defaultAspectRatio = getAttr('defaultResolution.deviceAspectRatio')
1048 |
1049 | setAttr('defaultResolution.deviceAspectRatio', 0.8393)
1050 |
1051 | sel = om.MSelectionList()
1052 | dag = om.MDagPath()
1053 |
1054 | sel.add("picker_cam1")
1055 | sel.getDagPath(0,dag)
1056 |
1057 | cam = om.MFnCamera(dag)
1058 | floatMat = cam.projectionMatrix()
1059 | projMat = om.MMatrix(floatMat.matrix)
1060 | floatMat = cam.postProjectionMatrix()
1061 | postProjMat = om.MMatrix(floatMat.matrix)
1062 | transMat = dag.inclusiveMatrix()
1063 |
1064 | point = om.MPoint(point[0], point[1], point[2])
1065 |
1066 | fullMat = transMat.inverse() * projMat * postProjMat
1067 | nuPoint = point * fullMat
1068 | screenPoint = [(nuPoint[0]/nuPoint[3]/2+0.5)*470, (1-(nuPoint[1]/nuPoint[3]/2+0.5))*560]
1069 |
1070 | setAttr('defaultResolution.deviceAspectRatio', defaultAspectRatio)
1071 |
1072 | return screenPoint
1073 |
1074 | def editControlShape():
1075 | #Eye_LookAt
1076 | xform('l_eye_ctrl', t = (0, 15, 0), r = True)
1077 | xform('r_eye_ctrl', t = (0, 15, 0), r = True)
1078 |
1079 | eyesLookAt_ctrl = MakeNurbCircle(r = 3, n = "eyesLookAt_ctrl")
1080 | eyesLookAt_ctrl.setNormalY(1)
1081 | eyesLookAt_ctrl.setNormalZ(0)
1082 | group('eyesLookAt_ctrl', n = "eyesLookAt_ctrl_offset")
1083 | xform("eyesLookAt_ctrl_offset", t = (0, (xform('l_eye_ctrl', q = True, t = True, ws = True))[1], (xform('l_eye_ctrl', q = True, t = True, ws = True))[2]), ro = xform('l_eye_ctrl_offset', q = True, ro = True, ws = True), ws = True)
1084 | xform('eyesLookAt_ctrlShape.cv[0:8]', s = (3, 1, 2), r = True)
1085 |
1086 | parent('l_eye_ctrl_offset', 'eyesLookAt_ctrl')
1087 | parent('r_eye_ctrl_offset', 'eyesLookAt_ctrl')
1088 | parent('eyesLookAt_ctrl_offset', 'grp_ctrl')
1089 |
1090 | #Neck
1091 | xform('neck_ctrl.rotatePivot', t = xform('neck_guide', q = True, t = True, ws = True), ws = True)
1092 |
1093 | #Collarbone
1094 | xform('collarbone_ctrlShape.cv[0:8]', s = (2, 1, 1), r = True)
1095 | xform('collarbone_ctrlShape.cv[1]', t = (0, -20, 0), r = True)
1096 | xform('collarbone_ctrlShape.cv[5]', t = (0, -20, 0), r = True)
1097 |
1098 | #L_Clavicle
1099 | xform('l_clavicle_ctrlShape.cv[0:8]', s = (1, 1, 0.5), r = True)
1100 | xform('l_clavicle_ctrl.rotatePivot', t = xform('l_clavicle_guide', q = True, t = True, ws = True), ws = True)
1101 |
1102 | #R_Clavicle
1103 | xform('r_clavicle_ctrlShape.cv[0:8]', s = (1, 1, 0.5), r = True)
1104 | xform('r_clavicle_ctrl.rotatePivot', t = xform('r_clavicle_guide', q = True, t = True, ws = True), ws = True)
1105 |
1106 | #Hip
1107 | l_thigh_pos = xform("l_thigh_guide", q = True, t = True, ws = True)
1108 | r_thigh_pos = xform("r_thigh_guide", q = True, t = True, ws = True)
1109 | l_knee_pos = xform("l_knee_guide", q = True, t = True, ws = True)
1110 | r_knee_pos = xform("r_knee_guide", q = True, t = True, ws = True)
1111 |
1112 | xform('hip_ctrl.ep[0]', t = (0, -6, 0), r = True)
1113 | xform('hip_ctrl.ep[4]', t = (0, -6, 0), r = True)
1114 | xform('hip_ctrl.ep[5:7]', t = (0, 2, 0), r = True)
1115 | xform('hip_ctrl.ep[1:3]', t = (0, 2, 0), r = True)
1116 | xform('hip_ctrl.ep[6]', t = (0, 3.5, 0), r = True)
1117 | xform('hip_ctrl.ep[2]', t = (0, 3.5, 0), r = True)
1118 | xform('hip_ctrl.ep[0:8]', t = (0, (((l_thigh_pos[1] - l_knee_pos[1]) / 4) * -1), 0), s = (1, 1, 0.8), r = True)
1119 |
1120 | def getSelection():
1121 | global charmodel
1122 | charmodel = ls(sl = True)
1123 |
1124 | #BUTTONS
1125 |
1126 | guides_btn = UI(label = "Create Guides")
1127 |
1128 | mirrorguides_btn = UI(label = "Mirror Guides")
1129 | deleteguides_btn = UI(label = "Delete Guides")
1130 |
1131 | settings_frame = FrameLayout("Settings", window)
1132 |
1133 | deleterig_btn = UI(label = "Delete Rig")
1134 |
1135 | componentmode_btn = UI(label = "Component Mode")
1136 | mirrorctrl_btn = UI(label = "Mirror Control Shape")
1137 |
1138 | namespace_cmb = UI()
1139 | namespace_lbl = UI(label = "Namespace :")
1140 |
1141 | createikctrl_chkbox = UI(label = "Create IK Control")
1142 | createrevctrl_chkbox = UI(label = "Create Reverse Foot Control")
1143 | createpickergui_chkbox = UI(label = "Create Picker GUI")
1144 |
1145 | autorig_btn = UI(label = "Awto Rig!")
1146 |
1147 | guides_btn.drawButton(createGuides).setLayout(guidecreate_layout)
1148 |
1149 | window.addLayout(guide_layout)
1150 | guide_layout.addLayout(guidecreate_layout)
1151 | guide_layout.addLayout(guideedit_layout)
1152 | mirrorguides_btn.drawButton(mirrorGuides).setLayout(guideedit_layout)
1153 | deleteguides_btn.drawButton(deleteGuides).setLayout(guideedit_layout)
1154 |
1155 | autorig_btn.drawButton(createRig, height = 50)
1156 |
1157 | window.layout.addWidget(settings_frame)
1158 | settings_frame.setLayout(settings_layout)
1159 | settings_layout.addLayout(namespace_layout)
1160 |
1161 | window.addLayout(namespace_layout)
1162 | namespace_lbl.drawTextLabel().setLayout(namespace_layout)
1163 | namespace_cmb.drawComboBox().setLayout(namespace_layout)
1164 |
1165 | createikctrl_chkbox.drawCheckBox().setLayout(settings_layout)
1166 | createrevctrl_chkbox.drawCheckBox().setLayout(settings_layout)
1167 | createpickergui_chkbox.drawCheckBox().setLayout(settings_layout)
1168 |
1169 | def ikrevchkbox():
1170 | if createikctrl_chkbox.gui.isChecked():
1171 | createrevctrl_chkbox.gui.setChecked(True)
1172 | createrevctrl_chkbox.gui.setEnabled(True)
1173 | elif not createikctrl_chkbox.gui.isChecked():
1174 | createrevctrl_chkbox.gui.setChecked(False)
1175 | createrevctrl_chkbox.gui.setEnabled(False)
1176 |
1177 | createikctrl_chkbox.gui.clicked.connect(ikrevchkbox)
1178 |
1179 | componentmode_btn.drawToggleButton(componentMode).setLayout(settings_layout)
1180 | mirrorctrl_btn.drawButton(mirrorControl).setLayout(settings_layout)
1181 |
1182 | deleterig_btn.drawButton(deleteRig).setLayout(settings_layout)
1183 |
1184 | window.layout.addStretch()
1185 |
1186 | checkGuides()
1187 | checkRig()
1188 |
1189 | def namespace_list():
1190 | namespace_cmb.gui.clear()
1191 | nsinfo = namespaceInfo(lon = True, r = True)
1192 | for i in nsinfo:
1193 | if(i != "UI" and i != "shared"):
1194 | namespace_cmb.gui.addItem(i)
1195 | else:
1196 | pass
1197 |
1198 | namespace_list()
1199 |
1200 | # RIG #
1201 |
1202 | class Rig:
1203 |
1204 | def __init__(self, name, t = (0, 0, 0), p = ""):
1205 | self.name = name
1206 | self.translate = t
1207 | self.parent = p
1208 |
1209 | def createGuide(self, s = 1):
1210 | self.locator = spaceLocator(n = self.name + "_guide")
1211 | self.locator.setTranslation(self.translate)
1212 | self.locator.setScale([s, s, s])
1213 | if (self.parent != ""):
1214 | self.locator.setParent(self.parent + "_guide")
1215 |
1216 | self.guide_curve = NurbsCurve(p = [xform(self.name + "_guide", q = True, t = True, ws = True), xform(self.parent + "_guide", q = True, t = True, ws = True)], d = 1, n = self.name + "_guide_connector")
1217 | cluster(self.name + "_guide_connector.cv[0]", n = self.name + "_guide_cluster")
1218 | cluster(self.name + "_guide_connector.cv[1]", n = self.name + "_guide_parent_cluster")
1219 | parent(self.name + "_guide_connector", "guides")
1220 | parent(self.name + "_guide_clusterHandle", self.name + "_guide")
1221 | parent(self.name + "_guide_parent_clusterHandle", self.parent + "_guide")
1222 | setAttr(self.name + "_guide_connector.overrideEnabled", 1)
1223 | setAttr(self.name + "_guide_connector.overrideDisplayType", 2)
1224 | setAttr(self.name + "_guide_clusterHandleShape.visibility", 0)
1225 | setAttr(self.name + "_guide_parent_clusterHandleShape.visibility", 0)
1226 | else:
1227 | self.locator.setParent("guides")
1228 |
1229 | progress_msg = "Creating Guides... (" + progressNum(83) + "%) " + self.name + "_guide"
1230 | print(progress_msg)
1231 | progresswin.textbox.append(progress_msg)
1232 | QApplication.processEvents()
1233 |
1234 | def createJoint(self, ik = False, rev = False):
1235 | self.joint_pos = xform(self.name + "_guide", q = True, t = True, ws = True)
1236 | self.joint = Joint(n = self.name, radius = 1, p = self.joint_pos)
1237 | if (self.name.endswith("_foot_heel") or self.name.endswith("_foot_inner") or self.name.endswith("_foot_outer")):
1238 | delete(self.name)
1239 | elif(self.parent != ""):
1240 | self.joint.setParent(self.parent)
1241 | else:
1242 | self.joint.setParent("root_ctrl")
1243 |
1244 | if ik:
1245 | self.jointIK = Joint(n = self.name + "_ik", radius = 1, p = self.joint_pos)
1246 | self.jointFK = Joint(n = self.name + "_fk", radius = 1, p = self.joint_pos)
1247 | if(self.parent == "l_clavicle" or self.parent == "r_clavicle" or self.parent == "hip"):
1248 | self.jointIK.setParent(self.parent)
1249 | self.jointFK.setParent(self.parent)
1250 | else:
1251 | self.jointIK.setParent(self.parent + "_ik")
1252 | self.jointFK.setParent(self.parent + "_fk")
1253 | elif not ik:
1254 | pass
1255 |
1256 | if rev:
1257 | self.jointrev = Joint(radius = 1, p = self.joint_pos, n = self.name + "_rev")
1258 | if (self.name == "l_ankle" or self.name == "r_ankle"):
1259 | self.jointrev.setParent(self.parent)
1260 | else:
1261 | self.jointrev.setParent(self.parent + "_rev")
1262 | elif not rev:
1263 | pass
1264 |
1265 | hide (ls ('*_ik', type = 'joint'))
1266 | hide (ls ('*_fk', type = 'joint'))
1267 | hide (ls ('*_rev', type = 'joint'))
1268 |
1269 | progress_msg = "Creating Joints... (" + progressNum(prognum) + "%) " + self.name
1270 | print(progress_msg)
1271 | progresswin.textbox.append(progress_msg)
1272 | QApplication.processEvents()
1273 |
1274 | return self
1275 |
1276 | def orientJoint(self, oj = True, ik = False):
1277 | if oj:
1278 | self.joint.orientJoint('yzx', sao = 'zup')
1279 | if ik:
1280 | self.jointIK.orientJoint('yzx', sao = 'zup')
1281 | self.jointFK.orientJoint('yzx', sao = 'zup')
1282 |
1283 | parentConstraint(self.jointIK, self.joint, mo = False)
1284 | parentConstraint(self.jointFK, self.joint, mo = False)
1285 | elif not ik:
1286 | pass
1287 | elif not oj:
1288 | self.joint.orientJoint('none')
1289 | if ik:
1290 | self.jointIK.orientJoint('none')
1291 | self.jointFK.orientJoint('none')
1292 |
1293 | parentConstraint(self.jointIK, self.joint, mo = False)
1294 | parentConstraint(self.jointFK, self.joint, mo = False)
1295 | elif not ik:
1296 | pass
1297 |
1298 | progress_msg = "Creating Joints... (" + progressNum(prognum) + "%) " + self.name
1299 | print(progress_msg)
1300 | progresswin.textbox.append(progress_msg)
1301 | QApplication.processEvents()
1302 |
1303 | def createControl(self, r = 2, nr = "Y", fk = False):
1304 | if fk:
1305 | self.ctrl = MakeNurbCircle(r = r, n = self.name + "_fk_ctrl")
1306 | elif not fk:
1307 | self.ctrl = MakeNurbCircle(r = r, n = self.name + "_ctrl")
1308 |
1309 | #Set the circle plane normal
1310 | if(nr == "X" or nr == "x"):
1311 | self.ctrl.setNormalX(1)
1312 | self.ctrl.setNormalZ(0)
1313 | elif(nr == "Y" or nr == "y"):
1314 | self.ctrl.setNormalY(1)
1315 | self.ctrl.setNormalZ(0)
1316 | elif(nr == "Z" or nr == "z"):
1317 | self.ctrl.setNormalZ(1)
1318 |
1319 | #Create control offset for each control
1320 | if fk:
1321 | self.ctrl_offset = group(em = True, n = self.name + "_fk_ctrl_offset")
1322 | parent(self.name + "_fk_ctrl", self.name + "_fk_ctrl_offset")
1323 | elif not fk:
1324 | self.ctrl_offset = group(em = True, n = self.name + "_ctrl_offset")
1325 | parent(self.name + "_ctrl", self.name + "_ctrl_offset")
1326 |
1327 | if(self.name == "collarbone"):
1328 | xform(self.ctrl_offset, t = xform("neck_guide", q = True, t = True, ws = True), ro = xform("neck", q = True, ro = True, ws = True))
1329 | elif(self.name == "neck"):
1330 | self.neck_pos = xform("neck_guide", q = True, t = True, ws = True)
1331 | self.head_pos = xform("head_guide", q = True, t = True, ws = True)
1332 | xform(self.ctrl_offset, t = ((self.neck_pos[0], (self.neck_pos[1] + self.head_pos[1])/2, self.neck_pos[2])), ro = xform(self.name, q = True, ro = True, ws = True))
1333 | elif(self.name.endswith("_clavicle")):
1334 | self.clavicle_pos = xform(self.name + "_guide", q = True, t = True, ws = True)
1335 | self.clavicle_rot = xform(self.name + "_guide", q = True, ro = True, ws = True)
1336 | if(self.name.startswith("l_")):
1337 | self.shoulder_pos = xform("l_shoulder_guide", q = True, t = True, ws = True)
1338 | elif(self.name.startswith("r_")):
1339 | self.shoulder_pos = xform("r_shoulder_guide", q = True, t = True, ws = True)
1340 | xform(self.name + "_ctrl_offset", t = ((self.clavicle_pos[0] + self.shoulder_pos[0])/2, ((self.clavicle_pos[1] + self.shoulder_pos[1])/2) + 5, (self.clavicle_pos[2] + self.shoulder_pos[2])/2), ro = self.clavicle_rot, ws = True)
1341 | elif(self.name == "jaw"):
1342 | xform(self.ctrl_offset, t = xform("chin_guide", q = True, t = True, ws = True), ro = xform("chin", q = True, ro = True, ws = True))
1343 | xform(self.name + "_ctrl.rotatePivot", t = xform("jaw_guide", q = True, t = True, ws = True), a = True, ws = True)
1344 | else:
1345 | xform(self.ctrl_offset, t = xform(self.name + "_guide", q = True, t = True, ws = True), ro = xform(self.name, q = True, ro = True, ws = True))
1346 |
1347 | if fk:
1348 | if (self.parent.endswith("_clavicle") or self.parent == "hip"):
1349 | parent(self.name + "_fk_ctrl_offset", self.parent + "_ctrl")
1350 | else:
1351 | parent(self.name + "_fk_ctrl_offset", self.parent + "_fk_ctrl")
1352 | elif not fk:
1353 | if (self.parent.endswith("_wrist")):
1354 | if(self.name.startswith("l_")):
1355 | parent('l_hand_ctrl_offset', 'grp_ctrl')
1356 | parent(self.name + "_ctrl_offset", "l_hand_ctrl")
1357 | parentConstraint(self.parent, 'l_hand_ctrl', mo = True)
1358 | elif(self.name.startswith("r_")):
1359 | parent('r_hand_ctrl_offset', 'grp_ctrl')
1360 | parent(self.name + "_ctrl_offset", "r_hand_ctrl")
1361 | parentConstraint(self.parent, 'r_hand_ctrl', mo = True)
1362 | elif (self.parent.endswith("_ankle")):
1363 | parent(self.name + "_ctrl_offset", "grp_ctrl")
1364 | parentConstraint(self.parent, self.name + "_ctrl_offset", mo = True)
1365 | elif (self.name == "hip" or self.name == "waist"):
1366 | parent(self.name + "_ctrl_offset", "spine_ctrl")
1367 | elif (self.parent != ""):
1368 | parent(self.name + "_ctrl_offset", self.parent + "_ctrl")
1369 | else:
1370 | parent(self.name + "_ctrl_offset", "grp_ctrl")
1371 |
1372 | #Parent Constraint
1373 | if fk:
1374 | parentConstraint(self.name + "_fk_ctrl", self.name + "_fk", mo = False)
1375 | elif not fk:
1376 | if(self.name == "collarbone" or self.name.endswith("_clavicle")):
1377 | pass
1378 | elif(self.name == "jaw"):
1379 | parentConstraint(self.name + "_ctrl", self.name, mo = True)
1380 | elif(self.name.endswith("_eye")):
1381 | aimConstraint(self.name + "_ctrl", self.name, aim = (0, 1, 0), u = (0, 0, 1) , mo = True)
1382 | else:
1383 | parentConstraint(self.name + "_ctrl", self.name, mo = False)
1384 |
1385 | progress_msg = "Creating Controllers... (" + progressNum(prognum) + "%) " + self.name + "_ctrl"
1386 | print(progress_msg)
1387 | progresswin.textbox.append(progress_msg)
1388 | QApplication.processEvents()
1389 |
1390 | def createIKControl(self, sj, ee, mj, rev = False):
1391 | #Get start joint and end effector position and rotation
1392 | self.sj_pos = xform(sj, q = True, t = True, ws = True)
1393 | self.ee_pos = xform(ee, q = True, t = True, ws = True)
1394 | self.ee_rot = xform(mj, q = True, ro = True, ws = True)
1395 | #Create IK Control Circle
1396 | self.IKctrl = MakeNurbCircle(r = 10, n = self.name + "_ik_ctrl")
1397 | self.IKctrl_offset = group(n = self.name + "_ik_ctrl_offset", em = True)
1398 | self.IKctrl.setNormalY(1)
1399 | self.IKctrl.setNormalZ(0)
1400 | parent(self.name + "_ik_ctrl", self.name + "_ik_ctrl_offset")
1401 | xform(self.name + "_ik_ctrl_offset", t = self.ee_pos, ro = self.ee_rot, ws = True)
1402 | parent(self.name + "_ik_ctrl_offset", "grp_ctrl")
1403 | orientConstraint(self.name + "_ik_ctrl", ee + "_ik")
1404 | #Create IK Handle
1405 | self.ikhandle = ikHandle(n = self.name + "_ikHandle", sj = sj + "_ik", ee = ee + "_ik")
1406 | parent(self.name + "_ikHandle", self.name + "_ik_ctrl")
1407 | #Create IK Pole
1408 | self.ikpole = MakeNurbSphere(r = 3, n = self.name + "_ikpole_ctrl")
1409 | rename('makeNurbSphere1', self.name + "_ikpole_ctrlInput")
1410 | setAttr(self.name + '_ikpole_ctrlInput.sections', 4)
1411 | setAttr(self.name + '_ikpole_ctrlInput.spans', 2)
1412 | setAttr(self.name + '_ikpole_ctrl.overrideEnabled', 1)
1413 | setAttr(self.name + '_ikpole_ctrl.overrideShading', 0)
1414 | setAttr(self.name + '_ikpole_ctrl.overrideTexturing', 0)
1415 | setAttr(self.name + '_ikpole_ctrl.overridePlayback', 0)
1416 |
1417 | self.ikpole_offset = group(n = self.name + "_ikpole_ctrl_offset", em = True)
1418 | parent(self.name + "_ikpole_ctrl", self.name + "_ikpole_ctrl_offset")
1419 | xform(self.name + "_ikpole_ctrl_offset", t = xform(mj, q = True, t = True, ws = True), ws = True)
1420 | if(self.name == "l_arm" or self.name == "r_arm"):
1421 | move(0, 0, -30, self.name + "_ikpole_ctrl_offset", ls = True, r = True)
1422 | elif(self.name == "l_leg" or self.name == "r_leg"):
1423 | move(0, 0, 30, self.name + "_ikpole_ctrl_offset", ls = True, r = True)
1424 | makeIdentity(self.name + "_ikpole_ctrl", a = True, t = True)
1425 | parent(self.name + "_ikpole_ctrl_offset", 'grp_ctrl')
1426 |
1427 | poleVectorConstraint(self.name + "_ikpole_ctrl", self.name + "_ikHandle")
1428 |
1429 | curve(p = [xform(mj, q = True, t = True, ws = True), xform(self.name + "_ikpole_ctrl", q = True, t = True, ws = True)], d = 1, ws = True, n = self.name + "_ikpole_ctrl_connector")
1430 | cluster(self.name + '_ikpole_ctrl_connector.cv[0]', n = self.name + "_ikpole_cluster")
1431 | cluster(self.name + '_ikpole_ctrl_connector.cv[1]', n = self.name + "_ikpole_ctrl_cluster")
1432 | parent(self.name + "_ikpole_clusterHandle", mj)
1433 | parent(self.name + "_ikpole_ctrl_clusterHandle", self.name + "_ikpole_ctrl")
1434 | setAttr(self.name + "_ikpole_ctrl_connector.overrideEnabled", 1)
1435 | setAttr(self.name + "_ikpole_ctrl_connector.overrideDisplayType", 2)
1436 | parent(self.name + "_ikpole_ctrl_connector", 'ikpole_ctrl_connector_offset')
1437 |
1438 | setAttr(self.name + "_ikpole_clusterHandle.visibility", 0)
1439 | setAttr(self.name + "_ikpole_ctrl_clusterHandle.visibility", 0)
1440 |
1441 | #IK FK switch
1442 | #Create IK FK switch
1443 | self.ikswitch = MakeNurbPlane(w = 10, d = 1, ax = (0, 0, 1), n = self.name + "_ikfk_switch_ctrl")
1444 | rename('makeNurbPlane1', self.name + "_ikfk_switch_ctrlInput")
1445 | setAttr (self.name + "_ikfk_switch_ctrlInput.width", 10)
1446 | setAttr (self.name + "_ikfk_switch_ctrl.overrideEnabled", 1)
1447 | setAttr(self.name + '_ikfk_switch_ctrl.overrideShading', 0)
1448 | setAttr(self.name + '_ikfk_switch_ctrl.overrideTexturing', 0)
1449 | setAttr(self.name + '_ikfk_switch_ctrl.overridePlayback', 0)
1450 | #Create IK FK switch Text
1451 | self.iktext = textCurves(text = "IK", f = "Lucida Sans Unicode", n = self.name + "_IK_lttr")
1452 | self.fktext = textCurves(text = "FK", f = "Lucida Sans Unicode", n = self.name + "_FK_lttr")
1453 | xform(self.name + "_IK_lttrShape", t = (xform(self.name + "_ikfk_switch_ctrl", q = True, t = True, ws = True)), ws = True, cp = True)
1454 | xform(self.name + "_FK_lttrShape", t = (xform(self.name + "_ikfk_switch_ctrl", q = True, t = True, ws = True)), ws = True, cp = True)
1455 | xform(self.name + "_IK_lttrShape", s = (7, 7, 7))
1456 | xform(self.name + "_FK_lttrShape", s = (7, 7, 7))
1457 | setAttr(self.name + "_IK_lttrShape.overrideEnabled", 1)
1458 | setAttr(self.name + "_FK_lttrShape.overrideEnabled", 1)
1459 | setAttr(self.name + "_IK_lttrShape.overrideDisplayType", 2)
1460 | setAttr(self.name + "_FK_lttrShape.overrideDisplayType", 2)
1461 |
1462 | parent(self.name + "_IK_lttrShape", self.name + "_ikfk_switch_ctrl")
1463 | parent(self.name + "_FK_lttrShape", self.name + "_ikfk_switch_ctrl")
1464 |
1465 | #Create ikfk switch offset
1466 | self.ikswitch_offset = group(n = self.name + "_ikfk_switch_ctrl_offset")
1467 | parent(self.name + "_ikfk_switch_ctrl_offset", w = True)
1468 | parent(self.name + "_ikfk_switch_ctrl", self.name + "_ikfk_switch_ctrl_offset")
1469 | xform(self.name + "_ikfk_switch_ctrl_offset", t = (xform(ee, q = True, t = True, ws = True)))
1470 | xform(self.name + "_ikfk_switch_ctrl_offset", t = (0, 10, -20), r = True)
1471 | parent(self.name + "_ikfk_switch_ctrl_offset", 'grp_ctrl')
1472 | pointConstraint(self.parent, self.name + "_ikfk_switch_ctrl_offset", mo = True)
1473 | #Add ik fk switch attribute
1474 | if(self.name == "l_arm" or self.name == "r_arm"):
1475 | addAttr(self.name + "_ikfk_switch_ctrl", ln = "IK_FK_switch", k = True, min = 0, max = 1, dv = 0)
1476 | elif(self.name == "l_leg" or self.name == "r_leg"):
1477 | addAttr(self.name + "_ikfk_switch_ctrl", ln = "IK_FK_switch", k = True, min = 0, max = 1, dv = 1)
1478 | #Connections
1479 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', sj + '_parentConstraint1.' + sj + '_ikW0', f = True)
1480 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', mj + '_parentConstraint1.' + mj + '_ikW0', f = True)
1481 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', ee + '_parentConstraint1.' + ee + '_ikW0', f = True)
1482 | shadingNode('reverse', n = self.name + '_ikfk_switch', au = True)
1483 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', self.name + '_ikfk_switch.inputX', f = True)
1484 | connectAttr(self.name + '_ikfk_switch.outputX', sj + '_parentConstraint1.' + sj + '_fkW1', f = True)
1485 | connectAttr(self.name + '_ikfk_switch.outputX', mj + '_parentConstraint1.' + mj + '_fkW1', f = True)
1486 | connectAttr(self.name + '_ikfk_switch.outputX', ee + '_parentConstraint1.' + ee + '_fkW1', f = True)
1487 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', self.name + '_ikpole_ctrl_offset.visibility', f = True)
1488 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', self.name + '_ik_ctrl_offset.visibility', f = True)
1489 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', self.name + '_ikpole_ctrl_connector.visibility', f = True)
1490 | connectAttr(self.name + '_ikfk_switch_ctrl.IK_FK_switch', self.name + '_IK_lttrShape.visibility', f = True)
1491 | connectAttr(self.name + '_ikfk_switch.outputX', self.name + '_FK_lttrShape.visibility', f = True)
1492 | connectAttr(self.name + '_ikfk_switch.outputX', sj + '_fk_ctrl_offset.visibility', f = True)
1493 |
1494 | progress_msg = "Creating IK Controls... (" + progressNum(prognum) + "%) " + self.name + "_ctrl"
1495 | print(progress_msg)
1496 | progresswin.textbox.append(progress_msg)
1497 | QApplication.processEvents()
1498 |
1499 | def createReverseControl(self, sj, ee, mj, bj):
1500 | parent(sj + "_rev", self.parent + "_ik_ctrl")
1501 | reroot(bj + "_rev")
1502 |
1503 | ikHandle(n = mj + '_ikHandle', sj = sj + '_ik', ee = mj + '_ik', sol = 'ikSCsolver')
1504 | ikHandle(n = ee + '_ikHandle', sj = mj + '_ik', ee = ee + '_ik', sol = 'ikSCsolver')
1505 | parent(mj + '_ikHandle', mj + '_rev')
1506 | parent(ee + '_ikHandle', ee + '_rev')
1507 | parent(self.parent + '_ikHandle', sj + '_rev')
1508 | #parent(bj + '_rev', self.parent + '_ik_ctrl')
1509 |
1510 | group(ee + '_ikHandle', n = self.name + "_toes_tap")
1511 | group(bj + '_rev', n = self.name + '_bank_inner')
1512 | group(self.name + '_bank_inner', n = self.name + '_bank_outer')
1513 |
1514 | inner_pos = xform(self.name + '_inner_guide', q = True, t = True, ws = True)
1515 | outer_pos = xform(self.name + '_outer_guide', q = True, t = True, ws = True)
1516 | ball_pos = xform(self.name + '_ball_guide', q = True, t = True, ws = True)
1517 | xform(ee + '_tap.rotatePivot', t = ball_pos, ws = True)
1518 | xform(self.name + '_bank_inner.rotatePivot', t = inner_pos, ws = True)
1519 | xform(self.name + '_bank_outer.rotatePivot', t = outer_pos, ws = True)
1520 |
1521 | select(self.parent + '_ikfk_switch_ctrl')
1522 | addAttr(ln = "Heel_Twist", k = True)
1523 | addAttr(ln = "Toes_Twist", k = True)
1524 | addAttr(ln = "Toe_Tap", k = True)
1525 | addAttr(ln = "Bank", k = True)
1526 | addAttr(ln = "Roll", k = True, min = -30, max = 30, dv = 0)
1527 |
1528 | connectAttr(self.parent + '_ikfk_switch_ctrl.Heel_Twist', bj + '_rev.rotateY')
1529 | connectAttr(self.parent + '_ikfk_switch_ctrl.Toes_Twist', ee + '_rev.rotateY')
1530 | connectAttr(self.parent + '_ikfk_switch_ctrl.Toe_Tap', ee + '_tap.rotateX')
1531 |
1532 | shadingNode('condition', n = self.name + '_bank_condition', au = True)
1533 | setAttr(self.name + '_bank_condition.operation', 2)
1534 | connectAttr(self.parent + '_ikfk_switch_ctrl.Bank', self.name + '_bank_condition.colorIfFalseG')
1535 | connectAttr(self.parent + '_ikfk_switch_ctrl.Bank', self.name + '_bank_condition.colorIfTrueR')
1536 | connectAttr(self.parent + '_ikfk_switch_ctrl.Bank', self.name + '_bank_condition.firstTerm')
1537 | connectAttr(self.name + '_bank_condition.outColorR', self.name + '_bank_inner.rotateZ')
1538 | connectAttr(self.name + '_bank_condition.outColorG', self.name + '_bank_outer.rotateZ')
1539 |
1540 | shadingNode('condition', au = True, n = bj + '_roll_condition')
1541 | shadingNode('condition', au = True, n = mj + '_roll_condition')
1542 | shadingNode('condition', au = True, n = ee + '_roll_condition')
1543 | shadingNode('multiplyDivide', au = True, n = self.name + '_roll_multi')
1544 | shadingNode('plusMinusAverage', au = True, n = self.name + '_roll_pma')
1545 | setAttr(bj + '_roll_condition.operation', 4)
1546 | setAttr(mj + '_roll_condition.operation', 2)
1547 | setAttr(ee + '_roll_condition.operation', 2)
1548 | setAttr(ee + '_roll_condition.secondTerm', 10)
1549 | setAttr(self.name + '_roll_multi.input2X', 1)
1550 | setAttr(self.name + '_roll_multi.input2Y', 1)
1551 | setAttr(self.name + '_roll_multi.input2Z', 1)
1552 | setAttr(self.name + '_roll_pma.operation', 2)
1553 | setAttr(self.name + '_roll_pma.input1D[1]', 10)
1554 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', bj + '_roll_condition.colorIfTrueR')
1555 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', bj + '_roll_condition.firstTerm')
1556 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', mj + '_roll_condition.colorIfTrueR')
1557 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', mj + '_roll_condition.firstTerm')
1558 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', self.name + '_roll_pma.input1D[0]')
1559 | connectAttr(self.parent + '_ikfk_switch_ctrl.Roll', ee + '_roll_condition.firstTerm')
1560 | connectAttr(self.name + '_roll_pma.output1D', ee + '_roll_condition.colorIfTrueR')
1561 | connectAttr(bj + '_roll_condition.outColorR', self.name + '_roll_multi.input1X')
1562 | connectAttr(mj + '_roll_condition.outColorR', self.name + '_roll_multi.input1Y')
1563 | connectAttr(ee + '_roll_condition.outColorR', self.name + '_roll_multi.input1Z')
1564 | connectAttr(self.name + '_roll_multi.outputX', bj + '_rev.rotateZ')
1565 | connectAttr(self.name + '_roll_multi.outputY', mj + '_rev.rotateZ')
1566 | connectAttr(self.name + '_roll_multi.outputZ', ee + '_rev.rotateZ')
1567 |
1568 | progress_msg = "Creating Reverse Foot Controls... (" + progressNum(prognum) + "%) " + self.name + "_ctrl"
1569 | print(progress_msg)
1570 | progresswin.textbox.append(progress_msg)
1571 | QApplication.processEvents()
1572 |
1573 | # SPINE #
1574 | hip = Rig("hip", t = (0, 106.85, 2.652))
1575 | waist = Rig("waist", t = (0, 119.473, 5), p = "hip")
1576 | chest = Rig("chest", t = (0, 131.713, 5), p = "waist")
1577 | collarbone = Rig("collarbone", t = (0, 153.569, 1.886), p = "chest")
1578 |
1579 | # HEAD #
1580 | neck = Rig("neck", t = (0, 156.891, 1.886), p = "collarbone")
1581 | head = Rig("head", t = (0, 170.281, 3.69), p = "neck")
1582 | jaw = Rig("jaw", t = (0, 170.281, 7.175), p = "head")
1583 | chin = Rig("chin", t = (0, 163.448, 15.213), p = "jaw")
1584 | l_eye = Rig("l_eye", t = (3.125, 175.471, 12.969), p = "head")
1585 | r_eye = Rig("r_eye", t = (-3.125, 175.471, 12.969), p = "head")
1586 |
1587 | # ARMS #
1588 | l_clavicle = Rig("l_clavicle", t = (3.107, 152.95, 4.807), p = "collarbone")
1589 | l_shoulder = Rig("l_shoulder", t = (19, 150.912, 0), p = "l_clavicle")
1590 | l_elbow = Rig("l_elbow", t = (31, 125, 0), p = "l_shoulder")
1591 | l_wrist = Rig("l_wrist", t = (45, 103, 6), p = "l_elbow")
1592 | r_clavicle = Rig("r_clavicle", t = (-3.107, 152.95, 4.807), p = "collarbone")
1593 | r_shoulder = Rig("r_shoulder", t = (-19, 150.912, 0), p = "r_clavicle")
1594 | r_elbow = Rig("r_elbow", t = (-31, 125, 0), p = "r_shoulder")
1595 | r_wrist = Rig("r_wrist", t = (-45, 103, 6), p = "r_elbow")
1596 |
1597 | l_arm = Rig("l_arm", p = "l_wrist")
1598 | r_arm = Rig("r_arm", p = "r_wrist")
1599 |
1600 | # FINGERS #
1601 | #THUMB#
1602 | l_finger_thumb_metacarpal = Rig("l_finger_thumb_metacarpal", t = (45.382, 101.311, 7.675), p = "l_wrist")
1603 | l_finger_thumb_proximal = Rig("l_finger_thumb_proximal", t = (43.059, 97.395, 11.934), p = "l_finger_thumb_metacarpal")
1604 | l_finger_thumb_distal = Rig("l_finger_thumb_distal", t = (41.629, 94.984, 13.81), p = "l_finger_thumb_proximal")
1605 | l_finger_thumb_tip = Rig("l_finger_thumb_tip", t = (40.527, 92.962, 15.23), p = "l_finger_thumb_distal")
1606 | r_finger_thumb_metacarpal = Rig("r_finger_thumb_metacarpal", t = (-45.382, 101.311, 7.675), p = "r_wrist")
1607 | r_finger_thumb_proximal = Rig("r_finger_thumb_proximal", t = (-43.059, 97.395, 11.934), p = "r_finger_thumb_metacarpal")
1608 | r_finger_thumb_distal = Rig("r_finger_thumb_distal", t = (-41.629, 94.984, 13.81), p = "r_finger_thumb_proximal")
1609 | r_finger_thumb_tip = Rig("r_finger_thumb_tip", t = (-40.527, 92.962, 15.23), p = "r_finger_thumb_distal")
1610 | #INDEX#
1611 | l_finger_index_metacarpal = Rig("l_finger_index_metacarpal", t = (45.382, 101.311, 7.675), p = "l_wrist")
1612 | l_finger_index_proximal = Rig("l_finger_index_proximal", t = (47.514, 93.318, 13.052), p = "l_finger_index_metacarpal")
1613 | l_finger_index_middlep = Rig("l_finger_index_middlep", t = (48.218, 90.448, 14.448), p = "l_finger_index_proximal")
1614 | l_finger_index_distal = Rig("l_finger_index_distal", t = (48.629, 87.937, 15.367), p = "l_finger_index_middlep")
1615 | l_finger_index_tip = Rig("l_finger_index_tip", t = (49, 86, 16), p = "l_finger_index_distal")
1616 | r_finger_index_metacarpal = Rig("r_finger_index_metacarpal", t = (-45.382, 101.311, 7.675), p = "r_wrist")
1617 | r_finger_index_proximal = Rig("r_finger_index_proximal", t = (-47.514, 93.318, 13.052), p = "r_finger_index_metacarpal")
1618 | r_finger_index_middlep = Rig("r_finger_index_middlep", t = (-48.218, 90.448, 14.448), p = "r_finger_index_proximal")
1619 | r_finger_index_distal = Rig("r_finger_index_distal", t = (-48.629, 87.937, 15.367), p = "r_finger_index_middlep")
1620 | r_finger_index_tip = Rig("r_finger_index_tip", t = (-49, 86, 16), p = "r_finger_index_distal")
1621 | #MIDDLE#
1622 | l_finger_middlef_metacarpal = Rig("l_finger_middlef_metacarpal", t = (46, 101.217, 6.603), p = "l_wrist")
1623 | l_finger_middlef_proximal = Rig("l_finger_middlef_proximal", t = (49, 92.83, 10.919), p = "l_finger_middlef_metacarpal")
1624 | l_finger_middlef_middlep = Rig("l_finger_middlef_middlep", t = (49.284, 89.204, 11.585), p = "l_finger_middlef_proximal")
1625 | l_finger_middlef_distal = Rig("l_finger_middlef_distal", t = (48.689, 86, 12), p = "l_finger_middlef_middlep")
1626 | l_finger_middlef_tip = Rig("l_finger_middlef_tip", t = (48.271, 84.081, 12.244), p = "l_finger_middlef_distal")
1627 | r_finger_middlef_metacarpal = Rig("r_finger_middlef_metacarpal", t = (-46, 101.217, 6.603), p = "r_wrist")
1628 | r_finger_middlef_proximal = Rig("r_finger_middlef_proximal", t = (-49, 92.83, 10.919), p = "r_finger_middlef_metacarpal")
1629 | r_finger_middlef_middlep = Rig("r_finger_middlef_middlep", t = (-49.284, 89.204, 11.585), p = "r_finger_middlef_proximal")
1630 | r_finger_middlef_distal = Rig("r_finger_middlef_distal", t = (-48.689, 86, 12), p = "r_finger_middlef_middlep")
1631 | r_finger_middlef_tip = Rig("r_finger_middlef_tip", t = (-48.271, 84.081, 12.244), p = "r_finger_middlef_distal")
1632 | #RING#
1633 | l_finger_ring_metacarpal = Rig("l_finger_ring_metacarpal", t = (46, 100.783, 5.433), p = "l_wrist")
1634 | l_finger_ring_proximal = Rig("l_finger_ring_proximal", t = (49.763, 93.155, 8.511), p = "l_finger_ring_metacarpal")
1635 | l_finger_ring_middlep = Rig("l_finger_ring_middlep", t = (49.312, 89.47, 8.796), p = "l_finger_ring_proximal")
1636 | l_finger_ring_distal = Rig("l_finger_ring_distal", t = (48.491, 86.937, 8.919), p = "l_finger_ring_middlep")
1637 | l_finger_ring_tip = Rig("l_finger_ring_tip", t = (48, 84.47, 9.081), p = "l_finger_ring_distal")
1638 | r_finger_ring_metacarpal = Rig("r_finger_ring_metacarpal", t = (-46, 100.783, 5.433), p = "r_wrist")
1639 | r_finger_ring_proximal = Rig("r_finger_ring_proximal", t = (-49.763, 93.155, 8.511), p = "r_finger_ring_metacarpal")
1640 | r_finger_ring_middlep = Rig("r_finger_ring_middlep", t = (-49.312, 89.47, 8.796), p = "r_finger_ring_proximal")
1641 | r_finger_ring_distal = Rig("r_finger_ring_distal", t = (-48.491, 86.937, 8.919), p = "r_finger_ring_middlep")
1642 | r_finger_ring_tip = Rig("r_finger_ring_tip", t = (-48, 84.47, 9.081), p = "r_finger_ring_distal")
1643 | #PINKY#
1644 | l_finger_pinky_metacarpal = Rig("l_finger_pinky_metacarpal", t = (46, 100.686, 4.506), p = "l_wrist")
1645 | l_finger_pinky_proximal = Rig("l_finger_pinky_proximal", t = (50, 93.654, 6.103), p = "l_finger_pinky_metacarpal")
1646 | l_finger_pinky_middlep = Rig("l_finger_pinky_middlep", t = (49.827, 90.743, 5.949), p = "l_finger_pinky_proximal")
1647 | l_finger_pinky_distal = Rig("l_finger_pinky_distal", t = (49, 89.103, 5.64), p = "l_finger_pinky_middlep")
1648 | l_finger_pinky_tip = Rig("l_finger_pinky_tip", t = (48, 87.794, 5.077), p = "l_finger_pinky_distal")
1649 | r_finger_pinky_metacarpal = Rig("r_finger_pinky_metacarpal", t = (-46, 100.686, 4.506), p = "r_wrist")
1650 | r_finger_pinky_proximal = Rig("r_finger_pinky_proximal", t = (-50, 93.654, 6.103), p = "r_finger_pinky_metacarpal")
1651 | r_finger_pinky_middlep = Rig("r_finger_pinky_middlep", t = (-49.827, 90.743, 5.949), p = "r_finger_pinky_proximal")
1652 | r_finger_pinky_distal = Rig("r_finger_pinky_distal", t = (-49, 89.103, 5.64), p = "r_finger_pinky_middlep")
1653 | r_finger_pinky_tip = Rig("r_finger_pinky_tip", t = (-48, 87.794, 5.077), p = "r_finger_pinky_distal")
1654 |
1655 | # LEGS #
1656 | l_thigh = Rig("l_thigh", t = (8.782, 101.69, 1.97), p = "hip")
1657 | l_knee = Rig("l_knee", t = (15, 54, 3), p = "l_thigh")
1658 | l_ankle = Rig("l_ankle", t = (18.901, 10, 0), p = "l_knee")
1659 | l_foot_ball = Rig("l_foot_ball", t = (21.058, 3.639, 14.117), p = "l_ankle")
1660 | l_foot_toes = Rig("l_foot_toes", t = (22.253, 3.639, 21.534), p = "l_foot_ball")
1661 | l_foot_heel = Rig("l_foot_heel", t = (18.406, 3.639, -4.419), p = "l_foot_toes")
1662 | l_foot_inner = Rig("l_foot_inner", t = (15.229, 3.639, 7.702), p = "l_foot_heel")
1663 | l_foot_outer = Rig("l_foot_outer", t = (25.864, 3.639, 7.702), p = "l_foot_heel")
1664 | r_thigh = Rig("r_thigh", t = (-8.782, 101.69, 1.97), p = "hip")
1665 | r_knee = Rig("r_knee", t = (-15, 54, 3), p = "r_thigh")
1666 | r_ankle = Rig("r_ankle", t = (-18.901, 10, 0), p = "r_knee")
1667 | r_foot_ball = Rig("r_foot_ball", t = (-21.058, 3.639, 14.117), p = "r_ankle")
1668 | r_foot_toes = Rig("r_foot_toes", t = (-22.253, 3.639, 21.534), p = "r_foot_ball")
1669 | r_foot_heel = Rig("r_foot_heel", t = (-18.406, 3.639, -4.419), p = "r_foot_toes")
1670 | r_foot_inner = Rig("r_foot_inner", t = (-15.229, 3.639, 7.702), p = "r_foot_heel")
1671 | r_foot_outer = Rig("r_foot_outer", t = (-25.864, 3.639, 7.702), p = "r_foot_heel")
1672 |
1673 | l_leg = Rig("l_leg", p = "l_ankle")
1674 | r_leg = Rig("r_leg", p = "r_ankle")
1675 |
1676 | l_foot = Rig("l_foot", p = "l_leg")
1677 | r_foot = Rig("r_foot", p = "r_leg")
--------------------------------------------------------------------------------
/scripts/userSetup.py:
--------------------------------------------------------------------------------
1 | import pymel.core as pm
2 | pm.evalDeferred('import menu')
--------------------------------------------------------------------------------