@@ -18,6 +18,22 @@ namespace RAYX {
1818 * This only works in combi with the xml parser.
1919 */
2020
21+ void getSurfaceCoating (xml::Parser parser, DesignElement* de) {
22+ if (parser.parseSurfaceCoatingType () == SurfaceCoatingType::SubstrateOnly) {
23+ de->setSurfaceCoatingType (parser.parseSurfaceCoatingType ());
24+ return ;
25+ } else if (parser.parseSurfaceCoatingType () == SurfaceCoatingType::OneCoating) {
26+ de->setSurfaceCoatingType (parser.parseSurfaceCoatingType ());
27+ de->setMaterialCoating (parser.parseMaterial ());
28+ de->setThicknessCoating (parser.parseThicknessCoating ());
29+ de->setRoughnessCoating (parser.parseRoughnessCoating ());
30+ } else if (parser.parseSurfaceCoatingType () == SurfaceCoatingType::MultipleCoatings) {
31+ de->setSurfaceCoatingType (parser.parseSurfaceCoatingType ());
32+ de->setMultilayerCoating (parser.parseCoating ());
33+ return ;
34+ }
35+ }
36+
2137void setAllMandatory (xml::Parser parser, DesignElement* de, DesignPlane dp) {
2238 de->setName (parser.name ());
2339 de->setType (parser.type ());
@@ -30,6 +46,7 @@ void setAllMandatory(xml::Parser parser, DesignElement* de, DesignPlane dp) {
3046 de->setAzimuthalAngle (parser.parseAzimuthalAngle ());
3147 de->setMaterial (parser.parseMaterial ());
3248
49+ de->setSurfaceCoatingType (SurfaceCoatingType::SubstrateOnly);
3350 de->setDesignPlane (dp);
3451 if (de->getType () != ElementType::ImagePlane) {
3552 de->setCutout (parser.parseCutout (dp, ElementStringMap[parser.type ()]));
@@ -65,6 +82,8 @@ void getCone(xml::Parser parser, DesignElement* de) {
6582 de->setCurvatureType (CurvatureType::Cone);
6683 de->setBehaviourType (BehaviourType::Mirror);
6784
85+ getSurfaceCoating (parser, de);
86+
6887 de->setGrazingIncAngle (parser.parseGrazingIncAngle ());
6988 de->setEntranceArmLength (parser.parseEntranceArmLength ());
7089 de->setExitArmLength (parser.parseExitArmLength ());
@@ -93,6 +112,8 @@ void getCylinder(xml::Parser parser, DesignElement* de) {
93112 de->setCurvatureType (CurvatureType::Cylinder);
94113 de->setBehaviourType (BehaviourType::Mirror);
95114
115+ getSurfaceCoating (parser, de);
116+
96117 de->setRadiusDirection (parser.parseBendingRadius ());
97118 de->setRadius (parser.parseRadius ());
98119 de->setGrazingIncAngle (parser.parseGrazingIncAngle ());
@@ -105,6 +126,8 @@ void getEllipsoid(xml::Parser parser, DesignElement* de) {
105126 de->setCurvatureType (CurvatureType::Ellipsoid);
106127 de->setBehaviourType (BehaviourType::Mirror);
107128
129+ getSurfaceCoating (parser, de);
130+
108131 de->setShortHalfAxisB (parser.parseShortHalfAxisB ());
109132 de->setLongHalfAxisA (parser.parseLongHalfAxisA ());
110133 de->setDesignGrazingIncAngle (parser.parseDesignGrazingIncAngle ());
@@ -120,6 +143,8 @@ void getParaboloid(xml::Parser parser, DesignElement* de) {
120143 de->setCurvatureType (CurvatureType::Paraboloid);
121144 de->setBehaviourType (BehaviourType::Mirror);
122145
146+ getSurfaceCoating (parser, de);
147+
123148 de->setArmLength (parser.parseArmLength ());
124149 de->setParameterP (parser.parseParameterP ());
125150 de->setParameterPType (parser.parseParameterPType ());
@@ -157,13 +182,17 @@ void getPlaneMirror(xml::Parser parser, DesignElement* de) {
157182 setAllMandatory (parser, de, DesignPlane::XZ);
158183 de->setCurvatureType (CurvatureType::Plane);
159184 de->setBehaviourType (BehaviourType::Mirror);
185+
186+ getSurfaceCoating (parser, de);
160187}
161188
162189void getSphereMirror (xml::Parser parser, DesignElement* de) {
163190 setAllMandatory (parser, de, DesignPlane::XZ);
164191 de->setCurvatureType (CurvatureType::Spherical);
165192 de->setBehaviourType (BehaviourType::Mirror);
166193
194+ getSurfaceCoating (parser, de);
195+
167196 de->setGrazingIncAngle (parser.parseGrazingIncAngle ());
168197 de->setEntranceArmLength (parser.parseEntranceArmLength ());
169198 de->setExitArmLength (parser.parseExitArmLength ());
@@ -175,14 +204,18 @@ void getToroidMirror(xml::Parser parser, DesignElement* de) {
175204 de->setCurvatureType (CurvatureType::Toroidal);
176205 de->setBehaviourType (BehaviourType::Mirror);
177206
207+ getSurfaceCoating (parser, de);
208+
178209 de->setShortRadius (parser.parseShortRadius ());
179210 de->setLongRadius (parser.parseLongRadius ());
180211}
181212
182213void getToroidalGrating (xml::Parser parser, DesignElement* de) {
183214 setAllMandatory (parser, de, DesignPlane::XZ);
184215 de->setCurvatureType (CurvatureType::Toroidal);
185- de->setBehaviourType (BehaviourType::Mirror);
216+ de->setBehaviourType (BehaviourType::Grating);
217+
218+ getSurfaceCoating (parser, de);
186219
187220 de->setShortRadius (parser.parseShortRadius ());
188221 de->setLongRadius (parser.parseLongRadius ());
@@ -221,6 +254,8 @@ void getExpertsCubic(xml::Parser parser, DesignElement* de) {
221254 de->setCurvatureType (CurvatureType::Cubic);
222255 de->setBehaviourType (BehaviourType::Mirror);
223256
257+ getSurfaceCoating (parser, de);
258+
224259 de->setExpertsCubic (parser.parseCubicParameters ());
225260}
226261
@@ -229,6 +264,8 @@ void getExpertsOptics(xml::Parser parser, DesignElement* de) {
229264 de->setCurvatureType (CurvatureType::Quadric);
230265 de->setBehaviourType (BehaviourType::Mirror);
231266
267+ getSurfaceCoating (parser, de);
268+
232269 de->setExpertsOptics (parser.parseQuadricParameters ());
233270}
234271
0 commit comments