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_Feature.h>
13 //--------------------------------------------------------------------------------------
14 // See ModelAPI_Feature functions
15 #define FN_Boolean boolean
16 #define FN_DocRef document
17 #define FN_Double real
18 #define FN_Integer integer
19 #define FN_RefAttr refattr
20 #define FN_Reference reference
21 #define FN_RefList reflist
22 #define FN_Selection selection
23 #define FN_SelectionList selectionList
24 #define FN_String string
26 //--------------------------------------------------------------------------------------
27 #define VAR_NAME(NAME) my##NAME
29 //--------------------------------------------------------------------------------------
30 // Used in INTERFACE_N for create variable and getter
31 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
33 std::shared_ptr<ModelAPI_Attribute##TYPE> NAME() const { return VAR_NAME(NAME); } \
35 std::shared_ptr<ModelAPI_Attribute##TYPE> VAR_NAME(NAME); \
38 //--------------------------------------------------------------------------------------
39 // Used in INTERFACE_N inside START_INIT/END_INIT for set variable with attribute received from feature
40 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
41 VAR_NAME(NAME) = feature()->FN_##TYPE(ATT_NAME); \
42 if (!VAR_NAME(NAME)) \
45 //--------------------------------------------------------------------------------------
46 #define INTERFACE_COMMON(KIND) \
47 static std::string ID() { return KIND; }
49 //--------------------------------------------------------------------------------------
50 #define START_INIT() \
53 throwException(ID() + " exception: The feature is NULL."); \
56 if (getKind() != ID()) { \
57 throwException(ID() + " exception: Wrong feature kind."); \
61 //--------------------------------------------------------------------------------------
67 //--------------------------------------------------------------------------------------
68 #define INTERFACE_2(KIND, \
69 N_0, AN_0, T_0, C_0, \
70 N_1, AN_1, T_1, C_1) \
72 INTERFACE_COMMON(KIND) \
73 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
74 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
77 SET_ATTRIBUTE(N_0, T_0, AN_0) \
78 SET_ATTRIBUTE(N_1, T_1, AN_1) \
82 //--------------------------------------------------------------------------------------
83 #define INTERFACE_3(KIND, \
84 N_0, AN_0, T_0, C_0, \
85 N_1, AN_1, T_1, C_1, \
86 N_2, AN_2, T_2, C_2) \
88 INTERFACE_COMMON(KIND) \
89 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
90 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
91 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
94 SET_ATTRIBUTE(N_0, T_0, AN_0) \
95 SET_ATTRIBUTE(N_1, T_1, AN_1) \
96 SET_ATTRIBUTE(N_2, T_2, AN_2) \
100 //--------------------------------------------------------------------------------------
101 #define INTERFACE_4(KIND, \
102 N_0, AN_0, T_0, C_0, \
103 N_1, AN_1, T_1, C_1, \
104 N_2, AN_2, T_2, C_2, \
105 N_3, AN_3, T_3, C_3) \
107 INTERFACE_COMMON(KIND) \
108 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
109 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
110 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
111 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
114 SET_ATTRIBUTE(N_0, T_0, AN_0) \
115 SET_ATTRIBUTE(N_1, T_1, AN_1) \
116 SET_ATTRIBUTE(N_2, T_2, AN_2) \
117 SET_ATTRIBUTE(N_3, T_3, AN_3) \
121 //--------------------------------------------------------------------------------------
122 #define INTERFACE_5(KIND, \
123 N_0, AN_0, T_0, C_0, \
124 N_1, AN_1, T_1, C_1, \
125 N_2, AN_2, T_2, C_2, \
126 N_3, AN_3, T_3, C_3, \
127 N_4, AN_4, T_4, C_4) \
129 INTERFACE_COMMON(KIND) \
130 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
131 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
132 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
133 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
134 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
137 SET_ATTRIBUTE(N_0, T_0, AN_0) \
138 SET_ATTRIBUTE(N_1, T_1, AN_1) \
139 SET_ATTRIBUTE(N_2, T_2, AN_2) \
140 SET_ATTRIBUTE(N_3, T_3, AN_3) \
141 SET_ATTRIBUTE(N_4, T_4, AN_4) \
145 //--------------------------------------------------------------------------------------
146 #define INTERFACE_6(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 N_5, AN_5, T_5, C_5) \
154 INTERFACE_COMMON(KIND) \
155 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
156 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
157 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
158 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
159 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
160 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
163 SET_ATTRIBUTE(N_0, T_0, AN_0) \
164 SET_ATTRIBUTE(N_1, T_1, AN_1) \
165 SET_ATTRIBUTE(N_2, T_2, AN_2) \
166 SET_ATTRIBUTE(N_3, T_3, AN_3) \
167 SET_ATTRIBUTE(N_4, T_4, AN_4) \
168 SET_ATTRIBUTE(N_5, T_5, AN_5) \
172 //--------------------------------------------------------------------------------------
173 #define INTERFACE_7(KIND, \
174 N_0, AN_0, T_0, C_0, \
175 N_1, AN_1, T_1, C_1, \
176 N_2, AN_2, T_2, C_2, \
177 N_3, AN_3, T_3, C_3, \
178 N_4, AN_4, T_4, C_4, \
179 N_5, AN_5, T_5, C_5, \
180 N_6, AN_6, T_6, C_6) \
182 INTERFACE_COMMON(KIND) \
183 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
184 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
185 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
186 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
187 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
188 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
189 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
192 SET_ATTRIBUTE(N_0, T_0, AN_0) \
193 SET_ATTRIBUTE(N_1, T_1, AN_1) \
194 SET_ATTRIBUTE(N_2, T_2, AN_2) \
195 SET_ATTRIBUTE(N_3, T_3, AN_3) \
196 SET_ATTRIBUTE(N_4, T_4, AN_4) \
197 SET_ATTRIBUTE(N_5, T_5, AN_5) \
198 SET_ATTRIBUTE(N_6, T_6, AN_6) \
202 //--------------------------------------------------------------------------------------
203 #define INTERFACE_8(KIND, \
204 N_0, AN_0, T_0, C_0, \
205 N_1, AN_1, T_1, C_1, \
206 N_2, AN_2, T_2, C_2, \
207 N_3, AN_3, T_3, C_3, \
208 N_4, AN_4, T_4, C_4, \
209 N_5, AN_5, T_5, C_5, \
210 N_6, AN_6, T_6, C_6, \
211 N_7, AN_7, T_7, C_7) \
213 INTERFACE_COMMON(KIND) \
214 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
215 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
216 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
217 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
218 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
219 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
220 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
221 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
224 SET_ATTRIBUTE(N_0, T_0, AN_0) \
225 SET_ATTRIBUTE(N_1, T_1, AN_1) \
226 SET_ATTRIBUTE(N_2, T_2, AN_2) \
227 SET_ATTRIBUTE(N_3, T_3, AN_3) \
228 SET_ATTRIBUTE(N_4, T_4, AN_4) \
229 SET_ATTRIBUTE(N_5, T_5, AN_5) \
230 SET_ATTRIBUTE(N_6, T_6, AN_6) \
231 SET_ATTRIBUTE(N_7, T_7, AN_7) \
235 //--------------------------------------------------------------------------------------
236 #define INTERFACE_9(KIND, \
237 N_0, AN_0, T_0, C_0, \
238 N_1, AN_1, T_1, C_1, \
239 N_2, AN_2, T_2, C_2, \
240 N_3, AN_3, T_3, C_3, \
241 N_4, AN_4, T_4, C_4, \
242 N_5, AN_5, T_5, C_5, \
243 N_6, AN_6, T_6, C_6, \
244 N_7, AN_7, T_7, C_7, \
245 N_8, AN_8, T_8, C_8) \
247 INTERFACE_COMMON(KIND) \
248 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
249 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
250 DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
251 DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
252 DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
253 DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
254 DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
255 DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
256 DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
259 SET_ATTRIBUTE(N_0, T_0, AN_0) \
260 SET_ATTRIBUTE(N_1, T_1, AN_1) \
261 SET_ATTRIBUTE(N_2, T_2, AN_2) \
262 SET_ATTRIBUTE(N_3, T_3, AN_3) \
263 SET_ATTRIBUTE(N_4, T_4, AN_4) \
264 SET_ATTRIBUTE(N_5, T_5, AN_5) \
265 SET_ATTRIBUTE(N_6, T_6, AN_6) \
266 SET_ATTRIBUTE(N_7, T_7, AN_7) \
267 SET_ATTRIBUTE(N_8, T_8, AN_8) \
271 //--------------------------------------------------------------------------------------
272 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */