Kernel: include header file in BKE_appdir.h defining size_t
[blender.git] / doc / python_api / examples / bpy.types.Operator.1.py
1 """
2 Invoke Function
3 +++++++++++++++
4
5 :class:`Operator.invoke` is used to initialize the operator from the context
6 at the moment the operator is called.
7 invoke() is typically used to assign properties which are then used by
8 execute().
9 Some operators don't have an execute() function, removing the ability to be
10 repeated from a script or macro.
11
12 This example shows how to define an operator which gets mouse input to
13 execute a function and that this operator can be invoked or executed from
14 the python api.
15
16 Also notice this operator defines its own properties, these are different
17 to typical class properties because blender registers them with the
18 operator, to use as arguments when called, saved for operator undo/redo and
19 automatically added into the user interface.
20 """
21 import bpy
22
23
24 class SimpleMouseOperator(bpy.types.Operator):
25     """ This operator shows the mouse location,
26         this string is used for the tooltip and API docs
27     """
28     bl_idname = "wm.mouse_position"
29     bl_label = "Invoke Mouse Operator"
30
31     x: bpy.props.IntProperty()
32     y: bpy.props.IntProperty()
33
34     def execute(self, context):
35         # rather than printing, use the report function,
36         # this way the message appears in the header,
37         self.report({'INFO'}, "Mouse coords are %d %d" % (self.x, self.y))
38         return {'FINISHED'}
39
40     def invoke(self, context, event):
41         self.x = event.mouse_x
42         self.y = event.mouse_y
43         return self.execute(context)
44
45
46 bpy.utils.register_class(SimpleMouseOperator)
47
48 # Test call to the newly defined operator.
49 # Here we call the operator and invoke it, meaning that the settings are taken
50 # from the mouse.
51 bpy.ops.wm.mouse_position('INVOKE_DEFAULT')
52
53 # Another test call, this time call execute() directly with pre-defined settings.
54 bpy.ops.wm.mouse_position('EXEC_DEFAULT', x=20, y=66)