75#define DIAL_WIDTH 1.0f
78#define DIAL_CLIP_BIAS 0.02
91 const float line_width,
97 const float line_width,
99 const float clip_plane_mat[4][4],
100 const float clip_plane[4],
101 const float arc_partial_angle,
102 const float arc_inner_factor,
103 const int draw_options)
105#ifdef USE_GIZMO_CUSTOM_DIAL
131 if (arc_partial_angle == 0.0f) {
132 if (arc_inner_factor == 0.0f) {
141 float arc_partial_deg =
RAD2DEGF((
M_PI * 2) - arc_partial_angle);
149 -arc_partial_deg / 2,
159 if (arc_partial_angle == 0.0f) {
161 if (arc_inner_factor != 0.0f) {
166 float arc_partial_deg =
RAD2DEGF((
M_PI * 2) - arc_partial_angle);
170 if (arc_inner_factor != 0.0f) {
187 const float co_outer[3],
188 const float color[4],
189 const float line_width)
195 immVertexFormat(),
"pos", blender::gpu::VertAttrType::SFLOAT_32_32_32);
221 const float angle_delta)
225 immVertexFormat(),
"pos", blender::gpu::VertAttrType::SFLOAT_32_32_32);
235 const int current_increment =
roundf(angle_delta / incremental_angle);
236 const int total_increment =
roundf((
M_PI * 2.0f) / incremental_angle);
243 const float start_offset =
fmodf(
244 offset + incremental_angle * (current_increment - total_increment / 2),
M_PI * 2.0f);
247 for (
int i = 0;
i < total_increment;
i++) {
248 v[0] =
sinf(start_offset + incremental_angle *
i);
249 v[1] =
cosf(start_offset + incremental_angle *
i);
264 const float arc_inner_factor,
265 const float color[4])
274 int rotation_count = int(
floorf(
fabsf(angle_delta) / pi2));
275 angle_delta =
fmod(angle_delta, pi2);
278 const float angle_background = angle_delta >= 0 ? (pi2 - angle_delta) : -(pi2 + angle_delta);
280 float color_background[4] = {0};
281 if (arc_inner_factor != 0.0) {
282 color_background[3] = color[3] / 2.0f;
285 if (rotation_count != 0) {
288 color_background[3] = color[3] * rotation_count;
316 const float mat[4][4],
317 const float co_outer[3],
327 float view_vec[3], axis_vec[3];
331 float proj_outer_rel[3];
335 float proj_mval_new_rel[3];
336 float proj_mval_init_rel[3];
341 const auto fail = [&]() {
348 region, dial_plane, inter->
init.
mval,
false, proj_mval_init_rel))
388 const double delta_final = double(delta) + ((2 *
M_PI) * double(inter->
rotations));
394 const float angle_delta,
395 const float arc_inner_factor,
396 const float color_helpline[4],
397 const int draw_options)
400 const float co_outer[4] = {0.0f,
DIAL_WIDTH, 0.0f};
401 const float color_arc_inner[4] = {0.8f, 0.8f, 0.8f, 0.2f};
412 const bool highlight,
413 const bool use_clip_plane)
415 float matrix_final[4][4];
426 if (use_clip_plane) {
439 const float arc_partial_angle =
RNA_float_get(gz->
ptr,
"arc_partial_angle");
442 float angle_ofs = 0.0f;
443 float angle_delta = 0.0f;
444 float angle_increment = 0.0f;
469 params.draw_options = draw_options;
470 params.angle_ofs = angle_ofs;
471 params.angle_delta = angle_delta;
472 params.angle_increment = angle_increment;
473 params.arc_partial_angle = arc_partial_angle;
474 params.arc_inner_factor = arc_inner_factor;
475 params.clip_plane = use_clip_plane ? clip_plane :
nullptr;
516 const float co_outer[4] = {0.0f,
DIAL_WIDTH, 0.0f};
517 float angle_ofs, angle_delta, angle_increment = 0.0f;
524 angle_delta =
roundf(
double(angle_delta) / angle_increment) * angle_increment;
527 angle_increment *= 0.2f;
530 if (angle_delta != 0.0f) {
553 bool use_reset_value =
false;
554 float reset_value = 0.0f;
560 use_reset_value =
true;
568 use_reset_value =
true;
574 if (use_reset_value) {
592 const float dir_default[3] = {0.0f, 0.0f, 1.0f};
607 inter->
init.
mval[0] =
event->mval[0];
608 inter->
init.
mval[1] =
event->mval[1];
625 const float line_width,
626 const float color[4],
652 if (
params->angle_increment) {
663 params->arc_partial_angle,
673 gzt->
idname =
"GIZMO_GT_dial_3d";
693 {0,
nullptr, 0,
nullptr,
nullptr},
698 gzt->
srna,
"arc_inner_factor", 0.0f, 0.0f, 1.0f,
"Arc Inner Factor",
"", 0.0f, 1.0f);
714 "Angle to snap in steps",
723 "Value to use for a single click action",
ScrArea * CTX_wm_area(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
void mul_v3_project_m4_v3(float r[3], const float mat[4][4], const float vec[3])
float angle_wrap_rad(float angle)
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3_v3(float r[3], const float a[3])
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_MIRROR
@ ED_GIZMO_DIAL_DRAW_FLAG_FILL_SELECT
@ ED_GIZMO_DIAL_DRAW_FLAG_FILL
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_START_Y
@ ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_VALUE
@ ED_GIZMO_DIAL_DRAW_FLAG_CLIP
void ED_view3d_global_to_vector(const RegionView3D *rv3d, const float coord[3], float r_out[3])
float ED_view3d_pixel_size_no_ui_scale(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])
#define GPU_matrix_mul(x)
void GPU_matrix_rotate_3f(float deg, float x, float y, float z)
bool GPU_select_load_id(unsigned int id)
@ GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR
@ GPU_SHADER_3D_CLIPPED_UNIFORM_COLOR
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR
void GPU_blend(GPUBlend blend)
void GPU_viewport_size_get_f(float coords[4])
void GPU_polygon_smooth(bool enable)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
Read Guarded memory(de)allocation.
eWM_GizmoFlagTweak
Gizmo tweak flag. Bit-flag passed to gizmo while tweaking.
@ WM_GIZMO_STATE_HIGHLIGHT
ATTR_WARN_UNUSED_RESULT const BMVert * v
ccl_device_inline float wrap_angle(const float a)
static void dial_3d_draw_util(const float matrix_final[4][4], const float line_width, const float color[4], const bool select, Dial3dParams *params)
static void gizmo_dial_exit(bContext *C, wmGizmo *gz, const bool cancel)
static void dial_ghostarc_get_angles(const wmGizmo *gz, const wmEvent *event, const ARegion *region, const float mat[4][4], const float co_outer[3], float *r_start, float *r_delta)
static void gizmo_dial_setup(wmGizmo *gz)
static void dial_ghostarc_draw_with_helplines(const float angle_ofs, const float angle_delta, const float arc_inner_factor, const float color_helpline[4], const int draw_options)
static void gizmo_dial_draw(const bContext *C, wmGizmo *gz)
static void dial_geom_draw(const float color[4], const float line_width, const bool select, const float clip_plane_mat[4][4], const float clip_plane[4], const float arc_partial_angle, const float arc_inner_factor, const int draw_options)
static void gizmo_dial_draw_select(const bContext *C, wmGizmo *gz, int select_id)
static void dial_ghostarc_draw_incremental_angle(const float incremental_angle, const float offset, const float angle_delta)
static wmOperatorStatus gizmo_dial_modal(bContext *C, wmGizmo *gz, const wmEvent *event, eWM_GizmoFlagTweak tweak_flag)
void ED_gizmotypes_dial_3d()
static wmOperatorStatus gizmo_dial_invoke(bContext *, wmGizmo *gz, const wmEvent *event)
static void dial_ghostarc_draw(const float angle_ofs, float angle_delta, const float arc_inner_factor, const float color[4])
static void GIZMO_GT_dial_3d(wmGizmoType *gzt)
static void dial_draw_intern(const bContext *C, wmGizmo *gz, const bool select, const bool highlight, const bool use_clip_plane)
static void dial_ghostarc_draw_helpline(const float angle, const float co_outer[3], const float color[4], const float line_width)
GizmoGeomInfo wm_gizmo_geom_data_dial
void wm_gizmo_geometryinfo_draw(const GizmoGeomInfo *info, const bool, const float color[4])
void gizmo_color_get(const wmGizmo *gz, bool highlight, float r_color[4])
static float WM_gizmo_select_bias(bool select)
void * MEM_callocN(size_t len, const char *str)
ccl_device_inline float2 fmod(const float2 a, const float b)
static void init(bNodeTree *, bNode *node)
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float_factor(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
struct DialInteraction::@053032054333226076253353344046336043224331220103 output
struct DialInteraction::@107002320353104203017353232074171136375150346212 prev
struct DialInteraction::@013124152214112254267210060276365374126355161213 init
eWM_GizmoFlagTweak tweak_flag
wmGizmoFnDrawSelect draw_select
wmGizmoFnModal custom_modal
void WM_gizmo_calc_matrix_final(const wmGizmo *gz, float r_mat[4][4])
void WM_gizmo_target_property_float_set(bContext *C, const wmGizmo *gz, wmGizmoProperty *gz_prop, const float value)
void WM_gizmo_target_property_anim_autokey(bContext *C, const wmGizmo *, wmGizmoProperty *gz_prop)
bool WM_gizmo_target_property_is_valid(const wmGizmoProperty *gz_prop)
void WM_gizmotype_target_property_def(wmGizmoType *gzt, const char *idname, int data_type, int array_length)
float WM_gizmo_target_property_float_get(const wmGizmo *gz, wmGizmoProperty *gz_prop)
wmGizmoProperty * WM_gizmo_target_property_find(wmGizmo *gz, const char *idname)
void WM_gizmotype_append(void(*gtfunc)(wmGizmoType *))