Blender  V3.3
Functions
wm_gizmo.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BKE_context.h"
#include "GPU_batch.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_prototypes.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_main.h"
#include "WM_api.h"
#include "WM_toolsystem.h"
#include "WM_types.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "UI_interface.h"
#include "wm.h"
#include "wm_gizmo_intern.h"
#include "wm_gizmo_wmapi.h"

Go to the source code of this file.

Functions

static void wm_gizmo_register (wmGizmoGroup *gzgroup, wmGizmo *gz)
 
static wmGizmowm_gizmo_create (const wmGizmoType *gzt, PointerRNA *properties)
 
wmGizmoWM_gizmo_new_ptr (const wmGizmoType *gzt, wmGizmoGroup *gzgroup, PointerRNA *properties)
 
wmGizmoWM_gizmo_new (const char *idname, wmGizmoGroup *gzgroup, PointerRNA *properties)
 
static void gizmo_init (wmGizmo *gz)
 
void WM_gizmo_free (wmGizmo *gz)
 
void WM_gizmo_unlink (ListBase *gizmolist, wmGizmoMap *gzmap, wmGizmo *gz, bContext *C)
 
bool wm_gizmo_select_set_ex (wmGizmoMap *gzmap, wmGizmo *gz, bool select, bool use_array, bool use_callback)
 
bool WM_gizmo_select_unlink (wmGizmoMap *gzmap, wmGizmo *gz)
 
bool WM_gizmo_select_set (wmGizmoMap *gzmap, wmGizmo *gz, bool select)
 
bool WM_gizmo_highlight_set (wmGizmoMap *gzmap, wmGizmo *gz)
 
bool wm_gizmo_select_and_highlight (bContext *C, wmGizmoMap *gzmap, wmGizmo *gz)
 
void WM_gizmo_modal_set_from_setup (struct wmGizmoMap *gzmap, struct bContext *C, struct wmGizmo *gz, int part_index, const wmEvent *event)
 
void wm_gizmo_calculate_scale (wmGizmo *gz, const bContext *C)
 
static void gizmo_update_prop_data (wmGizmo *gz)
 
void wm_gizmo_update (wmGizmo *gz, const bContext *C, const bool refresh_map)
 
int wm_gizmo_is_visible (wmGizmo *gz)
 
void WM_gizmo_calc_matrix_final_params (const wmGizmo *gz, const struct WM_GizmoMatrixParams *params, float r_mat[4][4])
 
void WM_gizmo_calc_matrix_final_no_offset (const wmGizmo *gz, float r_mat[4][4])
 
void WM_gizmo_calc_matrix_final (const wmGizmo *gz, float r_mat[4][4])
 
Gizmo Creation API

API for defining data on gizmo creation.

struct wmGizmoOpElemWM_gizmo_operator_get (wmGizmo *gz, int part_index)
 
PointerRNAWM_gizmo_operator_set (wmGizmo *gz, int part_index, wmOperatorType *ot, IDProperty *properties)
 
int WM_gizmo_operator_invoke (bContext *C, wmGizmo *gz, wmGizmoOpElem *gzop, const wmEvent *event)
 
static void wm_gizmo_set_matrix_rotation_from_z_axis__internal (float matrix[4][4], const float z_axis[3])
 
static void wm_gizmo_set_matrix_rotation_from_yz_axis__internal (float matrix[4][4], const float y_axis[3], const float z_axis[3])
 
void WM_gizmo_set_matrix_rotation_from_z_axis (wmGizmo *gz, const float z_axis[3])
 
void WM_gizmo_set_matrix_rotation_from_yz_axis (wmGizmo *gz, const float y_axis[3], const float z_axis[3])
 
void WM_gizmo_set_matrix_location (wmGizmo *gz, const float origin[3])
 
void WM_gizmo_set_matrix_offset_rotation_from_z_axis (wmGizmo *gz, const float z_axis[3])
 
void WM_gizmo_set_matrix_offset_rotation_from_yz_axis (wmGizmo *gz, const float y_axis[3], const float z_axis[3])
 
void WM_gizmo_set_matrix_offset_location (wmGizmo *gz, const float offset[3])
 
void WM_gizmo_set_flag (wmGizmo *gz, const int flag, const bool enable)
 
void WM_gizmo_set_scale (wmGizmo *gz, const float scale)
 
void WM_gizmo_set_line_width (wmGizmo *gz, const float line_width)
 
void WM_gizmo_get_color (const wmGizmo *gz, float color[4])
 
void WM_gizmo_set_color (wmGizmo *gz, const float color[4])
 
