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; }
52 //--------------------------------------------------------------------------------------
53 #define START_INIT() \
56 throwException(ID() + " exception: The feature is NULL."); \
59 if (getKind() != ID()) { \
60 throwException(ID() + " exception: Wrong feature kind."); \
64 //--------------------------------------------------------------------------------------
70 //--------------------------------------------------------------------------------------
71 #define INTERFACE_1(KIND, \
72 N_0, AN_0, T_0, C_0) \
74 INTERFACE_COMMON(KIND) \
75 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
78 SET_ATTRIBUTE(N_0, T_0, AN_0) \
82 //--------------------------------------------------------------------------------------
83 #define INTERFACE_2(KIND, \
84 N_0, AN_0, T_0, C_0, \
85 N_1, AN_1, T_1, C_1) \
87 INTERFACE_COMMON(KIND) \
88 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
89 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
92 SET_ATTRIBUTE(N_0, T_0, AN_0) \
93 SET_ATTRIBUTE(N_1, T_1, AN_1) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
325 //--------------------------------------------------------------------------------------
326 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */