[Bf-blender-cvs] [2f87f3ae405] soc-2021-curves: Double click to cycle handle types

Dilith Jayakody noreply at git.blender.org
Tue Jan 18 13:01:15 CET 2022


Commit: 2f87f3ae40520c1f5041d4edd7a2f0082b70bea8
Author: Dilith Jayakody
Date:   Tue Jan 18 17:22:55 2022 +0530
Branches: soc-2021-curves
https://developer.blender.org/rB2f87f3ae40520c1f5041d4edd7a2f0082b70bea8

Double click to cycle handle types

===================================================================

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	source/blender/editors/curve/editcurve_pen.c

===================================================================

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index db76016ebb3..48b9cf5069b 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -7009,7 +7009,7 @@ def km_3d_view_tool_edit_curve_pen(params):
             ("curve.pen", {"type": params.tool_mouse, "value": 'PRESS', "shift": True},
              {"properties": [("insert_point", True), ("select_multi", True),]}),
             ("curve.pen", {"type": params.tool_mouse, "value": 'DOUBLE_CLICK'},
-             {"properties": [("toggle_vector", True),]}),
+             {"properties": [("toggle_vector", True), ("cycle_handle_type", True),]}),
         ]},
     )
 
diff --git a/source/blender/editors/curve/editcurve_pen.c b/source/blender/editors/curve/editcurve_pen.c
index 2869ff0c2fb..8e3c3941f8c 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -1580,7 +1580,7 @@ static void toggle_select_bp(BPoint *bp)
   }
 }
 
-static void toggle_vector_auto(BezTriple *bezt, short bezt_idx, CurvePenData *cpd)
+static void toggle_handle_types(BezTriple *bezt, short bezt_idx, CurvePenData *cpd)
 {
   if (bezt_idx == 0) {
     if (bezt->h1 == HD_VECT) {
@@ -1608,6 +1608,22 @@ static void toggle_vector_auto(BezTriple *bezt, short bezt_idx, CurvePenData *cp
   }
 }
 
+static void cycle_handles(BezTriple *bezt)
+{
+  if (bezt->h1 == HD_AUTO) {
+    bezt->h1 = bezt->h2 = HD_VECT;
+  }
+  else if (bezt->h1 == HD_VECT) {
+    bezt->h1 = bezt->h2 = HD_ALIGN;
+  }
+  else if (bezt->h1 == HD_ALIGN) {
+    bezt->h1 = bezt->h2 = HD_FREE;
+  }
+  else {
+    bezt->h1 = bezt->h2 = HD_AUTO;
+  }
+}
+
 static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
@@ -1646,6 +1662,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
   const bool move_point = RNA_boolean_get(op->ptr, "move_point");
   const bool close_spline = RNA_boolean_get(op->ptr, "close_spline");
   const bool toggle_vector = RNA_boolean_get(op->ptr, "toggle_vector");
+  const bool cycle_handle_type = RNA_boolean_get(op->ptr, "cycle_handle_type");
   const int free_toggle = RNA_enum_get(op->ptr, "free_toggle");
   const int adj_handle = RNA_enum_get(op->ptr, "adj_handle");
   const int move_entire = RNA_enum_get(op->ptr, "move_entire");
@@ -1790,7 +1807,13 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
         get_closest_vertex_to_point_in_nurbs(
             nurbs, &nu, &bezt, &bp, &bezt_idx, mval_fl, sel_dist_mul, &vc);
         if (bezt) {
-          toggle_vector_auto(bezt, bezt_idx, cpd);
+          if (bezt_idx == 1 && cycle_handle_type) {
+            cycle_handles(bezt);
+            cpd->acted = true;
+          }
+          else {
+            toggle_handle_types(bezt, bezt_idx, cpd);
+          }
 
           if (nu && nu->type == CU_BEZIER) {
             BKE_nurb_handles_calc(nu);
@@ -1927,4 +1950,9 @@ void CURVE_OT_pen(wmOperatorType *ot)
                          "Make a spline cyclic by clicking endpoints");
   prop = RNA_def_boolean(
       ot->srna, "toggle_vector", false, "Toggle Vector", "Toggle between Vector and Auto handles");
+  prop = RNA_def_boolean(ot->srna,
+                         "cycle_handle_type",
+                         false,
+                         "Cycle Handle Type",
+                         "Cycle between all four handle types");
 }



More information about the Bf-blender-cvs mailing list