Salome HOME
4e15701addcdc8b2d10008694c0742246ad99742
[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 #define INTERFACE_0(KIND) \
72   public: \
73     INTERFACE_COMMON(KIND) \
74   protected: \
75     START_INIT() \
76     END_INIT() \
77   public:
78
79 //--------------------------------------------------------------------------------------
80 #define INTERFACE_1(KIND, \
81                     N_0, AN_0, T_0, C_0) \
82   public: \
83     INTERFACE_COMMON(KIND) \
84     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
85   protected: \
86     START_INIT() \
87       SET_ATTRIBUTE(N_0, T_0, AN_0) \
88     END_INIT() \
89   public:
90
91 //--------------------------------------------------------------------------------------
92 #define INTERFACE_2(KIND, \
93                     N_0, AN_0, T_0, C_0, \
94                     N_1, AN_1, T_1, C_1) \
95   public: \
96     INTERFACE_COMMON(KIND) \
97     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
98     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
99   protected: \
100     START_INIT() \
101       SET_ATTRIBUTE(N_0, T_0, AN_0) \
102       SET_ATTRIBUTE(N_1, T_1, AN_1) \
103     END_INIT() \
104   public:
105
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) \
111   public: \
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) \
116   protected: \
117     START_INIT() \
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) \
121     END_INIT() \
122   public:
123
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) \
130   public: \
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) \
136   protected: \
137     START_INIT() \
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) \
142     END_INIT() \
143   public:
144
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) \
152   public: \
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) \
159   protected: \
160     START_INIT() \
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) \
166     END_INIT() \
167   public:
168
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) \
177   public: \
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) \
185   protected: \
186     START_INIT() \
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) \
193     END_INIT() \
194   public:
195
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) \
205   public: \
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) \
214   protected: \
215     START_INIT() \
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) \
223     END_INIT() \
224   public:
225
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) \
236   public: \
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) \
246   protected: \
247     START_INIT() \
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) \
256     END_INIT() \
257   public:
258
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) \
270   public: \
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) \
281   protected: \
282     START_INIT() \
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) \
292     END_INIT() \
293   public:
294
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) \
307   public: \
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) \
319   protected: \
320     START_INIT() \
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) \
331     END_INIT() \
332   public:
333
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) \
347   public: \
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) \
360   protected: \
361     START_INIT() \
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) \
373     END_INIT() \
374   public:
375
376 //--------------------------------------------------------------------------------------
377 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */