Add Lattice Magic
to Addons
#48
@ -16,7 +16,7 @@
|
|||||||
# Add operators to the UI wherever possible.
|
# Add operators to the UI wherever possible.
|
||||||
|
|
||||||
import bpy
|
import bpy
|
||||||
from bpy.props import FloatProperty, IntVectorProperty, FloatVectorProperty, BoolProperty
|
from bpy.props import FloatProperty, IntVectorProperty, FloatVectorProperty, BoolProperty, PointerProperty, StringProperty
|
||||||
from typing import List
|
from typing import List
|
||||||
from mathutils import Vector
|
from mathutils import Vector
|
||||||
from rna_prop_ui import rna_idprop_ui_create
|
from rna_prop_ui import rna_idprop_ui_create
|
||||||
@ -132,6 +132,17 @@ class TWEAKLAT_OT_Create(bpy.types.Operator):
|
|||||||
root.hide_viewport = True
|
root.hide_viewport = True
|
||||||
hook['Root'] = root
|
hook['Root'] = root
|
||||||
|
|
||||||
|
# Parent the root
|
||||||
|
scene = context.scene
|
||||||
|
matrix_backup = root.matrix_world.copy()
|
||||||
|
root.parent = scene.tweak_lattice_parent_ob
|
||||||
|
if root.parent and root.parent.type=='ARMATURE':
|
||||||
|
bone = root.parent.pose.bones.get(scene.tweak_lattice_parent_bone)
|
||||||
|
if bone:
|
||||||
|
root.parent_type = 'BONE'
|
||||||
|
root.parent_bone = bone.name
|
||||||
|
root.matrix_world = matrix_backup
|
||||||
|
|
||||||
# Parent lattice and hook to root
|
# Parent lattice and hook to root
|
||||||
lattice_ob.parent = root
|
lattice_ob.parent = root
|
||||||
|
|
||||||
@ -280,8 +291,17 @@ class TWEAKLAT_PT_Main(bpy.types.Panel):
|
|||||||
layout.use_property_decorate = False
|
layout.use_property_decorate = False
|
||||||
|
|
||||||
hook = context.object
|
hook = context.object
|
||||||
|
layout = layout.column()
|
||||||
if hook.type!='EMPTY' or 'Tweak Lattice' not in hook:
|
if hook.type!='EMPTY' or 'Tweak Lattice' not in hook:
|
||||||
layout.operator(TWEAKLAT_OT_Create.bl_idname, icon='OUTLINER_OB_LATTICE')
|
scene = context.scene
|
||||||
|
layout.prop(scene, 'tweak_lattice_radius', slider=True)
|
||||||
|
layout.separator()
|
||||||
|
layout.prop(scene, 'tweak_lattice_parent_ob')
|
||||||
|
if scene.tweak_lattice_parent_ob and scene.tweak_lattice_parent_ob.type=='ARMATURE':
|
||||||
|
layout.prop_search(scene, 'tweak_lattice_parent_bone', scene.tweak_lattice_parent_ob.data, 'bones')
|
||||||
|
layout.separator()
|
||||||
|
op = layout.operator(TWEAKLAT_OT_Create.bl_idname, icon='OUTLINER_OB_LATTICE')
|
||||||
|
op.radius = scene.tweak_lattice_radius
|
||||||
return
|
return
|
||||||
|
|
||||||
layout.prop(hook, '["Tweak Lattice"]', slider=True, text="Influence")
|
layout.prop(hook, '["Tweak Lattice"]', slider=True, text="Influence")
|
||||||
@ -323,7 +343,15 @@ def register():
|
|||||||
for c in classes:
|
for c in classes:
|
||||||
register_class(c)
|
register_class(c)
|
||||||
|
|
||||||
|
bpy.types.Scene.tweak_lattice_radius = FloatProperty(name="Radius", default=0.1, min=0.0001, max=1000, soft_max=2)
|
||||||
|
bpy.types.Scene.tweak_lattice_parent_ob = PointerProperty(type=bpy.types.Object, name="Parent") # Maybe it would be safer to make this a StringProperty but whatever.
|
||||||
|
bpy.types.Scene.tweak_lattice_parent_bone = StringProperty(name="Bone")
|
||||||
|
|
||||||
def unregister():
|
def unregister():
|
||||||
from bpy.utils import unregister_class
|
from bpy.utils import unregister_class
|
||||||
for c in reversed(classes):
|
for c in reversed(classes):
|
||||||
unregister_class(c)
|
unregister_class(c)
|
||||||
|
|
||||||
|
del bpy.types.Scene.tweak_lattice_radius
|
||||||
|
del bpy.types.Scene.tweak_lattice_parent_ob
|
||||||
|
del bpy.types.Scene.tweak_lattice_parent_bone
|
Loading…
Reference in New Issue
Block a user