numerical error fix for tesselator
[blender.git] / source / blender / bmesh / bmesh_operators.h
1 #ifndef BM_OPERATORS_H
2 #define BM_OPERATORS_H
3
4 /*slot names and operator names appear in comments next to/above tbeir
5   enumeration/define value*/
6
7 /*------------begin operator defines (see bmesh_opdefines.c too)------------*/
8
9 /*split*/
10 #define BMOP_SPLIT                              0
11
12 enum {
13         BMOP_SPLIT_MULTIN, /*geom*/
14         BMOP_SPLIT_MULTOUT, /*geomout*/
15
16         //bounding edges of split faces
17         BMOP_SPLIT_BOUNDS_EDGEMAP, /*boundarymap*/
18         BMOP_SPLIT_TOTSLOT,
19 };
20
21 /*dupe*/
22 #define BMOP_DUPE       1
23
24 enum {
25         BMOP_DUPE_MULTIN, /*geom*/
26         BMOP_DUPE_ORIG, /*origout*/
27         BMOP_DUPE_NEW, /*newout*/
28         /*we need a map for verts duplicated not connected
29           to any faces, too.*/  
30         BMOP_DUPE_BOUNDS_EDGEMAP, /*boundarymap*/
31         BMOP_DUPE_TOTSLOT
32 };
33
34 /*del*/
35 #define BMOP_DEL        2
36
37 enum {
38         BMOP_DEL_MULTIN, /*geom*/
39         BMOP_DEL_CONTEXT, /*context*/
40         BMOP_DEL_TOTSLOT,
41 };
42
43 /*context slot values*/
44 #define DEL_VERTS               1
45 #define DEL_EDGES               2
46 #define DEL_ONLYFACES   3
47 #define DEL_EDGESFACES  4
48 #define DEL_FACES               5
49 #define DEL_ALL                 6
50 #define DEL_ONLYTAGGED          7
51
52 /*editmesh_to_bmesh*/
53 #define BMOP_FROM_EDITMESH              3
54
55 /*editmesh->bmesh op*/
56 enum {
57         BMOP_FROM_EDITMESH_EM, /*em*/
58         
59         /*maps old elements to new ones.
60          coud do new elements to old too,
61          in the future*/
62         BMOP_FROM_EDITMESH_MAP,
63         BMOP_FROM_EDITMESH_TOTSLOT,
64 };
65
66 /*bmesh_to_editmesh*/
67 #define BMOP_TO_EDITMESH                4
68
69 /*bmesh->editmesh op*/
70 enum {
71         BMOP_TO_EDITMESH_EMOUT, /*emout*/
72         BMOP_TO_EDITMESH_TOTSLOT,
73 };
74
75 /*esubd*/
76 #define BMOP_ESUBDIVIDE                 5
77
78 /*edge subdivide op*/
79 enum {
80         BMOP_ESUBDIVIDE_EDGES, /*edges*/
81         BMOP_ESUBDIVIDE_NUMCUTS, /*numcuts*/
82
83         //beauty flag in esubdivide
84         BMOP_ESUBDIVIDE_FLAG, /*flag*/
85         BMOP_ESUBDIVIDE_RADIUS, /*radius*/
86
87         BMOP_ESUBDIVIDE_CUSTOMFILL_FACEMAP, /*custompatterns*/
88         BMOP_ESUBDIVIDE_PERCENT_EDGEMAP, /*edgepercents*/
89
90         /*inner verts/new faces of completely filled faces, e.g.
91           fully selected face.*/
92         BMOP_ESUBDIVIDE_INNER_MULTOUT, /*outinner*/
93
94         /*new edges and vertices from splitting original edges,
95           doesn't include edges creating by connecting verts.*/
96         BMOP_ESUBDIVIDE_SPLIT_MULTOUT, /*outsplit*/     
97         BMOP_ESUBDIVIDE_TOTSLOT,
98 };
99 /*
100 SUBDIV_SELECT_INNER
101 SUBDIV_SELECT_ORIG
102 SUBDIV_SELECT_INNER_SEL
103 SUBDIV_SELECT_LOOPCUT
104 DOUBLEOPFILL
105 */
106
107 /*triangulate*/
108 #define BMOP_TRIANGULATE                6
109
110 /*triangle tesselator op*/
111 enum {
112         BMOP_TRIANG_FACEIN, /*faces*/
113         BMOP_TRIANG_NEW_EDGES, /*edgeout*/
114         BMOP_TRIANG_NEW_FACES, /*faceout*/
115         BMOP_TRIANG_TOTSLOT,
116 };
117
118 /*dissolvefaces*/
119 #define BMOP_DISSOLVE_FACES             7
120
121 /*dissolve faces*/
122 enum {
123         BMOP_DISFACES_FACEIN,
124         //list of faces that comprise regions of split faces
125         BMOP_DISFACES_REGIONOUT,
126         BMOP_DISFACES_TOTSLOT,
127 };
128
129 /*dissolveverts*/
130 #define BMOP_DISSOLVE_VERTS             8
131
132 /*dissolve verts*/
133 enum {
134         BMOP_DISVERTS_VERTIN, /*verts*/
135         BMOP_DISVERTS_TOTSLOT,
136 };
137
138 /*makefgon*/
139 #define BMOP_MAKE_FGONS                 9
140
141 #define BMOP_MAKE_FGONS_TOTSLOT 0
142
143 /*extrudefaceregion*/
144 #define BMOP_EXTRUDE_EDGECONTEXT        10
145 enum {
146         BMOP_EXFACE_EDGEFACEIN, /*edgefacein*/
147         
148         //exclude edges from skirt connecting
149         BMOP_EXFACE_EXCLUDEMAP,  /*exclude*/
150         
151         //new geometry
152         BMOP_EXFACE_MULTOUT,  /*geomout*/
153         BMOP_EXFACE_TOTSLOT,
154 };
155
156 /*connectverts*/
157 #define BMOP_CONNECT_VERTS              11
158 enum {
159         BM_CONVERTS_VERTIN, /*verts*/
160         BM_CONVERTS_EDGEOUT, /*edgeout*/
161         BM_CONVERTS_TOTSLOT
162 };
163
164 /*keep this updated!*/
165 #define BMOP_TOTAL_OPS                  12
166 /*-------------------------------end operator defines------------------------*/
167
168 extern BMOpDefine *opdefines[];
169 extern int bmesh_total_ops;
170
171 /*------specific operator helper functions-------*/
172
173 /*executes the duplicate operation, feeding elements of 
174   type flag etypeflag and header flag flag to it.  note,
175   to get more useful information (such as the mapping from
176   original to new elements) you should run the dupe op manually.*/
177 struct Object;
178 struct EditMesh;
179
180 void BMOP_DupeFromFlag(struct BMesh *bm, int etypeflag, int flag);
181 void BM_esubdivideflag(struct Object *obedit, struct BMesh *bm, int selflag, float rad, 
182                int flag, int numcuts, int seltype);
183 void BM_extrudefaceflag(BMesh *bm, int flag);
184
185 /*this next one return 1 if they did anything, or zero otherwise.
186   they're kindof a hackish way to integrate with fkey, until
187   such time as fkey is completely bmeshafied.*/
188 /*this doesn't display errors to the user, btw*/
189 int BM_ConnectVerts(struct EditMesh *em, int flag);
190
191 #endif