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 <ModelAPI_AttributeBoolean.h>
12 #include <ModelAPI_AttributeDocRef.h>
13 #include <ModelAPI_AttributeDouble.h>
14 #include <ModelAPI_AttributeIntArray.h>
15 #include <ModelAPI_AttributeInteger.h>
16 #include <ModelAPI_AttributeRefAttr.h>
17 #include <ModelAPI_AttributeRefAttrList.h>
18 #include <ModelAPI_AttributeReference.h>
19 #include <ModelAPI_AttributeRefList.h>
20 #include <ModelAPI_AttributeSelection.h>
21 #include <ModelAPI_AttributeSelectionList.h>
22 #include <ModelAPI_AttributeString.h>
23 #include <ModelAPI_Feature.h>
25 //--------------------------------------------------------------------------------------
26 #define VAR_NAME(NAME) my##NAME
28 //--------------------------------------------------------------------------------------
29 // Used in INTERFACE_N for create variable and getter
30 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
32 std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
34 std::shared_ptr<TYPE> VAR_NAME(NAME); \
37 //--------------------------------------------------------------------------------------
38 // Used in INTERFACE_N inside START_INIT/END_INIT for set variable with attribute received from feature
39 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
40 VAR_NAME(NAME) = std::dynamic_pointer_cast<TYPE>(feature()->attribute(ATT_NAME)); \
41 if (!VAR_NAME(NAME)) \
44 //--------------------------------------------------------------------------------------
45 #define INTERFACE_COMMON(KIND) \
46 static std::string ID() { return KIND; }
48 //--------------------------------------------------------------------------------------
49 #define START_INIT() \
52 throwException(ID() + " exception: The feature is NULL."); \
55 if (getKind() != ID()) { \
56 throwException(ID() + " exception: Wrong feature kind."); \
60 //--------------------------------------------------------------------------------------
66 //--------------------------------------------------------------------------------------
67 #define INTERFACE_1(KIND, \
68 N_0, AN_0, T_0, C_0) \
70 INTERFACE_COMMON(KIND) \
71 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
74 SET_ATTRIBUTE(N_0, T_0, AN_0) \
78 //--------------------------------------------------------------------------------------
79 #define INTERFACE_2(KIND, \
80 N_0, AN_0, T_0, C_0, \
81 N_1, AN_1, T_1, C_1) \
83 INTERFACE_COMMON(KIND) \
84 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
85 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
88 SET_ATTRIBUTE(N_0, T_0, AN_0) \
89 SET_ATTRIBUTE(N_1, T_1, AN_1) \
93 //--------------------------------------------------------------------------------------
94 #define INTERFACE_3(KIND, \
95 N_0, AN_0, T_0, C_0, \
96 N_1, AN_1, T_1, C_1, \
97 N_2, AN_2, T_2, C_2) \
99 INTERFACE_COMMON(KIND) \
100 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
101 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
102 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
105 SET_ATTRIBUTE(N_0, T_0, AN_0) \
106 SET_ATTRIBUTE(N_1, T_1, AN_1) \
107 SET_ATTRIBUTE(N_2, T_2, AN_2) \
111 //--------------------------------------------------------------------------------------
112 #define INTERFACE_4(KIND, \
113 N_0, AN_0, T_0, C_0, \
114 N_1, AN_1, T_1, C_1, \
115 N_2, AN_2, T_2, C_2, \
116 N_3, AN_3, T_3, C_3) \
118 INTERFACE_COMMON(KIND) \
119 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
120 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
121 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
122 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
125 SET_ATTRIBUTE(N_0, T_0, AN_0) \
126 SET_ATTRIBUTE(N_1, T_1, AN_1) \
127 SET_ATTRIBUTE(N_2, T_2, AN_2) \
128 SET_ATTRIBUTE(N_3, T_3, AN_3) \
132 //--------------------------------------------------------------------------------------
133 #define INTERFACE_5(KIND, \
134 N_0, AN_0, T_0, C_0, \
135 N_1, AN_1, T_1, C_1, \
136 N_2, AN_2, T_2, C_2, \
137 N_3, AN_3, T_3, C_3, \
138 N_4, AN_4, T_4, C_4) \
140 INTERFACE_COMMON(KIND) \
141 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
142 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
143 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
144 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
145 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
148 SET_ATTRIBUTE(N_0, T_0, AN_0) \
149 SET_ATTRIBUTE(N_1, T_1, AN_1) \
150 SET_ATTRIBUTE(N_2, T_2, AN_2) \
151 SET_ATTRIBUTE(N_3, T_3, AN_3) \
152 SET_ATTRIBUTE(N_4, T_4, AN_4) \
156 //--------------------------------------------------------------------------------------
157 #define INTERFACE_6(KIND, \
158 N_0, AN_0, T_0, C_0, \
159 N_1, AN_1, T_1, C_1, \
160 N_2, AN_2, T_2, C_2, \
161 N_3, AN_3, T_3, C_3, \
162 N_4, AN_4, T_4, C_4, \
163 N_5, AN_5, T_5, C_5) \
165 INTERFACE_COMMON(KIND) \
166 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
167 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
168 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
169 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
170 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
171 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
174 SET_ATTRIBUTE(N_0, T_0, AN_0) \
175 SET_ATTRIBUTE(N_1, T_1, AN_1) \
176 SET_ATTRIBUTE(N_2, T_2, AN_2) \
177 SET_ATTRIBUTE(N_3, T_3, AN_3) \
178 SET_ATTRIBUTE(N_4, T_4, AN_4) \
179 SET_ATTRIBUTE(N_5, T_5, AN_5) \
183 //--------------------------------------------------------------------------------------
184 #define INTERFACE_7(KIND, \
185 N_0, AN_0, T_0, C_0, \
186 N_1, AN_1, T_1, C_1, \
187 N_2, AN_2, T_2, C_2, \
188 N_3, AN_3, T_3, C_3, \
189 N_4, AN_4, T_4, C_4, \
190 N_5, AN_5, T_5, C_5, \
191 N_6, AN_6, T_6, C_6) \
193 INTERFACE_COMMON(KIND) \
194 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
195 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
196 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
197 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
198 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
199 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
200 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
203 SET_ATTRIBUTE(N_0, T_0, AN_0) \
204 SET_ATTRIBUTE(N_1, T_1, AN_1) \
205 SET_ATTRIBUTE(N_2, T_2, AN_2) \
206 SET_ATTRIBUTE(N_3, T_3, AN_3) \
207 SET_ATTRIBUTE(N_4, T_4, AN_4) \
208 SET_ATTRIBUTE(N_5, T_5, AN_5) \
209 SET_ATTRIBUTE(N_6, T_6, AN_6) \
213 //--------------------------------------------------------------------------------------
214 #define INTERFACE_8(KIND, \
215 N_0, AN_0, T_0, C_0, \
216 N_1, AN_1, T_1, C_1, \
217 N_2, AN_2, T_2, C_2, \
218 N_3, AN_3, T_3, C_3, \
219 N_4, AN_4, T_4, C_4, \
220 N_5, AN_5, T_5, C_5, \
221 N_6, AN_6, T_6, C_6, \
222 N_7, AN_7, T_7, C_7) \
224 INTERFACE_COMMON(KIND) \
225 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
226 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
227 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
228 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
229 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
230 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
231 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
232 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
235 SET_ATTRIBUTE(N_0, T_0, AN_0) \
236 SET_ATTRIBUTE(N_1, T_1, AN_1) \
237 SET_ATTRIBUTE(N_2, T_2, AN_2) \
238 SET_ATTRIBUTE(N_3, T_3, AN_3) \
239 SET_ATTRIBUTE(N_4, T_4, AN_4) \
240 SET_ATTRIBUTE(N_5, T_5, AN_5) \
241 SET_ATTRIBUTE(N_6, T_6, AN_6) \
242 SET_ATTRIBUTE(N_7, T_7, AN_7) \
246 //--------------------------------------------------------------------------------------
247 #define INTERFACE_9(KIND, \
248 N_0, AN_0, T_0, C_0, \
249 N_1, AN_1, T_1, C_1, \
250 N_2, AN_2, T_2, C_2, \
251 N_3, AN_3, T_3, C_3, \
252 N_4, AN_4, T_4, C_4, \
253 N_5, AN_5, T_5, C_5, \
254 N_6, AN_6, T_6, C_6, \
255 N_7, AN_7, T_7, C_7, \
256 N_8, AN_8, T_8, C_8) \
258 INTERFACE_COMMON(KIND) \
259 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
260 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
261 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
262 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
263 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
264 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
265 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
266 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
267 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
270 SET_ATTRIBUTE(N_0, T_0, AN_0) \
271 SET_ATTRIBUTE(N_1, T_1, AN_1) \
272 SET_ATTRIBUTE(N_2, T_2, AN_2) \
273 SET_ATTRIBUTE(N_3, T_3, AN_3) \
274 SET_ATTRIBUTE(N_4, T_4, AN_4) \
275 SET_ATTRIBUTE(N_5, T_5, AN_5) \
276 SET_ATTRIBUTE(N_6, T_6, AN_6) \
277 SET_ATTRIBUTE(N_7, T_7, AN_7) \
278 SET_ATTRIBUTE(N_8, T_8, AN_8) \
282 //--------------------------------------------------------------------------------------
283 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */