From 894c240f9d007271e9d587d3c1b6f961c445b1b8 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Wed, 13 Mar 2013 06:44:43 +0000 Subject: New implementation of Freestyle edge/face marks The previous implementation of Freestyle edge/face marks was refactored based on suggestions from the latest code review by Campbell. The new implementation relies on mesh CustomData to store edge/face marks, instead of introducing extra flags in the core Mesh and BMesh data structures. The CustomData-based implementation will allow further additions of new edge/face attributes because of the independence from Mesh/BMesh. This revision is work in progress, mainly intended to address the review comments and ask for further code review in view of the trunk merger in the upcoming 2.67 release. --- source/blender/makesdna/DNA_customdata_types.h | 8 ++++++-- source/blender/makesdna/DNA_mesh_types.h | 2 ++ source/blender/makesdna/DNA_meshdata_types.h | 20 ++++++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) (limited to 'source/blender/makesdna') diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h index 4a3debe756b..8debadf24c3 100644 --- a/source/blender/makesdna/DNA_customdata_types.h +++ b/source/blender/makesdna/DNA_customdata_types.h @@ -63,7 +63,7 @@ typedef struct CustomDataExternal { * layers, each with a data type (e.g. MTFace, MDeformVert, etc.). */ typedef struct CustomData { CustomDataLayer *layers; /* CustomDataLayers, ordered by type */ - int typemap[37]; /* runtime only! - maps types to indices of first layer of that type, + int typemap[39]; /* runtime only! - maps types to indices of first layer of that type, * MUST be >= CD_NUMTYPES, but we cant use a define here. * Correct size is ensured in CustomData_update_typemap assert() */ int totlayer, maxlayer; /* number of layers, size of layers array */ @@ -114,7 +114,9 @@ typedef struct CustomData { #define CD_PAINT_MASK 34 #define CD_GRID_PAINT_MASK 35 #define CD_MVERT_SKIN 36 -#define CD_NUMTYPES 37 +#define CD_FREESTYLE_EDGE 37 +#define CD_FREESTYLE_FACE 38 +#define CD_NUMTYPES 39 /* Bits for CustomDataMask */ #define CD_MASK_MVERT (1 << CD_MVERT) @@ -156,6 +158,8 @@ typedef struct CustomData { #define CD_MASK_PAINT_MASK (1LL << CD_PAINT_MASK) #define CD_MASK_GRID_PAINT_MASK (1LL << CD_GRID_PAINT_MASK) #define CD_MASK_MVERT_SKIN (1LL << CD_MVERT_SKIN) +#define CD_MASK_FREESTYLE_EDGE (1LL << CD_FREESTYLE_EDGE) +#define CD_MASK_FREESTYLE_FACE (1LL << CD_FREESTYLE_FACE) /* CustomData.flag */ diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h index 042a353642a..c125518ba73 100644 --- a/source/blender/makesdna/DNA_mesh_types.h +++ b/source/blender/makesdna/DNA_mesh_types.h @@ -179,6 +179,8 @@ typedef struct TFace { #define ME_CDFLAG_VERT_BWEIGHT (1 << 0) #define ME_CDFLAG_EDGE_BWEIGHT (1 << 1) #define ME_CDFLAG_EDGE_CREASE (1 << 2) +#define ME_CDFLAG_FREESTYLE_EDGE (1 << 3) +#define ME_CDFLAG_FREESTYLE_FACE (1 << 4) /* me->drawflag, short */ #define ME_DRAWEDGES (1 << 0) diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h index 2323c95d8ba..b849ca28d49 100644 --- a/source/blender/makesdna/DNA_meshdata_types.h +++ b/source/blender/makesdna/DNA_meshdata_types.h @@ -279,6 +279,22 @@ typedef struct MVertSkin { int flag; } MVertSkin; +typedef struct FreestyleEdge { + char flag; + char pad[3]; +} FreestyleEdge; + +/* FreestyleEdge->flag */ +#define FREESTYLE_EDGE_MARK 1 + +typedef struct FreestyleFace { + char flag; + char pad[3]; +} FreestyleFace; + +/* FreestyleFace->flag */ +#define FREESTYLE_FACE_MARK 1 + /* mvert->flag (1=SELECT) */ #define ME_SPHERETEST 2 #define ME_VERT_TMP_TAG 4 @@ -296,7 +312,7 @@ typedef struct MVertSkin { /* #define ME_SEAM_LAST (1<<8) */ /* UNUSED */ #define ME_SHARP (1<<9) /* only reason this flag remains a 'short' */ /* #ifdef WITH_FREESTYLE */ -#define ME_FREESTYLE_EDGE (1<<10) +#define ME_FREESTYLE_EDGE (1<<10) /* TO BE REMOVED when the trunk merger is done */ /* #endif */ /* puno = vertexnormal (mface) */ @@ -315,7 +331,7 @@ typedef struct MVertSkin { #define ME_SMOOTH 1 #define ME_FACE_SEL 2 /* #ifdef WITH_FREESTYLE */ -#define ME_FREESTYLE_FACE 4 +#define ME_FREESTYLE_FACE 4 /* TO BE REMOVED when the trunk merger is done */ /* #endif */ /* flag ME_HIDE==16 is used here too */ -- cgit v1.2.3