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 //--------------------------------------------------------------------------------------
70 //--------------------------------------------------------------------------------------
71 #define INTERFACE_0(KIND) \
73 INTERFACE_COMMON(KIND) \
79 //--------------------------------------------------------------------------------------
80 #define INTERFACE_1(KIND, \
81 N_0, AN_0, T_0, C_0) \
83 INTERFACE_COMMON(KIND) \
84 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
87 SET_ATTRIBUTE(N_0, T_0, AN_0) \
91 //--------------------------------------------------------------------------------------
92 #define INTERFACE_2(KIND, \
93 N_0, AN_0, T_0, C_0, \
94 N_1, AN_1, T_1, C_1) \
96 INTERFACE_COMMON(KIND) \
97 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
98 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
101 SET_ATTRIBUTE(N_0, T_0, AN_0) \
102 SET_ATTRIBUTE(N_1, T_1, AN_1) \
106 //--------------------------------------------------------------------------------------
107 #define INTERFACE_3(KIND, \
108 N_0, AN_0, T_0, C_0, \
109 N_1, AN_1, T_1, C_1, \
110 N_2, AN_2, T_2, C_2) \
112 INTERFACE_COMMON(KIND) \
113 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
114 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
115 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
118 SET_ATTRIBUTE(N_0, T_0, AN_0) \
119 SET_ATTRIBUTE(N_1, T_1, AN_1) \
120 SET_ATTRIBUTE(N_2, T_2, AN_2) \
124 //--------------------------------------------------------------------------------------
125 #define INTERFACE_4(KIND, \
126 N_0, AN_0, T_0, C_0, \
127 N_1, AN_1, T_1, C_1, \
128 N_2, AN_2, T_2, C_2, \
129 N_3, AN_3, T_3, C_3) \
131 INTERFACE_COMMON(KIND) \
132 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
133 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
134 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
135 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
138 SET_ATTRIBUTE(N_0, T_0, AN_0) \
139 SET_ATTRIBUTE(N_1, T_1, AN_1) \
140 SET_ATTRIBUTE(N_2, T_2, AN_2) \
141 SET_ATTRIBUTE(N_3, T_3, AN_3) \
145 //--------------------------------------------------------------------------------------
146 #define INTERFACE_5(KIND, \
147 N_0, AN_0, T_0, C_0, \
148 N_1, AN_1, T_1, C_1, \
149 N_2, AN_2, T_2, C_2, \
150 N_3, AN_3, T_3, C_3, \
151 N_4, AN_4, T_4, C_4) \
153 INTERFACE_COMMON(KIND) \
154 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
155 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
156 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
157 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
158 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
161 SET_ATTRIBUTE(N_0, T_0, AN_0) \
162 SET_ATTRIBUTE(N_1, T_1, AN_1) \
163 SET_ATTRIBUTE(N_2, T_2, AN_2) \
164 SET_ATTRIBUTE(N_3, T_3, AN_3) \
165 SET_ATTRIBUTE(N_4, T_4, AN_4) \
169 //--------------------------------------------------------------------------------------
170 #define INTERFACE_6(KIND, \
171 N_0, AN_0, T_0, C_0, \
172 N_1, AN_1, T_1, C_1, \
173 N_2, AN_2, T_2, C_2, \
174 N_3, AN_3, T_3, C_3, \
175 N_4, AN_4, T_4, C_4, \
176 N_5, AN_5, T_5, C_5) \
178 INTERFACE_COMMON(KIND) \
179 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
180 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
181 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
182 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
183 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
184 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
187 SET_ATTRIBUTE(N_0, T_0, AN_0) \
188 SET_ATTRIBUTE(N_1, T_1, AN_1) \
189 SET_ATTRIBUTE(N_2, T_2, AN_2) \
190 SET_ATTRIBUTE(N_3, T_3, AN_3) \
191 SET_ATTRIBUTE(N_4, T_4, AN_4) \
192 SET_ATTRIBUTE(N_5, T_5, AN_5) \
196 //--------------------------------------------------------------------------------------
197 #define INTERFACE_7(KIND, \
198 N_0, AN_0, T_0, C_0, \
199 N_1, AN_1, T_1, C_1, \
200 N_2, AN_2, T_2, C_2, \
201 N_3, AN_3, T_3, C_3, \
202 N_4, AN_4, T_4, C_4, \
203 N_5, AN_5, T_5, C_5, \
204 N_6, AN_6, T_6, C_6) \
206 INTERFACE_COMMON(KIND) \
207 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
208 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
209 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
210 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
211 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
212 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
213 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
216 SET_ATTRIBUTE(N_0, T_0, AN_0) \
217 SET_ATTRIBUTE(N_1, T_1, AN_1) \
218 SET_ATTRIBUTE(N_2, T_2, AN_2) \
219 SET_ATTRIBUTE(N_3, T_3, AN_3) \
220 SET_ATTRIBUTE(N_4, T_4, AN_4) \
221 SET_ATTRIBUTE(N_5, T_5, AN_5) \
222 SET_ATTRIBUTE(N_6, T_6, AN_6) \
226 //--------------------------------------------------------------------------------------
227 #define INTERFACE_8(KIND, \
228 N_0, AN_0, T_0, C_0, \
229 N_1, AN_1, T_1, C_1, \
230 N_2, AN_2, T_2, C_2, \
231 N_3, AN_3, T_3, C_3, \
232 N_4, AN_4, T_4, C_4, \
233 N_5, AN_5, T_5, C_5, \
234 N_6, AN_6, T_6, C_6, \
235 N_7, AN_7, T_7, C_7) \
237 INTERFACE_COMMON(KIND) \
238 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
239 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
240 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
241 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
242 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
243 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
244 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
245 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
248 SET_ATTRIBUTE(N_0, T_0, AN_0) \
249 SET_ATTRIBUTE(N_1, T_1, AN_1) \
250 SET_ATTRIBUTE(N_2, T_2, AN_2) \
251 SET_ATTRIBUTE(N_3, T_3, AN_3) \
252 SET_ATTRIBUTE(N_4, T_4, AN_4) \
253 SET_ATTRIBUTE(N_5, T_5, AN_5) \
254 SET_ATTRIBUTE(N_6, T_6, AN_6) \
255 SET_ATTRIBUTE(N_7, T_7, AN_7) \
259 //--------------------------------------------------------------------------------------
260 #define INTERFACE_9(KIND, \
261 N_0, AN_0, T_0, C_0, \
262 N_1, AN_1, T_1, C_1, \
263 N_2, AN_2, T_2, C_2, \
264 N_3, AN_3, T_3, C_3, \
265 N_4, AN_4, T_4, C_4, \
266 N_5, AN_5, T_5, C_5, \
267 N_6, AN_6, T_6, C_6, \
268 N_7, AN_7, T_7, C_7, \
269 N_8, AN_8, T_8, C_8) \
271 INTERFACE_COMMON(KIND) \
272 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
273 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
274 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
275 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
276 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
277 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
278 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
279 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
280 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
283 SET_ATTRIBUTE(N_0, T_0, AN_0) \
284 SET_ATTRIBUTE(N_1, T_1, AN_1) \
285 SET_ATTRIBUTE(N_2, T_2, AN_2) \
286 SET_ATTRIBUTE(N_3, T_3, AN_3) \
287 SET_ATTRIBUTE(N_4, T_4, AN_4) \
288 SET_ATTRIBUTE(N_5, T_5, AN_5) \
289 SET_ATTRIBUTE(N_6, T_6, AN_6) \
290 SET_ATTRIBUTE(N_7, T_7, AN_7) \
291 SET_ATTRIBUTE(N_8, T_8, AN_8) \
295 //--------------------------------------------------------------------------------------
296 #define INTERFACE_10(KIND, \
297 N_0, AN_0, T_0, C_0, \
298 N_1, AN_1, T_1, C_1, \
299 N_2, AN_2, T_2, C_2, \
300 N_3, AN_3, T_3, C_3, \
301 N_4, AN_4, T_4, C_4, \
302 N_5, AN_5, T_5, C_5, \
303 N_6, AN_6, T_6, C_6, \
304 N_7, AN_7, T_7, C_7, \
305 N_8, AN_8, T_8, C_8, \
306 N_9, AN_9, T_9, C_9) \
308 INTERFACE_COMMON(KIND) \
309 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
310 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
311 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
312 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
313 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
314 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
315 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
316 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
317 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
318 DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
321 SET_ATTRIBUTE(N_0, T_0, AN_0) \
322 SET_ATTRIBUTE(N_1, T_1, AN_1) \
323 SET_ATTRIBUTE(N_2, T_2, AN_2) \
324 SET_ATTRIBUTE(N_3, T_3, AN_3) \
325 SET_ATTRIBUTE(N_4, T_4, AN_4) \
326 SET_ATTRIBUTE(N_5, T_5, AN_5) \
327 SET_ATTRIBUTE(N_6, T_6, AN_6) \
328 SET_ATTRIBUTE(N_7, T_7, AN_7) \
329 SET_ATTRIBUTE(N_8, T_8, AN_8) \
330 SET_ATTRIBUTE(N_9, T_9, AN_9) \
334 //--------------------------------------------------------------------------------------
335 #define INTERFACE_11(KIND, \
336 N_0, AN_0, T_0, C_0, \
337 N_1, AN_1, T_1, C_1, \
338 N_2, AN_2, T_2, C_2, \
339 N_3, AN_3, T_3, C_3, \
340 N_4, AN_4, T_4, C_4, \
341 N_5, AN_5, T_5, C_5, \
342 N_6, AN_6, T_6, C_6, \
343 N_7, AN_7, T_7, C_7, \
344 N_8, AN_8, T_8, C_8, \
345 N_9, AN_9, T_9, C_9, \
346 N_10, AN_10, T_10, C_10) \
348 INTERFACE_COMMON(KIND) \
349 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
350 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
351 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
352 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
353 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
354 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
355 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
356 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
357 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
358 DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
359 DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
362 SET_ATTRIBUTE(N_0, T_0, AN_0) \
363 SET_ATTRIBUTE(N_1, T_1, AN_1) \
364 SET_ATTRIBUTE(N_2, T_2, AN_2) \
365 SET_ATTRIBUTE(N_3, T_3, AN_3) \
366 SET_ATTRIBUTE(N_4, T_4, AN_4) \
367 SET_ATTRIBUTE(N_5, T_5, AN_5) \
368 SET_ATTRIBUTE(N_6, T_6, AN_6) \
369 SET_ATTRIBUTE(N_7, T_7, AN_7) \
370 SET_ATTRIBUTE(N_8, T_8, AN_8) \
371 SET_ATTRIBUTE(N_9, T_9, AN_9) \
372 SET_ATTRIBUTE(N_10, T_10, AN_10) \
376 //--------------------------------------------------------------------------------------
377 #define INTERFACE_14(KIND, \
378 N_0, AN_0, T_0, C_0, \
379 N_1, AN_1, T_1, C_1, \
380 N_2, AN_2, T_2, C_2, \
381 N_3, AN_3, T_3, C_3, \
382 N_4, AN_4, T_4, C_4, \
383 N_5, AN_5, T_5, C_5, \
384 N_6, AN_6, T_6, C_6, \
385 N_7, AN_7, T_7, C_7, \
386 N_8, AN_8, T_8, C_8, \
387 N_9, AN_9, T_9, C_9, \
388 N_10, AN_10, T_10, C_10, \
389 N_11, AN_11, T_11, C_11, \
390 N_12, AN_12, T_12, C_12, \
391 N_13, AN_13, T_13, C_13) \
393 INTERFACE_COMMON(KIND) \
394 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
395 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
396 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
397 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
398 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
399 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
400 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
401 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
402 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
403 DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
404 DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
405 DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
406 DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
407 DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
410 SET_ATTRIBUTE(N_0, T_0, AN_0) \
411 SET_ATTRIBUTE(N_1, T_1, AN_1) \
412 SET_ATTRIBUTE(N_2, T_2, AN_2) \
413 SET_ATTRIBUTE(N_3, T_3, AN_3) \
414 SET_ATTRIBUTE(N_4, T_4, AN_4) \
415 SET_ATTRIBUTE(N_5, T_5, AN_5) \
416 SET_ATTRIBUTE(N_6, T_6, AN_6) \
417 SET_ATTRIBUTE(N_7, T_7, AN_7) \
418 SET_ATTRIBUTE(N_8, T_8, AN_8) \
419 SET_ATTRIBUTE(N_9, T_9, AN_9) \
420 SET_ATTRIBUTE(N_10, T_10, AN_10) \
421 SET_ATTRIBUTE(N_11, T_11, AN_11) \
422 SET_ATTRIBUTE(N_12, T_12, AN_12) \
423 SET_ATTRIBUTE(N_13, T_13, AN_13) \
427 //--------------------------------------------------------------------------------------
428 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */