forked from bartvdbraak/blender
- rigify context changes & example for delta
- sequencer transform had 0.0 for rotation minimum - missed icon rename in last commit
This commit is contained in:
parent
901962c621
commit
f26e188a7c
@ -163,7 +163,7 @@ class ExportMDD(bpy.types.Operator):
|
||||
|
||||
# List of operator properties, the attributes will be assigned
|
||||
# to the class instance from the operator settings before calling.
|
||||
path = StringProperty(name="File Path", description="File path used for exporting the MDD file", maxlen= 1024, default= "tmp.mdd")
|
||||
path = StringProperty(name="File Path", description="File path used for exporting the MDD file", maxlen= 1024, default= "")
|
||||
fps = IntProperty(name="Frames Per Second", description="Number of frames/second", min=minfps, max=maxfps, default= 25)
|
||||
start_frame = IntProperty(name="Start Frame", description="Start frame for baking", min=minframe,max=maxframe,default=1)
|
||||
end_frame = IntProperty(name="End Frame", description="End frame for baking", min=minframe, max=maxframe, default= 250)
|
||||
|
@ -48,7 +48,7 @@ def compat_str(text, line_length=0):
|
||||
#text = text.replace(']', ']\n')
|
||||
text = text.replace("\n", "\\n")
|
||||
text = text.replace('"', '\\"')
|
||||
return "* " + text
|
||||
return text
|
||||
|
||||
|
||||
def graph_armature(obj, path, FAKE_PARENT=True, CONSTRAINTS=True, DRIVERS=True, XTRA_INFO=True):
|
||||
|
@ -25,7 +25,7 @@ from Mathutils import Vector
|
||||
from rna_prop_ui import rna_idprop_ui_prop_get
|
||||
|
||||
empty_layer = [False] * 32
|
||||
|
||||
DELIMITER = '-._'
|
||||
|
||||
def auto_class(slots, name="ContainerClass", class_dict=None):
|
||||
|
||||
@ -300,7 +300,7 @@ def get_side_name(name):
|
||||
whether it is a a left or right (or center, or whatever) bone.
|
||||
Returns an empty string if nothing is found.
|
||||
'''
|
||||
if name[-2] in "-._":
|
||||
if name[-2] in DELIMITER:
|
||||
return name[-2:]
|
||||
else:
|
||||
return ""
|
||||
@ -310,7 +310,7 @@ def get_base_name(name):
|
||||
Returns the part of a string (typically a bone's name) corresponding to it's
|
||||
base name (no sidedness, no ORG prefix).
|
||||
'''
|
||||
if name[-2] in "-._":
|
||||
if name[-2] in DELIMITER:
|
||||
return name[:-2]
|
||||
else:
|
||||
return name
|
||||
@ -408,12 +408,34 @@ def add_pole_target_bone(obj, base_bone_name, name, mode='CROSS'):
|
||||
|
||||
return poll_name
|
||||
|
||||
def validate_rig(context, obj):
|
||||
for pbone in obj.pose.bones:
|
||||
bone_name = pbone.name
|
||||
bone_type = pbone.get("type", "")
|
||||
|
||||
if bone_type:
|
||||
bone_type_list = [bt for bt in bone_type.replace(",", " ").split()]
|
||||
else:
|
||||
bone_type_list = []
|
||||
|
||||
for bone_type in bone_type_list:
|
||||
type_pair = bone_type.split(".")
|
||||
submod_name = type_pair[0]
|
||||
|
||||
submod = __import__(name="%s.%s" % (__package__, submod_name), fromlist=[submod_name])
|
||||
reload(submod)
|
||||
|
||||
submod.metarig_definition(obj, bone_name)
|
||||
|
||||
# missing, - check for duplicate root bone.
|
||||
|
||||
|
||||
def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
from collections import OrderedDict
|
||||
|
||||
global_undo = context.user_preferences.edit.global_undo
|
||||
context.user_preferences.edit.global_undo = False
|
||||
mode_orig = context.mode
|
||||
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
||||
@ -495,8 +517,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
|
||||
# Only calculate bone definitions once
|
||||
if submod_name not in bone_def_dict:
|
||||
metarig_definition_func = getattr(submod, "metarig_definition")
|
||||
bone_def_dict[submod_name] = metarig_definition_func(obj, bone_name)
|
||||
bone_def_dict[submod_name] = submod.metarig_definition(obj, bone_name)
|
||||
|
||||
|
||||
bone_typeinfo = bone_typeinfos.setdefault(bone_name, [])
|
||||
@ -579,6 +600,8 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
|
||||
# obj.restrict_view = True
|
||||
obj.data.draw_axes = False
|
||||
|
||||
bpy.ops.object.mode_set(mode=mode_orig)
|
||||
|
||||
context.user_preferences.edit.global_undo = global_undo
|
||||
|
||||
return obj
|
||||
@ -594,7 +617,7 @@ def write_meta_rig(obj, func_name="metarig_template"):
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
code.append(" bpy.ops.object.mode_set(mode='EDIT')")
|
||||
|
||||
code.append(" obj = bpy.context.object")
|
||||
code.append(" obj = bpy.context.active_object")
|
||||
code.append(" arm = obj.data")
|
||||
|
||||
arm = obj.data
|
||||
@ -642,7 +665,7 @@ def write_meta_rig(obj, func_name="metarig_template"):
|
||||
return "\n".join(code)
|
||||
|
||||
|
||||
def generate_test(context):
|
||||
def generate_test(context, metarig_type="", GENERATE_FINAL=True):
|
||||
import os
|
||||
new_objects = []
|
||||
|
||||
@ -654,6 +677,9 @@ def generate_test(context):
|
||||
obj_new.data = armature
|
||||
scene.objects.link(obj_new)
|
||||
scene.objects.active = obj_new
|
||||
for obj in scene.objects:
|
||||
obj.selected = False
|
||||
obj_new.selected = True
|
||||
|
||||
files = os.listdir(os.path.dirname(__file__))
|
||||
for f in files:
|
||||
@ -664,6 +690,10 @@ def generate_test(context):
|
||||
continue
|
||||
|
||||
module_name = f[:-3]
|
||||
|
||||
if (module_name and module_name != metarig_type):
|
||||
continue
|
||||
|
||||
submodule = __import__(name="%s.%s" % (__package__, module_name), fromlist=[module_name])
|
||||
|
||||
metarig_template = getattr(submodule, "metarig_template", None)
|
||||
@ -671,17 +701,21 @@ def generate_test(context):
|
||||
if metarig_template:
|
||||
create_empty_armature("meta_" + module_name) # sets active
|
||||
metarig_template()
|
||||
obj = context.object
|
||||
obj_new = generate_rig(context, obj)
|
||||
obj = context.active_object
|
||||
obj.location = scene.cursor_location
|
||||
|
||||
new_objects.append((obj, obj_new))
|
||||
if GENERATE_FINAL:
|
||||
obj_new = generate_rig(context, obj)
|
||||
new_objects.append((obj, obj_new))
|
||||
else:
|
||||
new_objects.append((obj, None))
|
||||
else:
|
||||
print("note: rig type '%s' has no metarig_template(), can't test this", module_name)
|
||||
|
||||
return new_objects
|
||||
|
||||
|
||||
def generate_test_all(context):
|
||||
def generate_test_all(context, GRAPH=False):
|
||||
import rigify
|
||||
import graphviz_export
|
||||
import os
|
||||
@ -690,17 +724,18 @@ def generate_test_all(context):
|
||||
|
||||
new_objects = rigify.generate_test(context)
|
||||
|
||||
base_name = os.path.splitext(bpy.data.filename)[0]
|
||||
for obj, obj_new in new_objects:
|
||||
for obj in (obj, obj_new):
|
||||
fn = base_name + "-" + bpy.utils.clean_name(obj.name)
|
||||
if GRAPH:
|
||||
base_name = os.path.splitext(bpy.data.filename)[0]
|
||||
for obj, obj_new in new_objects:
|
||||
for obj in (obj, obj_new):
|
||||
fn = base_name + "-" + bpy.utils.clean_name(obj.name)
|
||||
|
||||
path_dot = fn + ".dot"
|
||||
path_png = fn + ".png"
|
||||
saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True)
|
||||
path_dot = fn + ".dot"
|
||||
path_png = fn + ".png"
|
||||
saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True)
|
||||
|
||||
#if saved:
|
||||
# os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png))
|
||||
#if saved:
|
||||
# os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png))
|
||||
|
||||
i = 0
|
||||
for obj, obj_new in new_objects:
|
||||
@ -713,4 +748,4 @@ def generate_test_all(context):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_rig(bpy.context, bpy.context.object)
|
||||
generate_rig(bpy.context, bpy.context.active_object)
|
||||
|
@ -29,7 +29,7 @@ METARIG_NAMES = "shoulder", "arm", "forearm", "hand"
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('shoulder')
|
||||
bone.head[:] = 0.0000, -0.4515, 0.0000
|
||||
|
@ -25,6 +25,34 @@ from rigify import get_bone_data
|
||||
METARIG_NAMES = tuple()
|
||||
|
||||
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('bonesker')
|
||||
bone.head[:] = 0.0000, 0.0000, 0.0000
|
||||
bone.tail[:] = -0.0000, 0.7382, 0.1895
|
||||
bone.roll = -0.0000
|
||||
bone.connected = False
|
||||
bone = arm.edit_bones.new('delta')
|
||||
bone.head[:] = -0.0497, 0.8414, 0.3530
|
||||
bone.tail[:] = -0.2511, 1.1588, 0.9653
|
||||
bone.roll = 2.6044
|
||||
bone.connected = False
|
||||
bone.parent = arm.edit_bones['bonesker']
|
||||
bone = arm.edit_bones.new('boney')
|
||||
bone.head[:] = 0.7940, 2.5592, 0.4134
|
||||
bone.tail[:] = 0.7940, 3.3975, 0.4890
|
||||
bone.roll = 3.1416
|
||||
bone.connected = False
|
||||
bone.parent = arm.edit_bones['delta']
|
||||
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
pbone = obj.pose.bones['delta']
|
||||
pbone['type'] = 'delta'
|
||||
|
||||
|
||||
def metarig_definition(obj, orig_bone_name):
|
||||
'''
|
||||
The bone given is the head, its parent is the body,
|
||||
@ -37,7 +65,7 @@ def metarig_definition(obj, orig_bone_name):
|
||||
children = delta.children
|
||||
|
||||
if len(children) != 1:
|
||||
print("only 1 child supported for delta")
|
||||
raise Exception("only 1 child supported for delta on bone '%s'" % delta.name)
|
||||
|
||||
bone_definition = [delta.name, children[0].name]
|
||||
|
||||
|
@ -28,7 +28,7 @@ METARIG_NAMES = "finger_01", "finger_02", "finger_03"
|
||||
|
||||
def metarig_template():
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('finger.01')
|
||||
bone.head[:] = 0.0000, 0.0000, 0.0000
|
||||
@ -73,7 +73,7 @@ def metarig_definition(obj, orig_bone_name):
|
||||
children = bone.children
|
||||
|
||||
if len(children) != 1:
|
||||
raise Exception("expected the chain to have 2 children without a fork")
|
||||
raise Exception("expected the chain to have 2 children from bone '%s' without a fork" % orig_bone_name)
|
||||
bone = children[0]
|
||||
bone_definition.append(bone.name) # finger_02, finger_03
|
||||
chain += 1
|
||||
|
@ -28,7 +28,7 @@ METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel"
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('hips')
|
||||
bone.head[:] = 0.0000, 0.0000, 0.0000
|
||||
|
@ -29,7 +29,7 @@ METARIG_NAMES = ("body", "head")
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('body')
|
||||
bone.head[:] = -0.0000, -0.2771, -1.3345
|
||||
|
@ -28,7 +28,7 @@ METARIG_NAMES = tuple()
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('hand')
|
||||
bone.head[:] = 0.0082, -1.2492, 0.0000
|
||||
|
@ -29,7 +29,7 @@ METARIG_NAMES = ("pelvis", "ribcage")
|
||||
def metarig_template():
|
||||
# generated by rigify.write_meta_rig
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
obj = bpy.context.object
|
||||
obj = bpy.context.active_object
|
||||
arm = obj.data
|
||||
bone = arm.edit_bones.new('pelvis')
|
||||
bone.head[:] = -0.0000, -0.2559, 0.8673
|
||||
|
@ -120,7 +120,7 @@ def draw(layout, context, context_member, use_edit=True):
|
||||
prop = row.operator("wm.properties_edit", text="edit")
|
||||
assign_props(prop, val_draw, key)
|
||||
|
||||
prop = row.operator("wm.properties_remove", text="", icon='ICON_ZOOMOUT')
|
||||
prop = row.operator("wm.properties_remove", text="", icon='ZOOMOUT')
|
||||
assign_props(prop, val_draw, key)
|
||||
|
||||
|
||||
|
@ -1126,14 +1126,14 @@ static void rna_def_transform(BlenderRNA *brna)
|
||||
prop= RNA_def_property(srna, "rotation_start", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "rotIni");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* seq->facf0 is used to animate this */
|
||||
RNA_def_property_range(prop, 0.0f, 360.0f);
|
||||
RNA_def_property_range(prop, -360.0f, 360.0f);
|
||||
RNA_def_property_ui_text(prop, "Rotation Start", "");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
|
||||
|
||||
prop= RNA_def_property(srna, "rotation_end", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "rotFin");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); /* seq->facf0 is used to animate this */
|
||||
RNA_def_property_range(prop, 0.0f, 360.0f);
|
||||
RNA_def_property_range(prop, -360.0f, 360.0f);
|
||||
RNA_def_property_ui_text(prop, "Rotation End", "");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user