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:
authorDamien Picard <pioverfour>2019-10-15 13:31:12 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2019-10-15 14:01:34 +0300
commit71565f82b24c27dbb45eadd8ca6c494996267039 (patch)
tree5b4907b7d3736859d33b9ca614163cbc767c10db /rigify/generate.py
parent0260327cff34787394cf9aaa3e8cc5bd35cb0a25 (diff)
Rigify: store advanced options in armature instead of window manager.
By storing the Rigify advanced generation options (name, target rig, target ui script) in the armature data instead of the window manager as before, multiple rigs can have different options. Additionally, these options are stored in the blend file, and not lost when reloading. Also, the rig name is not automatically suffixed with `_rig`, which doesn't make sense as far as I can tell. Differential Revision: https://developer.blender.org/D5675
Diffstat (limited to 'rigify/generate.py')
-rw-r--r--rigify/generate.py46
1 files changed, 26 insertions, 20 deletions
diff --git a/rigify/generate.py b/rigify/generate.py
index 88b216ed..295c1a50 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -69,36 +69,45 @@ class Generator(base_generate.BaseGenerator):
def __create_rig_object(self):
scene = self.scene
id_store = self.id_store
+ meta_data = self.metarig.data
# Check if the generated rig already exists, so we can
# regenerate in the same object. If not, create a new
# object to generate the rig in.
print("Fetch rig.")
- if id_store.rigify_generate_mode == 'overwrite':
- name = id_store.rigify_target_rig or "rig"
- try:
+ self.rig_new_name = name = meta_data.rigify_rig_basename or "rig"
+
+ obj = None
+
+ if meta_data.rigify_generate_mode == 'overwrite':
+ obj = meta_data.rigify_target_rig
+
+ if not obj and name in scene.objects:
obj = scene.objects[name]
- self.rig_old_name = name
- obj.name = self.rig_new_name or name
+
+ if obj:
+ self.rig_old_name = obj.name
+
+ obj.name = name
+ obj.data.name = obj.name
rig_collections = filter_layer_collections_by_object(self.usable_collections, obj)
self.layer_collection = (rig_collections + [self.layer_collection])[0]
self.collection = self.layer_collection.collection
- except KeyError:
- self.rig_old_name = name
- name = self.rig_new_name or name
- obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
- obj.display_type = 'WIRE'
- self.collection.objects.link(obj)
- else:
- name = self.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
+ elif name in bpy.data.objects:
+ obj = bpy.data.objects[name]
+
+ if not obj:
+ obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
obj.display_type = 'WIRE'
self.collection.objects.link(obj)
- id_store.rigify_target_rig = obj.name
+ elif obj.name not in self.collection.objects: # rig exists but was deleted
+ self.collection.objects.link(obj)
+
+ meta_data.rigify_target_rig = obj
obj.data.pose_position = 'POSE'
self.obj = obj
@@ -114,8 +123,8 @@ class Generator(base_generate.BaseGenerator):
self.widget_collection = ensure_widget_collection(context)
# Remove wgts if force update is set
- wgts_group_name = "WGTS_" + (self.rig_old_name or obj.name)
- if wgts_group_name in scene.objects and id_store.rigify_force_widget_update:
+ wgts_group_name = "WGTS_" + (self.rig_old_name or self.obj.name)
+ if wgts_group_name in scene.objects and self.metarig.data.rigify_force_widget_update:
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='DESELECT')
for wgt in bpy.data.objects[wgts_group_name].children:
@@ -320,9 +329,6 @@ class Generator(base_generate.BaseGenerator):
#------------------------------------------
# Create/find the rig object and set it up
- if id_store.rigify_rig_basename:
- self.rig_new_name = id_store.rigify_rig_basename + "_rig"
-
obj = self.__create_rig_object()
# Get rid of anim data in case the rig already existed