[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