[Bf-blender-cvs] [29f1a8f1757] soc-2019-npr: Added LANPR chain conversion funcitons. Now LANPR to GP is able to run.

Yiming Wu noreply at git.blender.org
Thu May 30 13:22:06 CEST 2019


Commit: 29f1a8f175725a82b5590c12c569632b51e062b8
Author: Yiming Wu
Date:   Thu May 30 19:21:58 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB29f1a8f175725a82b5590c12c569632b51e062b8

Added LANPR chain conversion funcitons. Now LANPR to GP is able to run.

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

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_ops.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index f618888e256..29fa64f2984 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -23,6 +23,7 @@
 #include "BKE_mesh_mapping.h"
 
 #include "lanpr_all.h"
+#include "lanpr_access.h"
 
 static BMVert* split_edge_and_move(BMesh *bm, BMEdge *edge, const float new_pos[3]){
 	//Split edge one time and move the created vert to new_pos
@@ -119,9 +120,9 @@ void lanpr_generate_gpencil_geometry(
 	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;
-		}
+		//if(!BM_elem_flag_test(vert, BM_ELEM_SELECT)){
+		//	continue;
+		//}
 
 		BMVert *prepend_vert = NULL;
 		BMVert *next_vert = vert;
@@ -230,4 +231,56 @@ void lanpr_generate_gpencil_geometry(
 	}
 
 	BM_mesh_free(bm);
-}
\ No newline at end of file
+}
+
+void lanpr_generate_gpencil_from_chain(
+        GpencilModifierData *md, Depsgraph *depsgraph,
+        Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+{
+	StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md;
+	Scene *scene = DEG_get_evaluated_scene(depsgraph);
+	LANPR_RenderBuffer *rb = scene->lanpr.render_buffer;
+
+	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);
+
+	//Split countour lines at occlution points and deselect occluded segment
+	LANPR_RenderLine *rl;
+	LANPR_RenderLineSegment *rls, *irls;
+
+	LANPR_RenderLineChain* rlc;
+	LANPR_RenderLineChainItem* rlci;
+	for (rlc = rb->chains.first;rlc;rlc=rlc->item.next){
+
+		int array_idx = 0;
+		int count = lanpr_count_chain(rlc);
+		bGPDstroke *gps = BKE_gpencil_add_stroke(gpf, color_idx, count, thickness);
+
+		float *stroke_data = BLI_array_alloca(stroke_data, count * GP_PRIM_DATABUF_SIZE);
+
+		for(rlci = rlc->chain.first;rlci;rlci=rlci->item.next){
+			float opatity=rlci->occlusion?0.1f:1.0f;
+			stroke_data[array_idx] = rlci->pos[0];
+			stroke_data[array_idx + 1] = rlci->pos[1];
+			stroke_data[array_idx + 2] = rlci->pos[2];
+			stroke_data[array_idx + 3] = opatity; //thickness
+			stroke_data[array_idx + 4] = opatity; //hardness?
+			array_idx+=5;
+		}
+
+		BKE_gpencil_stroke_add_points(gps, stroke_data, count, mat);
+
+	}
+
+}
+
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.h b/source/blender/draw/engines/lanpr/lanpr_access.h
index 755c57c67a2..ad3f47e1dc8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.h
+++ b/source/blender/draw/engines/lanpr/lanpr_access.h
@@ -8,8 +8,16 @@
 
 #include "BKE_gpencil.h"
 
+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(
+        GpencilModifierData *md, Depsgraph *depsgraph,
+        Object *ob, bGPDlayer *gpl, bGPDframe *gpf);
+
+int lanpr_count_chain(LANPR_RenderLineChain *rlc);
+
 #endif
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index aba292f6eac..2ab9f6f3d24 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -60,7 +60,7 @@ int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl,
                                                    double *To);
 void lanpr_compute_view_Vector(LANPR_RenderBuffer *rb);
 
-int use_smooth_contour_modifier_contour = 1;  // debug purpose
+int use_smooth_contour_modifier_contour = 0;  // debug purpose
 
 /* ====================================== base structures
  * =========================================== */
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
index 4b8b3595c19..104e5bddb44 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
@@ -92,7 +92,7 @@ static void bakeModifier(
 
 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 		for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
-			lanpr_generate_gpencil_geometry(md, depsgraph, ob, gpl, gpf);
+			//lanpr_generate_gpencil_geometry(md, depsgraph, ob, gpl, gpf);
 			return;
 		}
 	}
@@ -105,7 +105,8 @@ static void generateStrokes(
         GpencilModifierData *md, Depsgraph *depsgraph,
         Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 {
-	lanpr_generate_gpencil_geometry(md, depsgraph, ob, gpl, gpf);
+	//lanpr_generate_gpencil_geometry(md, depsgraph, ob, gpl, gpf);
+	lanpr_generate_gpencil_from_chain(md, depsgraph, ob, gpl, gpf);
 }
 
 static void updateDepsgraph(GpencilModifierData *md, const ModifierUpdateDepsgraphContext *ctx)



More information about the Bf-blender-cvs mailing list