Add Lattice Magic to Addons #48

Merged
Nick Alberelli merged 36 commits from feature/lattice_magic into main 2023-05-17 20:48:52 +02:00
Showing only changes of commit baacb3d231 - Show all commits

View File

@ -221,7 +221,7 @@ class TWEAKLAT_OT_Duplicate(Operator):
bpy.ops.object.duplicate()
new_hook, new_lattice, new_root = get_tweak_setup(context.object)
for key, value in new_hook.items():
for key, value in list(new_hook.items()):
if key.startswith("object_"):
del new_hook[key]
@ -632,34 +632,45 @@ def add_objects_to_lattice(
simple_driver(m, 'strength', hook, '["Tweak Lattice"]')
def remove_object_from_lattice(hook: Object, obj: Object):
"""Cleanly remove an object from a Tweak Lattice set-up's influence."""
hook, lattice, root = get_tweak_setup(hook)
# Remove the custom property pointing from the Hook to the Object.
for key, value in list(hook.items()):
if value == obj:
del hook[key]
break
# Remove the Lattice modifier (and its driver) deforming the Object.
for m in obj.modifiers:
if m.type != 'LATTICE':
continue
if m.object == lattice:
m.driver_remove('strength')
obj.modifiers.remove(m)
break
def remove_objects_from_lattice(hook: Object, objects_to_remove: List[Object]) -> List[Object]:
"""Cleanly remove several objects from a Tweak Lattice set-up's influence."""
objs_removed = []
for key, value in list(hook.items()):
if value in objects_to_remove:
remove_object_from_lattice(hook, value)
objs_removed.append(value)
return objs_removed
def remove_all_objects_from_lattice(hook: Object) -> List[Object]:
lattice_ob = hook['Lattice']
objs = []
ob_count = 0
ob_prop_name = "object_"+str(ob_count)
while ob_prop_name in hook:
ob = hook[ob_prop_name]
for m in ob.modifiers:
if m.type != 'LATTICE':
continue
if m.object == lattice_ob:
m.driver_remove('strength')
ob.modifiers.remove(m)
break
ob_count += 1
objs.append(ob)
del hook[ob_prop_name]
ob_prop_name = "object_"+str(ob_count)
return objs
"""Cleanly remove all objects from a Tweak Lattice set-up's influence."""
objs_to_remove = []
for key, value in list(hook.items()):
if key.startswith("object_"):
objs_to_remove.append(value)
def remove_objects_from_lattice(hook, objects):
new_objs = []
prev_objs = remove_all_objects_from_lattice(hook)
for o in prev_objs:
if o not in objects:
new_objs.append(o)
add_objects_to_lattice(hook, new_objs)
return remove_objects_from_lattice(hook, objs_to_remove)
classes = [