~ubuntu-branches/ubuntu/trusty/blender/trusty

« back to all changes in this revision

Viewing changes to release/scripts/addons/rigify/rigs/biped/leg/__init__.py

  • Committer: Package Import Robot
  • Author(s): Jeremy Bicha
  • Date: 2013-03-06 12:08:47 UTC
  • mfrom: (1.5.1) (14.1.8 experimental)
  • Revision ID: package-import@ubuntu.com-20130306120847-frjfaryb2zrotwcg
Tags: 2.66a-1ubuntu1
* Resynchronize with Debian (LP: #1076930, #1089256, #1052743, #999024,
  #1122888, #1147084)
* debian/control:
  - Lower build-depends on libavcodec-dev since we're not
    doing the libav9 transition in Ubuntu yet

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
ik_leg = ["%s", "%s", "%s", "%s", "%s", "%s"]
32
32
if is_selected(fk_leg+ik_leg):
33
33
    layout.prop(pose_bones[ik_leg[2]], '["ikfk_switch"]', text="FK / IK (" + ik_leg[2] + ")", slider=True)
34
 
if is_selected(fk_leg):
35
 
    try:
36
 
        pose_bones[fk_leg[0]]["isolate"]
37
 
        layout.prop(pose_bones[fk_leg[0]], '["isolate"]', text="Isolate Rotation (" + fk_leg[0] + ")", slider=True)
38
 
    except KeyError:
39
 
        pass
40
 
if is_selected(fk_leg+ik_leg):
41
34
    p = layout.operator("pose.rigify_leg_fk2ik_" + rig_id, text="Snap FK->IK (" + fk_leg[0] + ")")
42
35
    p.thigh_fk = fk_leg[0]
43
36
    p.shin_fk  = fk_leg[1]
45
38
    p.mfoot_fk = fk_leg[3]
46
39
    p.thigh_ik = ik_leg[0]
47
40
    p.shin_ik  = ik_leg[1]
 
41
    p.foot_ik = ik_leg[2]
48
42
    p.mfoot_ik = ik_leg[5]
49
43
    p = layout.operator("pose.rigify_leg_ik2fk_" + rig_id, text="Snap IK->FK (" + fk_leg[0] + ")")
50
44
    p.thigh_fk  = fk_leg[0]
56
50
    p.pole      = ik_leg[3]
57
51
    p.footroll  = ik_leg[4]
58
52
    p.mfoot_ik  = ik_leg[5]
 
53
if is_selected(fk_leg):
 
54
    try:
 
55
        pose_bones[fk_leg[0]]["isolate"]
 
56
        layout.prop(pose_bones[fk_leg[0]], '["isolate"]', text="Isolate Rotation (" + fk_leg[0] + ")", slider=True)
 
57
    except KeyError:
 
58
        pass
 
59
    layout.prop(pose_bones[fk_leg[0]], '["stretch_length"]', text="Length FK (" + fk_leg[0] + ")", slider=True)
 
60
if is_selected(ik_leg):
 
61
    layout.prop(pose_bones[ik_leg[2]], '["stretch_length"]', text="Length IK (" + ik_leg[2] + ")", slider=True)
 
62
    layout.prop(pose_bones[ik_leg[2]], '["auto_stretch"]', text="Auto-Stretch IK (" + ik_leg[2] + ")", slider=True)
 
63
"""
 
64
 
 
65
hose_script = """
 
66
hose_leg = ["%s", "%s", "%s"]
 
67
if is_selected(hose_leg):
 
68
    layout.prop(pose_bones[hose_leg[1]], '["smooth_bend"]', text="Smooth Knee (" + hose_leg[1] + ")", slider=True)
 
69
"""
 
70
 
 
71
end_script = """
 
72
if is_selected(fk_leg+ik_leg):
 
73
    layout.separator()
59
74
"""
60
75
 
61
76
 
70
85
            Do NOT change any data in the scene.  This is a gathering phase only.
71
86
 
72
87
        """
 
88
        self.obj = obj
 
89
        self.params = params
 
90
 
73
91
        # Gather deform rig
74
92
        self.deform_rig = deform.Rig(obj, bone, params)
75
93
 
85
103
            The main armature should be selected and active before this is called.
86
104
 
87
105
        """
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])]
92
 
 
93
 
    @classmethod
94
 
    def add_parameters(self, group):
95
 
        """ Add the parameters of this rig type to the
96
 
            RigifyParameters PropertyGroup
97
 
 
98
 
        """
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')
101
 
 
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)")
103
 
 
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")
106
 
 
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")
109
 
 
110
 
    @classmethod
111
 
    def parameters_ui(self, layout, obj, bone):
112
 
        """ Create the ui for the rig parameters.
113
 
 
114
 
        """
115
 
        params = obj.pose.bones[bone].rigify_parameters[0]
116
 
 
117
 
        r = layout.row()
118
 
        r.prop(params, "separate_ik_layers")
119
 
 
120
 
        r = layout.row()
121
 
        r.active = params.separate_ik_layers
122
 
 
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="")
142
 
 
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="")
162
 
 
163
 
        r = layout.row()
164
 
        r.label(text="Knee rotation axis:")
165
 
        r.prop(params, "primary_rotation_axis", text="")
166
 
 
167
 
        r = layout.row()
168
 
        r.prop(params, "bend_hint")
169
 
 
170
 
        col = layout.column()
171
 
        col.prop(params, "use_thigh_twist")
172
 
        col.prop(params, "use_shin_twist")
173
 
 
174
 
    @classmethod
175
 
    def create_sample(self, obj):
176
 
        # generated by rigify.utils.write_meta_rig
177
 
        bpy.ops.object.mode_set(mode='EDIT')
178
 
        arm = obj.data
179
 
 
180
 
        bones = {}
181
 
 
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
185
 
        bone.roll = -0.0000
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
191
 
        bone.roll = -0.0000
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
198
 
        bone.roll = 0.0000
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
205
 
        bone.roll = -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
212
 
        bone.roll = 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
219
 
        bone.roll = 3.1416
220
 
        bone.use_connect = True
221
 
        bone.parent = arm.edit_bones[bones['foot']]
222
 
        bones['toe'] = bone.name
223
 
 
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'
261
 
 
262
 
        bpy.ops.object.mode_set(mode='EDIT')
263
 
        for bone in arm.edit_bones:
264
 
            bone.select = False
265
 
            bone.select_head = False
266
 
            bone.select_tail = False
267
 
        for b in bones:
268
 
            bone = arm.edit_bones[bones[b]]
269
 
            bone.select = True
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
 
113
        return [ui_script]
 
114
 
 
115
 
 
116
def add_parameters(params):
 
117
    """ Add the parameters of this rig type to the
 
118
        RigifyParameters PropertyGroup
 
119
 
 
120
    """
 
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)")
 
123
 
 
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')
 
126
 
 
127
    params.knee_base_name = bpy.props.StringProperty(name="Knee Name", default="knee", description="Base name for the generated knee-related controls")
 
128
 
 
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")
 
131
 
 
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")
 
134
 
 
135
 
 
136
def parameters_ui(layout, params):
 
137
    """ Create the ui for the rig parameters.
 
138
 
 
139
    """
 
140
    col = layout.column()
 
141
    col.prop(params, "use_complex_leg")
 
142
 
 
143
    r = layout.row()
 
144
    r.label(text="Knee rotation axis:")
 
145
    r.prop(params, "primary_rotation_axis", text="")
 
146
 
 
147
    r = layout.row()
 
148
    r.prop(params, "knee_base_name")
 
149
 
 
150
    r = layout.row()
 
151
    r.prop(params, "bend_hint")
 
152
 
 
153
    r = layout.row()
 
154
    r.prop(params, "separate_ik_layers")
 
155
 
 
156
    r = layout.row()
 
157
    r.active = params.separate_ik_layers
 
158
 
 
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="")
 
178
 
 
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="")
 
198
 
 
199
    if params.use_complex_leg:
 
200
        r = layout.row()
 
201
        r.prop(params, "separate_hose_layers")
 
202
 
 
203
        r = layout.row()
 
204
        r.active = params.separate_hose_layers
 
205
 
 
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="")
 
225
 
 
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="")
 
245
 
 
246
 
 
247
def create_sample(obj):
 
248
    # generated by rigify.utils.write_meta_rig
 
249
    bpy.ops.object.mode_set(mode='EDIT')
 
250
    arm = obj.data
 
251
 
 
252
    bones = {}
 
253
 
 
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
 
257
    bone.roll = -0.0000
 
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
 
263
    bone.roll = -0.0000
 
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
 
270
    bone.roll = 0.0000
 
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
 
277
    bone.roll = -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
 
284
    bone.roll = 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
 
291
    bone.roll = 3.1416
 
292
    bone.use_connect = True
 
293
    bone.parent = arm.edit_bones[bones['foot']]
 
294
    bones['toe'] = bone.name
 
295
 
 
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'
 
332
 
 
333
    bpy.ops.object.mode_set(mode='EDIT')
 
334
    for bone in arm.edit_bones:
 
335
        bone.select = False
 
336
        bone.select_head = False
 
337
        bone.select_tail = False
 
338
    for b in bones:
 
339
        bone = arm.edit_bones[bones[b]]
 
340
        bone.select = True
 
341
        bone.select_head = True
 
342
        bone.select_tail = True
 
343
        arm.edit_bones.active = bone