Skip to content

Commit e916838

Browse files
committed
fix: relative imports from custom rigs external folder
1 parent 03be04d commit e916838

File tree

4 files changed

+58
-14
lines changed

4 files changed

+58
-14
lines changed

__init__.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,16 @@ def update_external_rigs(self, context):
126126

127127
custom_rigs_folder = bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder
128128

129+
if custom_rigs_folder == "":
130+
rig_lists.rigs_dict['external'] = {}
131+
129132
if custom_rigs_folder not in sys.path:
130133
sys.path.append(bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder)
131134

132-
external_rigs_dict = rig_lists.get_external_rigs()
133-
if external_rigs_dict:
134-
135-
rig_lists.rigs_dict['external'] = external_rigs_dict
136-
135+
rig_lists.get_external_rigs()
136+
if rig_lists.rigs_dict['external']:
137137
# Add external rig parameters
138-
for rig in external_rigs_dict['rig_list']:
138+
for rig in rig_lists.rigs_dict['external']['rig_list']:
139139
r = utils.get_rig_type(rig, custom_rigs_folder)
140140
try:
141141
r.add_parameters(RigifyParameters)
@@ -387,6 +387,7 @@ def update_mode(self, context):
387387

388388
external_rigs_folder = bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder
389389
if external_rigs_folder and not 'external' in rig_lists.rigs_dict:
390+
#force update on reload
390391
bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder = external_rigs_folder
391392

392393

rig_lists.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ def get_rig_list(path, mode='relative'):
8080
t = f[:-3]
8181
if mode == 'relative':
8282
module_name = os.path.join(path, t).replace(os.sep, ".")
83+
rig = utils.get_rig_type(module_name, base_path=base_path)
8384
else:
84-
module_name = t
85-
rig = utils.get_rig_type(module_name, base_path=base_path)
85+
external_folder = bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder
86+
module_name = os.path.join(path, t).replace(external_folder, '').replace(os.sep, ".")
87+
rig = utils.get_rig_type(module_name, base_path=external_folder)
8688
if hasattr(rig, "Rig"):
8789
rigs += [t]
8890
if hasattr(rig, 'IMPLEMENTATION') and rig.IMPLEMENTATION:
@@ -116,6 +118,4 @@ def get_external_rigs():
116118
external_folder = bpy.context.user_preferences.addons['rigify'].preferences.custom_rigs_folder
117119
if external_folder:
118120
external_rigs_dict = get_rig_list(external_folder, mode='absolute')
119-
external_rig_list = external_rigs_dict['rig_list']
120-
external_implementation_rigs = external_rigs_dict['implementation_rigs']
121-
return external_rigs_dict
121+
rigs_dict['external'] = external_rigs_dict

ui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ def draw(self, context):
173173
a = id_store.rigify_types.add()
174174
a.name = r
175175

176-
if 'external' in rig_lists.rigs_dict:
176+
if 'external' in rig_lists.rigs_dict and rig_lists.rigs_dict['external']:
177177
for r in rig_lists.rigs_dict['external']['rig_list']:
178178
if collection_name == "All":
179179
a = id_store.rigify_types.add()

utils.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,41 @@ def create_sphere_widget(rig, bone_name, bone_transform_name=None):
548548
mesh.update()
549549

550550

551+
def create_circle_polygon(number_verts, axis, radius=1.0, head_tail=0.0):
552+
""" Creates a basic circle around of an axis selected.
553+
number_verts: number of vertices of the poligon
554+
axis: axis normal to the circle
555+
radius: the radius of the circle
556+
head_tail: where along the length of the bone the circle is (0.0=head, 1.0=tail)
557+
"""
558+
verts = []
559+
edges = []
560+
angle = 2 * math.pi / number_verts
561+
i = 0
562+
563+
assert(axis in 'XYZ')
564+
565+
while i < (number_verts):
566+
a = math.cos(i * angle)
567+
b = math.sin(i * angle)
568+
569+
if axis == 'X':
570+
verts.append((head_tail, a * radius, b * radius))
571+
elif axis == 'Y':
572+
verts.append((a * radius, head_tail, b * radius))
573+
elif axis == 'Z':
574+
verts.append((a * radius, b * radius, head_tail))
575+
576+
if i < (number_verts - 1):
577+
edges.append((i , i + 1))
578+
579+
i += 1
580+
581+
edges.append((0, number_verts - 1))
582+
583+
return verts, edges
584+
585+
551586
def create_limb_widget(rig, bone_name, bone_transform_name=None):
552587
""" Creates a basic limb widget, a line that spans the length of the
553588
bone, with a circle around the center.
@@ -914,8 +949,16 @@ def get_rig_type(rig_type, base_path=''):
914949
importlib.reload(submod)
915950
else:
916951
if '.' in rig_type:
917-
rig_type = str.join(os.sep, rig_type.split('.'))
918-
spec = importlib.util.spec_from_file_location(rig_type, base_path + rig_type + '.py')
952+
module_subpath = str.join(os.sep, rig_type.split('.'))
953+
package = rig_type.split('.')[0]
954+
importlib.import_module(package)
955+
for sub in rig_type.split('.')[1:]:
956+
package = '.'.join([package, sub])
957+
importlib.import_module(package)
958+
else:
959+
module_subpath = rig_type
960+
961+
spec = importlib.util.spec_from_file_location(rig_type, base_path + module_subpath + '.py')
919962
submod = importlib.util.module_from_spec(spec)
920963
spec.loader.exec_module(submod)
921964
return submod

0 commit comments

Comments
 (0)