part 1 of cleaning up my little array macro library to be a formal API. also removed...
[blender.git] / source / blender / blenkernel / intern / CCGSubSurf.h
1 /* $Id$ */
2
3 typedef void* CCGMeshHDL;
4 typedef void* CCVertHDL;
5 typedef void* CCEdgeHDL;
6 typedef void* CCFaceHDL;
7
8 typedef struct _CCVert CCVert;
9 typedef struct _CCEdge CCEdge;
10 typedef struct _CCFace CCFace;
11
12 typedef struct _CCGMeshIFC CCGMeshIFC;
13 struct _CCGMeshIFC {
14         int vertUserSize, edgeUserSize, faceUserSize;
15         int vertDataSize;
16 };
17
18 /***/
19
20 typedef void* CCAllocHDL;
21
22 typedef struct _CCGAllocatorIFC CCGAllocatorIFC;
23 struct _CCGAllocatorIFC {
24         void*           (*alloc)        (CCAllocHDL a, int numBytes);
25         void*           (*realloc)      (CCAllocHDL a, void *ptr, int newSize, int oldSize);
26         void            (*free)         (CCAllocHDL a, void *ptr);
27         void            (*release)      (CCAllocHDL a);
28 };
29
30 /***/
31
32 typedef enum {
33         eCCGError_None = 0,
34
35         eCCGError_InvalidSyncState,
36         eCCGError_InvalidValue,
37 } CCGError;
38
39 /***/
40
41 typedef struct _CSubSurf CSubSurf;
42
43 CSubSurf*       CCS_new                 (CCGMeshIFC *ifc, int subdivisionLevels, CCGAllocatorIFC *allocatorIFC, CCAllocHDL allocator);
44 void            CCS_free                (CSubSurf *ss);
45
46 CCGError        CCS_sync                (CSubSurf *ss);
47
48 CCGError        CCS_initFullSync        (CSubSurf *ss);
49 CCGError        CCS_initPartialSync     (CSubSurf *ss);
50
51 CCGError        CCS_syncVert            (CSubSurf *ss, CCVertHDL vHDL, void *vertData, int seam, CCVert **v_r);
52 CCGError        CCS_syncEdge            (CSubSurf *ss, CCEdgeHDL eHDL, CCVertHDL e_vHDL0, CCVertHDL e_vHDL1, float crease, CCEdge **e_r);
53 CCGError        CCS_syncFace            (CSubSurf *ss, CCFaceHDL fHDL, int numVerts, CCVertHDL *vHDLs, CCFace **f_r);
54
55 CCGError        CCS_syncVertDel         (CSubSurf *ss, CCVertHDL vHDL);
56 CCGError        CCS_syncEdgeDel         (CSubSurf *ss, CCEdgeHDL eHDL);
57 CCGError        CCS_syncFaceDel         (CSubSurf *ss, CCFaceHDL fHDL);
58
59 CCGError        CCS_processSync         (CSubSurf *ss);
60
61 CCGError        CCS_setSubdivisionLevels(CSubSurf *ss, int subdivisionLevels);
62
63 CCGError        CCS_setAllowEdgeCreation(CSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData);
64 void            CCS_getAllowEdgeCreation(CSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r);
65
66 void            CCS_getUseAgeCounts     (CSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r);
67 CCGError        CCS_setUseAgeCounts     (CSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset);
68
69 CCGError        CCS_setCalcVertexNormals(CSubSurf *ss, int useVertNormals, int normalDataOffset);
70
71 /***/
72
73 int             CCS_getNumVerts         (CSubSurf *ss);
74 int             CCS_getNumEdges         (CSubSurf *ss);
75 int             CCS_getNumFaces (CSubSurf *ss);
76
77 int             CCS_getSubdivisionLevels(CSubSurf *ss);
78 int             CCS_getEdgeSize         (CSubSurf *ss);
79 int             CCS_getEdgeLevelSize    (CSubSurf *ss, int level);
80 int             CCS_getGridSize         (CSubSurf *ss);
81 int             CCS_getGridLevelSize    (CSubSurf *ss, int level);
82
83 CCVert*         CCS_getVert             (CSubSurf *ss, CCVertHDL v);
84 CCVertHDL       CCS_getVertVertHandle   (CCVert *v);
85 int             CCS_getVertNumFaces     (CCVert *v);
86 CCFace*         CCS_getVertFace         (CCVert *v, int index);
87 int             CCS_getVertNumEdges     (CCVert *v);
88 CCEdge*         CCS_getVertEdge         (CCVert *v, int index);
89
90 int             CCS_getVertAge          (CSubSurf *ss, CCVert *v);
91 void*           CCS_getVertUserData     (CSubSurf *ss, CCVert *v);
92 void*           CCS_getVertData         (CSubSurf *ss, CCVert *v);
93 void*           CCS_getVertLevelData    (CSubSurf *ss, CCVert *v, int level);
94
95 CCEdge*         CCS_getEdge             (CSubSurf *ss, CCEdgeHDL e);
96 CCEdgeHDL       CCS_getEdgeEdgeHandle   (CCEdge *e);
97 int             CCS_getEdgeNumFaces     (CCEdge *e);
98 CCFace*         CCS_getEdgeFace         (CCEdge *e, int index);
99 CCVert*         CCS_getEdgeVert0        (CCEdge *e);
100 CCVert*         CCS_getEdgeVert1        (CCEdge *e);
101 float           CCS_getEdgeCrease       (CCEdge *e);
102
103 int             CCS_getEdgeAge          (CSubSurf *ss, CCEdge *e);
104 void*           CCS_getEdgeUserData     (CSubSurf *ss, CCEdge *e);
105 void*           CCS_getEdgeDataArray    (CSubSurf *ss, CCEdge *e);
106 void*           CCS_getEdgeData         (CSubSurf *ss, CCEdge *e, int x);
107 void*           CCS_getEdgeLevelData    (CSubSurf *ss, CCEdge *e, int x, int level);
108
109 CCFace*         CCS_getFace             (CSubSurf *ss, CCFaceHDL f);
110 CCFaceHDL       CCS_getFaceFaceHandle   (CSubSurf *ss, CCFace *f);
111 int             CCS_getFaceNumVerts     (CCFace *f);
112 CCVert*         CCS_getFaceVert         (CSubSurf *ss, CCFace *f, int index);
113 CCEdge*         CCS_getFaceEdge         (CSubSurf *ss, CCFace *f, int index);
114 int             CCS_getFaceEdgeIndex    (CCFace *f, CCEdge *e);
115
116 int             CCS_getFaceAge          (CSubSurf *ss, CCFace *f);
117 void*           CCS_getFaceUserData     (CSubSurf *ss, CCFace *f);
118 void*           CCS_getFaceCenterData   (CCFace *f);
119 void*           CCS_getFaceGridEdgeDataArray    (CSubSurf *ss, CCFace *f, int gridIndex);
120 void*           CCS_getFaceGridEdgeData         (CSubSurf *ss, CCFace *f, int gridIndex, int x);
121 void*           CCS_getFaceGridDataArray        (CSubSurf *ss, CCFace *f, int gridIndex);
122 void*           CCS_getFaceGridData             (CSubSurf *ss, CCFace *f, int gridIndex, int x, int y);
123
124 int             CCS_getNumFinalVerts            (CSubSurf *ss);
125 int             CCS_getNumFinalEdges            (CSubSurf *ss);
126 int             CCS_getNumFinalFaces            (CSubSurf *ss);
127
128 /***/
129
130 typedef struct _CCVertIterator CCVertIterator;
131 typedef struct _CCEdgeIterator CCEdgeIterator;
132 typedef struct _CCFaceIterator CCFaceIterator;
133
134 CCVertIterator* CCS_getVertIterator             (CSubSurf *ss);
135 CCEdgeIterator* CCS_getEdgeIterator             (CSubSurf *ss);
136 CCFaceIterator* CCS_getFaceIterator             (CSubSurf *ss);
137
138 CCVert*         CCVIter_getCurrent              (CCVertIterator *vi);
139 int             CCVIter_isStopped               (CCVertIterator *vi);
140 void            CCVIter_next                    (CCVertIterator *vi);
141 void            CCVIter_free                    (CCVertIterator *vi);
142
143 CCEdge*         CCEIter_getCurrent              (CCEdgeIterator *ei);
144 int             CCEIter_isStopped               (CCEdgeIterator *ei);
145 void            CCEIter_next                    (CCEdgeIterator *ei);
146 void            CCEIter_free                    (CCEdgeIterator *ei);
147
148 CCFace*         CCFIter_getCurrent              (CCFaceIterator *fi);
149 int             CCFIter_isStopped               (CCFaceIterator *fi);
150 void            CCFIter_next                    (CCFaceIterator *fi);
151 void            CCFIter_free                    (CCFaceIterator *fi);