void WM_gizmo_get_color_highlight (const wmGizmo *gz, float color_hi[4])
 
void WM_gizmo_set_color_highlight (wmGizmo *gz, const float color_hi[4])
 
Gizmo Callback Assignment
void WM_gizmo_set_fn_custom_modal (struct wmGizmo *gz, wmGizmoFnModal fn)
 
Gizmo Property Access

Matches WM_operator_properties conventions.

void WM_gizmo_properties_create_ptr (PointerRNA *ptr, wmGizmoType *gzt)
 
void WM_gizmo_properties_create (PointerRNA *ptr, const char *gtstring)
 
void WM_gizmo_properties_alloc (PointerRNA **ptr, IDProperty **properties, const char *gtstring)
 
void WM_gizmo_properties_sanitize (PointerRNA *ptr, const bool no_context)
 
bool WM_gizmo_properties_default (PointerRNA *ptr, const bool do_update)
 
void WM_gizmo_properties_reset (wmGizmo *gz)
 
void WM_gizmo_properties_clear (PointerRNA *ptr)
 
void WM_gizmo_properties_free (PointerRNA *ptr)
 
General Utilities
bool WM_gizmo_context_check_drawstep (const struct bContext *C, eWM_GizmoFlagMapDrawStep step)
 

Function Documentation

◆ gizmo_init()

static void gizmo_init ( wmGizmo gz)
static

Initialize default values and allocate needed memory for members.

Definition at line 103 of file wm_gizmo.c.

References wmGizmo::color, wmGizmo::color_hi, copy_v4_v4(), wmGizmo::line_width, and wmGizmo::scale_basis.

Referenced by wm_gizmo_register().

◆ gizmo_update_prop_data()

static void gizmo_update_prop_data ( wmGizmo gz)
static

◆ WM_gizmo_calc_matrix_final()

void WM_gizmo_calc_matrix_final ( const wmGizmo gz,
float  r_mat[4][4] 
)

◆ WM_gizmo_calc_matrix_final_no_offset()

void WM_gizmo_calc_matrix_final_no_offset ( const wmGizmo gz,
float  r_mat[4][4] 
)

◆ WM_gizmo_calc_matrix_final_params()

void WM_gizmo_calc_matrix_final_params ( const wmGizmo gz,
const struct WM_GizmoMatrixParams params,
float  r_mat[4][4] 
)

◆ wm_gizmo_calculate_scale()

void wm_gizmo_calculate_scale ( wmGizmo gz,
const bContext C 
)

◆ WM_gizmo_context_check_drawstep()

bool WM_gizmo_context_check_drawstep ( const struct bContext C,
eWM_GizmoFlagMapDrawStep  step 
)

◆ wm_gizmo_create()

static wmGizmo* wm_gizmo_create ( const wmGizmoType gzt,
PointerRNA properties 
)
static

◆ WM_gizmo_free()

void WM_gizmo_free ( struct wmGizmo gz)
Warning
this doesn't check wmGizmoMap (highlight, selection etc). Typical use is when freeing the windowing data, where caller can manage clearing selection, highlight... etc.

Definition at line 126 of file wm_gizmo.c.

References BPY_DECREF_RNA_INVALIDATE(), wmGizmoProperty::custom_func, wmGizmoType::free, wmGizmoProperty::free_fn, MEM_freeN, NULL, wmGizmo::op_data, wmGizmo::op_data_len, wmGizmoOpElem::ptr, wmGizmo::ptr, wmGizmo::py_instance, wmGizmoType::target_property_defs_len, wmGizmo::type, WM_gizmo_properties_free(), WM_gizmo_target_property_array(), and WM_operator_properties_free().

Referenced by WM_gizmo_unlink(), and wm_gizmogroup_free().

◆ WM_gizmo_get_color()

void WM_gizmo_get_color ( const wmGizmo gz,
float  color[4] 
)

Definition at line 324 of file wm_gizmo.c.

References color, wmGizmo::color, and copy_v4_v4().

◆ WM_gizmo_get_color_highlight()

void WM_gizmo_get_color_highlight ( const wmGizmo gz,
float  color_hi[4] 
)

Definition at line 333 of file wm_gizmo.c.

References wmGizmo::color_hi, and copy_v4_v4().

◆ WM_gizmo_highlight_set()

bool WM_gizmo_highlight_set ( wmGizmoMap gzmap,
wmGizmo gz 
)

◆ wm_gizmo_is_visible()

int wm_gizmo_is_visible ( wmGizmo gz)

