[Bf-blender-cvs] [7d22dd0e1fb] soc-2021-curves: Added ON_CLICK & ON_PRESS options for close spline

Dilith Jayakody noreply at git.blender.org
Fri Feb 4 18:41:17 CET 2022


Commit: 7d22dd0e1fb0e0def5b041690222cb7719ddc53e
Author: Dilith Jayakody
Date:   Fri Feb 4 22:13:44 2022 +0530
Branches: soc-2021-curves
https://developer.blender.org/rB7d22dd0e1fb0e0def5b041690222cb7719ddc53e

Added ON_CLICK & ON_PRESS options for close spline

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

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 233d5def9a3..9997cca9fe8 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -6998,12 +6998,12 @@ def km_3d_view_tool_edit_curve_pen(params):
                  ("move_segment", True),
                  ("select_point", True),
                  ("move_point", True),
-                 ("close_spline", True),
-                 ("free_toggle", "Shift"),
-                 ("lock_angle", "Ctrl"),
-                 ("move_entire", "Alt"),
-                 ("link_handles", "Ctrl-Shift"),
-                 ("adj_handle", "Ctrl-Alt"),
+                 ("close_spline_opts", "ON_PRESS"),
+                 ("free_toggle", "SHIFT"),
+                 ("lock_angle", "CTRL"),
+                 ("move_entire", "ALT"),
+                 ("link_handles", "CTRL_SHIFT"),
+                 ("adj_handle", "CTRL_ALT"),
                 ]}),
             ("curve.pen", {"type": params.tool_mouse, "value": 'PRESS', "ctrl": True},
              {"properties": [("delete_point", True),]}),
diff --git a/source/blender/editors/curve/editcurve_pen.c b/source/blender/editors/curve/editcurve_pen.c
index d3fdb6e0856..0b3ae0c6c9a 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -133,19 +133,32 @@ typedef enum eExtra_key {
 } eExtra_key;
 
 static const EnumPropertyItem prop_extra_key_types[] = {
-    {NONE, "None", 0, "None", ""},
-    {SHIFT, "Shift", 0, "Shift", ""},
-    {CTRL, "Ctrl", 0, "Ctrl", ""},
-    {ALT, "Alt", 0, "Alt", ""},
-    {CTRL_SHIFT, "Ctrl-Shift", 0, "Ctrl-Shift", ""},
-    {CTRL_ALT, "Ctrl-Alt", 0, "Ctrl-Alt", ""},
-    {SHIFT_ALT, "Shift-Alt", 0, "Shift-Alt", ""},
+    {NONE, "NONE", 0, "None", ""},
+    {SHIFT, "SHIFT", 0, "Shift", ""},
+    {CTRL, "CTRL", 0, "Ctrl", ""},
+    {ALT, "ALT", 0, "Alt", ""},
+    {CTRL_SHIFT, "CTRL_SHIFT", 0, "Ctrl-Shift", ""},
+    {CTRL_ALT, "CTRL_ALT", 0, "Ctrl-Alt", ""},
+    {SHIFT_ALT, "SHIFT_ALT", 0, "Shift-Alt", ""},
     {0, NULL, 0, NULL, NULL},
 };
 
 static const EnumPropertyItem prop_handle_types[] = {
-    {HD_AUTO, "Auto", 0, "Auto", ""},
-    {HD_VECT, "Vector", 0, "Vector", ""},
+    {HD_AUTO, "AUTO", 0, "Auto", ""},
+    {HD_VECT, "VECTOR", 0, "Vector", ""},
+    {0, NULL, 0, NULL, NULL},
+};
+
+typedef enum eClose_opt {
+  OFF = 0,
+  ON_PRESS = 1,
+  ON_CLICK = 2,
+} eExtra_key;
+
+static const EnumPropertyItem prop_close_spline_opts[] = {
+    {OFF, "OFF", 0, "None", ""},
+    {ON_PRESS, "ON_PRESS", 0, "On Press", "Move handles after closing the spline"},
+    {ON_CLICK, "ON_CLICK", 0, "On Click", "Spline closes on release if not dragged"},
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -1559,6 +1572,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
   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 close_spline_opts = RNA_enum_get(op->ptr, "close_spline_opts");
   const int extrude_handle = RNA_enum_get(op->ptr, "extrude_handle");
   const int free_toggle = RNA_enum_get(op->ptr, "free_toggle");
   const int adj_handle = RNA_enum_get(op->ptr, "adj_handle");
@@ -1665,7 +1679,15 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
 
         cpd->selection_made = true;
       }
-      if (!cpd->found_point) {
+      if (cpd->found_point) {
+        if (close_spline && close_spline_opts == ON_PRESS && cpd->nu &&
+            !(cpd->nu->flagu & CU_NURB_CYCLIC)) {
+          copy_v2_v2_int(vc.mval, event->mval);
+          cpd->new_point = cpd->acted = cpd->link_handles = make_cyclic_if_endpoints(
+              cpd->nu, cpd->bezt, cpd->bp, &vc, C, sel_dist_mul);
+        }
+      }
+      else if (!cpd->acted) {
         if (is_spline_nearby(&vc, op, event)) {
           cpd->spline_nearby = true;
 
@@ -1697,7 +1719,8 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
         }
       }
 
-      if (!cpd->acted && close_spline && cpd->found_point && !cpd->dragging) {
+      if (!cpd->acted && close_spline && close_spline_opts == ON_CLICK && cpd->found_point &&
+          !cpd->dragging) {
         if (cpd->nu && !(cpd->nu->flagu & CU_NURB_CYCLIC)) {
           copy_v2_v2_int(vc.mval, event->mval);
           cpd->acted = make_cyclic_if_endpoints(cpd->nu, cpd->bezt, cpd->bp, &vc, C, sel_dist_mul);
@@ -1876,9 +1899,15 @@ void CURVE_OT_pen(wmOperatorType *ot)
       ot->srna, "move_point", false, "Move Point", "Move a point or its handles");
   prop = RNA_def_boolean(ot->srna,
                          "close_spline",
-                         false,
+                         true,
                          "Close Spline",
                          "Make a spline cyclic by clicking endpoints");
+  prop = RNA_def_enum(ot->srna,
+                      "close_spline_opts",
+                      prop_close_spline_opts,
+                      OFF,
+                      "Close Spline Method",
+                      "The condition for close spline to activate");
   prop = RNA_def_boolean(
       ot->srna, "toggle_vector", false, "Toggle Vector", "Toggle between Vector and Auto handles");
   prop = RNA_def_boolean(ot->srna,



More information about the Bf-blender-cvs mailing list