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],
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;
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)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
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)
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::@012257255234203226200004200014154234127336006277 prev
struct DialInteraction::@326231201345225111255255253057062312137061141135 output
eWM_GizmoFlagTweak tweak_flag
struct DialInteraction::@372231216203131265276371064370060176362113331242 init
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 *))