[Bf-blender-cvs] [504c257daed] master: GPencil: Add Sample parameter to Convert curve

Antonio Vazquez noreply at git.blender.org
Wed Aug 12 22:55:56 CEST 2020


Commit: 504c257daed50bfc28d565de5590ba0929700fc8
Author: Antonio Vazquez
Date:   Wed Aug 12 12:35:52 2020 +0200
Branches: master
https://developer.blender.org/rB504c257daed50bfc28d565de5590ba0929700fc8

GPencil: Add Sample parameter to Convert curve

This allows to resample the stroke to avoid too dense geometry.

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

M	source/blender/blenkernel/BKE_gpencil_curve.h
M	source/blender/blenkernel/intern/gpencil_curve.c
M	source/blender/editors/object/object_add.c
M	source/blender/makesrna/intern/rna_object_api.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_curve.h b/source/blender/blenkernel/BKE_gpencil_curve.h
index 952f5115707..213ebf7832c 100644
--- a/source/blender/blenkernel/BKE_gpencil_curve.h
+++ b/source/blender/blenkernel/BKE_gpencil_curve.h
@@ -38,7 +38,8 @@ void BKE_gpencil_convert_curve(struct Main *bmain,
                                const bool gpencil_lines,
                                const bool use_collections,
                                const bool only_stroke,
-                               const float scale_thickness);
+                               const float scale_thickness,
+                               const float sample);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/intern/gpencil_curve.c b/source/blender/blenkernel/intern/gpencil_curve.c
index 3ee74ed11c9..5c7a12870a6 100644
--- a/source/blender/blenkernel/intern/gpencil_curve.c
+++ b/source/blender/blenkernel/intern/gpencil_curve.c
@@ -173,6 +173,7 @@ static void gpencil_convert_spline(Main *bmain,
                                    const bool gpencil_lines,
                                    const bool only_stroke,
                                    const float scale_thickness,
+                                   const float sample,
                                    bGPDframe *gpf,
                                    Nurb *nu)
 {
@@ -392,6 +393,9 @@ static void gpencil_convert_spline(Main *bmain,
   if ((cyclic) && (!do_stroke)) {
     BKE_gpencil_stroke_close(gps);
   }
+  if (sample > 0.0f) {
+    BKE_gpencil_stroke_sample(gps, sample, false);
+  }
 
   /* Recalc fill geometry. */
   BKE_gpencil_stroke_geometry_update(gps);
@@ -408,6 +412,7 @@ static void gpencil_convert_spline(Main *bmain,
  * \param use_collections: Create layers using collection names.
  * \param only_stroke: The material must be only stroke without fill.
  * \param scale_thickness: Scale thickness factor.
+ * \param sample: Sample distance, zero to disable.
  */
 void BKE_gpencil_convert_curve(Main *bmain,
                                Scene *scene,
@@ -416,7 +421,8 @@ void BKE_gpencil_convert_curve(Main *bmain,
                                const bool gpencil_lines,
                                const bool use_collections,
                                const bool only_stroke,
-                               const float scale_thickness)
+                               const float scale_thickness,
+                               const float sample)
 {
   if (ELEM(NULL, ob_gp, ob_cu) || (ob_gp->type != OB_GPENCIL) || (ob_gp->data == NULL)) {
     return;
@@ -455,7 +461,7 @@ void BKE_gpencil_convert_curve(Main *bmain,
   /* Read all splines of the curve and create a stroke for each. */
   LISTBASE_FOREACH (Nurb *, nu, &cu->nurb) {
     gpencil_convert_spline(
-        bmain, ob_gp, ob_cu, gpencil_lines, only_stroke, scale_thickness, gpf, nu);
+        bmain, ob_gp, ob_cu, gpencil_lines, only_stroke, scale_thickness, sample, gpf, nu);
   }
 
   /* Tag for recalculation */
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 41757579817..febd7457c0f 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -2647,7 +2647,7 @@ static int object_convert_exec(bContext *C, wmOperator *op)
           ob_gpencil = ED_gpencil_add_object(C, ob->loc, local_view_bits);
           copy_v3_v3(ob_gpencil->rot, ob->rot);
           copy_v3_v3(ob_gpencil->scale, ob->scale);
-          BKE_gpencil_convert_curve(bmain, scene, ob_gpencil, ob, false, false, true, 1.0f);
+          BKE_gpencil_convert_curve(bmain, scene, ob_gpencil, ob, false, false, true, 1.0f, 0.0f);
           gpencilConverted = true;
         }
       }
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 9e698b2b398..05db3dc25a1 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -715,7 +715,8 @@ bool rna_Object_generate_gpencil_strokes(Object *ob,
                                          Object *ob_gpencil,
                                          bool gpencil_lines,
                                          bool use_collections,
-                                         float scale_thickness)
+                                         float scale_thickness,
+                                         float sample)
 {
   if (ob->type != OB_CURVE) {
     BKE_reportf(reports,
@@ -727,8 +728,15 @@ bool rna_Object_generate_gpencil_strokes(Object *ob,
   Main *bmain = CTX_data_main(C);
   Scene *scene = CTX_data_scene(C);
 
-  BKE_gpencil_convert_curve(
-      bmain, scene, ob_gpencil, ob, gpencil_lines, use_collections, false, scale_thickness);
+  BKE_gpencil_convert_curve(bmain,
+                            scene,
+                            ob_gpencil,
+                            ob,
+                            gpencil_lines,
+                            use_collections,
+                            false,
+                            scale_thickness,
+                            sample);
 
   WM_main_add_notifier(NC_GPENCIL | ND_DATA, NULL);
 
@@ -1202,6 +1210,8 @@ void RNA_api_object(StructRNA *srna)
   parm = RNA_def_boolean(func, "use_collections", true, "", "Use Collections");
   parm = RNA_def_float(
       func, "scale_thickness", 1.0f, 0.0f, FLT_MAX, "", "Thickness scaling factor", 0.0f, 100.0f);
+  parm = RNA_def_float(
+      func, "sample", 0.0f, 0.0f, FLT_MAX, "", "Sample distance, zero to disable", 0.0f, 100.0f);
   parm = RNA_def_boolean(func, "result", 0, "", "Result");
   RNA_def_function_return(func, parm);
 }



More information about the Bf-blender-cvs mailing list