I am fairly new to python scripting, so getting into blender is a uphill battle at the moment. I want to pass a property into the REDO panel that, when checked, tells the operator to take effect only to the active object. But I keep getting an error message saying that the property is not defined (it is my understanding that it should be, because of the self argument in the function). Any help is very much appreciated!
"name": "Snap Origin to selected",
"author": "Juan",
"version": (1, 0),
"blender": (2, 90, 0),
#"location": "View3D > Mesh > Snap > Snap Origin to selected",
"description": "snaps the origin of the object to a selection",
"category": "Mesh",
}
import bpy
class MESH_OT_snapOrigin(bpy.types.Operator):
"""It has to begin with a selected element in edit mode"""
bl_idname = "mesh.snap_origin_to_selected"
bl_label = "Snap Origin to selected"
bl_options = {'REGISTER', 'UNDO'}
only_active: bpy.props.BoolProperty(
name="set only active",
description="set only the origin of the active object",
default=False,
)
@classmethod
def poll(cls, context):
return context.area.type == 'VIEW_3D'
def execute(self, context):
bpy.ops.view3d.snap_cursor_to_selected()
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
if only_active.value is True:
bpy.ops.objects.active.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
else:
bpy.ops.object.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
# bpy.ops.object.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
print("updated!")
return {'FINISHED'}
# Registration
def set_origin_button(self, context):
self.layout.operator(
MESH_OT_snapOrigin.bl_idname,
text="snap origin to selected",
icon='PIVOT_CURSOR')
def register():
bpy.utils.register_class(MESH_OT_snapOrigin)
bpy.types.VIEW3D_MT_edit_mesh.append(set_origin_button)
def unregister():
bpy.utils.unregister_class(MESH_OT_snapOrigin)
bpy.types.VIEW3D_MT_edit_mesh.remove(set_origin_button)
I also don't know if bpy.ops.objects.active.origin_set(type='ORIGIN_CURSOR', center='MEDIAN') is going to work, given that I get an error before that, just so you know...it is probably also wrong.
self.only_active
to access the property and there is no need for a comparison withTrue
you can simply writeif self.only_active
. Does that answer your question? $\endgroup$