[Bf-blender-cvs] [1fb871e8047] soc-2019-npr: Merge remote-tracking branch 'DarkdefenderRepo/npr_tess' into soc-2019-npr

YimingWu noreply at git.blender.org
Tue Jun 18 10:23:44 CEST 2019


Commit: 1fb871e8047eed56d8281933639e20384c8a01be
Author: YimingWu
Date:   Tue Jun 18 16:09:44 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB1fb871e8047eed56d8281933639e20384c8a01be

Merge remote-tracking branch 'DarkdefenderRepo/npr_tess' into soc-2019-npr

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



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

diff --cc source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
index 75707792f53,def17ac2fcd..6a170f3bf3a
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c
@@@ -68,91 -68,230 +68,315 @@@
  #include "MOD_gpencil_util.h"
  #include "MOD_gpencil_modifiertypes.h"
  
++<<<<<<< HEAD
 +#include "lanpr_access.h"
 +
 +static void initData(GpencilModifierData *md)
 +{
 +  StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md;
 +  gpmd->object = NULL;
++=======
+ static void initData(GpencilModifierData *md)
+ {
+ 	StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md;
+ 	gpmd->object = NULL;
++>>>>>>> DarkdefenderRepo/npr_tess
  }
  
  static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
  {
++<<<<<<< HEAD
 +  BKE_gpencil_modifier_copyData_generic(md, target);
 +}
 +
 +static void deformStroke(
 +    GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 +{
 +  lanpr_update_data_for_external(depsgraph);
 +  lanpr_generate_gpencil_from_chain(md, depsgraph, ob, gpl, gpf);
 +}
 +
 +static void bakeModifier(Main *UNUSED(bmain),
 +                         Depsgraph *depsgraph,
 +                         GpencilModifierData *md,
 +                         Object *ob)
 +{
 +
 +  bGPdata *gpd = ob->data;
 +
 +  for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
 +    for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
 +      deformStroke(md, depsgraph, ob, gpl, gpf);
 +    }
 +  }
++=======
+ 	BKE_gpencil_modifier_copyData_generic(md, target);
+ }
+ 
+ static void generate_geometry(
+         GpencilModifierData *md, Depsgraph *UNUSED(depsgraph),
+         Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+ {
+ 	StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md;
+ 
+ 	if( gpmd->object == NULL ){
+ 		printf("NULL object!\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,
+ 			});
+ 
+  	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);
+ }
+ 
+ static void bakeModifier(
+         Main *UNUSED(bmain), Depsgraph *depsgraph,
+         GpencilModifierData *md, Object *ob)
+ {
+ 
+ 	bGPdata *gpd = ob->data;
+ 
+ 	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ 		for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+ 			generate_geometry(md, depsgraph, ob, gpl, gpf);
+ 			return;
+ 		}
+ 	}
++>>>>>>> DarkdefenderRepo/npr_tess
  }
  
  /* -------------------------------- */
  
  /* Generic "generateStrokes" callback */
  static void generateStrokes(
++<<<<<<< HEAD
 +    GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 +{
 +  deformStroke(md, depsgraph, ob, gpl, gpf);
++=======
+         GpencilModifierData *md, Depsgraph *depsgraph,
+         Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+ {
+ 	generate_geometry(md, depsgraph, ob, gpl, gpf);
++>>>>>>> DarkdefenderRepo/npr_tess
  }
  
  static void updateDepsgraph(GpencilModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
  {
++<<<<<<< HEAD
 +  StrokeGpencilModifierData *lmd = (StrokeGpencilModifierData *)md;
 +  if (lmd->object != NULL) {
 +    DEG_add_object_relation(ctx->node, lmd->object, DEG_OB_COMP_GEOMETRY, "Stroke Modifier");
 +    DEG_add_object_relation(ctx->node, lmd->object, DEG_OB_COMP_TRANSFORM, "Stroke Modifier");
 +  }
 +  DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Stroke Modifier");
 +}
 +
 +static void foreachObjectLink(GpencilModifierData *md,
 +                              Object *ob,
 +                              ObjectWalkFunc walk,
 +                              void *userData)
 +{
 +  StrokeGpencilModifierData *mmd = (StrokeGpencilModifierData *)md;
 +
 +  walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
 +}
 +
 +GpencilModifierTypeInfo modifierType_Gpencil_Stroke = {
 +    /* name */ "Stroke",
 +    /* structName */ "StrokeGpencilModifierData",
 +    /* structSize */ sizeof(StrokeGpencilModifierData),
 +    /* type */ eGpencilModifierTypeType_Gpencil,
 +    /* flags */ 0,
 +
 +    /* copyData */ copyData,
 +
 +    /* deformStroke */ NULL,
 +    /* generateStrokes */ generateStrokes,
 +    /* bakeModifier */ bakeModifier,
 +    /* remapTime */ NULL,
 +
 +    /* initData */ initData,
 +    /* freeData */ NULL,
 +    /* isDisabled */ NULL,
 +    /* updateDepsgraph */ updateDepsgraph,
 +    /* dependsOnTime */ NULL,
 +    /* foreachObjectLink */ foreachObjectLink,
 +    /* foreachIDLink */ NULL,
 +    /* foreachTexLink */ NULL,
 +    /* getDuplicationFactor */ NULL,
++=======
+ 	StrokeGpencilModifierData *lmd = (StrokeGpencilModifierData *)md;
+ 	if (lmd->object != NULL) {
+ 		DEG_add_object_relation(ctx->node, lmd->object, DEG_OB_COMP_GEOMETRY, "Stroke Modifier");
+ 		DEG_add_object_relation(ctx->node, lmd->object, DEG_OB_COMP_TRANSFORM, "Stroke Modifier");
+ 	}
+ 	DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Stroke Modifier");
+ }
+ 
+ static void foreachObjectLink(
+ 	GpencilModifierData *md, Object *ob,
+ 	ObjectWalkFunc walk, void *userData)
+ {
+ 	StrokeGpencilModifierData *mmd = (StrokeGpencilModifierData *)md;
+ 
+ 	walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
+ }
+ 
+ 
+ GpencilModifierTypeInfo modifierType_Gpencil_Stroke = {
+ 	/* name */              "Stroke",
+ 	/* structName */        "StrokeGpencilModifierData",
+ 	/* structSize */        sizeof(StrokeGpencilModifierData),
+ 	/* type */              eGpencilModifierTypeType_Gpencil,
+ 	/* flags */             0,
+ 
+ 	/* copyData */          copyData,
+ 
+ 	/* deformStroke */      NULL,
+ 	/* generateStrokes */   generateStrokes,
+ 	/* bakeModifier */      bakeModifier,
+ 	/* remapTime */         NULL,
+ 
+ 	/* initData */          initData,
+ 	/* freeData */          NULL,
+ 	/* isDisabled */        NULL,
+ 	/* updateDepsgraph */   updateDepsgraph,
+ 	/* dependsOnTime */     NULL,
+ 	/* foreachObjectLink */ foreachObjectLink,
+ 	/* foreachIDLink */     NULL,
+ 	/* foreachTexLink */    NULL,
++>>>>>>> DarkdefenderRepo/npr_tess
  };
diff --cc source/blender/makesdna/DNA_gpencil_modifier_types.h
index 4e9c03468f1,d9a878a2e06..6310664741d
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@@ -31,27 -31,25 +31,49 @@@
  struct RNG;
  
  typedef enum GpencilModifierType {
++<<<<<<< HEAD
 +  eGpencilModifierType_None = 0,
 +  eGpencilModifierType_Noise = 1,
 +  eGpencilModifierType_Subdiv = 2,
 +  eGpencilModifierType_Thick = 3,
 +  eGpencilModifierType_Tint = 4,
 +  eGpencilModifierType_Array = 5,
 +  eGpencilModifierType_Build = 6,
 +  eGpencilModifierType_Opacity = 7,
 +  eGpencilModifierType_Color = 8,
 +  eGpencilModifierType_Lattice = 9,
 +  eGpencilModifierType_Simplify = 10,
 +  eGpencilModifierType_Smooth = 11,
 +  eGpencilModifierType_Hook = 12,
 +  eGpencilModifierType_Offset = 13,
 +  eGpencilModifierType_Mirror = 14,
 +  e

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list