[Bf-blender-cvs] [f201b703d65] soc-2021-curves: Added option to disable extra functionality

dilithjay noreply at git.blender.org
Sat Dec 25 13:28:03 CET 2021


Commit: f201b703d658ea9145a2da45a11c1b59966df5e7
Author: dilithjay
Date:   Sat Dec 25 17:13:49 2021 +0530
Branches: soc-2021-curves
https://developer.blender.org/rBf201b703d658ea9145a2da45a11c1b59966df5e7

Added option to disable extra functionality

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

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 3cf53ff7081..979a8a42e9d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -6993,10 +6993,11 @@ def km_3d_view_tool_edit_curve_pen(params):
         {"items": [
             ("curve.pen", {"type": params.tool_mouse, "value": 'PRESS'},
              {"properties": [
-                 ("add_point", True),
+                 ("extrude_point", True),
                  ("move_segment", True),
                  ("select_point", True),
-                 ("move_point", True)
+                 ("move_point", True),
+                 ("extra_func", "FREE_TOGGLE")
                 ]}),
             ("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 f3388220863..43177be579d 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -89,14 +89,15 @@ typedef struct CurvePenData {
 } CurvePenData;
 
 /* Enum to choose between the extra functionalities. */
-typedef enum eExtra_func { FREE_TOGGLE = 0, ADJ_HANDLE = 1 } eExtra_func;
+typedef enum eExtra_func { FREE_TOGGLE = 0, ADJ_HANDLE = 1, NO_EXTRA = 2 } eExtra_func;
 static const EnumPropertyItem prop_extra_func_types[] = {
-    {FREE_TOGGLE, "free_toggle", 0, "Free-Align Toggle", "Toggle between free and align handles."},
+    {FREE_TOGGLE, "FREE_TOGGLE", 0, "Free-Align Toggle", "Toggle between free and align handles."},
     {ADJ_HANDLE,
-     "adj_handle",
+     "ADJ_HANDLE",
      0,
      "Move Adjacent Handle",
      "Move the closer handle of the adjacent vertex."},
+    {NO_EXTRA, "NO_EXTRA", 0, "None", "No extra functionality."},
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -743,9 +744,10 @@ static bool insert_point_to_segment(const wmEvent *event,
 }
 
 /* Add a new vertex connected to the selected vertex. */
-static void add_vertex_connected_to_selected_vertex(const ViewContext *vc,
-                                                    Object *obedit,
-                                                    const wmEvent *event)
+static void extrude_point_from_selected_vertex(const ViewContext *vc,
+                                               Object *obedit,
+                                               const wmEvent *event,
+                                               const bool extrude_center)
 {
   Nurb *nu = NULL;
   BezTriple *bezt = NULL;
@@ -756,6 +758,12 @@ static void add_vertex_connected_to_selected_vertex(const ViewContext *vc,
 
   ED_curve_nurb_vert_selected_find(cu, vc->v3d, &nu, &bezt, &bp);
 
+  if (nu && !extrude_center && nu->pntsu > 2) {
+    for (int i = 1; i < nu->pntsu - 1; i++) {
+      BEZT_DESEL_ALL(nu->bezt + i);
+    }
+  }
+
   if (bezt) {
     mul_v3_m4v3(location, vc->obedit->obmat, bezt->vec[1]);
   }
@@ -1060,8 +1068,8 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
     cpd = (CurvePenData *)(op->customdata);
   }
 
-  /* Main functionalities */
-  const bool add_point = RNA_boolean_get(op->ptr, "add_point");
+  const bool extrude_point = RNA_boolean_get(op->ptr, "extrude_point");
+  const bool extrude_center = RNA_boolean_get(op->ptr, "extrude_center");
   const bool delete_point = RNA_boolean_get(op->ptr, "delete_point");
   const bool insert_point = RNA_boolean_get(op->ptr, "insert_point");
   const bool move_seg = RNA_boolean_get(op->ptr, "move_segment");
@@ -1077,7 +1085,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
         BKE_nurb_handles_calc(nu);
         cpd->dragging = true;
       }
-      else {
+      else if (extra_func == ADJ_HANDLE) {
         BezTriple *adj_bezt = BKE_nurb_bezt_get_prev(nu, bezt);
         if (!adj_bezt) {
           adj_bezt = BKE_nurb_bezt_get_next(nu, bezt);
@@ -1162,8 +1170,8 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
             cpd->new_point = true;
           }
         }
-        else if (add_point) {
-          add_vertex_connected_to_selected_vertex(&vc, obedit, event);
+        else if (extrude_point) {
+          extrude_point_from_selected_vertex(&vc, obedit, event, extrude_center);
           cpd->new_point = true;
         }
       }
@@ -1178,14 +1186,14 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
         }
       }
 
-      if ((insert_point || add_point) && cpd->spline_nearby) {
+      if ((insert_point || extrude_point) && cpd->spline_nearby) {
         if (!cpd->dragging && !deleted) {
           if (insert_point && move_seg) {
             insert_point_to_segment(event, vc.obedit->data, &nu, &vc);
             cpd->new_point = true;
           }
-          else if (add_point) {
-            add_vertex_connected_to_selected_vertex(&vc, obedit, event);
+          else if (extrude_point) {
+            extrude_point_from_selected_vertex(&vc, obedit, event, extrude_center);
           }
         }
       }
@@ -1247,7 +1255,7 @@ void CURVE_OT_pen(wmOperatorType *ot)
   prop = RNA_def_enum(ot->srna,
                       "extra_func",
                       prop_extra_func_types,
-                      FREE_TOGGLE,
+                      NO_EXTRA,
                       "Extra",
                       "Additional functionality assignable to a specified key");
   prop = RNA_def_enum(ot->srna,
@@ -1257,10 +1265,15 @@ void CURVE_OT_pen(wmOperatorType *ot)
                       "Extra Key",
                       "Key used by the extra functionality");
   prop = RNA_def_boolean(ot->srna,
-                         "add_point",
+                         "extrude_point",
                          false,
-                         "Add Point",
+                         "Extrude Point",
                          "Add a point connected to the last selected point");
+  prop = RNA_def_boolean(ot->srna,
+                         "extrude_center",
+                         false,
+                         "Extrude Internal",
+                         "Allow extruding points from internal points");
   prop = RNA_def_boolean(
       ot->srna, "delete_point", false, "Delete Point", "Delete an existing point");
   prop = RNA_def_boolean(



More information about the Bf-blender-cvs mailing list