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:
authorAntonio Vazquez <blendergit@gmail.com>2020-08-12 13:35:52 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-08-12 23:47:47 +0300
commit504c257daed50bfc28d565de5590ba0929700fc8 (patch)
treeff2c1ce84fde6636b12316b1a3fe08af434645d9
parent9abdafe840e5eaa29153565bd7c121f02e1d1fb1 (diff)
GPencil: Add Sample parameter to Convert curve
This allows to resample the stroke to avoid too dense geometry.
-rw-r--r--source/blender/blenkernel/BKE_gpencil_curve.h3
-rw-r--r--source/blender/blenkernel/intern/gpencil_curve.c10
-rw-r--r--source/blender/editors/object/object_add.c2
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c16
4 files changed, 24 insertions, 7 deletions
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);
}