◆ WM_gizmo_modal_set_from_setup()

void WM_gizmo_modal_set_from_setup ( struct wmGizmoMap gzmap,
struct bContext C,
struct wmGizmo gz,
int  part_index,
const wmEvent event 
)

◆ WM_gizmo_new()

wmGizmo* WM_gizmo_new ( const char *  idname,
struct wmGizmoGroup gzgroup,
struct PointerRNA properties 
)

◆ WM_gizmo_new_ptr()

wmGizmo* WM_gizmo_new_ptr ( const wmGizmoType gzt,
wmGizmoGroup gzgroup,
PointerRNA properties 
)

◆ WM_gizmo_operator_get()

struct wmGizmoOpElem* WM_gizmo_operator_get ( wmGizmo gz,
int  part_index 
)

◆ WM_gizmo_operator_invoke()

int WM_gizmo_operator_invoke ( bContext C,
wmGizmo gz,
wmGizmoOpElem gzop,
const wmEvent event 
)

◆ WM_gizmo_operator_set()

PointerRNA* WM_gizmo_operator_set ( wmGizmo gz,
int  part_index,
wmOperatorType ot,
IDProperty properties 
)

◆ WM_gizmo_properties_alloc()

void WM_gizmo_properties_alloc ( struct PointerRNA **  ptr,
struct IDProperty **  properties,
const char *  gtstring 
)

Similar to WM_gizmo_properties_create except its uses ID properties used for key-maps and macros.

Definition at line 590 of file wm_gizmo.c.

References IDP_GROUP, IDP_New(), MEM_callocN, NULL, ptr, and WM_gizmo_properties_create().

◆ WM_gizmo_properties_clear()

void WM_gizmo_properties_clear ( PointerRNA ptr)

Definition at line 679 of file wm_gizmo.c.

References PointerRNA::data, IDP_ClearProperty(), and ptr.

◆ WM_gizmo_properties_create()

void WM_gizmo_properties_create ( PointerRNA ptr,
const char *  gtstring 
)

◆ WM_gizmo_properties_create_ptr()

void WM_gizmo_properties_create_ptr ( PointerRNA ptr,
wmGizmoType gzt 
)

Definition at line 573 of file wm_gizmo.c.

References NULL, ptr, RNA_pointer_create(), and wmGizmoType::srna.

Referenced by WM_gizmo_properties_create().

◆ WM_gizmo_properties_default()

bool WM_gizmo_properties_default ( struct PointerRNA ptr,
bool  do_update 
)

Set all props to their default.

Parameters
do_updateOnly update un-initialized props.
Note
There's nothing specific to gizmos here. This could be made a general function.

Definition at line 634 of file wm_gizmo.c.

References PROP_POINTER, ptr, RNA_property_is_set(), RNA_property_pointer_get(), RNA_property_pointer_type(), RNA_property_reset(), RNA_property_type(), RNA_STRUCT_BEGIN, and RNA_STRUCT_END.

◆ WM_gizmo_properties_free()

void WM_gizmo_properties_free ( PointerRNA ptr)

Definition at line 688 of file wm_gizmo.c.

References PointerRNA::data, IDP_FreeProperty(), NULL, and ptr.

Referenced by WM_gizmo_free().

◆ WM_gizmo_properties_reset()

void WM_gizmo_properties_reset ( struct wmGizmo gz)

◆ WM_gizmo_properties_sanitize()

void WM_gizmo_properties_sanitize ( PointerRNA ptr,
const bool  no_context 
)

◆ wm_gizmo_register()

static void wm_gizmo_register ( wmGizmoGroup gzgroup,
wmGizmo gz 
)
static

Register gizmo.

Note
Not to be confused with type registration from RNA.

Definition at line 120 of file wm_gizmo.c.

References gizmo_init(), and wm_gizmogroup_gizmo_register().

Referenced by WM_gizmo_new_ptr().

◆ wm_gizmo_select_and_highlight()

bool wm_gizmo_select_and_highlight ( bContext C,
wmGizmoMap gzmap,
wmGizmo gz 
)

◆ WM_gizmo_select_set()

bool WM_gizmo_select_set ( wmGizmoMap gzmap,
wmGizmo gz,
bool  select 
)

◆ wm_gizmo_select_set_ex()

bool wm_gizmo_select_set_ex ( struct wmGizmoMap gzmap,
struct wmGizmo gz,
bool  select,
bool  use_array,
bool  use_callback 
)

Add/Remove gizmo to selection. Reallocates memory for selected gizmos so better not call for selecting multiple ones.

