Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bl_info = {
- "name": "Set Origin to Bottom Centre",
- "description": "Adds \"Bottom Centre\" to the Set Origin's submenu.",
- "author" : "batFINGER",
- "version": (1, 0, 0),
- "location": "View3D > Object > Set Origin",
- "blender": (2, 80, 0),
- "tracker_url": "https://blender.stackexchange.com/a/182082/66364",
- "category": "Object",
- }
- import bpy
- from bpy.props import EnumProperty
- from mathutils import Vector, Matrix
- def origin_to_bottom(ob, matrix=Matrix()):
- me = ob.data
- mw = ob.matrix_world
- local_verts = [matrix @ Vector(v[:]) for v in ob.bound_box]
- o = sum(local_verts, Vector()) / 8
- o.z = min(v.z for v in local_verts)
- o = matrix.inverted() @ o
- me.transform(Matrix.Translation(-o))
- mw.translation = mw @ o
- def main(context, origin_type):
- for ob in context.selected_objects:
- if origin_type == 'BOTTOM_CENTRE':
- origin_to_bottom(ob)
- else:
- print(f"Add code for {origin_type}")
- class SimpleOperator(bpy.types.Operator):
- """Tooltip"""
- #bl_idname = "object.simple_operator"
- bl_idname = "object.origin_set" # override the old one
- bl_label = "Simple Object Operator"
- def items():
- items = []
- rna = bpy.ops.object.origin_set.get_rna_type()
- for i in rna.properties['type'].enum_items:
- items.append((i.identifier, i.name, i.description))
- items.append(('BOTTOM_CENTRE', "Bottom Centre", "Set origin to Bottom Centre"))
- return items
- type : EnumProperty(items=items(), default='GEOMETRY_ORIGIN')
- @classmethod
- def poll(cls, context):
- return context.active_object is not None
- def execute(self, context):
- main(context, self.type)
- return {'FINISHED'}
- def draw_menu(self, context):
- self.layout.operator_menu_enum("object.simple_operator", "type")
- def register():
- #bpy.types.VIEW3D_MT_object.prepend(draw_menu)
- bpy.utils.register_class(SimpleOperator)
- def unregister():
- bpy.utils.unregister_class(SimpleOperator)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement