85
103
The main armature should be selected and active before this is called.
88
self.deform_rig.generate()
106
hose_controls = self.deform_rig.generate()
89
107
fk_controls = self.fk_rig.generate()
90
108
ik_controls = self.ik_rig.generate()
91
return [script % (fk_controls[0], fk_controls[1], fk_controls[2], fk_controls[3], ik_controls[0], ik_controls[1], ik_controls[2], ik_controls[3], ik_controls[4], ik_controls[5])]
94
def add_parameters(self, group):
95
""" Add the parameters of this rig type to the
96
RigifyParameters PropertyGroup
99
items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
100
group.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
102
group.bend_hint = bpy.props.BoolProperty(name="Bend Hint", default=True, description="Give IK chain a hint about which way to bend (useful for perfectly straight chains)")
104
group.separate_ik_layers = bpy.props.BoolProperty(name="Separate IK Control Layers:", default=False, description="Enable putting the ik controls on a separate layer from the fk controls")
105
group.ik_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the ik controls to be on")
107
group.use_thigh_twist = bpy.props.BoolProperty(name="Thigh Twist", default=True, description="Generate the dual-bone twist setup for the thigh")
108
group.use_shin_twist = bpy.props.BoolProperty(name="Shin Twist", default=True, description="Generate the dual-bone twist setup for the shin")
111
def parameters_ui(self, layout, obj, bone):
112
""" Create the ui for the rig parameters.
115
params = obj.pose.bones[bone].rigify_parameters[0]
118
r.prop(params, "separate_ik_layers")
121
r.active = params.separate_ik_layers
123
col = r.column(align=True)
124
row = col.row(align=True)
125
row.prop(params, "ik_layers", index=0, toggle=True, text="")
126
row.prop(params, "ik_layers", index=1, toggle=True, text="")
127
row.prop(params, "ik_layers", index=2, toggle=True, text="")
128
row.prop(params, "ik_layers", index=3, toggle=True, text="")
129
row.prop(params, "ik_layers", index=4, toggle=True, text="")
130
row.prop(params, "ik_layers", index=5, toggle=True, text="")
131
row.prop(params, "ik_layers", index=6, toggle=True, text="")
132
row.prop(params, "ik_layers", index=7, toggle=True, text="")
133
row = col.row(align=True)
134
row.prop(params, "ik_layers", index=16, toggle=True, text="")
135
row.prop(params, "ik_layers", index=17, toggle=True, text="")
136
row.prop(params, "ik_layers", index=18, toggle=True, text="")
137
row.prop(params, "ik_layers", index=19, toggle=True, text="")
138
row.prop(params, "ik_layers", index=20, toggle=True, text="")
139
row.prop(params, "ik_layers", index=21, toggle=True, text="")
140
row.prop(params, "ik_layers", index=22, toggle=True, text="")
141
row.prop(params, "ik_layers", index=23, toggle=True, text="")
143
col = r.column(align=True)
144
row = col.row(align=True)
145
row.prop(params, "ik_layers", index=8, toggle=True, text="")
146
row.prop(params, "ik_layers", index=9, toggle=True, text="")
147
row.prop(params, "ik_layers", index=10, toggle=True, text="")
148
row.prop(params, "ik_layers", index=11, toggle=True, text="")
149
row.prop(params, "ik_layers", index=12, toggle=True, text="")
150
row.prop(params, "ik_layers", index=13, toggle=True, text="")
151
row.prop(params, "ik_layers", index=14, toggle=True, text="")
152
row.prop(params, "ik_layers", index=15, toggle=True, text="")
153
row = col.row(align=True)
154
row.prop(params, "ik_layers", index=24, toggle=True, text="")
155
row.prop(params, "ik_layers", index=25, toggle=True, text="")
156
row.prop(params, "ik_layers", index=26, toggle=True, text="")
157
row.prop(params, "ik_layers", index=27, toggle=True, text="")
158
row.prop(params, "ik_layers", index=28, toggle=True, text="")
159
row.prop(params, "ik_layers", index=29, toggle=True, text="")
160
row.prop(params, "ik_layers", index=30, toggle=True, text="")
161
row.prop(params, "ik_layers", index=31, toggle=True, text="")
164
r.label(text="Knee rotation axis:")
165
r.prop(params, "primary_rotation_axis", text="")
168
r.prop(params, "bend_hint")
170
col = layout.column()
171
col.prop(params, "use_thigh_twist")
172
col.prop(params, "use_shin_twist")
175
def create_sample(self, obj):
176
# generated by rigify.utils.write_meta_rig
177
bpy.ops.object.mode_set(mode='EDIT')
182
bone = arm.edit_bones.new('thigh')
183
bone.head[:] = -0.0000, 0.0000, 1.0000
184
bone.tail[:] = -0.0000, -0.0500, 0.5000
186
bone.use_connect = False
187
bones['thigh'] = bone.name
188
bone = arm.edit_bones.new('shin')
189
bone.head[:] = -0.0000, -0.0500, 0.5000
190
bone.tail[:] = -0.0000, 0.0000, 0.1000
192
bone.use_connect = True
193
bone.parent = arm.edit_bones[bones['thigh']]
194
bones['shin'] = bone.name
195
bone = arm.edit_bones.new('foot')
196
bone.head[:] = -0.0000, 0.0000, 0.1000
197
bone.tail[:] = 0.0000, -0.1200, 0.0300
199
bone.use_connect = True
200
bone.parent = arm.edit_bones[bones['shin']]
201
bones['foot'] = bone.name
202
bone = arm.edit_bones.new('heel')
203
bone.head[:] = -0.0000, 0.0000, 0.1000
204
bone.tail[:] = -0.0000, 0.0600, 0.0000
206
bone.use_connect = True
207
bone.parent = arm.edit_bones[bones['shin']]
208
bones['heel'] = bone.name
209
bone = arm.edit_bones.new('heel.02')
210
bone.head[:] = -0.0500, -0.0200, 0.0000
211
bone.tail[:] = 0.0500, -0.0200, 0.0000
213
bone.use_connect = False
214
bone.parent = arm.edit_bones[bones['heel']]
215
bones['heel.02'] = bone.name
216
bone = arm.edit_bones.new('toe')
217
bone.head[:] = 0.0000, -0.1200, 0.0300
218
bone.tail[:] = 0.0000, -0.2000, 0.0300
220
bone.use_connect = True
221
bone.parent = arm.edit_bones[bones['foot']]
222
bones['toe'] = bone.name
224
bpy.ops.object.mode_set(mode='OBJECT')
225
pbone = obj.pose.bones[bones['thigh']]
226
pbone.rigify_type = 'biped.leg'
227
pbone.lock_location = (True, True, True)
228
pbone.lock_rotation = (False, False, False)
229
pbone.lock_rotation_w = False
230
pbone.lock_scale = (False, False, False)
231
pbone.rotation_mode = 'QUATERNION'
232
pbone.rigify_parameters.add()
233
pbone = obj.pose.bones[bones['shin']]
234
pbone.rigify_type = ''
235
pbone.lock_location = (False, False, False)
236
pbone.lock_rotation = (False, False, False)
237
pbone.lock_rotation_w = False
238
pbone.lock_scale = (False, False, False)
239
pbone.rotation_mode = 'QUATERNION'
240
pbone = obj.pose.bones[bones['foot']]
241
pbone.rigify_type = ''
242
pbone.lock_location = (False, False, False)
243
pbone.lock_rotation = (False, False, False)
244
pbone.lock_rotation_w = False
245
pbone.lock_scale = (False, False, False)
246
pbone.rotation_mode = 'QUATERNION'
247
pbone = obj.pose.bones[bones['heel']]
248
pbone.rigify_type = ''
249
pbone.lock_location = (False, False, False)
250
pbone.lock_rotation = (False, False, False)
251
pbone.lock_rotation_w = False
252
pbone.lock_scale = (False, False, False)
253
pbone.rotation_mode = 'QUATERNION'
254
pbone = obj.pose.bones[bones['toe']]
255
pbone.rigify_type = ''
256
pbone.lock_location = (False, False, False)
257
pbone.lock_rotation = (False, False, False)
258
pbone.lock_rotation_w = False
259
pbone.lock_scale = (False, False, False)
260
pbone.rotation_mode = 'QUATERNION'
262
bpy.ops.object.mode_set(mode='EDIT')
263
for bone in arm.edit_bones:
265
bone.select_head = False
266
bone.select_tail = False
268
bone = arm.edit_bones[bones[b]]
270
bone.select_head = True
271
bone.select_tail = True
272
arm.edit_bones.active = bone
109
ui_script = script % (fk_controls[0], fk_controls[1], fk_controls[2], fk_controls[3], ik_controls[0], ik_controls[1], ik_controls[2], ik_controls[3], ik_controls[4], ik_controls[5])
110
if self.params.use_complex_leg:
111
ui_script += hose_script % (hose_controls[0], hose_controls[1], hose_controls[2])
112
ui_script += end_script
116
def add_parameters(params):
117
""" Add the parameters of this rig type to the
118
RigifyParameters PropertyGroup
121
params.use_complex_leg = bpy.props.BoolProperty(name="Complex Leg Rig", default=True, description="Generate the full, complex leg rig with twist bones and rubber-hose controls")
122
params.bend_hint = bpy.props.BoolProperty(name="Bend Hint", default=True, description="Give IK chain a hint about which way to bend (useful for perfectly straight chains)")
124
items = [('X', 'X', ''), ('Y', 'Y', ''), ('Z', 'Z', ''), ('-X', '-X', ''), ('-Y', '-Y', ''), ('-Z', '-Z', '')]
125
params.primary_rotation_axis = bpy.props.EnumProperty(items=items, name="Primary Rotation Axis", default='X')
127
params.knee_base_name = bpy.props.StringProperty(name="Knee Name", default="knee", description="Base name for the generated knee-related controls")
129
params.separate_ik_layers = bpy.props.BoolProperty(name="Separate IK Control Layers:", default=False, description="Enable putting the ik controls on a separate layer from the fk controls")
130
params.ik_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the ik controls to be on")
132
params.separate_hose_layers = bpy.props.BoolProperty(name="Separate Rubber-hose Control Layers:", default=False, description="Enable putting the rubber-hose controls on a separate layer from the other controls")
133
params.hose_layers = bpy.props.BoolVectorProperty(size=32, description="Layers for the rubber-hose controls to be on")
136
def parameters_ui(layout, params):
137
""" Create the ui for the rig parameters.
140
col = layout.column()
141
col.prop(params, "use_complex_leg")
144
r.label(text="Knee rotation axis:")
145
r.prop(params, "primary_rotation_axis", text="")
148
r.prop(params, "knee_base_name")
151
r.prop(params, "bend_hint")
154
r.prop(params, "separate_ik_layers")
157
r.active = params.separate_ik_layers
159
col = r.column(align=True)
160
row = col.row(align=True)
161
row.prop(params, "ik_layers", index=0, toggle=True, text="")
162
row.prop(params, "ik_layers", index=1, toggle=True, text="")
163
row.prop(params, "ik_layers", index=2, toggle=True, text="")
164
row.prop(params, "ik_layers", index=3, toggle=True, text="")
165
row.prop(params, "ik_layers", index=4, toggle=True, text="")
166
row.prop(params, "ik_layers", index=5, toggle=True, text="")
167
row.prop(params, "ik_layers", index=6, toggle=True, text="")
168
row.prop(params, "ik_layers", index=7, toggle=True, text="")
169
row = col.row(align=True)
170
row.prop(params, "ik_layers", index=16, toggle=True, text="")
171
row.prop(params, "ik_layers", index=17, toggle=True, text="")
172
row.prop(params, "ik_layers", index=18, toggle=True, text="")
173
row.prop(params, "ik_layers", index=19, toggle=True, text="")
174
row.prop(params, "ik_layers", index=20, toggle=True, text="")
175
row.prop(params, "ik_layers", index=21, toggle=True, text="")
176
row.prop(params, "ik_layers", index=22, toggle=True, text="")
177
row.prop(params, "ik_layers", index=23, toggle=True, text="")
179
col = r.column(align=True)
180
row = col.row(align=True)
181
row.prop(params, "ik_layers", index=8, toggle=True, text="")
182
row.prop(params, "ik_layers", index=9, toggle=True, text="")
183
row.prop(params, "ik_layers", index=10, toggle=True, text="")
184
row.prop(params, "ik_layers", index=11, toggle=True, text="")
185
row.prop(params, "ik_layers", index=12, toggle=True, text="")
186
row.prop(params, "ik_layers", index=13, toggle=True, text="")
187
row.prop(params, "ik_layers", index=14, toggle=True, text="")
188
row.prop(params, "ik_layers", index=15, toggle=True, text="")
189
row = col.row(align=True)
190
row.prop(params, "ik_layers", index=24, toggle=True, text="")
191
row.prop(params, "ik_layers", index=25, toggle=True, text="")
192
row.prop(params, "ik_layers", index=26, toggle=True, text="")
193
row.prop(params, "ik_layers", index=27, toggle=True, text="")
194
row.prop(params, "ik_layers", index=28, toggle=True, text="")
195
row.prop(params, "ik_layers", index=29, toggle=True, text="")
196
row.prop(params, "ik_layers", index=30, toggle=True, text="")
197
row.prop(params, "ik_layers", index=31, toggle=True, text="")
199
if params.use_complex_leg:
201
r.prop(params, "separate_hose_layers")
204
r.active = params.separate_hose_layers
206
col = r.column(align=True)
207
row = col.row(align=True)
208
row.prop(params, "hose_layers", index=0, toggle=True, text="")
209
row.prop(params, "hose_layers", index=1, toggle=True, text="")
210
row.prop(params, "hose_layers", index=2, toggle=True, text="")
211
row.prop(params, "hose_layers", index=3, toggle=True, text="")
212
row.prop(params, "hose_layers", index=4, toggle=True, text="")
213
row.prop(params, "hose_layers", index=5, toggle=True, text="")
214
row.prop(params, "hose_layers", index=6, toggle=True, text="")
215
row.prop(params, "hose_layers", index=7, toggle=True, text="")
216
row = col.row(align=True)
217
row.prop(params, "hose_layers", index=16, toggle=True, text="")
218
row.prop(params, "hose_layers", index=17, toggle=True, text="")
219
row.prop(params, "hose_layers", index=18, toggle=True, text="")
220
row.prop(params, "hose_layers", index=19, toggle=True, text="")
221
row.prop(params, "hose_layers", index=20, toggle=True, text="")
222
row.prop(params, "hose_layers", index=21, toggle=True, text="")
223
row.prop(params, "hose_layers", index=22, toggle=True, text="")
224
row.prop(params, "hose_layers", index=23, toggle=True, text="")
226
col = r.column(align=True)
227
row = col.row(align=True)
228
row.prop(params, "hose_layers", index=8, toggle=True, text="")
229
row.prop(params, "hose_layers", index=9, toggle=True, text="")
230
row.prop(params, "hose_layers", index=10, toggle=True, text="")
231
row.prop(params, "hose_layers", index=11, toggle=True, text="")
232
row.prop(params, "hose_layers", index=12, toggle=True, text="")
233
row.prop(params, "hose_layers", index=13, toggle=True, text="")
234
row.prop(params, "hose_layers", index=14, toggle=True, text="")
235
row.prop(params, "hose_layers", index=15, toggle=True, text="")
236
row = col.row(align=True)
237
row.prop(params, "hose_layers", index=24, toggle=True, text="")
238
row.prop(params, "hose_layers", index=25, toggle=True, text="")
239
row.prop(params, "hose_layers", index=26, toggle=True, text="")
240
row.prop(params, "hose_layers", index=27, toggle=True, text="")
241
row.prop(params, "hose_layers", index=28, toggle=True, text="")
242
row.prop(params, "hose_layers", index=29, toggle=True, text="")
243
row.prop(params, "hose_layers", index=30, toggle=True, text="")
244
row.prop(params, "hose_layers", index=31, toggle=True, text="")
247
def create_sample(obj):
248
# generated by rigify.utils.write_meta_rig
249
bpy.ops.object.mode_set(mode='EDIT')
254
bone = arm.edit_bones.new('thigh')
255
bone.head[:] = -0.0000, 0.0000, 1.0000
256
bone.tail[:] = -0.0000, -0.0500, 0.5000
258
bone.use_connect = False
259
bones['thigh'] = bone.name
260
bone = arm.edit_bones.new('shin')
261
bone.head[:] = -0.0000, -0.0500, 0.5000
262
bone.tail[:] = -0.0000, 0.0000, 0.1000
264
bone.use_connect = True
265
bone.parent = arm.edit_bones[bones['thigh']]
266
bones['shin'] = bone.name
267
bone = arm.edit_bones.new('foot')
268
bone.head[:] = -0.0000, 0.0000, 0.1000
269
bone.tail[:] = 0.0000, -0.1200, 0.0300
271
bone.use_connect = True
272
bone.parent = arm.edit_bones[bones['shin']]
273
bones['foot'] = bone.name
274
bone = arm.edit_bones.new('heel')
275
bone.head[:] = -0.0000, 0.0000, 0.1000
276
bone.tail[:] = -0.0000, 0.0600, 0.0000
278
bone.use_connect = True
279
bone.parent = arm.edit_bones[bones['shin']]
280
bones['heel'] = bone.name
281
bone = arm.edit_bones.new('heel.02')
282
bone.head[:] = -0.0500, -0.0200, 0.0000
283
bone.tail[:] = 0.0500, -0.0200, 0.0000
285
bone.use_connect = False
286
bone.parent = arm.edit_bones[bones['heel']]
287
bones['heel.02'] = bone.name
288
bone = arm.edit_bones.new('toe')
289
bone.head[:] = 0.0000, -0.1200, 0.0300
290
bone.tail[:] = 0.0000, -0.2000, 0.0300
292
bone.use_connect = True
293
bone.parent = arm.edit_bones[bones['foot']]
294
bones['toe'] = bone.name
296
bpy.ops.object.mode_set(mode='OBJECT')
297
pbone = obj.pose.bones[bones['thigh']]
298
pbone.rigify_type = 'biped.leg'
299
pbone.lock_location = (True, True, True)
300
pbone.lock_rotation = (False, False, False)
301
pbone.lock_rotation_w = False
302
pbone.lock_scale = (False, False, False)
303
pbone.rotation_mode = 'QUATERNION'
304
pbone = obj.pose.bones[bones['shin']]
305
pbone.rigify_type = ''
306
pbone.lock_location = (False, False, False)
307
pbone.lock_rotation = (False, False, False)
308
pbone.lock_rotation_w = False
309
pbone.lock_scale = (False, False, False)
310
pbone.rotation_mode = 'QUATERNION'
311
pbone = obj.pose.bones[bones['foot']]
312
pbone.rigify_type = ''
313
pbone.lock_location = (False, False, False)
314
pbone.lock_rotation = (False, False, False)
315
pbone.lock_rotation_w = False
316
pbone.lock_scale = (False, False, False)
317
pbone.rotation_mode = 'QUATERNION'
318
pbone = obj.pose.bones[bones['heel']]
319
pbone.rigify_type = ''
320
pbone.lock_location = (False, False, False)
321
pbone.lock_rotation = (False, False, False)
322
pbone.lock_rotation_w = False
323
pbone.lock_scale = (False, False, False)
324
pbone.rotation_mode = 'QUATERNION'
325
pbone = obj.pose.bones[bones['toe']]
326
pbone.rigify_type = ''
327
pbone.lock_location = (False, False, False)
328
pbone.lock_rotation = (False, False, False)
329
pbone.lock_rotation_w = False
330
pbone.lock_scale = (False, False, False)
331
pbone.rotation_mode = 'QUATERNION'
333
bpy.ops.object.mode_set(mode='EDIT')
334
for bone in arm.edit_bones:
336
bone.select_head = False
337
bone.select_tail = False
339
bone = arm.edit_bones[bones[b]]
341
bone.select_head = True
342
bone.select_tail = True
343
arm.edit_bones.active = bone