-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVertexWeightTools.py
106 lines (77 loc) · 3.31 KB
/
VertexWeightTools.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"""
Tool shortcuts for applying weights to vertices similar to 3dsMax.
Select bone, vertices and click the desired value
"""
import bpy
class VToggleRigifyDeformingBones(bpy.types.Operator):
bl_idname = "aijai.toggle_deforming_bones"
bl_label = "Toggle Deforming Bones (Rigify)"
def execute(self, context):
control_layers = [0,2,4,6,12,15,24]
for armature in bpy.data.armatures:
if 'rig_id' in armature:
controls = armature.layers[29]
for layer in control_layers:
armature.layers[layer] = controls
armature.layers[29] = not controls
return {'FINISHED'}
def aijai_set_weight(weight = 1.0):
pose_bone = bpy.context.active_pose_bone
wp_object = bpy.context.weight_paint_object
if pose_bone is not None and wp_object is not None:
if pose_bone.name not in wp_object.vertex_groups:
wp_object.vertex_groups.new(pose_bone.name)
vg = wp_object.vertex_groups[pose_bone.name]
selected_verts = []
for vert in wp_object.data.vertices:
if vert.select is True:
selected_verts.append(vert.index)
if weight <= 0:
vg.remove(selected_verts)
else:
vg.add(selected_verts, weight, 'REPLACE')
bpy.ops.paint.weight_paint_toggle()
bpy.ops.paint.weight_paint_toggle()
class VSetVertexWeight(bpy.types.Operator):
bl_idname = "aijai.set_vertex_weight"
bl_label = "Set Vertex Weight"
bl_options = {'REGISTER', 'UNDO'}
weight = bpy.props.FloatProperty(name="Vertex Weight", default=1.0, min=0.0, max=1.0)
def execute(self, context):
aijai_set_weight(weight=self.weight)
return {'FINISHED'}
class VSetVertexWeightPanel(bpy.types.Panel):
bl_label = "Vertex Weight"
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_context = "weightpaint"
def draw(self, context):
layout = self.layout
row = layout.row(align=True)
row.alignment = 'EXPAND'
row.operator("aijai.set_vertex_weight", text="0.0").weight = 0.0
row.operator("aijai.set_vertex_weight", text="0.5").weight = 0.5
row.operator("aijai.set_vertex_weight", text="1.0").weight = 1.0
row = layout.row(align=True)
row.alignment = 'EXPAND'
row.operator("aijai.set_vertex_weight", text="0.25").weight = 0.25
row.operator("aijai.set_vertex_weight", text="0.75").weight = 0.75
row = layout.row(align=True)
row.alignment = 'EXPAND'
row.operator("aijai.set_vertex_weight", text="0.33").weight = 0.33333
row.operator("aijai.set_vertex_weight", text="0.66").weight = 0.66666
row = layout.row()
row.operator("aijai.toggle_deforming_bones")
row = layout.row()
row.operator("aijai.context.object.data.use_paint_mask")
row = layout.row()
row.prop(bpy.context.object.data, "use_paint_mask_vertex")
row.prop(bpy.context.object.data, "use_paint_mask")
row = layout.row()
row.operator("aijai.set_vertex_weight", "Type Vertex Weight")
def register():
bpy.utils.register_module(__name__)
def unregister():
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()