[Bf-blender-cvs] [6e1be5b09e8] soc-2019-npr: LANPR: removed GP Stroke modifier, Object modifier now only create visible strokes and follow level values.

YimingWu noreply at git.blender.org
Mon Jun 24 10:55:08 CEST 2019


Commit: 6e1be5b09e8d2b84399451aee6a88ae1a1a07c65
Author: YimingWu
Date:   Mon Jun 24 16:49:04 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB6e1be5b09e8d2b84399451aee6a88ae1a1a07c65

LANPR: removed GP Stroke modifier, Object modifier now only create visible strokes and follow level values.

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

M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/draw/engines/lanpr/lanpr_access.c
M	source/blender/draw/engines/lanpr/lanpr_access.h
M	source/blender/draw/engines/lanpr/lanpr_chain.c
M	source/blender/draw/engines/lanpr/lanpr_data_types.h
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/gpencil_modifiers/CMakeLists.txt
M	source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
M	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
D	source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c
M	source/blender/makesrna/intern/rna_modifier.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index d616c74520a..bb0db5d44a3 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -53,7 +53,7 @@ struct bGPDstroke;
 
 typedef enum {
   /* Should not be used, only for None modifier type */
-  eGpencilModifierTypeType_None,
+  Type_None,
 
   /* grease pencil modifiers */
   eGpencilModifierTypeType_Gpencil,
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 3cd915b9713..d1873e77b11 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -39,203 +39,8 @@ static BMVert *split_edge_and_move(BMesh *bm, BMEdge *edge, const float new_pos[
   return vert;
 }
 
-void lanpr_generate_gpencil_geometry(
-    GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
-{
-  StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md;
-  Scene *scene = DEG_get_evaluated_scene(depsgraph);
-  LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
-
-  if (gpmd->object == NULL) {
-    printf("NULL object!\n");
-    return;
-  }
-
-  if (rb == NULL) {
-    printf("NULL LANPR rb!\n");
-    return;
-  }
-
-  int color_idx = 0;
-  int tot_points = 0;
-  short thickness = 1;
-
-  float mat[4][4];
-
-  unit_m4(mat);
-
-  BMesh *bm;
-
-  bm = BKE_mesh_to_bmesh_ex(gpmd->object->data,
-                            &(struct BMeshCreateParams){0},
-                            &(struct BMeshFromMeshParams){
-                                .calc_face_normal = true,
-                                .cd_mask_extra = CD_MASK_ORIGINDEX,
-                            });
-
-  // Split countour lines at occlution points and deselect occluded segment
-  LANPR_RenderLine *rl;
-  LANPR_RenderLineSegment *rls, *irls;
-  for (rl = rb->all_render_lines.first; rl; rl = (LANPR_RenderLine *)rl->item.next) {
-    BMEdge *e = BM_edge_at_index_find(bm, rl->edge_idx);
-    BMVert *v1 = e->v1;  // Segment goes from v1 to v2
-    BMVert *v2 = e->v2;
-
-    BMVert *cur_vert = v1;
-    for (rls = rl->segments.first; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) {
-      irls = (LANPR_RenderLineSegment *)rls->item.next;
-
-      if (rls->occlusion != 0) {
-        BM_elem_flag_disable(cur_vert, BM_ELEM_SELECT);
-      }
-
-      if (!irls) {
-        break;
-      }
-
-      // safety reasons
-      CLAMP(rls->at, 0, 1);
-      CLAMP(irls->at, 0, 1);
-
-      if (irls->at == 1.0f) {
-        if (irls->occlusion != 0) {
-          BM_elem_flag_disable(v2, BM_ELEM_SELECT);
-        }
-        break;
-      }
-
-      float split_pos[3];
-
-      interp_v3_v3v3(split_pos, v1->co, v2->co, irls->at);
-
-      cur_vert = split_edge_and_move(bm, e, split_pos);
-
-      e = BM_edge_exists(cur_vert, v2);
-    }
-  }
-
-  // Chain together strokes
-  BMVert *vert;
-  BMIter iter;
-
-  BM_ITER_MESH (vert, &iter, bm, BM_VERTS_OF_MESH) {
-
-    // Have we already used this vert?
-    // if(!BM_elem_flag_test(vert, BM_ELEM_SELECT)){
-    //	continue;
-    //}
-
-    BMVert *prepend_vert = NULL;
-    BMVert *next_vert = vert;
-    // Chain together the C verts and export them as GP strokes (chain in object space)
-    BMVert *edge_vert;
-    BMEdge *e;
-    BMIter iter_e;
-
-    LinkNodePair chain = {NULL, NULL};
-
-    int connected_c_verts;
-
-    while (next_vert != NULL) {
-
-      connected_c_verts = 0;
-      vert = next_vert;
-
-      BLI_linklist_append(&chain, vert);
-
-      BM_elem_flag_disable(vert, BM_ELEM_SELECT);
-
-      BM_ITER_ELEM (e, &iter_e, vert, BM_EDGES_OF_VERT) {
-        edge_vert = BM_edge_other_vert(e, vert);
-
-        if (BM_elem_flag_test(edge_vert, BM_ELEM_SELECT)) {
-          if (connected_c_verts == 0) {
-            next_vert = edge_vert;
-          }
-          else if (connected_c_verts == 1 && prepend_vert == NULL) {
-            prepend_vert = edge_vert;
-          }
-          else {
-            printf("C verts not connected in a simple line!\n");
-          }
-          connected_c_verts++;
-        }
-      }
-
-      if (connected_c_verts == 0) {
-        next_vert = NULL;
-      }
-    }
-
-    LinkNode *pre_list = chain.list;
-
-    while (prepend_vert != NULL) {
-
-      connected_c_verts = 0;
-      vert = prepend_vert;
-
-      BLI_linklist_prepend(&pre_list, vert);
-
-      BM_elem_flag_disable(vert, BM_ELEM_SELECT);
-
-      BM_ITER_ELEM (e, &iter_e, vert, BM_EDGES_OF_VERT) {
-        edge_vert = BM_edge_other_vert(e, vert);
-
-        if (BM_elem_flag_test(edge_vert, BM_ELEM_SELECT)) {
-          if (connected_c_verts == 0) {
-            prepend_vert = edge_vert;
-          }
-          else {
-            printf("C verts not connected in a simple line!\n");
-          }
-          connected_c_verts++;
-        }
-      }
-
-      if (connected_c_verts == 0) {
-        prepend_vert = NULL;
-      }
-    }
-
-    tot_points = BLI_linklist_count(pre_list);
-
-    printf("Tot points: %d\n", tot_points);
-
-    if (tot_points <= 1) {
-      // Don't draw a stroke, chain too short.
-      printf("Chain to short\n");
-      continue;
-    }
-
-    float *stroke_data = BLI_array_alloca(stroke_data, tot_points * GP_PRIM_DATABUF_SIZE);
-
-    int array_idx = 0;
-
-    for (LinkNode *entry = pre_list; entry; entry = entry->next) {
-      vert = entry->link;
-      stroke_data[array_idx] = vert->co[0];
-      stroke_data[array_idx + 1] = vert->co[1];
-      stroke_data[array_idx + 2] = vert->co[2];
-
-      stroke_data[array_idx + 3] = 1.0f;  // thickness
-      stroke_data[array_idx + 4] = 1.0f;  // hardness?
-
-      array_idx += 5;
-    }
-
-    /* generate stroke */
-    bGPDstroke *gps;
-    gps = BKE_gpencil_add_stroke(gpf, color_idx, tot_points, thickness);
-    BKE_gpencil_stroke_add_points(gps, stroke_data, tot_points, mat);
-
-    BLI_linklist_free(pre_list, NULL);
-  }
-
-  BM_mesh_free(bm);
-}
-
 void lanpr_generate_gpencil_from_chain(
-    Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+    Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, int qi_begin, int qi_end)
 {
   Scene *scene = DEG_get_evaluated_scene(depsgraph);
   LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
@@ -266,6 +71,9 @@ void lanpr_generate_gpencil_from_chain(
     if (!rlc->object_ref)
       continue;  // XXX: intersection lines are lost
 
+    if (rlc->level>qi_end || rlc->level<qi_begin)
+      continue;
+
     if (ob && &ob->id != rlc->object_ref->id.orig_id)
       continue;
 
@@ -276,11 +84,11 @@ void lanpr_generate_gpencil_from_chain(
     float *stroke_data = BLI_array_alloca(stroke_data, count * GP_PRIM_DATABUF_SIZE);
 
     for (rlci = rlc->chain.first; rlci; rlci = (LANPR_RenderLineChainItem *)rlci->item.next) {
-      float opatity = rlci->occlusion ? 0.0f : 1.0f;
+      float opatity = 1.0f; //rlci->occlusion ? 0.0f : 1.0f;
       stroke_data[array_idx] = rlci->gpos[0];
       stroke_data[array_idx + 1] = rlci->gpos[1];
       stroke_data[array_idx + 2] = rlci->gpos[2];
-      stroke_data[array_idx + 3] = opatity;  // thickness
+      stroke_data[array_idx + 3] = 1;  // thickness
       stroke_data[array_idx + 4] = opatity;  // hardness?
       array_idx += 5;
     }
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.h b/source/blender/draw/engines/lanpr/lanpr_access.h
index 82168e71942..1bd71b7353b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.h
+++ b/source/blender/draw/engines/lanpr/lanpr_access.h
@@ -10,11 +10,8 @@
 
 typedef struct LANPR_RenderLineChain LANPR_RenderLineChain;
 
-void lanpr_generate_gpencil_geometry(
-    GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf);
-
 void lanpr_generate_gpencil_from_chain(
-    Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf);
+    Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, int qi_begin, int qi_end);
 
 void lanpr_update_data_for_external(Depsgraph *depsgraph);
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index efbd92413d0..af636a87b96 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -504,6 +504,7 @@ void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb)
     BLI_addtail(&rb->chains, rlc);
     LANPR_RenderLineChainItem *first_rlci = (LANPR_RenderLineChainItem *)rlc->chain.first;
     int fixed_occ = first_rlci->occlusion;
+    rlc->level = fixed_occ;
     for (rlci = (LANPR_RenderLineChainItem *)first_rlci->item.next; rlci; rlci = next_rlci) {
       next_rlci = (LANPR_RenderLineChainItem *)rlci->item.next;
       if (rlci->occlusion != fixed_occ) {
@@ -528,6 +529,7 @@ void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb)
         new_rlc->object_ref = rlc->object_ref;
         rlc = new_rlc;
         fixed_occ = rlci->occlusion;
+        rlc->level = fixed_occ;
       }
     }
   }
diff --git a/source/blender/draw/engines/lanpr/lanpr_data_types.h b/source/blender/draw/engines/lanpr/lanpr_data_types.h
index 95c1328d81b..d979efdff3b 100644
--- a/source/blender/draw/engines/lanpr/lanpr_data_types.h
+++ b/source/blender/draw/engines/lanpr/lanpr_data_types.h
@@ -126,6 +126,7 @@ typedef struct LANPR_RenderLineChain {
   // int         SegmentCount;  // we count before draw cmd.
   float length;  // calculated before draw cmd.
   char picked;   // used when re-connecting
+  char level;
   struct Object *object_ref;
 } LANPR_RenderLineChain;
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 602a6fab6cc..cc15313a598 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4312,7 +4312,8 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in
           gpf = BKE_gpencil_frame_addnew(gpl, frame);
           BKE_gpencil_free_strokes(gpf);  // force clear now
 
-          lanpr_generate_gpencil_from_chain(dg, ob, gpl, gpf);
+ 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list