Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-09-24 10:06:04 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-09-24 10:06:04 +0300
commit6457aaa4206b254a3c8e7710af44fa86720e956d (patch)
tree3b88d22107910db30f51a0862b84f6f7fb1b74ba /source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
parentb931e7ab4fa8b876cd8f96219c5abd872a8fe3b1 (diff)
Gizmo: dial3d option to draw a partial arc
Diffstat (limited to 'source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c')
-rw-r--r--source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
index dfa6c35da28..cb474255fd4 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
@@ -106,7 +106,8 @@ typedef struct DialInteraction {
static void dial_geom_draw(
const wmGizmo *gz, const float color[4], const bool select,
- float axis_modal_mat[4][4], float clip_plane[4], const float arc_inner_factor)
+ float axis_modal_mat[4][4], float clip_plane[4],
+ const float arc_partial_angle, const float arc_inner_factor)
{
#ifdef USE_GIZMO_CUSTOM_DIAL
UNUSED_VARS(gz, axis_modal_mat, clip_plane);
@@ -136,9 +137,22 @@ static void dial_geom_draw(
imm_draw_circle_fill_2d(pos, 0, 0, 1.0, DIAL_RESOLUTION);
}
else {
- imm_draw_circle_wire_2d(pos, 0, 0, 1.0, DIAL_RESOLUTION);
- if (arc_inner_factor != 0.0f) {
- imm_draw_circle_wire_2d(pos, 0, 0, arc_inner_factor, DIAL_RESOLUTION);
+ if (arc_partial_angle == 0.0f) {
+ imm_draw_circle_wire_2d(pos, 0, 0, 1.0, DIAL_RESOLUTION);
+ if (arc_inner_factor != 0.0f) {
+ imm_draw_circle_wire_2d(pos, 0, 0, arc_inner_factor, DIAL_RESOLUTION);
+ }
+ }
+ else {
+ float arc_partial_deg = RAD2DEGF((M_PI * 2) - arc_partial_angle);
+ imm_draw_circle_partial_wire_2d(
+ pos, 0, 0, 1.0, DIAL_RESOLUTION,
+ -arc_partial_deg / 2, arc_partial_deg);
+#if 0
+ if (arc_inner_factor != 0.0f) {
+ BLI_assert(0);
+ }
+#endif
}
}
@@ -314,6 +328,8 @@ static void dial_draw_intern(
GPU_polygon_smooth(false);
+
+ const float arc_partial_angle = RNA_float_get(gz->ptr, "arc_partial_angle");
const float arc_inner_factor = RNA_float_get(gz->ptr, "arc_inner_factor");
if (select == false) {
float angle_ofs = 0.0f;
@@ -350,7 +366,7 @@ static void dial_draw_intern(
}
/* Draw actual dial gizmo. */
- dial_geom_draw(gz, color, select, gz->matrix_basis, clip_plane, arc_inner_factor);
+ dial_geom_draw(gz, color, select, gz->matrix_basis, clip_plane, arc_partial_angle, arc_inner_factor);
GPU_matrix_pop();
}
@@ -501,6 +517,7 @@ static void GIZMO_GT_dial_3d(wmGizmoType *gzt)
RNA_def_enum_flag(gzt->srna, "draw_options", rna_enum_draw_options, 0, "Draw Options", "");
RNA_def_boolean(gzt->srna, "wrap_angle", true, "Wrap Angle", "");
RNA_def_float_factor(gzt->srna, "arc_inner_factor", 0.0f, 0.0f, 1.0f, "Arc Inner Factor", "", 0.0f, 1.0f);
+ RNA_def_float_factor(gzt->srna, "arc_partial_angle", 0.0f, 0.0f, M_PI * 2, "Show Partial Dial", "", 0.0f, M_PI * 2);
WM_gizmotype_target_property_def(gzt, "offset", PROP_FLOAT, 1);
}