Salome HOME
CPP API for FeaturesPlugin_Extrusion
[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
52 //--------------------------------------------------------------------------------------
53 #define START_INIT() \
54   bool initialize() { \
55     if (!feature()) { \
56       throwException(ID() + " exception: The feature is NULL."); \
57       return false; \
58     } \
59     if (getKind() != ID()) { \
60       throwException(ID() + " exception: Wrong feature kind."); \
61       return false; \
62     }
63
64 //--------------------------------------------------------------------------------------
65 #define END_INIT() \
66     return true; \
67   }
68
69
70 //--------------------------------------------------------------------------------------
71 #define INTERFACE_1(KIND, \
72                     N_0, AN_0, T_0, C_0) \
73   public: \
74     INTERFACE_COMMON(KIND) \
75     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
76   protected: \
77     START_INIT() \
78       SET_ATTRIBUTE(N_0, T_0, AN_0) \
79     END_INIT() \
80   public:
81
82 //--------------------------------------------------------------------------------------
83 #define INTERFACE_2(KIND, \
84                     N_0, AN_0, T_0, C_0, \
85                     N_1, AN_1, T_1, C_1) \
86   public: \
87     INTERFACE_COMMON(KIND) \
88     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
89     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
90   protected: \
91     START_INIT() \
92       SET_ATTRIBUTE(N_0, T_0, AN_0) \
93       SET_ATTRIBUTE(N_1, T_1, AN_1) \
94     END_INIT() \
95   public:
96
97 //--------------------------------------------------------------------------------------
98 #define INTERFACE_3(KIND, \
99                     N_0, AN_0, T_0, C_0, \
100                     N_1, AN_1, T_1, C_1, \
101                     N_2, AN_2, T_2, C_2) \
102   public: \
103     INTERFACE_COMMON(KIND) \
104     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
105     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
106     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
107   protected: \
108     START_INIT() \
109       SET_ATTRIBUTE(N_0, T_0, AN_0) \
110       SET_ATTRIBUTE(N_1, T_1, AN_1) \
111       SET_ATTRIBUTE(N_2, T_2, AN_2) \
112     END_INIT() \
113   public:
114
115 //--------------------------------------------------------------------------------------
116 #define INTERFACE_4(KIND, \
117                     N_0, AN_0, T_0, C_0, \
118                     N_1, AN_1, T_1, C_1, \
119                     N_2, AN_2, T_2, C_2, \
120                     N_3, AN_3, T_3, C_3) \
121   public: \
122     INTERFACE_COMMON(KIND) \
123     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
124     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
125     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
126     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
127   protected: \
128     START_INIT() \
129       SET_ATTRIBUTE(N_0, T_0, AN_0) \
130       SET_ATTRIBUTE(N_1, T_1, AN_1) \
131       SET_ATTRIBUTE(N_2, T_2, AN_2) \
132       SET_ATTRIBUTE(N_3, T_3, AN_3) \
133     END_INIT() \
134   public:
135
136 //--------------------------------------------------------------------------------------
137 #define INTERFACE_5(KIND, \
138                     N_0, AN_0, T_0, C_0, \
139                     N_1, AN_1, T_1, C_1, \
140                     N_2, AN_2, T_2, C_2, \
141                     N_3, AN_3, T_3, C_3, \
142                     N_4, AN_4, T_4, C_4) \
143   public: \
144     INTERFACE_COMMON(KIND) \
145     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
146     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
147     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
148     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
149     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
150   protected: \
151     START_INIT() \
152       SET_ATTRIBUTE(N_0, T_0, AN_0) \
153       SET_ATTRIBUTE(N_1, T_1, AN_1) \
154       SET_ATTRIBUTE(N_2, T_2, AN_2) \
155       SET_ATTRIBUTE(N_3, T_3, AN_3) \
156       SET_ATTRIBUTE(N_4, T_4, AN_4) \
157     END_INIT() \
158   public:
159
160 //--------------------------------------------------------------------------------------
161 #define INTERFACE_6(KIND, \
162                     N_0, AN_0, T_0, C_0, \
163                     N_1, AN_1, T_1, C_1, \
164                     N_2, AN_2, T_2, C_2, \
165                     N_3, AN_3, T_3, C_3, \
166                     N_4, AN_4, T_4, C_4, \
167                     N_5, AN_5, T_5, C_5) \
168   public: \
169     INTERFACE_COMMON(KIND) \
170     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
171     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
172     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
173     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
174     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
175     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
176   protected: \
177     START_INIT() \
178       SET_ATTRIBUTE(N_0, T_0, AN_0) \
179       SET_ATTRIBUTE(N_1, T_1, AN_1) \
180       SET_ATTRIBUTE(N_2, T_2, AN_2) \
181       SET_ATTRIBUTE(N_3, T_3, AN_3) \
182       SET_ATTRIBUTE(N_4, T_4, AN_4) \
183       SET_ATTRIBUTE(N_5, T_5, AN_5) \
184     END_INIT() \
185   public:
186
187 //--------------------------------------------------------------------------------------
188 #define INTERFACE_7(KIND, \
189                     N_0, AN_0, T_0, C_0, \
190                     N_1, AN_1, T_1, C_1, \
191                     N_2, AN_2, T_2, C_2, \
192                     N_3, AN_3, T_3, C_3, \
193                     N_4, AN_4, T_4, C_4, \
194                     N_5, AN_5, T_5, C_5, \
195                     N_6, AN_6, T_6, C_6) \
196   public: \
197     INTERFACE_COMMON(KIND) \
198     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
199     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
200     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
201     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
202     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
203     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
204     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
205   protected: \
206     START_INIT() \
207       SET_ATTRIBUTE(N_0, T_0, AN_0) \
208       SET_ATTRIBUTE(N_1, T_1, AN_1) \
209       SET_ATTRIBUTE(N_2, T_2, AN_2) \
210       SET_ATTRIBUTE(N_3, T_3, AN_3) \
211       SET_ATTRIBUTE(N_4, T_4, AN_4) \
212       SET_ATTRIBUTE(N_5, T_5, AN_5) \
213       SET_ATTRIBUTE(N_6, T_6, AN_6) \
214     END_INIT() \
215   public:
216
217 //--------------------------------------------------------------------------------------
218 #define INTERFACE_8(KIND, \
219                     N_0, AN_0, T_0, C_0, \
220                     N_1, AN_1, T_1, C_1, \
221                     N_2, AN_2, T_2, C_2, \
222                     N_3, AN_3, T_3, C_3, \
223                     N_4, AN_4, T_4, C_4, \
224                     N_5, AN_5, T_5, C_5, \
225                     N_6, AN_6, T_6, C_6, \
226                     N_7, AN_7, T_7, C_7) \
227   public: \
228     INTERFACE_COMMON(KIND) \
229     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
230     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
231     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
232     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
233     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
234     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
235     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
236     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
237   protected: \
238     START_INIT() \
239       SET_ATTRIBUTE(N_0, T_0, AN_0) \
240       SET_ATTRIBUTE(N_1, T_1, AN_1) \
241       SET_ATTRIBUTE(N_2, T_2, AN_2) \
242       SET_ATTRIBUTE(N_3, T_3, AN_3) \
243       SET_ATTRIBUTE(N_4, T_4, AN_4) \
244       SET_ATTRIBUTE(N_5, T_5, AN_5) \
245       SET_ATTRIBUTE(N_6, T_6, AN_6) \
246       SET_ATTRIBUTE(N_7, T_7, AN_7) \
247     END_INIT() \
248   public:
249
250 //--------------------------------------------------------------------------------------
251 #define INTERFACE_9(KIND, \
252                     N_0, AN_0, T_0, C_0, \
253                     N_1, AN_1, T_1, C_1, \
254                     N_2, AN_2, T_2, C_2, \
255                     N_3, AN_3, T_3, C_3, \
256                     N_4, AN_4, T_4, C_4, \
257                     N_5, AN_5, T_5, C_5, \
258                     N_6, AN_6, T_6, C_6, \
259                     N_7, AN_7, T_7, C_7, \
260                     N_8, AN_8, T_8, C_8) \
261   public: \
262     INTERFACE_COMMON(KIND) \
263     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
264     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
265     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
266     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
267     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
268     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
269     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
270     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
271     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
272   protected: \
273     START_INIT() \
274       SET_ATTRIBUTE(N_0, T_0, AN_0) \
275       SET_ATTRIBUTE(N_1, T_1, AN_1) \
276       SET_ATTRIBUTE(N_2, T_2, AN_2) \
277       SET_ATTRIBUTE(N_3, T_3, AN_3) \
278       SET_ATTRIBUTE(N_4, T_4, AN_4) \
279       SET_ATTRIBUTE(N_5, T_5, AN_5) \
280       SET_ATTRIBUTE(N_6, T_6, AN_6) \
281       SET_ATTRIBUTE(N_7, T_7, AN_7) \
282       SET_ATTRIBUTE(N_8, T_8, AN_8) \
283     END_INIT() \
284   public:
285
286 //--------------------------------------------------------------------------------------
287 #define INTERFACE_10(KIND, \
288                      N_0, AN_0, T_0, C_0, \
289                      N_1, AN_1, T_1, C_1, \
290                      N_2, AN_2, T_2, C_2, \
291                      N_3, AN_3, T_3, C_3, \
292                      N_4, AN_4, T_4, C_4, \
293                      N_5, AN_5, T_5, C_5, \
294                      N_6, AN_6, T_6, C_6, \
295                      N_7, AN_7, T_7, C_7, \
296                      N_8, AN_8, T_8, C_8, \
297                      N_9, AN_9, T_9, C_9) \
298   public: \
299     INTERFACE_COMMON(KIND) \
300     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
301     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
302     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
303     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
304     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
305     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
306     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
307     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
308     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
309     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
310   protected: \
311     START_INIT() \
312       SET_ATTRIBUTE(N_0, T_0, AN_0) \
313       SET_ATTRIBUTE(N_1, T_1, AN_1) \
314       SET_ATTRIBUTE(N_2, T_2, AN_2) \
315       SET_ATTRIBUTE(N_3, T_3, AN_3) \
316       SET_ATTRIBUTE(N_4, T_4, AN_4) \
317       SET_ATTRIBUTE(N_5, T_5, AN_5) \
318       SET_ATTRIBUTE(N_6, T_6, AN_6) \
319       SET_ATTRIBUTE(N_7, T_7, AN_7) \
320       SET_ATTRIBUTE(N_8, T_8, AN_8) \
321       SET_ATTRIBUTE(N_9, T_9, AN_9) \
322     END_INIT() \
323   public:
324
325 //--------------------------------------------------------------------------------------
326 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */