73 const float twmat[4][4],
75 const bool ignore_hidden);
79#define MAN_TRANS_X (1 << 0)
80#define MAN_TRANS_Y (1 << 1)
81#define MAN_TRANS_Z (1 << 2)
82#define MAN_TRANS_C (MAN_TRANS_X | MAN_TRANS_Y | MAN_TRANS_Z)
84#define MAN_ROT_X (1 << 3)
85#define MAN_ROT_Y (1 << 4)
86#define MAN_ROT_Z (1 << 5)
87#define MAN_ROT_C (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z)
89#define MAN_SCALE_X (1 << 8)
90#define MAN_SCALE_Y (1 << 9)
91#define MAN_SCALE_Z (1 << 10)
92#define MAN_SCALE_C (MAN_SCALE_X | MAN_SCALE_Y | MAN_SCALE_Z)
115#define MAN_AXIS_RANGE_TRANS_START MAN_AXIS_TRANS_X
116#define MAN_AXIS_RANGE_TRANS_END (MAN_AXIS_TRANS_ZX + 1)
123#define MAN_AXIS_RANGE_ROT_START MAN_AXIS_ROT_X
124#define MAN_AXIS_RANGE_ROT_END (MAN_AXIS_ROT_T + 1)
133#define MAN_AXIS_RANGE_SCALE_START MAN_AXIS_SCALE_X
134#define MAN_AXIS_RANGE_SCALE_END (MAN_AXIS_SCALE_ZX + 1)
172#define MAN_ITER_AXES_BEGIN(axis, axis_idx) \
176 for (axis_idx = 0; axis_idx < MAN_AXIS_LAST; axis_idx++) { \
177 axis = gizmo_get_axis_from_index(ggd, axis_idx);
179#define MAN_ITER_AXES_END \
187 return ggd->
gizmos[axis_idx];
251 bool is_plane =
false;
255 float idot_axis = idot[aidx_norm];
257 idot_axis = 1.0f - idot_axis;
329 const float alpha = 0.6f;
330 const float alpha_hi = 1.0f;
339 bool is_plane =
false;
343 if (axis_idx_norm < 3) {
346 float idot_axis = idot[axis_idx_norm];
348 idot_axis = 1.0f - idot_axis;
350 alpha_fac = ((idot_axis > idot_max) ? 1.0f :
351 (idot_axis < idot_min) ? 0.0f :
352 ((idot_axis - idot_min) / (idot_max - idot_min)));
391 r_col[3] = alpha * alpha_fac;
392 r_col_hi[3] = alpha_hi * alpha_fac;
417 r_axis[0] = r_axis[1] =
true;
421 r_axis[1] = r_axis[2] =
true;
425 r_axis[2] = r_axis[0] =
true;
439 for (
int i = 0;
i < 3;
i++) {
453 for (
int i = 0;
i < 3;
i++) {
503 if (obpose !=
nullptr) {
523 const short orient_index,
524 const bool use_curve_handles,
525 const bool use_only_center,
527 const float (**r_mat)[4],
530 const auto run_coord_with_matrix =
531 [&](
const float co[3],
const bool use_matrix,
const float matrix[4][4]) {
553#define FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) \
555 invert_m4_m4(obedit->runtime->world_to_object.ptr(), obedit->object_to_world().ptr()); \
556 Vector<Object *> objects = BKE_view_layer_array_from_objects_in_edit_mode( \
557 scene, view_layer, CTX_wm_view3d(C)); \
558 for (Object * ob_iter : objects) { \
559 const bool use_mat_local = (ob_iter != obedit);
561#define FOREACH_EDIT_OBJECT_END() \
572 if (
bm->totvertsel == 0) {
579 float mat_local[4][4];
582 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
588 run_coord_with_matrix(eve->
co, use_mat_local, mat_local);
600 float mat_local[4][4];
603 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
608 run_coord_with_matrix(ebo->tail, use_mat_local, mat_local);
617 run_coord_with_matrix(ebo->head, use_mat_local, mat_local);
636 Curve *cu =
static_cast<Curve *
>(ob_iter->data);
641 float mat_local[4][4];
644 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
659 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
664 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
669 const float *co = bezt->
vec[!use_curve_handles ? 1 : 0];
670 run_coord_with_matrix(co, use_mat_local, mat_local);
674 const float *co = bezt->
vec[!use_curve_handles ? 1 : 2];
675 run_coord_with_matrix(co, use_mat_local, mat_local);
687 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
698 else if (obedit->type ==
OB_MBALL) {
702 float mat_local[4][4];
705 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
710 run_coord_with_matrix(&ml->x, use_mat_local, mat_local);
723 float mat_local[4][4];
726 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
731 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
741 const Curves &curves_id = *
static_cast<Curves *
>(ob_iter->data);
748 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
754 totsel += selected_points.
size();
756 run_coord_with_matrix(positions[point_i], use_mat_local, mat_local.
ptr());
767 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
777 totsel +=
mask.size();
778 mask.foreach_index([&](
const int point) {
779 run_coord_with_matrix(positions[point], use_mat_local, mat_local.
ptr());
790 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
804 mat_local * grease_pencil.layer(info.
layer_index).to_object_space(*ob_iter);
810 totsel += selected_points.
size();
812 run_coord_with_matrix(positions[point_i],
true, layer_transform.
ptr());
819#undef FOREACH_EDIT_OBJECT_BEGIN
820#undef FOREACH_EDIT_OBJECT_END
827 for (
Object *ob_iter : objects) {
828 const bool use_mat_local = (ob_iter != ob);
834 float mat_local[4][4];
836 mul_m4_m4m4(mat_local, ob->world_to_object().ptr(), ob_iter->object_to_world().ptr());
844 run_coord_with_matrix(pchan->pose_head, use_mat_local, mat_local);
860 run_coord_with_matrix(ob->
sculpt->
pivot_pos,
false, ob->object_to_world().ptr());
871 for (a = 0; a < edit->
totpoint; a++, point++) {
876 for (k = 0, ek = point->
keys; k < point->totkey; k++, ek++) {
891 ob = base ? base->
object :
nullptr;
906 std::optional<BoundBox> bb;
907 if (use_only_center ==
false) {
914 if (use_only_center || !bb) {
915 user_fn(base->object->object_to_world().location());
918 for (
uint j = 0; j < 8; j++) {
920 mul_v3_m4v3(co, base->object->object_to_world().ptr(), bb->vec[j]);
940 *r_mat = ob->object_to_world().ptr();
958 const short orient_index =
params->orientation_index ?
959 (
params->orientation_index - 1) :
973 scene, view_layer, v3d, rv3d, ob, obedit, orient_index, pivot_point, mat);
986 float diff_mat[3][3];
987 copy_m3_m4(diff_mat, ob->object_to_world().ptr());
1003 gizmo_3d_tbounds_calc_fn,
1039 float view_vec[3], axis_vec[3];
1041 for (
int i = 0;
i < 3;
i++) {
1050 const short pivot_type,
1051 float r_pivot_pos[3])
1053 switch (pivot_type) {
1061 if (ob !=
nullptr) {
1075 if (tbounds ==
nullptr) {
1079 tbounds = &tbounds_stack;
1095 float co_sum[3] = {0.0f, 0.0f, 0.0f};
1096 const auto gizmo_3d_calc_center_fn = [&](
const float3 &co) {
add_v3_v3(co_sum, co); };
1097 const float(*r_mat)[4] =
nullptr;
1103 gizmo_3d_calc_center_fn,
1107 mul_v3_v3fl(r_pivot_pos, co_sum, 1.0f /
float(totsel));
1129static void gizmo_line_range(
const int twtype,
const short axis_type,
float *r_start,
float *r_end)
1134 switch (axis_type) {
1137 start = end - 0.125f;
1141 const float rotate_offset = 0.215f;
1142 start += rotate_offset;
1143 end += rotate_offset + 0.2f;
1171 msg_sub_value_gz_tag_refresh.
owner = region;
1175 int orient_flag = 0;
1190 &scene->
id, &RNA_TransformOrientationSlot, orient_slot);
1196 &rna_Scene_transform_orientation_slots,
1207 &scene->
id, &RNA_View3DCursor, &scene->
cursor);
1213 &rna_TransformOrientationSlot_type,
1214 &rna_TransformOrientationSlot_use,
1219 mbus, &orient_ref_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1229 &rna_ToolSettings_transform_pivot_point,
1233 mbus, &toolsettings_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1239 &rna_ToolSettings_workspace_tool_type,
1243 mbus, &toolsettings_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1254 &rna_SpaceView3D_show_gizmo_object_translate,
1255 &rna_SpaceView3D_show_gizmo_object_rotate,
1256 &rna_SpaceView3D_show_gizmo_object_scale,
1278 const float axis[3],
1279 const float center_global[3],
1280 const float mval_init[2],
1281 float r_mat_basis[4][4])
1287 sub_v3_v3(r_mat_basis[1], center_global);
1289 cross_v3_v3v3(r_mat_basis[0], r_mat_basis[1], r_mat_basis[2]);
1297 r_mat_basis[0][3] = 0.0f;
1298 r_mat_basis[1][3] = 0.0f;
1299 r_mat_basis[2][3] = 0.0f;
1300 r_mat_basis[3][3] = 1.0f;
1310#define MAN_AXIS_SCALE_PLANE_SCALE 0.7f
1321 ggd->
rotation = *(
const float *)value;
1478 switch (axis_type) {
1526 switch (axis_type) {
1546 float end, start_co[3] = {0.0f, 0.0f, 0.0f};
1571 switch (axis_type) {
1596#define GIZMO_NEW_ARROW(v) \
1598 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_arrow, gzgroup, nullptr); \
1601#define GIZMO_NEW_DIAL(v) \
1603 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_dial, gzgroup, nullptr); \
1604 WM_gizmo_target_property_def_func(ggd->gizmos[v], "offset", ¶ms); \
1607#define GIZMO_NEW_PRIM(v) \
1609 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_prim, gzgroup, nullptr); \
1693 if (op !=
nullptr) {
1698 if (op !=
nullptr) {
1705 float *scale =
nullptr;
1722 "incremental_angle",
1743 } ot_store = {
nullptr};
1748 bool constraint_axis[3] = {
true,
false,
false};
1758 switch (axis_type) {
1760 if (ot_store.translate ==
nullptr) {
1768 if (ot_store.trackball ==
nullptr) {
1771 ot_rotate = ot_store.trackball;
1774 if (ot_store.rotate ==
nullptr) {
1777 ot_rotate = ot_store.rotate;
1783 if (ot_store.resize ==
nullptr) {
1816 if (tref &&
STREQ(tref->
idname,
"builtin.move")) {
1819 else if (tref &&
STREQ(tref->
idname,
"builtin.rotate")) {
1822 else if (tref &&
STREQ(tref->
idname,
"builtin.scale")) {
1825 else if (tref &&
STREQ(tref->
idname,
"builtin.transform")) {
1853 const float twmat[4][4],
1854 const float scale[3])
1910 const float twmat[4][4],
1911 const float scale[3],
1912 const bool ignore_hidden)
1990 float viewinv_m3[3][3];
2036 float color[4], color_hi[4];
2049 switch (orient_slot->
type) {
2062 const int axis_idx_active,
2063 const float mval[2])
2086 if (axis_idx == axis_idx_active) {
2118 const float mval[2] = {float(event->
mval[0]), float(event->
mval[1])};
2160 const bool flip = (
event->modifier &
KM_SHIFT) != 0;
2167 if (prop_constraint_axis) {
2168 bool constraint[3] = {
false};
2169 constraint[axis] =
true;
2172 constraint[
i] = !constraint[
i];
2241 gzgt->
name =
"3D View: Transform Gizmo";
2242 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo";
2262 {0,
"NONE", 0,
"None",
""},
2263 {0,
nullptr, 0,
nullptr,
nullptr},
2267 rna_enum_gizmo_items,
2277 gzgt->
name =
"3D View: Transform Gizmo Context";
2278 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo_context";
2299 if (gizmo_map ==
nullptr) {
2300 BLI_assert_msg(
false,
"#T_NO_GIZMO should already be set to return early before.");
2305 if (gizmo_modal_current) {
2347 if (gzgroup_xform ==
nullptr) {
2356 const int axis_map[3][7] = {
2393 axis_idx = axis_map[trans_mode][con_mode];
2397 if (axis_idx != -1) {
2407 if (update_orientation || gizmo_modal_current != gizmo_expected) {
2408 if (update_orientation) {
2423 "Avoid changing the highlight part");
2430 else if (gizmo_modal_current) {
2442 if (gzgroup_xform ==
nullptr) {
Functions to deal with Armatures.
Depsgraph * CTX_data_expect_evaluated_depsgraph(const bContext *C)
bScreen * CTX_wm_screen(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
ListBase * BKE_curve_editNurbs_get(Curve *cu)
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
Low-level operations for grease pencil.
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
Object * BKE_object_pose_armature_get(Object *ob)
void BKE_boundbox_init_from_minmax(BoundBox *bb, const float min[3], const float max[3])
std::optional< blender::Bounds< blender::float3 > > BKE_object_boundbox_get(const Object *ob)
blender::Vector< Object * > BKE_object_pose_array_get(const Scene *scene, ViewLayer *view_layer, View3D *v3d)
TransformOrientationSlot * BKE_scene_orientation_slot_get_from_flag(Scene *scene, int flag)
int BKE_scene_orientation_slot_get_index(const TransformOrientationSlot *orient_slot)
int BKE_scene_orientation_get_index_from_flag(Scene *scene, int flag)
int BKE_scene_orientation_get_index(Scene *scene, int slot_index)
Generic array manipulation API.
#define BLI_array_findindex(arr, arr_len, p)
#define BLI_STATIC_ASSERT(a, msg)
#define BLI_assert_msg(a, msg)
#define LISTBASE_FOREACH(type, var, list)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
void orthogonalize_m4(float R[4][4], int axis)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_m3_m3_pre(float R[3][3], const float A[3][3])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
bool equals_m3m3(const float mat1[3][3], const float mat2[3][3])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4])
bool invert_m3(float mat[3][3])
void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4])
void unit_m4(float m[4][4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE bool equals_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
void ortho_basis_v3v3_v3(float r_n1[3], float r_n2[3], const float n[3])
MINLINE void zero_v3(float r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v3(float n[3])
#define INIT_MINMAX(min, max)
#define ARRAY_SET_ITEMS(...)
#define IN_RANGE_INCL(a, b, c)
#define OB_MODE_ALL_PAINT
#define OB_MODE_ALL_SCULPT
#define BASE_SELECTED(v3d, base)
#define BASE_SELECTED_EDITABLE(v3d, base)
#define OBEDIT_FROM_OBACT(ob)
@ V3D_GIZMO_SHOW_OBJECT_ROTATE
@ V3D_GIZMO_SHOW_OBJECT_SCALE
@ V3D_GIZMO_SHOW_OBJECT_TRANSLATE
@ V3D_AROUND_CENTER_BOUNDS
@ V3D_AROUND_CENTER_MEDIAN
@ V3D_AROUND_LOCAL_ORIGINS
@ ED_GIZMO_DIAL_DRAW_FLAG_FILL
@ ED_GIZMO_DIAL_DRAW_FLAG_NOP
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_VALUE
@ ED_GIZMO_DIAL_DRAW_FLAG_CLIP
@ ED_GIZMO_ARROW_DRAW_FLAG_ORIGIN
@ ED_GIZMO_ARROW_DRAW_FLAG_STEM
@ ED_GIZMO_PRIMITIVE_STYLE_ANNULUS
@ ED_GIZMO_PRIMITIVE_STYLE_CIRCLE
@ ED_GIZMO_ARROW_STYLE_PLANE
@ ED_GIZMO_ARROW_STYLE_BOX
@ ED_GIZMO_ARROW_STYLE_NORMAL
bool ED_gizmo_poll_or_unlink_delayed_from_tool(const bContext *C, wmGizmoGroupType *gzgt)
PTCacheEdit * PE_get_current(Depsgraph *depsgraph, Scene *scene, Object *ob)
void ED_region_tag_redraw_editor_overlays(ARegion *region)
void ED_view3d_global_to_vector(const RegionView3D *rv3d, const float coord[3], float r_out[3])
float ED_view3d_pixel_size(const RegionView3D *rv3d, const float co[3])
bool ED_view3d_win_to_3d_on_plane(const ARegion *region, const float plane[4], const float mval[2], bool do_clip, float r_out[3])
void UI_GetThemeColor4fv(int colorid, float col[4])
eWM_GizmoFlagTweak
Gizmo tweak flag. Bit-flag passed to gizmo while tweaking.
@ WM_GIZMO_DRAW_OFFSET_SCALE
@ WM_GIZMO_SELECT_BACKGROUND
@ WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP
@ WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK
@ WM_GIZMOGROUPTYPE_PERSISTENT
#define BM_elem_flag_test(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
BPy_StructRNA * depsgraph
static IndexMask from_bools(Span< bool > bools, IndexMaskMemory &memory)
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const void *default_value=nullptr) const
const bke::CurvesGeometry & strokes() const
void foreach_index(Fn &&fn) const
void * MEM_callocN(size_t len, const char *str)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool bone_is_visible_editbone(const bArmature *armature, const EditBone *ebone)
GeometryDeformation get_evaluated_grease_pencil_drawing_deformation(const Object *ob_eval, const Object &ob_orig, const bke::greasepencil::Drawing &drawing_orig)
GeometryDeformation get_evaluated_curves_deformation(const Object *ob_eval, const Object &ob_orig)
IndexMask retrieve_selected_points(const bke::CurvesGeometry &curves, IndexMaskMemory &memory)
Vector< MutableDrawingInfo > retrieve_editable_drawings(const Scene &scene, GreasePencil &grease_pencil)
bool calc_active_center(Object *ob, bool select_only, float r_center[3])
void parallel_for_each(Range &&range, const Function &function)
MatBase< float, 4, 4 > float4x4
VecBase< int32_t, 2 > int2
VecBase< float, 3 > float3
static void update(bNodeTree *ntree)
static void rotate(float new_co[3], float a, const float ax[3], const float co[3])
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
void RNA_property_unset(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const bool *values)
PointerRNA RNA_id_pointer_create(ID *id)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
ARegionRuntimeHandle * runtime
struct EditLatt * editlatt
ObjectRuntimeHandle * runtime
struct SculptSession * sculpt
struct PTCacheEditKey * keys
PTCacheEditPoint * points
float tw_axis_matrix[3][3]
struct ToolSettings * toolsettings
TransformOrientationSlot orientation_slots[4]
blender::float3 pivot_pos
const c_style_mat & ptr() const
static MatBase identity()
bke::greasepencil::Drawing & drawing
wmGizmoGroupFnSetupKeymap setup_keymap
wmGizmoGroupFnMsgBusSubscribe message_subscribe
wmGizmoGroupFnRefresh refresh
wmGizmoGroupFnInvokePrepare invoke_prepare
wmGizmoMapType_Params gzmap_params
eWM_GizmoFlagGroupTypeFlag flag
wmGizmoGroupFnDrawPrepare draw_prepare
wmGizmoMap * parent_gzmap
struct wmGizmoProperty::@040041342156246322372067060316112006150370104023 custom_func
wmGizmoGroup * parent_gzgroup
float matrix_offset[4][4]
blender::Vector< wmGizmoOpElem, 4 > op_data
wmOperator * WM_operator_find_modal_by_type(wmWindow *win, const wmOperatorType *ot)
void WM_gizmo_set_matrix_offset_location(wmGizmo *gz, const float offset[3])
wmGizmoOpElem * WM_gizmo_operator_get(wmGizmo *gz, int part_index)
void WM_gizmo_modal_set_while_modal(wmGizmoMap *gzmap, bContext *C, wmGizmo *gz, const wmEvent *event)
void WM_gizmo_set_color_highlight(wmGizmo *gz, const float color_hi[4])
void WM_gizmo_set_line_width(wmGizmo *gz, const float line_width)
void WM_gizmo_set_fn_custom_modal(wmGizmo *gz, wmGizmoFnModal fn)
bool WM_gizmo_group_is_modal(const wmGizmoGroup *gzgroup)
bool WM_gizmo_highlight_set(wmGizmoMap *gzmap, wmGizmo *gz)
void WM_gizmo_set_scale(wmGizmo *gz, const float scale)
void WM_gizmo_set_matrix_location(wmGizmo *gz, const float origin[3])
void WM_gizmo_set_flag(wmGizmo *gz, const int flag, const bool enable)
void WM_gizmo_set_matrix_rotation_from_z_axis(wmGizmo *gz, const float z_axis[3])
PointerRNA * WM_gizmo_operator_set(wmGizmo *gz, int part_index, wmOperatorType *ot, IDProperty *properties)
void WM_gizmo_set_color(wmGizmo *gz, const float color[4])
wmKeyMap * WM_gizmogroup_setup_keymap_generic_maybe_drag(const wmGizmoGroupType *, wmKeyConfig *kc)
const ListBase * WM_gizmomap_group_list(wmGizmoMap *gzmap)
wmGizmo * WM_gizmomap_get_modal(const wmGizmoMap *gzmap)
void WM_gizmo_do_msg_notify_tag_refresh(bContext *, wmMsgSubscribeKey *, wmMsgSubscribeValue *msg_val)
const wmGizmoType * WM_gizmotype_find(const StringRef idname, bool quiet)
#define WM_msg_subscribe_rna_anon_prop(mbus, type_, prop_, value)
void WM_msg_subscribe_rna(wmMsgBus *mbus, PointerRNA *ptr, const PropertyRNA *prop, const wmMsgSubscribeValue *msg_val_params, const char *id_repr)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)