Rigify: Remove pass_index driver hack in favor of Custom Property to attach rig script

In days of old, Custom Properties couldn't store datablock pointers, so a driver variable was used to reference the script datablock, thereby keeping it attached to the rig when the rig is linked or appended. This can now be achieved much more elegantly with one short line of code.

Reviewed By: angavrilov

Differential Revision: https://developer.blender.org/D9082
This commit is contained in:
Demeter Dzadik 2020-11-04 12:48:27 +01:00
parent 5a1e3d5023
commit 8e02b43628
2 changed files with 1 additions and 30 deletions

View File

@ -23,7 +23,6 @@ import bpy
from collections import OrderedDict
from .utils.animation import SCRIPT_REGISTER_BAKE, SCRIPT_UTILITIES_BAKE
from .utils.rig import attach_persistent_script
from . import base_generate
@ -1242,4 +1241,4 @@ class ScriptGenerator(base_generate.GeneratorPlugin):
exec(script.as_string(), {})
# Attach the script to the rig
attach_persistent_script(self.obj, script)
self.obj['rig_ui'] = script

View File

@ -95,34 +95,6 @@ def get_resource(resource_name):
return module
def attach_persistent_script(obj, script):
"""Make sure the ui script always follows the rig around"""
skip = False
driver = None
if not obj.animation_data:
obj.animation_data_create()
for fcurve in obj.animation_data.drivers:
if fcurve.data_path == 'pass_index':
driver = fcurve.driver
for variable in driver.variables:
if variable.name == script.name:
skip = True
break
break
if not skip:
if not driver:
fcurve = obj.driver_add("pass_index")
driver = fcurve.driver
variable = driver.variables.new()
variable.name = script.name
variable.targets[0].id_type = 'TEXT'
variable.targets[0].id = script
def connected_children_names(obj, bone_name):
""" Returns a list of bone names (in order) of the bones that form a single
connected chain starting with the given bone as a parent.