Salome HOME
a38bebe7b0da1564bf29656b5a8ec28fa549e2e8
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Macro.h
1 // Name   : ModelHighAPI_Macro.h
2 // Purpose:
3 //
4 // History:
5 // 27/05/16 - Sergey POKHODENKO - Creation of the file
6
7 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
8 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
9
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>
28
29 //--------------------------------------------------------------------------------------
30 #define VAR_NAME(NAME) my##NAME
31
32 //--------------------------------------------------------------------------------------
33 // Used in INTERFACE_N for create variable and getter
34 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
35     COMMENT \
36     std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
37   protected: \
38     std::shared_ptr<TYPE> VAR_NAME(NAME); \
39   public:
40
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)) \
46     return false;
47
48 //--------------------------------------------------------------------------------------
49 #define INTERFACE_COMMON(KIND) \
50   static std::string ID() { return KIND; }\
51   virtual std::string getID() { return ID(); }
52
53 //--------------------------------------------------------------------------------------
54 #define START_INIT() \
55   bool initialize() { \
56     if (!feature()) { \
57       throwException(ID() + " exception: The feature is NULL."); \
58       return false; \
59     } \
60     if (getKind() != getID()) { \
61       throwException(ID() + " exception: Wrong feature kind."); \
62       return false; \
63     }
64
65 //--------------------------------------------------------------------------------------
66 #define END_INIT() \
67     return true; \
68   }
69
70
71 //--------------------------------------------------------------------------------------
72 #define INTERFACE_1(KIND, \
73                     N_0, AN_0, T_0, C_0) \
74   public: \
75     INTERFACE_COMMON(KIND) \
76     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
77   protected: \
78     START_INIT() \
79       SET_ATTRIBUTE(N_0, T_0, AN_0) \
80     END_INIT() \
81   public:
82
83 //--------------------------------------------------------------------------------------
84 #define INTERFACE_2(KIND, \
85                     N_0, AN_0, T_0, C_0, \
86                     N_1, AN_1, T_1, C_1) \
87   public: \
88     INTERFACE_COMMON(KIND) \
89     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
90     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
91   protected: \
92     START_INIT() \
93       SET_ATTRIBUTE(N_0, T_0, AN_0) \
94       SET_ATTRIBUTE(N_1, T_1, AN_1) \
95     END_INIT() \
96   public:
97
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) \
103   public: \
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) \
108   protected: \
109     START_INIT() \
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) \
113     END_INIT() \
114   public:
115
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) \
122   public: \
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) \
128   protected: \
129     START_INIT() \
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) \
134     END_INIT() \
135   public:
136
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) \
144   public: \
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) \
151   protected: \
152     START_INIT() \
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) \
158     END_INIT() \
159   public:
160
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) \
169   public: \
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) \
177   protected: \
178     START_INIT() \
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) \
185     END_INIT() \
186   public:
187
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) \
197   public: \
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) \
206   protected: \
207     START_INIT() \
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) \
215     END_INIT() \
216   public:
217
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) \
228   public: \
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) \
238   protected: \
239     START_INIT() \
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) \
248     END_INIT() \
249   public:
250
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) \
262   public: \
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) \
273   protected: \
274     START_INIT() \
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) \
284     END_INIT() \
285   public:
286
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) \
299   public: \
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) \
311   protected: \
312     START_INIT() \
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) \
323     END_INIT() \
324   public:
325
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) \
339   public: \
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) \
352   protected: \
353     START_INIT() \
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) \
365     END_INIT() \
366   public:
367
368 //--------------------------------------------------------------------------------------
369 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */