The screencast explains what I try to do very well. https://drive.google.com/file/d/0Byzv_NlyKp_2Sk5NZEREcE5YZG8/view Below is my code: Idea is press a button empty is created user jumps right into translation mode with CTRL you can snap to an object vertex with LMB user places new empty 3D cursor will be set to newly positioned empty empty will be deleted Everything works right besides the last to steps It seems to me that after I start the transformation, while still being in transformation, Blender already executed the following steps. So I think I need some sort of a break/pause after the transformation and when I LBM the script execution continues. bl_info = { "name": "Fullscreen Modeling Toolbox", "author": "Claas Kuhnen", "version": (1, 0), "blender": (2, 75, 0), "location": "View3D > Tools Shelf > Modeling Toolbox", "description": "Fullscreen Modeling with Access to Object Properties", "warning": "Beta - Concepy Study", "category": "User Interface", } import bpy from bpy.types import Menu, Panel, Operator, UIList from rna_prop_ui import PropertyPanel from bl_ui.properties_data_modifier import DATA_PT_modifiers from bpy.props import * ######################## # Operator Definitions # ######################## # Command Snap Origin class SnapOriginObject(bpy.types.Operator): bl_idname = "snap.originobject" bl_label = "Snap Object Origin" bl_options = {'REGISTER'} def execute(self, context): bpy.ops.object.select_all(action='DESELECT') bpy.ops.object.empty_add() bpy.ops.transform.translate('INVOKE_DEFAULT') bpy.ops.view3d.snap_cursor_to_selected() bpy.ops.object.delete() return{'FINISHED'} ######################## # Interface Definition # ######################## # DATA class ObjectData(bpy.types.Panel): bl_label = "Object + Mesh Data" bl_idname = "ObjectData" bl_space_type = 'VIEW_3D' bl_region_type = 'TOOLS' bl_category = "Modeling Toolbox" def draw(self, context): layout = self.layout obj = context.object row = layout.row() self.layout.operator("snap.originobject") def register(): bpy.utils.register_module(__name__) def unregister(): bpy.utils.unregister_module(__name__) if __name__ == "__main__": register()