Skip to content

Instantly share code, notes, and snippets.

@semagnum
Created September 22, 2023 19:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save semagnum/0ca2beb155aa337961b778ec182fb7e0 to your computer and use it in GitHub Desktop.
Save semagnum/0ca2beb155aa337961b778ec182fb7e0 to your computer and use it in GitHub Desktop.
Blender operator that aligns transform to selected face
import bpy
class SimpleOperator(bpy.types.Operator):
bl_idname = "mesh.align_transform_to_selected_face"
bl_label = "Align Rotation to Selected Face"
@classmethod
def poll(cls, context):
return context.active_object is not None and any(p.select for p in context.active_object.data.polygons)
def execute(self, context):
scene = context.scene
scene.tool_settings.use_transform_data_origin = True
prev = scene.transform_orientation_slots[0].type
bpy.ops.transform.create_orientation(use=True)
bpy.ops.object.editmode_toggle()
transform_type = scene.transform_orientation_slots[0].type
bpy.ops.transform.transform(mode='ALIGN', orient_type='Face', orient_matrix_type=transform_type)
bpy.ops.transform.delete_orientation()
scene.tool_settings.use_transform_data_origin = False
scene.transform_orientation_slots[0].type = prev
bpy.ops.object.editmode_toggle()
return {'FINISHED'}
def menu_func(self, context):
self.layout.operator(SimpleOperator.bl_idname, text=SimpleOperator.bl_label)
# Register and add to the "object" menu (required to also use F3 search for quick access).
def register():
bpy.utils.register_class(SimpleOperator)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(SimpleOperator)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment