74 const float twmat[4][4],
76 const bool ignore_hidden);
80#define MAN_TRANS_X (1 << 0)
81#define MAN_TRANS_Y (1 << 1)
82#define MAN_TRANS_Z (1 << 2)
83#define MAN_TRANS_C (MAN_TRANS_X | MAN_TRANS_Y | MAN_TRANS_Z)
85#define MAN_ROT_X (1 << 3)
86#define MAN_ROT_Y (1 << 4)
87#define MAN_ROT_Z (1 << 5)
88#define MAN_ROT_C (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z)
90#define MAN_SCALE_X (1 << 8)
91#define MAN_SCALE_Y (1 << 9)
92#define MAN_SCALE_Z (1 << 10)
93#define MAN_SCALE_C (MAN_SCALE_X | MAN_SCALE_Y | MAN_SCALE_Z)
116#define MAN_AXIS_RANGE_TRANS_START MAN_AXIS_TRANS_X
117#define MAN_AXIS_RANGE_TRANS_END (MAN_AXIS_TRANS_ZX + 1)
124#define MAN_AXIS_RANGE_ROT_START MAN_AXIS_ROT_X
125#define MAN_AXIS_RANGE_ROT_END (MAN_AXIS_ROT_T + 1)
134#define MAN_AXIS_RANGE_SCALE_START MAN_AXIS_SCALE_X
135#define MAN_AXIS_RANGE_SCALE_END (MAN_AXIS_SCALE_ZX + 1)
173#define MAN_ITER_AXES_BEGIN(axis, axis_idx) \
177 for (axis_idx = 0; axis_idx < MAN_AXIS_LAST; axis_idx++) { \
178 axis = gizmo_get_axis_from_index(ggd, axis_idx);
180#define MAN_ITER_AXES_END \
188 return ggd->
gizmos[axis_idx];
252 bool is_plane =
false;
256 float idot_axis = idot[aidx_norm];
258 idot_axis = 1.0f - idot_axis;
330 const float alpha = 0.6f;
331 const float alpha_hi = 1.0f;
340 bool is_plane =
false;
344 if (axis_idx_norm < 3) {
347 float idot_axis = idot[axis_idx_norm];
349 idot_axis = 1.0f - idot_axis;
351 alpha_fac = ((idot_axis > idot_max) ? 1.0f :
352 (idot_axis < idot_min) ? 0.0f :
353 ((idot_axis - idot_min) / (idot_max - idot_min)));
392 r_col[3] = alpha * alpha_fac;
393 r_col_hi[3] = alpha_hi * alpha_fac;
418 r_axis[0] = r_axis[1] =
true;
422 r_axis[1] = r_axis[2] =
true;
426 r_axis[2] = r_axis[0] =
true;
440 for (
int i = 0;
i < 3;
i++) {
454 for (
int i = 0;
i < 3;
i++) {
504 if (obpose !=
nullptr) {
524 const short orient_index,
525 const bool use_curve_handles,
526 const bool use_only_center,
528 const float (**r_mat)[4],
531 const auto run_coord_with_matrix =
532 [&](
const float co[3],
const bool use_matrix,
const float matrix[4][4]) {
554#define FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) \
556 invert_m4_m4(obedit->runtime->world_to_object.ptr(), obedit->object_to_world().ptr()); \
557 Vector<Object *> objects = BKE_view_layer_array_from_objects_in_edit_mode( \
558 scene, view_layer, CTX_wm_view3d(C)); \
559 for (Object *ob_iter : objects) { \
560 const bool use_mat_local = (ob_iter != obedit);
562#define FOREACH_EDIT_OBJECT_END() \
573 if (
bm->totvertsel == 0) {
580 float mat_local[4][4];
583 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
589 run_coord_with_matrix(eve->
co, use_mat_local, mat_local);
601 float mat_local[4][4];
604 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
609 run_coord_with_matrix(ebo->tail, use_mat_local, mat_local);
618 run_coord_with_matrix(ebo->head, use_mat_local, mat_local);
637 Curve *cu =
static_cast<Curve *
>(ob_iter->data);
642 float mat_local[4][4];
645 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
660 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
665 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
670 const float *co = bezt->
vec[!use_curve_handles ? 1 : 0];
671 run_coord_with_matrix(co, use_mat_local, mat_local);
675 const float *co = bezt->
vec[!use_curve_handles ? 1 : 2];
676 run_coord_with_matrix(co, use_mat_local, mat_local);
688 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
699 else if (obedit->type ==
OB_MBALL) {
703 float mat_local[4][4];
706 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
711 run_coord_with_matrix(&ml->x, use_mat_local, mat_local);
724 float mat_local[4][4];
727 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
732 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
742 const Curves &curves_id = *
static_cast<Curves *
>(ob_iter->data);
749 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
755 totsel += selected_points.
size();
757 run_coord_with_matrix(positions[point_i], use_mat_local, mat_local.
ptr());
768 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
778 totsel +=
mask.size();
779 mask.foreach_index([&](
const int point) {
780 run_coord_with_matrix(positions[point], use_mat_local, mat_local.
ptr());
791 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
805 mat_local * grease_pencil.layer(info.
layer_index).to_object_space(*ob_iter);
811 totsel += selected_points.
size();
813 run_coord_with_matrix(positions[point_i],
true, layer_transform.
ptr());
820#undef FOREACH_EDIT_OBJECT_BEGIN
821#undef FOREACH_EDIT_OBJECT_END
828 for (
Object *ob_iter : objects) {
829 const bool use_mat_local = (ob_iter != ob);
835 float mat_local[4][4];
837 mul_m4_m4m4(mat_local, ob->world_to_object().ptr(), ob_iter->object_to_world().ptr());
847 float pchan_pivot[3];
849 run_coord_with_matrix(pchan_pivot, use_mat_local, mat_local);
865 run_coord_with_matrix(ob->
sculpt->
pivot_pos,
false, ob->object_to_world().ptr());
876 for (a = 0; a < edit->
totpoint; a++, point++) {
881 for (k = 0, ek = point->
keys; k < point->totkey; k++, ek++) {
896 ob = base ? base->
object :
nullptr;
911 std::optional<std::array<float3, 8>> bb;
912 if (use_only_center ==
false) {
918 if (use_only_center || !bb) {
919 user_fn(base->object->object_to_world().location());
922 for (
uint j = 0; j < 8; j++) {
924 mul_v3_m4v3(co, base->object->object_to_world().ptr(), (*bb)[j]);
944 *r_mat = ob->object_to_world().ptr();
962 const short orient_index =
params->orientation_index ?
963 (
params->orientation_index - 1) :
977 scene, view_layer, v3d, rv3d, ob, obedit, orient_index, pivot_point, mat);
990 float diff_mat[3][3];
991 copy_m3_m4(diff_mat, ob->object_to_world().ptr());
1007 gizmo_3d_tbounds_calc_fn,
1043 float view_vec[3], axis_vec[3];
1045 for (
int i = 0;
i < 3;
i++) {
1054 const short pivot_type,
1055 float r_pivot_pos[3])
1057 switch (pivot_type) {
1065 if (ob !=
nullptr) {
1079 if (tbounds ==
nullptr) {
1083 tbounds = &tbounds_stack;
1099 float co_sum[3] = {0.0f, 0.0f, 0.0f};
1100 const auto gizmo_3d_calc_center_fn = [&](
const float3 &co) {
add_v3_v3(co_sum, co); };
1101 const float (*r_mat)[4] =
nullptr;
1107 gizmo_3d_calc_center_fn,
1111 mul_v3_v3fl(r_pivot_pos, co_sum, 1.0f /
float(totsel));
1133static void gizmo_line_range(
const int twtype,
const short axis_type,
float *r_start,
float *r_end)
1138 switch (axis_type) {
1141 start = end - 0.125f;
1145 const float rotate_offset = 0.215f;
1146 start += rotate_offset;
1147 end += rotate_offset + 0.2f;
1175 msg_sub_value_gz_tag_refresh.
owner = region;
1179 int orient_flag = 0;
1194 &scene->
id, &RNA_TransformOrientationSlot, orient_slot);
1200 &rna_Scene_transform_orientation_slots,
1211 &scene->
id, &RNA_View3DCursor, &scene->
cursor);
1217 &rna_TransformOrientationSlot_type,
1218 &rna_TransformOrientationSlot_use,
1223 mbus, &orient_ref_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1233 &rna_ToolSettings_transform_pivot_point,
1237 mbus, &toolsettings_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1243 &rna_ToolSettings_workspace_tool_type,
1247 mbus, &toolsettings_ptr, props[
i], &msg_sub_value_gz_tag_refresh, __func__);
1258 &rna_SpaceView3D_show_gizmo_object_translate,
1259 &rna_SpaceView3D_show_gizmo_object_rotate,
1260 &rna_SpaceView3D_show_gizmo_object_scale,
1282 const float axis[3],
1283 const float center_global[3],
1284 const float mval_init[2],
1285 float r_mat_basis[4][4])
1291 sub_v3_v3(r_mat_basis[1], center_global);
1293 cross_v3_v3v3(r_mat_basis[0], r_mat_basis[1], r_mat_basis[2]);
1301 r_mat_basis[0][3] = 0.0f;
1302 r_mat_basis[1][3] = 0.0f;
1303 r_mat_basis[2][3] = 0.0f;
1304 r_mat_basis[3][3] = 1.0f;
1314#define MAN_AXIS_SCALE_PLANE_SCALE 0.7f
1325 ggd->
rotation = *(
const float *)value;
1482 switch (axis_type) {
1530 switch (axis_type) {
1550 float end, start_co[3] = {0.0f, 0.0f, 0.0f};
1575 switch (axis_type) {
1600#define GIZMO_NEW_ARROW(v) \
1602 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_arrow, gzgroup, nullptr); \
1605#define GIZMO_NEW_DIAL(v) \
1607 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_dial, gzgroup, nullptr); \
1608 WM_gizmo_target_property_def_func(ggd->gizmos[v], "offset", ¶ms); \
1611#define GIZMO_NEW_PRIM(v) \
1613 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_prim, gzgroup, nullptr); \
1697 if (op !=
nullptr) {
1702 if (op !=
nullptr) {
1709 float *scale =
nullptr;
1726 "incremental_angle",
1747 } ot_store = {
nullptr};
1752 bool constraint_axis[3] = {
true,
false,
false};
1762 switch (axis_type) {
1764 if (ot_store.translate ==
nullptr) {
1772 if (ot_store.trackball ==
nullptr) {
1775 ot_rotate = ot_store.trackball;
1778 if (ot_store.rotate ==
nullptr) {
1781 ot_rotate = ot_store.rotate;
1787 if (ot_store.resize ==
nullptr) {
1820 if (tref &&
STREQ(tref->
idname,
"builtin.move")) {
1823 else if (tref &&
STREQ(tref->
idname,
"builtin.rotate")) {
1826 else if (tref &&
STREQ(tref->
idname,
"builtin.scale")) {
1829 else if (tref &&
STREQ(tref->
idname,
"builtin.transform")) {
1857 const float twmat[4][4],
1858 const float scale[3])
1914 const float twmat[4][4],
1915 const float scale[3],
1916 const bool ignore_hidden)
1994 float viewinv_m3[3][3];
2040 float color[4], color_hi[4];
2053 switch (orient_slot->
type) {
2066 const int axis_idx_active,
2067 const float mval[2])
2090 if (axis_idx == axis_idx_active) {
2164 const bool flip = (
event->modifier &
KM_SHIFT) != 0;
2171 if (prop_constraint_axis) {
2172 bool constraint[3] = {
false};
2173 constraint[axis] =
true;
2176 constraint[
i] = !constraint[
i];
2245 gzgt->
name =
"3D View: Transform Gizmo";
2246 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo";
2266 {0,
"NONE", 0,
"None",
""},
2267 {0,
nullptr, 0,
nullptr,
nullptr},
2271 rna_enum_gizmo_items,
2281 gzgt->
name =
"3D View: Transform Gizmo Context";
2282 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo_context";
2303 if (gizmo_map ==
nullptr) {
2304 BLI_assert_msg(
false,
"#T_NO_GIZMO should already be set to return early before.");
2309 if (gizmo_modal_current) {
2351 if (gzgroup_xform ==
nullptr) {
2360 const int axis_map[3][7] = {
2397 axis_idx = axis_map[trans_mode][con_mode];
2401 if (axis_idx != -1) {
2411 if (update_orientation || gizmo_modal_current != gizmo_expected) {
2412 if (update_orientation) {
2427 "Avoid changing the highlight part");
2434 else if (gizmo_modal_current) {
2446 if (gzgroup_xform ==
nullptr) {
Functions to deal with Armatures.
Blender kernel action and pose functionality.
void BKE_pose_channel_transform_location(const bArmature *arm, const bPoseChannel *pose_bone, float r_pose_space_pivot[3])
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)
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, AttrType 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(const bArmature *armature, const Bone *bone)
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)
std::array< VecBase< T, 3 >, 8 > corners(const Bounds< VecBase< T, 3 > > &bounds)
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::@331027022007232055216276241130041346111314317052 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)