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 wmGizmo * wm_gizmo_create (const wmGizmoType *gzt, PointerRNA *properties)
 
wmGizmo * WM_gizmo_new_ptr (const wmGizmoType *gzt, wmGizmoGroup *gzgroup, PointerRNA *properties)
 
wmGizmo * WM_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 wmGizmoOpElem * WM_gizmo_operator_get (wmGizmo *gz, int part_index)
 
PointerRNA * WM_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().