[Bf-blender-cvs] [9d73d038c78] greasepencil-object: GPencil: Add Offset to Stroke converted and make stronger the thickness

Antonio Vazquez noreply at git.blender.org
Tue Mar 31 19:45:41 CEST 2020


Commit: 9d73d038c78ec540c526b4715fa64da844a278f6
Author: Antonio Vazquez
Date:   Tue Mar 31 19:45:34 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB9d73d038c78ec540c526b4715fa64da844a278f6

GPencil: Add Offset to Stroke converted and make stronger the thickness

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

M	source/blender/blenkernel/BKE_gpencil_geom.h
M	source/blender/blenkernel/intern/gpencil_geom.c
M	source/blender/editors/object/object_add.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h
index 19de8155cc9..c2564d60d44 100644
--- a/source/blender/blenkernel/BKE_gpencil_geom.h
+++ b/source/blender/blenkernel/BKE_gpencil_geom.h
@@ -113,6 +113,7 @@ void BKE_gpencil_convert_mesh(struct Main *bmain,
                               struct Object *ob_mesh,
                               const float angle,
                               const int thickness,
+                              const float offset,
                               const bool use_seams,
                               const bool use_faces);
 
diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index ced14e21b1c..661beaaf4dd 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -2069,6 +2069,7 @@ static void gpencil_generate_edgeloops(Object *ob,
                                        bGPDframe *gpf_stroke,
                                        const float angle,
                                        const int thickness,
+                                       const float offset,
                                        const bool use_seams)
 {
   Mesh *me = (Mesh *)ob->data;
@@ -2080,6 +2081,7 @@ static void gpencil_generate_edgeloops(Object *ob,
   uint *stroke = MEM_callocN(sizeof(uint) * me->totedge * 2, __func__);
   uint *stroke_fw = MEM_callocN(sizeof(uint) * me->totedge, __func__);
   uint *stroke_bw = MEM_callocN(sizeof(uint) * me->totedge, __func__);
+  const float scale = (offset > 0.0f) ? 1.0f + offset : 1.0f;
 
   /* Create array with all edges. */
   GpEdge *gp_edges = MEM_callocN(sizeof(GpEdge) * me->totedge, __func__);
@@ -2148,18 +2150,18 @@ static void gpencil_generate_edgeloops(Object *ob,
 
     /* Create Stroke. */
     bGPDstroke *gps_stroke = BKE_gpencil_stroke_add(
-        gpf_stroke, 0, array_len + 1, thickness, false);
+        gpf_stroke, 0, array_len + 1, thickness * thickness, false);
 
     /* Create first segment. */
     uint v = stroke[0];
     gped = &gp_edges[v];
     bGPDspoint *pt = &gps_stroke->points[0];
-    copy_v3_v3(&pt->x, gped->v1_co);
+    mul_v3_v3fl(&pt->x, gped->v1_co, scale);
     pt->pressure = 1.0f;
     pt->strength = 1.0f;
 
     pt = &gps_stroke->points[1];
-    copy_v3_v3(&pt->x, gped->v2_co);
+    mul_v3_v3fl(&pt->x, gped->v2_co, scale);
     pt->pressure = 1.0f;
     pt->strength = 1.0f;
 
@@ -2169,7 +2171,7 @@ static void gpencil_generate_edgeloops(Object *ob,
       gped = &gp_edges[v];
 
       bGPDspoint *pt = &gps_stroke->points[i + 1];
-      copy_v3_v3(&pt->x, gped->v2_co);
+      mul_v3_v3fl(&pt->x, gped->v2_co, scale);
       pt->pressure = 1.0f;
       pt->strength = 1.0f;
     }
@@ -2203,6 +2205,7 @@ void BKE_gpencil_convert_mesh(Main *bmain,
                               Object *ob_mesh,
                               const float angle,
                               const int thickness,
+                              const float offset,
                               const bool use_seams,
                               const bool use_faces)
 {
@@ -2279,7 +2282,7 @@ void BKE_gpencil_convert_mesh(Main *bmain,
   /* Create stroke from edges. */
   bGPDlayer *gpl_stroke = BKE_gpencil_layer_addnew(gpd, DATA_("Lines"), true);
   bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get(gpl_stroke, CFRA, GP_GETFRAME_ADD_COPY);
-  gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, use_seams);
+  gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, offset, use_seams);
 
   /* Tag for recalculation */
   DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 2f88d4f0e56..2d66c3977d2 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -2227,6 +2227,7 @@ static int convert_exec(bContext *C, wmOperator *op)
   const int thickness = RNA_int_get(op->ptr, "thickness");
   const bool use_seams = RNA_boolean_get(op->ptr, "seams");
   const bool use_faces = RNA_boolean_get(op->ptr, "faces");
+  const float offset = RNA_float_get(op->ptr, "offset");
 
   int a, mballConverted = 0;
   bool gpencilConverted = false;
@@ -2354,7 +2355,7 @@ static int convert_exec(bContext *C, wmOperator *op)
       copy_v3_v3(gpencil_ob->scale, size);
 
       BKE_gpencil_convert_mesh(
-          bmain, depsgraph, scene, gpencil_ob, ob, angle, thickness, use_seams, use_faces);
+          bmain, depsgraph, scene, gpencil_ob, ob, angle, thickness, offset, use_seams, use_faces);
       gpencilConverted = true;
     }
     else if (ob->type == OB_MESH) {
@@ -2646,6 +2647,7 @@ static void convert_ui(bContext *C, wmOperator *op)
   if (RNA_enum_get(&ptr, "target") == OB_GPENCIL) {
     uiItemR(layout, &ptr, "angle", 0, NULL, ICON_NONE);
     uiItemR(layout, &ptr, "thickness", 0, NULL, ICON_NONE);
+    uiItemR(layout, &ptr, "offset", 0, NULL, ICON_NONE);
     uiItemR(layout, &ptr, "faces", 0, NULL, ICON_NONE);
     uiItemR(layout, &ptr, "seams", 0, NULL, ICON_NONE);
   }
@@ -2690,9 +2692,18 @@ void OBJECT_OT_convert(wmOperatorType *ot)
                                 DEG2RADF(180.0f));
   RNA_def_property_float_default(prop, DEG2RADF(70.0f));
 
-  RNA_def_int(ot->srna, "thickness", 5, 1, 10000, "Thickness", "", 1, 200);
+  RNA_def_int(ot->srna, "thickness", 5, 1, 100, "Thickness", "", 1, 100);
   RNA_def_boolean(ot->srna, "seams", 0, "Only Seam Edges", "Convert only seam edges");
   RNA_def_boolean(ot->srna, "faces", 1, "Export Faces", "Export faces as filled strokes");
+  RNA_def_float_distance(ot->srna,
+                         "offset",
+                         0.01f,
+                         0.0,
+                         OBJECT_ADD_SIZE_MAXF,
+                         "Offset",
+                         "Offset strokes from fill",
+                         0.0,
+                         100.00);
 }
 
 /** \} */



More information about the Bf-blender-cvs mailing list