1 // Name : ModelHighAPI_Macro.h
5 // 27/05/16 - Sergey POKHODENKO - Creation of the file
7 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
8 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
10 //--------------------------------------------------------------------------------------
11 #include <GeomDataAPI_Dir.h>
12 #include <GeomDataAPI_Point.h>
13 #include <GeomDataAPI_Point2D.h>
14 //--------------------------------------------------------------------------------------
15 #include <ModelAPI_AttributeBoolean.h>
16 #include <ModelAPI_AttributeDocRef.h>
17 #include <ModelAPI_AttributeDouble.h>
18 #include <ModelAPI_AttributeIntArray.h>
19 #include <ModelAPI_AttributeInteger.h>
20 #include <ModelAPI_AttributeRefAttr.h>
21 #include <ModelAPI_AttributeRefAttrList.h>
22 #include <ModelAPI_AttributeReference.h>
23 #include <ModelAPI_AttributeRefList.h>
24 #include <ModelAPI_AttributeSelection.h>
25 #include <ModelAPI_AttributeSelectionList.h>
26 #include <ModelAPI_AttributeString.h>
27 #include <ModelAPI_Feature.h>
29 //--------------------------------------------------------------------------------------
30 #define VAR_NAME(NAME) my##NAME
32 //--------------------------------------------------------------------------------------
33 // Used in INTERFACE_N for create variable and getter
34 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
36 std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
38 std::shared_ptr<TYPE> VAR_NAME(NAME); \
41 //--------------------------------------------------------------------------------------
42 // Used in INTERFACE_N inside START_INIT/END_INIT for set variable with attribute received from feature
43 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
44 VAR_NAME(NAME) = std::dynamic_pointer_cast<TYPE>(feature()->attribute(ATT_NAME)); \
45 if (!VAR_NAME(NAME)) \
48 //--------------------------------------------------------------------------------------
49 #define INTERFACE_COMMON(KIND) \
50 static std::string ID() { return KIND; }\
51 virtual std::string getID() { return ID(); }
53 //--------------------------------------------------------------------------------------
54 #define START_INIT() \
57 throwException(ID() + " exception: The feature is NULL."); \
60 if (getKind() != getID()) { \
61 throwException(ID() + " exception: Wrong feature kind."); \
65 //--------------------------------------------------------------------------------------
71 //--------------------------------------------------------------------------------------
72 #define INTERFACE_1(KIND, \
73 N_0, AN_0, T_0, C_0) \
75 INTERFACE_COMMON(KIND) \
76 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
79 SET_ATTRIBUTE(N_0, T_0, AN_0) \
83 //--------------------------------------------------------------------------------------
84 #define INTERFACE_2(KIND, \
85 N_0, AN_0, T_0, C_0, \
86 N_1, AN_1, T_1, C_1) \
88 INTERFACE_COMMON(KIND) \
89 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
90 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
93 SET_ATTRIBUTE(N_0, T_0, AN_0) \
94 SET_ATTRIBUTE(N_1, T_1, AN_1) \
98 //--------------------------------------------------------------------------------------
99 #define INTERFACE_3(KIND, \
100 N_0, AN_0, T_0, C_0, \
101 N_1, AN_1, T_1, C_1, \
102 N_2, AN_2, T_2, C_2) \
104 INTERFACE_COMMON(KIND) \
105 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
106 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
107 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
110 SET_ATTRIBUTE(N_0, T_0, AN_0) \
111 SET_ATTRIBUTE(N_1, T_1, AN_1) \
112 SET_ATTRIBUTE(N_2, T_2, AN_2) \
116 //--------------------------------------------------------------------------------------
117 #define INTERFACE_4(KIND, \
118 N_0, AN_0, T_0, C_0, \
119 N_1, AN_1, T_1, C_1, \
120 N_2, AN_2, T_2, C_2, \
121 N_3, AN_3, T_3, C_3) \
123 INTERFACE_COMMON(KIND) \
124 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
125 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
126 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
127 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
130 SET_ATTRIBUTE(N_0, T_0, AN_0) \
131 SET_ATTRIBUTE(N_1, T_1, AN_1) \
132 SET_ATTRIBUTE(N_2, T_2, AN_2) \
133 SET_ATTRIBUTE(N_3, T_3, AN_3) \
137 //--------------------------------------------------------------------------------------
138 #define INTERFACE_5(KIND, \
139 N_0, AN_0, T_0, C_0, \
140 N_1, AN_1, T_1, C_1, \
141 N_2, AN_2, T_2, C_2, \
142 N_3, AN_3, T_3, C_3, \
143 N_4, AN_4, T_4, C_4) \
145 INTERFACE_COMMON(KIND) \
146 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
147 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
148 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
149 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
150 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
153 SET_ATTRIBUTE(N_0, T_0, AN_0) \
154 SET_ATTRIBUTE(N_1, T_1, AN_1) \
155 SET_ATTRIBUTE(N_2, T_2, AN_2) \
156 SET_ATTRIBUTE(N_3, T_3, AN_3) \
157 SET_ATTRIBUTE(N_4, T_4, AN_4) \
161 //--------------------------------------------------------------------------------------
162 #define INTERFACE_6(KIND, \
163 N_0, AN_0, T_0, C_0, \
164 N_1, AN_1, T_1, C_1, \
165 N_2, AN_2, T_2, C_2, \
166 N_3, AN_3, T_3, C_3, \
167 N_4, AN_4, T_4, C_4, \
168 N_5, AN_5, T_5, C_5) \
170 INTERFACE_COMMON(KIND) \
171 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
172 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
173 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
174 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
175 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
176 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
179 SET_ATTRIBUTE(N_0, T_0, AN_0) \
180 SET_ATTRIBUTE(N_1, T_1, AN_1) \
181 SET_ATTRIBUTE(N_2, T_2, AN_2) \
182 SET_ATTRIBUTE(N_3, T_3, AN_3) \
183 SET_ATTRIBUTE(N_4, T_4, AN_4) \
184 SET_ATTRIBUTE(N_5, T_5, AN_5) \
188 //--------------------------------------------------------------------------------------
189 #define INTERFACE_7(KIND, \
190 N_0, AN_0, T_0, C_0, \
191 N_1, AN_1, T_1, C_1, \
192 N_2, AN_2, T_2, C_2, \
193 N_3, AN_3, T_3, C_3, \
194 N_4, AN_4, T_4, C_4, \
195 N_5, AN_5, T_5, C_5, \
196 N_6, AN_6, T_6, C_6) \
198 INTERFACE_COMMON(KIND) \
199 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
200 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
201 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
202 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
203 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
204 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
205 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
208 SET_ATTRIBUTE(N_0, T_0, AN_0) \
209 SET_ATTRIBUTE(N_1, T_1, AN_1) \
210 SET_ATTRIBUTE(N_2, T_2, AN_2) \
211 SET_ATTRIBUTE(N_3, T_3, AN_3) \
212 SET_ATTRIBUTE(N_4, T_4, AN_4) \
213 SET_ATTRIBUTE(N_5, T_5, AN_5) \
214 SET_ATTRIBUTE(N_6, T_6, AN_6) \
218 //--------------------------------------------------------------------------------------
219 #define INTERFACE_8(KIND, \
220 N_0, AN_0, T_0, C_0, \
221 N_1, AN_1, T_1, C_1, \
222 N_2, AN_2, T_2, C_2, \
223 N_3, AN_3, T_3, C_3, \
224 N_4, AN_4, T_4, C_4, \
225 N_5, AN_5, T_5, C_5, \
226 N_6, AN_6, T_6, C_6, \
227 N_7, AN_7, T_7, C_7) \
229 INTERFACE_COMMON(KIND) \
230 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
231 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
232 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
233 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
234 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
235 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
236 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
237 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
240 SET_ATTRIBUTE(N_0, T_0, AN_0) \
241 SET_ATTRIBUTE(N_1, T_1, AN_1) \
242 SET_ATTRIBUTE(N_2, T_2, AN_2) \
243 SET_ATTRIBUTE(N_3, T_3, AN_3) \
244 SET_ATTRIBUTE(N_4, T_4, AN_4) \
245 SET_ATTRIBUTE(N_5, T_5, AN_5) \
246 SET_ATTRIBUTE(N_6, T_6, AN_6) \
247 SET_ATTRIBUTE(N_7, T_7, AN_7) \
251 //--------------------------------------------------------------------------------------
252 #define INTERFACE_9(KIND, \
253 N_0, AN_0, T_0, C_0, \
254 N_1, AN_1, T_1, C_1, \
255 N_2, AN_2, T_2, C_2, \
256 N_3, AN_3, T_3, C_3, \
257 N_4, AN_4, T_4, C_4, \
258 N_5, AN_5, T_5, C_5, \
259 N_6, AN_6, T_6, C_6, \
260 N_7, AN_7, T_7, C_7, \
261 N_8, AN_8, T_8, C_8) \
263 INTERFACE_COMMON(KIND) \
264 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
265 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
266 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
267 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
268 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
269 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
270 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
271 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
272 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
275 SET_ATTRIBUTE(N_0, T_0, AN_0) \
276 SET_ATTRIBUTE(N_1, T_1, AN_1) \
277 SET_ATTRIBUTE(N_2, T_2, AN_2) \
278 SET_ATTRIBUTE(N_3, T_3, AN_3) \
279 SET_ATTRIBUTE(N_4, T_4, AN_4) \
280 SET_ATTRIBUTE(N_5, T_5, AN_5) \
281 SET_ATTRIBUTE(N_6, T_6, AN_6) \
282 SET_ATTRIBUTE(N_7, T_7, AN_7) \
283 SET_ATTRIBUTE(N_8, T_8, AN_8) \
287 //--------------------------------------------------------------------------------------
288 #define INTERFACE_10(KIND, \
289 N_0, AN_0, T_0, C_0, \
290 N_1, AN_1, T_1, C_1, \
291 N_2, AN_2, T_2, C_2, \
292 N_3, AN_3, T_3, C_3, \
293 N_4, AN_4, T_4, C_4, \
294 N_5, AN_5, T_5, C_5, \
295 N_6, AN_6, T_6, C_6, \
296 N_7, AN_7, T_7, C_7, \
297 N_8, AN_8, T_8, C_8, \
298 N_9, AN_9, T_9, C_9) \
300 INTERFACE_COMMON(KIND) \
301 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
302 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
303 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
304 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
305 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
306 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
307 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
308 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
309 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
310 DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
313 SET_ATTRIBUTE(N_0, T_0, AN_0) \
314 SET_ATTRIBUTE(N_1, T_1, AN_1) \
315 SET_ATTRIBUTE(N_2, T_2, AN_2) \
316 SET_ATTRIBUTE(N_3, T_3, AN_3) \
317 SET_ATTRIBUTE(N_4, T_4, AN_4) \
318 SET_ATTRIBUTE(N_5, T_5, AN_5) \
319 SET_ATTRIBUTE(N_6, T_6, AN_6) \
320 SET_ATTRIBUTE(N_7, T_7, AN_7) \
321 SET_ATTRIBUTE(N_8, T_8, AN_8) \
322 SET_ATTRIBUTE(N_9, T_9, AN_9) \
326 //--------------------------------------------------------------------------------------
327 #define INTERFACE_11(KIND, \
328 N_0, AN_0, T_0, C_0, \
329 N_1, AN_1, T_1, C_1, \
330 N_2, AN_2, T_2, C_2, \
331 N_3, AN_3, T_3, C_3, \
332 N_4, AN_4, T_4, C_4, \
333 N_5, AN_5, T_5, C_5, \
334 N_6, AN_6, T_6, C_6, \
335 N_7, AN_7, T_7, C_7, \
336 N_8, AN_8, T_8, C_8, \
337 N_9, AN_9, T_9, C_9, \
338 N_10, AN_10, T_10, C_10) \
340 INTERFACE_COMMON(KIND) \
341 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
342 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
343 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
344 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
345 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
346 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
347 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
348 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
349 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
350 DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
351 DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
354 SET_ATTRIBUTE(N_0, T_0, AN_0) \
355 SET_ATTRIBUTE(N_1, T_1, AN_1) \
356 SET_ATTRIBUTE(N_2, T_2, AN_2) \
357 SET_ATTRIBUTE(N_3, T_3, AN_3) \
358 SET_ATTRIBUTE(N_4, T_4, AN_4) \
359 SET_ATTRIBUTE(N_5, T_5, AN_5) \
360 SET_ATTRIBUTE(N_6, T_6, AN_6) \
361 SET_ATTRIBUTE(N_7, T_7, AN_7) \
362 SET_ATTRIBUTE(N_8, T_8, AN_8) \
363 SET_ATTRIBUTE(N_9, T_9, AN_9) \
364 SET_ATTRIBUTE(N_10, T_10, AN_10) \
368 //--------------------------------------------------------------------------------------
369 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */