[Bf-extensions-cvs] [5d5b7489] master: Revert "Rigify: Clean up "Rigify Buttons" panel UX"
Demeter Dzadik
noreply at git.blender.org
Wed Aug 18 19:41:07 CEST 2021
Commit: 5d5b7489027a5c833e47af1f185ac28b401615e4
Author: Demeter Dzadik
Date: Wed Aug 18 19:39:50 2021 +0200
Branches: master
https://developer.blender.org/rBA5d5b7489027a5c833e47af1f185ac28b401615e4
Revert "Rigify: Clean up "Rigify Buttons" panel UX"
Accidental commit by misclicking in VSC, yikes!
This reverts commit 9a7afcbcae91978db8173e205f0ec73f1d6ad440.
===================================================================
M rigify/__init__.py
M rigify/generate.py
M rigify/rig_ui_template.py
M rigify/ui.py
===================================================================
diff --git a/rigify/__init__.py b/rigify/__init__.py
index 1eac52ae..1bb633f6 100644
--- a/rigify/__init__.py
+++ b/rigify/__init__.py
@@ -507,6 +507,20 @@ def register():
IDStore.rigify_types = CollectionProperty(type=RigifyName)
IDStore.rigify_active_type = IntProperty(name="Rigify Active Type", description="The selected rig type")
+ bpy.types.Armature.rigify_advanced_generation = BoolProperty(name="Advanced Options",
+ description="Enables/disables advanced options for Rigify rig generation",
+ default=False)
+
+ def update_mode(self, context):
+ if self.rigify_generate_mode == 'new':
+ self.rigify_force_widget_update = False
+
+ bpy.types.Armature.rigify_generate_mode = EnumProperty(name="Rigify Generate Rig Mode",
+ description="'Generate Rig' mode. In 'overwrite' mode the features of the target rig will be updated as defined by the metarig. In 'new' mode a new rig will be created as defined by the metarig. Current mode",
+ update=update_mode,
+ items=( ('overwrite', 'overwrite', ''),
+ ('new', 'new', '')))
+
bpy.types.Armature.rigify_force_widget_update = BoolProperty(name="Force Widget Update",
description="Forces Rigify to delete and rebuild all the rig widgets. if unset, only missing widgets will be created",
default=False)
@@ -565,6 +579,8 @@ def unregister():
del ArmStore.rigify_colors_index
del ArmStore.rigify_colors_lock
del ArmStore.rigify_theme_to_add
+ del ArmStore.rigify_advanced_generation
+ del ArmStore.rigify_generate_mode
del ArmStore.rigify_force_widget_update
del ArmStore.rigify_target_rig
del ArmStore.rigify_rig_ui
diff --git a/rigify/generate.py b/rigify/generate.py
index bb3f1ac0..aa9a9a84 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -65,28 +65,53 @@ class Generator(base_generate.BaseGenerator):
return rig_module.Rig
-
- def __create_rig_object(self) -> bpy.types.Object:
- """ 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.
- """
+
+ def __create_rig_object(self):
+ scene = self.scene
+ id_store = self.id_store
meta_data = self.metarig.data
- target_rig = meta_data.rigify_target_rig
- if target_rig:
- return target_rig
+ # 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.")
+
+ 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
- rig_new_name = meta_data.rigify_rig_basename or "rig"
+ if not obj and name in scene.objects:
+ obj = scene.objects[name]
- target_rig = bpy.data.objects.new(rig_new_name, bpy.data.armatures.new(rig_new_name))
- target_rig.display_type = 'WIRE'
- self.collection.objects.link(target_rig)
+ if obj:
+ self.rig_old_name = obj.name
- meta_data.rigify_target_rig = target_rig
- target_rig.data.pose_position = 'POSE'
+ 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
+
+ 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)
+
+ 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'
- return target_rig
+ self.obj = obj
+ return obj
def __create_widget_group(self):
@@ -358,7 +383,7 @@ class Generator(base_generate.BaseGenerator):
#------------------------------------------
# Create/find the rig object and set it up
- self.obj = obj = self.__create_rig_object()
+ obj = self.__create_rig_object()
# Get rid of anim data in case the rig already existed
print("Clear rig animation data.")
diff --git a/rigify/rig_ui_template.py b/rigify/rig_ui_template.py
index 8780461d..c83dd02b 100644
--- a/rigify/rig_ui_template.py
+++ b/rigify/rig_ui_template.py
@@ -1167,10 +1167,27 @@ class ScriptGenerator(base_generate.GeneratorPlugin):
layer_layout += [(l.name, l.row)]
# Generate the UI script
- script = metarig.data.rigify_rig_ui
- if not script:
- script = bpy.data.texts.new("rig_ui.py")
- metarig.data.rigify_rig_ui = script
+ if metarig.data.rigify_rig_basename:
+ rig_ui_name = metarig.data.rigify_rig_basename + '_ui.py'
+ else:
+ rig_ui_name = 'rig_ui.py'
+
+ script = None
+
+ if metarig.data.rigify_generate_mode == 'overwrite':
+ script = metarig.data.rigify_rig_ui
+
+ if not script and rig_ui_name in bpy.data.texts:
+ script = bpy.data.texts[rig_ui_name]
+
+ if script:
+ script.clear()
+ script.name = rig_ui_name
+
+ if script is None:
+ script = bpy.data.texts.new(rig_ui_name)
+
+ metarig.data.rigify_rig_ui = script
for s in OrderedDict.fromkeys(self.ui_imports):
script.write(s + "\n")
diff --git a/rigify/ui.py b/rigify/ui.py
index 2dda2485..6ba455da 100644
--- a/rigify/ui.py
+++ b/rigify/ui.py
@@ -59,139 +59,140 @@ def build_type_list(context, rigify_types):
a = rigify_types.add()
a.name = r
-class DATA_PT_rigify_generate_base(bpy.types.Panel):
- @classmethod
- def poll(cls, context):
- obj = context.object
- if not context.object:
- return False
- return obj.type == 'ARMATURE' \
- and obj.data.get("rig_id") is None \
- and obj.mode in {'POSE', 'OBJECT'}
+class DATA_PT_rigify_buttons(bpy.types.Panel):
+ bl_label = "Rigify Buttons"
bl_space_type = 'PROPERTIES'
bl_region_type = 'WINDOW'
bl_context = "data"
-class DATA_PT_rigify_generate(DATA_PT_rigify_generate_base):
- bl_label = "Rigify Generation"
+ @classmethod
+ def poll(cls, context):
+ if not context.object:
+ return False
+ return context.object.type == 'ARMATURE' and context.active_object.data.get("rig_id") is None
def draw(self, context):
+ C = context
layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
obj = context.object
- id_store = context.window_manager
-
- armature_id_store = context.object.data
+ id_store = C.window_manager
- show_warning = False
- show_update_metarig = False
- show_not_updatable = False
- show_upgrade_face = False
+ if obj.mode in {'POSE', 'OBJECT'}:
+ armature_id_store = C.object.data
- check_props = ['IK_follow', 'root/parent', 'FK_limb_follow', 'IK_Stretch']
+ WARNING = "Warning: Some features may change after generation"
+ show_warning = False
+ show_update_metarig = False
+ show_not_updatable = False
+ show_upgrade_face = False
- for bone in obj.pose.bones:
- if bone.bone.layers[30] and (list(set(bone.keys()) & set(check_props))):
- show_warning = True
- break
+ check_props = ['IK_follow', 'root/parent', 'FK_limb_follow', 'IK_Stretch']
- for b in obj.pose.bones:
- if b.rigify_type in outdated_types.keys():
- old_bone = b.name
- old_rig = b.rigify_type
- if outdated_types[b.rigify_type]:
- show_update_metarig = True
- else:
- show_update_metarig = False
- show_not_updatable = True
+ for bone in obj.pose.bones:
+ if bone.bone.layers[30] and (list(set(bone.keys()) & set(check_props))):
+ show_warning = True
break
- elif b.rigify_type == 'faces.super_face':
- show_upgrade_face = True
-
- if show_warning:
- layout.label(text="Warning: Some features may change after generation", icon='ERROR')
-
- if show_not_updatable:
- layout.label(text="WARNING: This metarig contains deprecated rigify rig-types and cannot be upgraded automatically.", icon='ERROR')
- layout.label(text="("+old_rig+" on bone "+old_bone+")")
- layout.label(text="If you want to use it anyway try enabling the legacy mode before generating again.")
-
- layout.operator("pose.rigify_switch_to_legacy", text="Switch to Legacy")
- elif show_update_metarig:
- layout.label(text="This metarig contains old rig-types that can be automatically upgraded to benefit of rigify's new features.", icon='ERROR')
- layout.label(text="("+old_rig+" on bone "+old_bone+")")
- layout.label(text="To use it as-is you need to enable legacy mode.",)
- layout.operator("pose.rigify_upgrade_types", text="Upgrade Metarig")
- elif show_upgrade_face:
- layout.label(text="This metarig uses the old face rig.", icon='INFO')
- layout.operator("pose.rigify_upgrade_face")
- enable_generation = not (show_not_updatable or show_update_metarig)
+ for b in obj.pose.bones:
+ if b.rigify_type in outdated_types.keys():
+ old_bone = b.name
+ old_rig = b.
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list