[Bf-blender-cvs] [835ac5922d9] greasepencil-object: GPencil: Fix convert to Mesh offset to use Normal vector

Antonio Vazquez noreply at git.blender.org
Tue Mar 31 20:20:34 CEST 2020


Commit: 835ac5922d9d6547a535f7b3381288ab50b31f51
Author: Antonio Vazquez
Date:   Tue Mar 31 20:20:27 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB835ac5922d9d6547a535f7b3381288ab50b31f51

GPencil: Fix convert to Mesh offset to use Normal vector

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

M	source/blender/blenkernel/intern/gpencil_geom.c

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

diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index 661beaaf4dd..d80ba556eb0 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -1986,7 +1986,11 @@ void BKE_gpencil_convert_curve(Main *bmain,
 
 typedef struct GpEdge {
   uint v1, v2;
+  /* Coordinates. */
   float v1_co[3], v2_co[3];
+  /* Normals. */
+  float n1[3], n2[3];
+  /* Direction of the segment. */
   float vec[3];
   int flag;
 } GpEdge;
@@ -2076,12 +2080,12 @@ static void gpencil_generate_edgeloops(Object *ob,
   if (me->totedge == 0) {
     return;
   }
+
   /* Arrays for all edge vertices (forward and backward) that form a edge loop.
    * This is reused for each edgeloop to create gpencil stroke. */
   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__);
@@ -2090,10 +2094,13 @@ static void gpencil_generate_edgeloops(Object *ob,
     MEdge *ed = &me->medge[i];
     gped = &gp_edges[i];
     MVert *mv1 = &me->mvert[ed->v1];
+    normal_short_to_float_v3(gped->n1, mv1->no);
+
     gped->v1 = ed->v1;
     copy_v3_v3(gped->v1_co, mv1->co);
 
     MVert *mv2 = &me->mvert[ed->v2];
+    normal_short_to_float_v3(gped->n2, mv2->no);
     gped->v2 = ed->v2;
     copy_v3_v3(gped->v2_co, mv2->co);
 
@@ -2153,15 +2160,18 @@ static void gpencil_generate_edgeloops(Object *ob,
         gpf_stroke, 0, array_len + 1, thickness * thickness, false);
 
     /* Create first segment. */
+    float fpt[3];
     uint v = stroke[0];
     gped = &gp_edges[v];
     bGPDspoint *pt = &gps_stroke->points[0];
-    mul_v3_v3fl(&pt->x, gped->v1_co, scale);
+    mul_v3_v3fl(fpt, gped->n1, offset);
+    add_v3_v3v3(&pt->x, gped->v1_co, fpt);
     pt->pressure = 1.0f;
     pt->strength = 1.0f;
 
     pt = &gps_stroke->points[1];
-    mul_v3_v3fl(&pt->x, gped->v2_co, scale);
+    mul_v3_v3fl(fpt, gped->n2, offset);
+    add_v3_v3v3(&pt->x, gped->v2_co, fpt);
     pt->pressure = 1.0f;
     pt->strength = 1.0f;
 
@@ -2171,7 +2181,8 @@ static void gpencil_generate_edgeloops(Object *ob,
       gped = &gp_edges[v];
 
       bGPDspoint *pt = &gps_stroke->points[i + 1];
-      mul_v3_v3fl(&pt->x, gped->v2_co, scale);
+      mul_v3_v3fl(fpt, gped->n2, offset);
+      add_v3_v3v3(&pt->x, gped->v2_co, fpt);
       pt->pressure = 1.0f;
       pt->strength = 1.0f;
     }



More information about the Bf-blender-cvs mailing list