74#define DIAL_WIDTH 1.0f
77#define DIAL_CLIP_BIAS 0.02
90 const float line_width,
96 const float line_width,
98 const float clip_plane_mat[4][4],
99 const float clip_plane[4],
100 const float arc_partial_angle,
101 const float arc_inner_factor,
102 const int draw_options)
104#ifdef USE_GIZMO_CUSTOM_DIAL
130 if (arc_partial_angle == 0.0f) {
131 if (arc_inner_factor == 0.0f) {
140 float arc_partial_deg =
RAD2DEGF((
M_PI * 2) - arc_partial_angle);
148 -arc_partial_deg / 2,
158 if (arc_partial_angle == 0.0f) {
160 if (arc_inner_factor != 0.0f) {
165 float arc_partial_deg =
RAD2DEGF((
M_PI * 2) - arc_partial_angle);
169 if (arc_inner_factor != 0.0f) {
186 const float co_outer[3],
187 const float color[4],
188 const float line_width)
219 const float angle_delta)
232 const int current_increment = roundf(angle_delta / incremental_angle);
233 const int total_increment = roundf((
M_PI * 2.0f) / incremental_angle);
240 const float start_offset =
fmodf(
241 offset + incremental_angle * (current_increment - total_increment / 2),
M_PI * 2.0f);
244 for (
int i = 0; i < total_increment; i++) {
245 v[0] =
sinf(start_offset + incremental_angle * i);
246 v[1] =
cosf(start_offset + incremental_angle * i);
261 const float arc_inner_factor,
262 const float color[4])
272 angle_delta =
fmod(angle_delta, pi2);
275 const float angle_background = angle_delta >= 0 ? (pi2 - angle_delta) : -(pi2 + angle_delta);
277 float color_background[4] = {0};
278 if (arc_inner_factor != 0.0) {
279 color_background[3] = color[3] / 2.0f;
282 if (rotation_count != 0) {
285 color_background[3] = color[3] * rotation_count;
313 const float mat[4][4],
314 const float co_outer[3],
320 const float mval[2] = {
float(event->
xy[0] - region->winrct.xmin),
321 float(event->
xy[1] - region->winrct.ymin)};
324 float view_vec[3], axis_vec[3];
328 float proj_outer_rel[3];
332 float proj_mval_new_rel[3];
333 float proj_mval_init_rel[3];
338 const auto fail = [&]() {
345 region, dial_plane, inter->
init.
mval,
false, proj_mval_init_rel))
389 const float angle_delta,
390 const float arc_inner_factor,
391 const float color_helpline[4],
392 const int draw_options)
395 const float co_outer[4] = {0.0f,
DIAL_WIDTH, 0.0f};
396 const float color_arc_inner[4] = {0.8f, 0.8f, 0.8f, 0.2f};
407 float matrix_final[4][4];
417 const float arc_partial_angle =
RNA_float_get(gz->
ptr,
"arc_partial_angle");
420 float angle_ofs = 0.0f;
421 float angle_delta = 0.0f;
422 float angle_increment = 0.0f;
425 draw_options &= ~ED_GIZMO_DIAL_DRAW_FLAG_ANGLE_VALUE;
447 params.draw_options = draw_options;
448 params.angle_ofs = angle_ofs;
449 params.angle_delta = angle_delta;
450 params.angle_increment = angle_increment;
451 params.arc_partial_angle = arc_partial_angle;
452 params.arc_inner_factor = arc_inner_factor;
453 params.clip_plane = clip_plane;
459 float clip_plane_buf[4];
480 float clip_plane_buf[4];
514 const float co_outer[4] = {0.0f,
DIAL_WIDTH, 0.0f};
515 float angle_ofs, angle_delta, angle_increment = 0.0f;
522 angle_delta =
float(roundf(
double(angle_delta) / angle_increment)) * angle_increment;
525 angle_increment *= 0.2f;
528 if (angle_delta != 0.0f) {
551 bool use_reset_value =
false;
552 float reset_value = 0.0f;
558 use_reset_value =
true;
566 use_reset_value =
true;
572 if (use_reset_value) {
590 const float dir_default[3] = {0.0f, 0.0f, 1.0f};
606 inter->
init.
mval[0] =
event->mval[0];
607 inter->
init.
mval[1] =
event->mval[1];
624 const float line_width,
625 const float color[4],
651 if (
params->angle_increment) {
662 params->arc_partial_angle,
672 gzt->
idname =
"GIZMO_GT_dial_3d";
692 {0,
nullptr, 0,
nullptr,
nullptr},
697 gzt->
srna,
"arc_inner_factor", 0.0f, 0.0f, 1.0f,
"Arc Inner Factor",
"", 0.0f, 1.0f);
713 "Angle to snap in steps",
722 "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])
typedef double(DMatrix)[4][4]
@ 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])
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(eGPUBlend blend)
void GPU_viewport_size_get_f(float coords[4])
void GPU_polygon_smooth(bool enable)
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(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 int gizmo_dial_modal(bContext *C, wmGizmo *gz, const wmEvent *event, eWM_GizmoFlagTweak tweak_flag)
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 void dial_draw_intern(const bContext *C, wmGizmo *gz, const bool select, const bool highlight, float clip_plane[4])
void ED_gizmotypes_dial_3d()
static void dial_ghostarc_draw(const float angle_ofs, float angle_delta, const float arc_inner_factor, const float color[4])
static int gizmo_dial_invoke(bContext *, wmGizmo *gz, const wmEvent *event)
static void GIZMO_GT_dial_3d(wmGizmoType *gzt)
static void dial_ghostarc_draw_helpline(const float angle, const float co_outer[3], const float color[4], const float line_width)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
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])
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float2 fmod(const float2 a, const float b)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
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::@326 output
struct DialInteraction::@324 init
struct DialInteraction::@325 prev
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 *))