Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'rigify/generate.py')
-rw-r--r--rigify/generate.py70
1 files changed, 57 insertions, 13 deletions
diff --git a/rigify/generate.py b/rigify/generate.py
index 1af872d6..01e5de28 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -81,15 +81,30 @@ def generate_rig(context, metarig):
# object to generate the rig in.
print("Fetch rig.")
- name = id_store.rigify_target_rig or "rig"
+ rig_new_name = ""
+ rig_old_name = ""
+ if id_store.rigify_rig_basename:
+ rig_new_name = id_store.rigify_rig_basename + "_rig"
- try:
- obj = scene.objects[name]
- except KeyError:
- obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
+ if id_store.rigify_generate_mode == 'overwrite':
+ name = id_store.rigify_target_rig or "rig"
+ try:
+ obj = scene.objects[name]
+ rig_old_name = name
+ obj.name = rig_new_name or name
+ except KeyError:
+ rig_old_name = name
+ name = rig_new_name or name
+ obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
+ obj.draw_type = 'WIRE'
+ scene.objects.link(obj)
+ else:
+ name = rig_new_name or "rig"
+ obj = bpy.data.objects.new(name, bpy.data.armatures.new(name)) # in case name 'rig' exists it will be rig.001
obj.draw_type = 'WIRE'
scene.objects.link(obj)
+ id_store.rigify_target_rig = obj.name
obj.data.pose_position = 'POSE'
# Get rid of anim data in case the rig already existed
@@ -102,17 +117,22 @@ def generate_rig(context, metarig):
scene.objects.active = obj
# Remove wgts if force update is set
- if "WGTS" in scene.objects and id_store.rigify_force_widget_update:
+ wgts_group_name = "WGTS_" + (rig_old_name or obj.name)
+ if wgts_group_name in scene.objects and id_store.rigify_force_widget_update:
bpy.ops.object.select_all(action='DESELECT')
for i, lyr in enumerate(WGT_LAYERS):
if lyr:
context.scene.layers[i] = True
- for wgt in bpy.data.objects["WGTS"].children:
+ for wgt in bpy.data.objects[wgts_group_name].children:
wgt.select = True
bpy.ops.object.delete(use_global=False)
for i, lyr in enumerate(WGT_LAYERS):
if lyr:
context.scene.layers[i] = False
+ if rig_old_name:
+ bpy.data.objects[wgts_group_name].name = "WGTS_" + obj.name
+
+ wgts_group_name = "WGTS_" + obj.name
# Remove all bones from the generated rig armature.
bpy.ops.object.mode_set(mode='EDIT')
@@ -281,7 +301,7 @@ def generate_rig(context, metarig):
t.tick("Create root bone: ")
# Create Group widget
- wgts_group_name = "WGTS"
+ # wgts_group_name = "WGTS"
if wgts_group_name not in scene.objects:
if wgts_group_name in bpy.data.objects:
bpy.data.objects[wgts_group_name].user_clear()
@@ -291,6 +311,18 @@ def generate_rig(context, metarig):
scene.objects.link(wgts_obj)
wgts_obj.layers = WGT_LAYERS
t.tick("Create main WGTS: ")
+ #
+ # if id_store.rigify_generate_mode == 'new':
+ # bpy.ops.object.select_all(action='DESELECT')
+ # for wgt in bpy.data.objects[wgts_group_name].children:
+ # wgt.select = True
+ # for i, lyr in enumerate(WGT_LAYERS):
+ # if lyr:
+ # context.scene.layers[i] = True
+ # bpy.ops.object.make_single_user(obdata=True)
+ # for i, lyr in enumerate(WGT_LAYERS):
+ # if lyr:
+ # context.scene.layers[i] = False
#----------------------------------
try:
@@ -410,7 +442,7 @@ def generate_rig(context, metarig):
# Assign shapes to bones
# Object's with name WGT-<bone_name> get used as that bone's shape.
for bone in bones:
- wgt_name = (WGT_PREFIX + obj.data.bones[bone].name)[:63] # Object names are limited to 63 characters... arg
+ wgt_name = (WGT_PREFIX + obj.name + '_' + obj.data.bones[bone].name)[:63] # Object names are limited to 63 characters... arg
if wgt_name in context.scene.objects:
# Weird temp thing because it won't let me index by object name
for ob in context.scene.objects:
@@ -439,13 +471,24 @@ def generate_rig(context, metarig):
layer_layout += [(l.name, l.row)]
# Generate the UI script
- rig_ui_name = id_store.rigify_rig_ui or 'rig_ui.py'
+ if id_store.rigify_generate_mode == 'overwrite':
+ rig_ui_name = id_store.rigify_rig_ui or 'rig_ui.py'
+ else:
+ rig_ui_name = 'rig_ui.py'
- if rig_ui_name in bpy.data.texts.keys():
+ if id_store.rigify_generate_mode == 'overwrite' and rig_ui_name in bpy.data.texts.keys():
script = bpy.data.texts[rig_ui_name]
script.clear()
else:
script = bpy.data.texts.new("rig_ui.py")
+
+ rig_ui_old_name = ""
+ if id_store.rigify_rig_basename:
+ rig_ui_old_name = script.name
+ script.name = id_store.rigify_rig_basename + "_rig_ui.py"
+
+ id_store.rigify_rig_ui = script.name
+
script.write(UI_SLIDERS % rig_id)
for s in ui_scripts:
script.write("\n " + s.replace("\n", "\n ") + "\n")
@@ -465,14 +508,15 @@ def generate_rig(context, metarig):
# Add rig_ui to logic
skip = False
ctrls = obj.game.controllers
+
for c in ctrls:
- if 'Python' in c.name and c.text.name == 'rig_ui.py':
+ if 'Python' in c.name and c.text.name == script.name:
skip = True
break
if not skip:
bpy.ops.logic.controller_add(type='PYTHON', object=obj.name)
ctrl = obj.game.controllers[-1]
- ctrl.text = bpy.data.texts['rig_ui.py']
+ ctrl.text = bpy.data.texts[script.name]
t.tick("The rest: ")