Returns
if the selection has changed.

Definition at line 357 of file wm_gizmo.c.

References select(), wmGizmoType::select_refresh, wmGizmo::state, wmGizmo::type, WM_GIZMO_STATE_SELECT, wm_gizmomap_select_array_push_back(), and wm_gizmomap_select_array_remove().

Referenced by WM_gizmo_select_set(), WM_gizmo_select_unlink(), and wm_gizmomap_deselect_all().

◆ WM_gizmo_select_unlink()

bool WM_gizmo_select_unlink ( struct wmGizmoMap gzmap,
struct wmGizmo gz 
)

Remove from selection array without running callbacks.

Definition at line 392 of file wm_gizmo.c.

References wm_gizmo_select_set_ex().

Referenced by WM_gizmo_unlink(), and wm_gizmogroup_free().

◆ WM_gizmo_set_color()

void WM_gizmo_set_color ( wmGizmo gz,
const float  color[4] 
)

◆ WM_gizmo_set_color_highlight()

void WM_gizmo_set_color_highlight ( wmGizmo gz,
const float  color_hi[4] 
)

◆ WM_gizmo_set_flag()

void WM_gizmo_set_flag ( wmGizmo gz,
const int  flag,
const bool  enable 
)

◆ WM_gizmo_set_fn_custom_modal()

void WM_gizmo_set_fn_custom_modal ( struct wmGizmo gz,
wmGizmoFnModal  fn 
)

◆ WM_gizmo_set_line_width()

void WM_gizmo_set_line_width ( wmGizmo gz,
const float  line_width 
)

◆ WM_gizmo_set_matrix_location()

void WM_gizmo_set_matrix_location ( wmGizmo gz,
const float  origin[3] 
)

◆ WM_gizmo_set_matrix_offset_location()

void WM_gizmo_set_matrix_offset_location ( wmGizmo gz,
const float  offset[3] 
)

◆ WM_gizmo_set_matrix_offset_rotation_from_yz_axis()

void WM_gizmo_set_matrix_offset_rotation_from_yz_axis ( struct wmGizmo gz,
const float  y_axis[3],
const float  z_axis[3] 
)

wmGizmo.matrix_offset utility, set the orientation by it's Y/Z axis.

Definition at line 293 of file wm_gizmo.c.

References wmGizmo::matrix_offset, and wm_gizmo_set_matrix_rotation_from_yz_axis__internal().

Referenced by gizmo_mesh_bisect_update_from_op().

◆ WM_gizmo_set_matrix_offset_rotation_from_z_axis()

void WM_gizmo_set_matrix_offset_rotation_from_z_axis ( struct wmGizmo gz,
const float  z_axis[3] 
)

wmGizmo.matrix_offset utility, set the orientation by it's Z axis.

Definition at line 289 of file wm_gizmo.c.

References wmGizmo::matrix_offset, and wm_gizmo_set_matrix_rotation_from_z_axis__internal().

◆ WM_gizmo_set_matrix_rotation_from_yz_axis()

void WM_gizmo_set_matrix_rotation_from_yz_axis ( struct wmGizmo gz,
const float  y_axis[3],
const float  z_axis[3] 
)

◆ wm_gizmo_set_matrix_rotation_from_yz_axis__internal()

static void wm_gizmo_set_matrix_rotation_from_yz_axis__internal ( float  matrix[4][4],
const float  y_axis[3],
const float  z_axis[3] 
)
static

◆ WM_gizmo_set_matrix_rotation_from_z_axis()

void WM_gizmo_set_matrix_rotation_from_z_axis ( struct wmGizmo gz,
const float  z_axis[3] 
)

◆ wm_gizmo_set_matrix_rotation_from_z_axis__internal()

static void wm_gizmo_set_matrix_rotation_from_z_axis__internal ( float  matrix[4][4],
const float  z_axis[3] 
)
static

◆ WM_gizmo_set_scale()

void WM_gizmo_set_scale ( wmGizmo gz,
const float  scale 
)

◆ WM_gizmo_unlink()

void WM_gizmo_unlink ( ListBase gizmolist,
struct wmGizmoMap gzmap,
struct wmGizmo gz,
struct bContext C 
)

◆ wm_gizmo_update()

void wm_gizmo_update ( wmGizmo gz,
const bContext C,
const bool  refresh_map 
)

Definition at line 474 of file wm_gizmo.c.

References C, gizmo_update_prop_data(), and wm_gizmo_calculate_scale().

Referenced by gizmo_prepare_drawing().