8 #ifndef __SIM_OptionsUser_h__
9 #define __SIM_OptionsUser_h__
31 void optionChanged(
const char *
name);
38 virtual void optionChangedSubclass(
const char *name);
45 #define GET_DATA_FUNC_I_sh(DataName, FuncName) \
46 int64 get##FuncName() const \
47 { return getOptions().getOptionI(DataName); }
48 #define GET_DATA_FUNC_I(DataName, FuncName) \
49 int64 get##FuncName() const \
50 { static constexpr UT_StringLit dname(DataName); \
51 return getOptions().getOptionI(dname.asRef()); }
52 #define GET_DATA_FUNC_E_sh(DataName, FuncName, EnumType) \
53 EnumType get##FuncName() const \
54 { return static_cast<EnumType> \
55 (getOptions().getOptionI(DataName)); }
56 #define GET_DATA_FUNC_E(DataName, FuncName, EnumType) \
57 EnumType get##FuncName() const \
58 { static constexpr UT_StringLit dname(DataName); \
59 return static_cast<EnumType> \
60 (getOptions().getOptionI(dname.asRef())); }
61 #define GET_DATA_FUNC_B_sh(DataName, FuncName) \
62 bool get##FuncName() const \
63 { return getOptions().getOptionB(DataName); }
64 #define GET_DATA_FUNC_B(DataName, FuncName) \
65 bool get##FuncName() const \
66 { static constexpr UT_StringLit dname(DataName); \
67 return getOptions().getOptionB(dname.asRef()); }
68 #define GET_DATA_FUNC_F_sh(DataName, FuncName) \
69 fpreal64 get##FuncName() const \
70 { return getOptions().getOptionF(DataName); }
71 #define GET_DATA_FUNC_F(DataName, FuncName) \
72 fpreal64 get##FuncName() const \
73 { static constexpr UT_StringLit dname(DataName); \
74 return getOptions().getOptionF(dname.asRef()); }
76 #define GET_DATA_FUNC_RAMP_sh(DataName, FuncName) \
77 bool get##FuncName(UT_Ramp &ramp) const \
78 { UT_StringHolder rs; \
79 rs = getOptions().getOptionS(DataName); \
80 UT_IStream is((const char *) rs, rs.length(), UT_ISTREAM_ASCII); \
81 return ramp.load(is); \
83 #define GET_DATA_FUNC_RAMP(DataName, FuncName) \
84 bool get##FuncName(UT_Ramp &ramp) const \
85 { static constexpr UT_StringLit dname(DataName); \
87 rs = getOptions().getOptionS(dname.asRef()); \
88 UT_IStream is((const char *) rs, rs.length(), UT_ISTREAM_ASCII); \
89 return ramp.load(is); \
92 #define _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, BaseType, Accessor) \
93 const BaseType##D get##FuncName##D() const \
94 { static constexpr UT_StringLit dname(DataName); \
95 return getOptions().getOption##Accessor(dname.asRef()); } \
96 const BaseType##F get##FuncName##F() const \
97 { static constexpr UT_StringLit dname(DataName); \
98 return getOptions().getOption##Accessor(dname.asRef()); } \
99 const BaseType##F get##FuncName() const \
100 { static constexpr UT_StringLit dname(DataName); \
101 return getOptions().getOption##Accessor(dname.asRef()); }
103 #define _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, BaseType, Accessor) \
104 const BaseType##D get##FuncName##D() const \
105 { return getOptions().getOption##Accessor(DataName); } \
106 const BaseType##F get##FuncName##F() const \
107 { return getOptions().getOption##Accessor(DataName); } \
108 const BaseType##F get##FuncName() const \
109 { return getOptions().getOption##Accessor(DataName); }
111 #define GET_DATA_FUNC_V2(DataName, FuncName) \
112 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector2, V2);
113 #define GET_DATA_FUNC_V2D(DataName, FuncName) \
114 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector2D, V2);
115 #define GET_DATA_FUNC_UV(DataName, FuncName) \
116 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector2, V2);
117 #define GET_DATA_FUNC_V3(DataName, FuncName) \
118 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector3, V3);
119 #define GET_DATA_FUNC_V3D(DataName, FuncName) \
120 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector3D, V3);
121 #define GET_DATA_FUNC_UVW(DataName, FuncName) \
122 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector3, V3);
123 #define GET_DATA_FUNC_V4(DataName, FuncName) \
124 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector4, V4);
125 #define GET_DATA_FUNC_V4D(DataName, FuncName) \
126 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Vector4D, V4);
127 #define GET_DATA_FUNC_Q(DataName, FuncName) \
128 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Quaternion, Q);
129 #define GET_DATA_FUNC_QD(DataName, FuncName) \
130 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_QuaternionD, Q);
131 #define GET_DATA_FUNC_M3(DataName, FuncName) \
132 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Matrix3, M3);
133 #define GET_DATA_FUNC_M4(DataName, FuncName) \
134 _BUILD_SIM_OPTION_GETTERS(DataName, FuncName, UT_Matrix4, M4);
136 #define GET_DATA_FUNC_V2_sh(DataName, FuncName) \
137 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector2, V2);
138 #define GET_DATA_FUNC_V2D_sh(DataName, FuncName) \
139 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector2D, V2);
140 #define GET_DATA_FUNC_UV_sh(DataName, FuncName) \
141 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector2, V2);
142 #define GET_DATA_FUNC_V3_sh(DataName, FuncName) \
143 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector3, V3);
144 #define GET_DATA_FUNC_V3D_sh(DataName, FuncName) \
145 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector3D, V3);
146 #define GET_DATA_FUNC_UVW_sh(DataName, FuncName) \
147 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector3, V3);
148 #define GET_DATA_FUNC_V4_sh(DataName, FuncName) \
149 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector4, V4);
150 #define GET_DATA_FUNC_V4D_sh(DataName, FuncName) \
151 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Vector4D, V4);
152 #define GET_DATA_FUNC_Q_sh(DataName, FuncName) \
153 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Quaternion, Q);
154 #define GET_DATA_FUNC_QD_sh(DataName, FuncName) \
155 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_QuaternionD, Q);
156 #define GET_DATA_FUNC_M3_sh(DataName, FuncName) \
157 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Matrix3, M3);
158 #define GET_DATA_FUNC_M4_sh(DataName, FuncName) \
159 _BUILD_SIM_OPTION_GETTERS_sh(DataName, FuncName, UT_Matrix4, M4);
161 #define GET_DATA_FUNC_S_sh(DataName, FuncName) \
162 const UT_StringHolder &get##FuncName() const \
163 { return getOptions().getOptionS(DataName); } \
164 void get##FuncName(UT_String &value) const \
165 { value = get##FuncName(); }
166 #define GET_DATA_FUNC_S(DataName, FuncName) \
167 const UT_StringHolder &get##FuncName() const \
168 { static constexpr UT_StringLit dname(DataName); \
169 return getOptions().getOptionS(dname.asRef()); } \
170 void get##FuncName(UT_String &value) const \
171 { value = get##FuncName(); }
173 #define _BUILD_SIM_OPTION_GUIDE_GETTERS(DataName, FuncName, Default, BaseType, Accessor) \
174 const BaseType##D get##FuncName##D(const SIM_Options &options) const \
175 { return options.hasOption(DataName) \
176 ? options.getOption##Accessor(DataName) \
177 : BaseType##D Default; \
179 const BaseType##F get##FuncName##F(const SIM_Options &options) const \
180 { return options.hasOption(DataName) \
181 ? options.getOption##Accessor(DataName) \
182 : BaseType##D Default; \
184 const BaseType##F get##FuncName(const SIM_Options &options) const \
185 { return options.hasOption(DataName) \
186 ? options.getOption##Accessor(DataName) \
187 : BaseType##D Default; \
190 #define GET_GUIDE_FUNC_I(DataName, FuncName, Default) \
191 int64 get##FuncName(const SIM_Options &options) const \
192 { return options.hasOption(DataName) \
193 ? options.getOptionI(DataName) \
196 #define GET_GUIDE_FUNC_E(DataName, FuncName, EnumType, Default) \
197 EnumType get##FuncName(const SIM_Options &options) const \
198 { return static_cast<EnumType> (options.hasOption(DataName) \
199 ? options.getOptionI(DataName) \
202 #define GET_GUIDE_FUNC_B(DataName, FuncName, Default) \
203 bool get##FuncName(const SIM_Options &options) const \
204 { return options.hasOption(DataName) \
205 ? options.getOptionB(DataName) \
208 #define GET_GUIDE_FUNC_F(DataName, FuncName, Default) \
209 fpreal64 get##FuncName(const SIM_Options &options) const \
210 { return options.hasOption(DataName) \
211 ? options.getOptionF(DataName) \
214 #define GET_GUIDE_FUNC_V2(DataName, FuncName, Default) \
215 _BUILD_SIM_OPTION_GUIDE_GETTERS(DataName, FuncName, Default, UT_Vector2, V2)
216 #define GET_GUIDE_FUNC_V3(DataName, FuncName, Default) \
217 _BUILD_SIM_OPTION_GUIDE_GETTERS(DataName, FuncName, Default, UT_Vector3, V3)
218 #define GET_GUIDE_FUNC_V4(DataName, FuncName, Default) \
219 _BUILD_SIM_OPTION_GUIDE_GETTERS(DataName, FuncName, Default, UT_Vector4, V4)
221 #define GET_GUIDE_FUNC_S(DataName, FuncName, Default) \
222 void get##FuncName(UT_String &value, const SIM_Options &options) const \
223 { if (options.hasOption(DataName)) \
224 options.getOptionS(DataName, value); \
229 #define GET_GUIDE_FUNC_RAMP(DataName, FuncName) \
230 bool get##FuncName(UT_Ramp &ramp, const SIM_Options &options) const \
231 { if (options.hasOption(DataName)) \
233 options.getOptionS(DataName, rs); \
234 UT_IStream is((const char *) rs, rs.length(), UT_ISTREAM_ASCII); \
235 return ramp.load(is); } \
239 #define SET_DATA_FUNC_I(DataName, FuncName) \
240 void set##FuncName(const int64 value) \
241 { getOptions().setOptionI(DataName, value); }
242 #define SET_DATA_FUNC_E(DataName, FuncName, EnumType) \
243 void set##FuncName(const EnumType value) \
244 { getOptions().setOptionI(DataName, \
245 static_cast<int>(value)); }
246 #define SET_DATA_FUNC_B(DataName, FuncName) \
247 void set##FuncName(const bool value) \
248 { getOptions().setOptionB(DataName, value); }
249 #define SET_DATA_FUNC_F(DataName, FuncName) \
250 void set##FuncName(const fpreal64 value) \
251 { getOptions().setOptionF(DataName, value); }
252 #define SET_DATA_FUNC_V2(DataName, FuncName) \
253 void set##FuncName(const UT_Vector2F &value) \
254 { getOptions().setOptionV2(DataName, value); } \
255 void set##FuncName(const UT_Vector2D &value) \
256 { getOptions().setOptionV2(DataName, value); }
257 #define SET_DATA_FUNC_UV(DataName, FuncName) \
258 void set##FuncName(const UT_Vector2F &value) \
259 { getOptions().setOptionUV(DataName, value); } \
260 void set##FuncName(const UT_Vector2D &value) \
261 { getOptions().setOptionUV(DataName, value); }
262 #define SET_DATA_FUNC_V3(DataName, FuncName) \
263 void set##FuncName(const UT_Vector3F &value) \
264 { getOptions().setOptionV3(DataName, value); } \
265 void set##FuncName(const UT_Vector3D &value) \
266 { getOptions().setOptionV3(DataName, value); }
267 #define SET_DATA_FUNC_UVW(DataName, FuncName) \
268 void set##FuncName(const UT_Vector3F &value) \
269 { getOptions().setOptionUVW(DataName, value); } \
270 void set##FuncName(const UT_Vector3D &value) \
271 { getOptions().setOptionUVW(DataName, value); }
272 #define SET_DATA_FUNC_V4(DataName, FuncName) \
273 void set##FuncName(const UT_Vector4F &value) \
274 { getOptions().setOptionV4(DataName, value); } \
275 void set##FuncName(const UT_Vector4D &value) \
276 { getOptions().setOptionV4(DataName, value); }
277 #define SET_DATA_FUNC_Q(DataName, FuncName) \
278 void set##FuncName(const UT_QuaternionF &value) \
279 { getOptions().setOptionQ(DataName, value); } \
280 void set##FuncName(const UT_QuaternionD &value) \
281 { getOptions().setOptionQ(DataName, value); }
282 #define SET_DATA_FUNC_M3(DataName, FuncName) \
283 void set##FuncName(const UT_Matrix3F &value) \
284 { getOptions().setOptionM3(DataName, value); } \
285 void set##FuncName(const UT_Matrix3D &value) \
286 { getOptions().setOptionM3(DataName, value); }
287 #define SET_DATA_FUNC_M4(DataName, FuncName) \
288 void set##FuncName(const UT_Matrix4F &value) \
289 { getOptions().setOptionM4(DataName, value); } \
290 void set##FuncName(const UT_Matrix4D &value) \
291 { getOptions().setOptionM4(DataName, value); }
292 #define SET_DATA_FUNC_S(DataName, FuncName) \
293 void set##FuncName(const UT_StringHolder &value) \
294 { getOptions().setOptionS(DataName, value); }
296 #define SET_DATA_FUNC_RAMP(DataName, FuncName) \
297 void set##FuncName(const UT_Ramp &ramp) const \
298 { UT_OStringStream os; \
300 getOptions().setOptionS(DataName, os.str().buffer()); \
303 #define GETSET_DATA_FUNCS_I(DataName, FuncName) \
304 GET_DATA_FUNC_I(DataName, FuncName) \
305 SET_DATA_FUNC_I(DataName, FuncName)
306 #define GETSET_DATA_FUNCS_E(DataName, FuncName, EnumType) \
307 GET_DATA_FUNC_E(DataName, FuncName, EnumType) \
308 SET_DATA_FUNC_E(DataName, FuncName, EnumType)
309 #define GETSET_DATA_FUNCS_B(DataName, FuncName) \
310 GET_DATA_FUNC_B(DataName, FuncName) \
311 SET_DATA_FUNC_B(DataName, FuncName)
312 #define GETSET_DATA_FUNCS_F(DataName, FuncName) \
313 GET_DATA_FUNC_F(DataName, FuncName) \
314 SET_DATA_FUNC_F(DataName, FuncName)
315 #define GETSET_DATA_FUNCS_V2(DataName, FuncName) \
316 GET_DATA_FUNC_V2(DataName, FuncName) \
317 SET_DATA_FUNC_V2(DataName, FuncName)
318 #define GETSET_DATA_FUNCS_UV(DataName, FuncName) \
319 GET_DATA_FUNC_UV(DataName, FuncName) \
320 SET_DATA_FUNC_UV(DataName, FuncName)
321 #define GETSET_DATA_FUNCS_V3(DataName, FuncName) \
322 GET_DATA_FUNC_V3(DataName, FuncName) \
323 SET_DATA_FUNC_V3(DataName, FuncName)
324 #define GETSET_DATA_FUNCS_UVW(DataName, FuncName) \
325 GET_DATA_FUNC_UVW(DataName, FuncName) \
326 SET_DATA_FUNC_UVW(DataName, FuncName)
327 #define GETSET_DATA_FUNCS_V4(DataName, FuncName) \
328 GET_DATA_FUNC_V4(DataName, FuncName) \
329 SET_DATA_FUNC_V4(DataName, FuncName)
330 #define GETSET_DATA_FUNCS_Q(DataName, FuncName) \
331 GET_DATA_FUNC_Q(DataName, FuncName) \
332 SET_DATA_FUNC_Q(DataName, FuncName)
333 #define GETSET_DATA_FUNCS_M3(DataName, FuncName) \
334 GET_DATA_FUNC_M3(DataName, FuncName) \
335 SET_DATA_FUNC_M3(DataName, FuncName)
336 #define GETSET_DATA_FUNCS_M4(DataName, FuncName) \
337 GET_DATA_FUNC_M4(DataName, FuncName) \
338 SET_DATA_FUNC_M4(DataName, FuncName)
339 #define GETSET_DATA_FUNCS_S(DataName, FuncName) \
340 GET_DATA_FUNC_S(DataName, FuncName) \
341 SET_DATA_FUNC_S(DataName, FuncName)
342 #define GETSET_DATA_FUNCS_RAMP(DataName, FuncName) \
343 GET_DATA_FUNC_RAMP(DataName, FuncName) \
344 SET_DATA_FUNC_RAMP(DataName, FuncName)
346 #define GETSET_DATA_FUNCS_I_sh(DataName, FuncName) \
347 GET_DATA_FUNC_I_sh(DataName, FuncName) \
348 SET_DATA_FUNC_I(DataName, FuncName)
349 #define GETSET_DATA_FUNCS_E_sh(DataName, FuncName, EnumType) \
350 GET_DATA_FUNC_E_sh(DataName, FuncName, EnumType) \
351 SET_DATA_FUNC_E(DataName, FuncName, EnumType)
352 #define GETSET_DATA_FUNCS_B_sh(DataName, FuncName) \
353 GET_DATA_FUNC_B_sh(DataName, FuncName) \
354 SET_DATA_FUNC_B(DataName, FuncName)
355 #define GETSET_DATA_FUNCS_F_sh(DataName, FuncName) \
356 GET_DATA_FUNC_F_sh(DataName, FuncName) \
357 SET_DATA_FUNC_F(DataName, FuncName)
358 #define GETSET_DATA_FUNCS_V2_sh(DataName, FuncName) \
359 GET_DATA_FUNC_V2_sh(DataName, FuncName) \
360 SET_DATA_FUNC_V2(DataName, FuncName)
361 #define GETSET_DATA_FUNCS_UV_sh(DataName, FuncName) \
362 GET_DATA_FUNC_UV_sh(DataName, FuncName) \
363 SET_DATA_FUNC_UV(DataName, FuncName)
364 #define GETSET_DATA_FUNCS_V3_sh(DataName, FuncName) \
365 GET_DATA_FUNC_V3_sh(DataName, FuncName) \
366 SET_DATA_FUNC_V3(DataName, FuncName)
367 #define GETSET_DATA_FUNCS_UVW_sh(DataName, FuncName) \
368 GET_DATA_FUNC_UVW_sh(DataName, FuncName) \
369 SET_DATA_FUNC_UVW(DataName, FuncName)
370 #define GETSET_DATA_FUNCS_V4_sh(DataName, FuncName) \
371 GET_DATA_FUNC_V4_sh(DataName, FuncName) \
372 SET_DATA_FUNC_V4(DataName, FuncName)
373 #define GETSET_DATA_FUNCS_Q_sh(DataName, FuncName) \
374 GET_DATA_FUNC_Q_sh(DataName, FuncName) \
375 SET_DATA_FUNC_Q(DataName, FuncName)
376 #define GETSET_DATA_FUNCS_M3_sh(DataName, FuncName) \
377 GET_DATA_FUNC_M3_sh(DataName, FuncName) \
378 SET_DATA_FUNC_M3(DataName, FuncName)
379 #define GETSET_DATA_FUNCS_M4_sh(DataName, FuncName) \
380 GET_DATA_FUNC_M4_sh(DataName, FuncName) \
381 SET_DATA_FUNC_M4(DataName, FuncName)
382 #define GETSET_DATA_FUNCS_S_sh(DataName, FuncName) \
383 GET_DATA_FUNC_S_sh(DataName, FuncName) \
384 SET_DATA_FUNC_S(DataName, FuncName)
385 #define GETSET_DATA_FUNCS_RAMP_sh(DataName, FuncName) \
386 GET_DATA_FUNC_RAMP_sh(DataName, FuncName) \
387 SET_DATA_FUNC_RAMP(DataName, FuncName)
GLuint const GLchar * name