70 const float twmat[4][4],
72 const bool ignore_hidden);
76#define MAN_TRANS_X (1 << 0)
77#define MAN_TRANS_Y (1 << 1)
78#define MAN_TRANS_Z (1 << 2)
79#define MAN_TRANS_C (MAN_TRANS_X | MAN_TRANS_Y | MAN_TRANS_Z)
81#define MAN_ROT_X (1 << 3)
82#define MAN_ROT_Y (1 << 4)
83#define MAN_ROT_Z (1 << 5)
84#define MAN_ROT_C (MAN_ROT_X | MAN_ROT_Y | MAN_ROT_Z)
86#define MAN_SCALE_X (1 << 8)
87#define MAN_SCALE_Y (1 << 9)
88#define MAN_SCALE_Z (1 << 10)
89#define MAN_SCALE_C (MAN_SCALE_X | MAN_SCALE_Y | MAN_SCALE_Z)
112#define MAN_AXIS_RANGE_TRANS_START MAN_AXIS_TRANS_X
113#define MAN_AXIS_RANGE_TRANS_END (MAN_AXIS_TRANS_ZX + 1)
120#define MAN_AXIS_RANGE_ROT_START MAN_AXIS_ROT_X
121#define MAN_AXIS_RANGE_ROT_END (MAN_AXIS_ROT_T + 1)
130#define MAN_AXIS_RANGE_SCALE_START MAN_AXIS_SCALE_X
131#define MAN_AXIS_RANGE_SCALE_END (MAN_AXIS_SCALE_ZX + 1)
169#define MAN_ITER_AXES_BEGIN(axis, axis_idx) \
173 for (axis_idx = 0; axis_idx < MAN_AXIS_LAST; axis_idx++) { \
174 axis = gizmo_get_axis_from_index(ggd, axis_idx);
176#define MAN_ITER_AXES_END \
184 return ggd->
gizmos[axis_idx];
248 bool is_plane =
false;
252 float idot_axis = idot[aidx_norm];
254 idot_axis = 1.0f - idot_axis;
326 const float alpha = 0.6f;
327 const float alpha_hi = 1.0f;
336 bool is_plane =
false;
340 if (axis_idx_norm < 3) {
343 float idot_axis = idot[axis_idx_norm];
345 idot_axis = 1.0f - idot_axis;
347 alpha_fac = ((idot_axis > idot_max) ? 1.0f :
348 (idot_axis < idot_min) ? 0.0f :
349 ((idot_axis - idot_min) / (idot_max - idot_min)));
388 r_col[3] = alpha * alpha_fac;
389 r_col_hi[3] = alpha_hi * alpha_fac;
414 r_axis[0] = r_axis[1] =
true;
418 r_axis[1] = r_axis[2] =
true;
422 r_axis[2] = r_axis[0] =
true;
436 for (
int i = 0; i < 3; i++) {
450 for (
int i = 0; i < 3; i++) {
460 *drawflags &= ~MAN_TRANS_X;
463 *drawflags &= ~MAN_TRANS_Y;
466 *drawflags &= ~MAN_TRANS_Z;
470 *drawflags &= ~MAN_ROT_X;
473 *drawflags &= ~MAN_ROT_Y;
476 *drawflags &= ~MAN_ROT_Z;
480 *drawflags &= ~MAN_SCALE_X;
483 *drawflags &= ~MAN_SCALE_Y;
486 *drawflags &= ~MAN_SCALE_Z;
500 if (obpose !=
nullptr) {
520 const short orient_index,
521 const bool use_curve_handles,
522 const bool use_only_center,
524 const float (**r_mat)[4],
527 const auto run_coord_with_matrix =
528 [&](
const float co[3],
const bool use_matrix,
const float matrix[4][4]) {
543 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
550#define FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) \
552 invert_m4_m4(obedit->runtime->world_to_object.ptr(), obedit->object_to_world().ptr()); \
553 Vector<Object *> objects = BKE_view_layer_array_from_objects_in_edit_mode( \
554 scene, view_layer, CTX_wm_view3d(C)); \
555 for (Object * ob_iter : objects) { \
556 const bool use_mat_local = (ob_iter != obedit);
558#define FOREACH_EDIT_OBJECT_END() \
576 float mat_local[4][4];
579 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
585 run_coord_with_matrix(eve->
co, use_mat_local, mat_local);
597 float mat_local[4][4];
600 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
605 run_coord_with_matrix(ebo->tail, use_mat_local, mat_local);
613 run_coord_with_matrix(ebo->head, use_mat_local, mat_local);
632 Curve *cu =
static_cast<Curve *
>(ob_iter->data);
637 float mat_local[4][4];
640 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
655 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
660 run_coord_with_matrix(bezt->
vec[1], use_mat_local, mat_local);
665 const float *co = bezt->
vec[!use_curve_handles ? 1 : 0];
666 run_coord_with_matrix(co, use_mat_local, mat_local);
670 const float *co = bezt->
vec[!use_curve_handles ? 1 : 2];
671 run_coord_with_matrix(co, use_mat_local, mat_local);
683 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
694 else if (obedit->type ==
OB_MBALL) {
698 float mat_local[4][4];
701 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
706 run_coord_with_matrix(&ml->x, use_mat_local, mat_local);
719 float mat_local[4][4];
722 mat_local, obedit->world_to_object().ptr(), ob_iter->object_to_world().ptr());
727 run_coord_with_matrix(bp->
vec, use_mat_local, mat_local);
737 const Curves &curves_id = *
static_cast<Curves *
>(ob_iter->data);
744 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
750 totsel += selected_points.
size();
752 run_coord_with_matrix(positions[point_i], use_mat_local, mat_local.
ptr());
763 mat_local = obedit->world_to_object() * ob_iter->object_to_world();
780 totsel += selected_points.
size();
782 run_coord_with_matrix(positions[point_i], use_mat_local, mat_local.
ptr());
789#undef FOREACH_EDIT_OBJECT_BEGIN
790#undef FOREACH_EDIT_OBJECT_END
797 for (
Object *ob_iter : objects) {
798 const bool use_mat_local = (ob_iter != ob);
804 float mat_local[4][4];
806 mul_m4_m4m4(mat_local, ob->world_to_object().ptr(), ob_iter->object_to_world().ptr());
814 run_coord_with_matrix(pchan->pose_head, use_mat_local, mat_local);
830 run_coord_with_matrix(ob->
sculpt->
pivot_pos,
false, ob->object_to_world().ptr());
841 for (a = 0; a < edit->
totpoint; a++, point++) {
846 for (k = 0, ek = point->keys; k < point->totkey; k++, ek++) {
861 ob = base ? base->
object :
nullptr;
876 std::optional<BoundBox> bb;
877 if (use_only_center ==
false) {
884 if (use_only_center || !bb) {
885 user_fn(base->object->object_to_world().location());
888 for (
uint j = 0; j < 8; j++) {
890 mul_v3_m4v3(co, base->object->object_to_world().ptr(), bb->vec[j]);
910 *r_mat = ob->object_to_world().ptr();
924 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
927 const int pivot_point = scene->toolsettings->transform_pivot_point;
928 const short orient_index =
params->orientation_index ?
929 (
params->orientation_index - 1) :
943 scene, view_layer, v3d, rv3d, ob, obedit, orient_index, pivot_point, mat);
956 float diff_mat[3][3];
957 copy_m3_m4(diff_mat, ob->object_to_world().ptr());
973 gizmo_3d_tbounds_calc_fn,
1009 float view_vec[3], axis_vec[3];
1011 for (
int i = 0; i < 3; i++) {
1020 const short pivot_type,
1021 float r_pivot_pos[3])
1023 switch (pivot_type) {
1025 copy_v3_v3(r_pivot_pos, scene->cursor.location);
1031 if (ob !=
nullptr) {
1045 if (tbounds ==
nullptr) {
1049 tbounds = &tbounds_stack;
1065 float co_sum[3] = {0.0f, 0.0f, 0.0f};
1066 const auto gizmo_3d_calc_center_fn = [&](
const float3 &co) {
add_v3_v3(co_sum, co); };
1067 const float(*r_mat)[4] =
nullptr;
1073 gizmo_3d_calc_center_fn,
1077 mul_v3_v3fl(r_pivot_pos, co_sum, 1.0f /
float(totsel));
1099static void gizmo_line_range(
const int twtype,
const short axis_type,
float *r_start,
float *r_end)
1104 switch (axis_type) {
1107 start = end - 0.125f;
1111 const float rotate_offset = 0.215f;
1112 start += rotate_offset;
1113 end += rotate_offset + 0.2f;
1141 msg_sub_value_gz_tag_refresh.
owner = region;
1142 msg_sub_value_gz_tag_refresh.user_data = gzgroup->
parent_gzmap;
1145 int orient_flag = 0;
1160 &scene->id, &RNA_TransformOrientationSlot, orient_slot);
1166 &rna_Scene_transform_orientation_slots,
1168 for (
int i = 0; i <
ARRAY_SIZE(props); i++) {
1182 &rna_TransformOrientationSlot_type,
1183 &rna_TransformOrientationSlot_use,
1185 for (
int i = 0; i <
ARRAY_SIZE(props); i++) {
1188 mbus, &orient_ref_ptr, props[i], &msg_sub_value_gz_tag_refresh, __func__);
1194 &scene->id, &RNA_ToolSettings, scene->toolsettings);
1198 &rna_ToolSettings_transform_pivot_point,
1200 for (
int i = 0; i <
ARRAY_SIZE(props); i++) {
1202 mbus, &toolsettings_ptr, props[i], &msg_sub_value_gz_tag_refresh, __func__);
1208 &rna_ToolSettings_workspace_tool_type,
1210 for (
int i = 0; i <
ARRAY_SIZE(props); i++) {
1212 mbus, &toolsettings_ptr, props[i], &msg_sub_value_gz_tag_refresh, __func__);
1222 &rna_SpaceView3D_show_gizmo_object_translate,
1223 &rna_SpaceView3D_show_gizmo_object_rotate,
1224 &rna_SpaceView3D_show_gizmo_object_scale,
1226 for (
int i = 0; i <
ARRAY_SIZE(props); i++) {
1246 const float axis[3],
1247 const float center_global[3],
1248 const float mval_init[2],
1249 float r_mat_basis[4][4])
1255 sub_v3_v3(r_mat_basis[1], center_global);
1257 cross_v3_v3v3(r_mat_basis[0], r_mat_basis[1], r_mat_basis[2]);
1265 r_mat_basis[0][3] = 0.0f;
1266 r_mat_basis[1][3] = 0.0f;
1267 r_mat_basis[2][3] = 0.0f;
1268 r_mat_basis[3][3] = 1.0f;
1278#define MAN_AXIS_SCALE_PLANE_SCALE 0.7f
1289 ggd->
rotation = *(
const float *)value;
1385 axis->select_bias = 2.0f;
1396 axis->select_bias = -2.0f;
1446 switch (axis_type) {
1449 axis->select_bias = 0.0f;
1484 mul_v3_v3fl(axis->matrix_offset[3], axis->matrix_offset[2], start);
1494 switch (axis_type) {
1497 axis->select_bias = -2.0f;
1514 float end, start_co[3] = {0.0f, 0.0f, 0.0f};
1539 switch (axis_type) {
1553 GizmoGroup *ggd = MEM_cnew<GizmoGroup>(__func__);
1564#define GIZMO_NEW_ARROW(v) \
1566 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_arrow, gzgroup, nullptr); \
1569#define GIZMO_NEW_DIAL(v) \
1571 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_dial, gzgroup, nullptr); \
1572 WM_gizmo_target_property_def_func(ggd->gizmos[v], "offset", ¶ms); \
1575#define GIZMO_NEW_PRIM(v) \
1577 ggd->gizmos[v] = WM_gizmo_new_ptr(gzt_prim, gzgroup, nullptr); \
1661 if (op !=
nullptr) {
1666 if (op !=
nullptr) {
1673 float *scale =
nullptr;
1690 "incremental_angle",
1711 } ot_store = {
nullptr};
1716 bool constraint_axis[3] = {
true,
false,
false};
1726 switch (axis_type) {
1728 if (ot_store.translate ==
nullptr) {
1736 if (ot_store.trackball ==
nullptr) {
1739 ot_rotate = ot_store.trackball;
1742 if (ot_store.rotate ==
nullptr) {
1745 ot_rotate = ot_store.rotate;
1751 if (ot_store.resize ==
nullptr) {
1784 if (tref &&
STREQ(tref->
idname,
"builtin.move")) {
1787 else if (tref &&
STREQ(tref->
idname,
"builtin.rotate")) {
1790 else if (tref &&
STREQ(tref->
idname,
"builtin.scale")) {
1793 else if (tref &&
STREQ(tref->
idname,
"builtin.transform")) {
1821 const float twmat[4][4],
1822 const float scale[3])
1878 const float twmat[4][4],
1879 const float scale[3],
1880 const bool ignore_hidden)
1907 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
1924 calc_params.orientation_index = orient_index + 1;
1930 C, scene, &tbounds, scene->toolsettings->transform_pivot_point, rv3d->
twmat[3]);
1962 float viewinv_m3[3][3];
1967 bool is_modal =
false;
2014 float color[4], color_hi[4];
2027 switch (orient_slot->
type) {
2040 const int axis_idx_active,
2041 const float mval[2])
2064 if (axis_idx == axis_idx_active) {
2138 const bool flip = (
event->modifier &
KM_SHIFT) != 0;
2145 if (prop_constraint_axis) {
2146 bool constraint[3] = {
false};
2147 constraint[axis] =
true;
2149 for (
int i = 0; i <
ARRAY_SIZE(constraint); i++) {
2150 constraint[i] = !constraint[i];
2173 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
2202 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
2219 gzgt->
name =
"3D View: Transform Gizmo";
2220 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo";
2240 {0,
"NONE", 0,
"None",
""},
2241 {0,
nullptr, 0,
nullptr,
nullptr},
2245 rna_enum_gizmo_items,
2255 gzgt->
name =
"3D View: Transform Gizmo Context";
2256 gzgt->
idname =
"VIEW3D_GGT_xform_gizmo_context";
2277 if (gizmo_map ==
nullptr) {
2278 BLI_assert_msg(
false,
"#T_NO_GIZMO should already be set to return early before.");
2283 if (gizmo_modal_current) {
2325 if (gzgroup_xform ==
nullptr) {
2334 const int axis_map[3][7] = {
2371 axis_idx = axis_map[trans_mode][con_mode];
2375 if (axis_idx != -1) {
2385 if (update_orientation || gizmo_modal_current != gizmo_expected) {
2386 if (update_orientation) {
2401 "Avoid changing the highlight part");
2407 else if (gizmo_modal_current) {
2419 if (gzgroup_xform ==
nullptr) {
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
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 unit_m4(float m[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])
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_AROUND_CENTER_BOUNDS
@ V3D_AROUND_CENTER_MEDIAN
@ V3D_AROUND_LOCAL_ORIGINS
@ V3D_GIZMO_SHOW_OBJECT_ROTATE
@ V3D_GIZMO_SHOW_OBJECT_SCALE
@ V3D_GIZMO_SHOW_OBJECT_TRANSLATE
#define EBONE_VISIBLE(arm, ebone)
@ ED_GIZMO_PRIMITIVE_STYLE_ANNULUS
@ ED_GIZMO_PRIMITIVE_STYLE_CIRCLE
@ ED_GIZMO_ARROW_DRAW_FLAG_ORIGIN
@ ED_GIZMO_ARROW_DRAW_FLAG_STEM
@ ED_GIZMO_ARROW_STYLE_PLANE
@ ED_GIZMO_ARROW_STYLE_BOX
@ ED_GIZMO_ARROW_STYLE_NORMAL
@ 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
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])
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
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)
ATTR_WARN_UNUSED_RESULT BMesh * bm
const bke::CurvesGeometry & strokes() const
void foreach_index(Fn &&fn) const
const Depsgraph * depsgraph
draw_view in_light_buf[] float
GeometryDeformation get_evaluated_grease_pencil_drawing_deformation(const Object *ob_eval, const Object &ob_orig, int layer_index, int frame)
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)
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(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)
struct wmGizmoMap * gizmo_map
wmGizmo * gizmos[MAN_AXIS_LAST]
struct GizmoGroup::@578 prev
struct EditLatt * editlatt
ObjectRuntimeHandle * runtime
struct SculptSession * sculpt
PTCacheEditPoint * points
float tw_axis_matrix[3][3]
blender::float3 pivot_pos
struct TransInfo::@565 orient[3]
const c_style_mat & ptr() const
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::@1373 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_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 char *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)