Skip to content

Commit bec44b9

Browse files
committed
param RAYUi coating
1 parent f240685 commit bec44b9

File tree

4 files changed

+29243
-13
lines changed

4 files changed

+29243
-13
lines changed

Intern/rayx-core/src/Rml/xml.cpp

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -299,19 +299,71 @@ bool paramVls(const rapidxml::xml_node<>* node, std::array<double, 6>* out) {
299299
return true;
300300
}
301301

302-
//multilayer coating
303-
bool paramCoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating* out) {
304-
if (!node || !out) {
302+
bool paramRAYUICoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating* out) {
303+
if (!node || !out) { return false; }
304+
305+
// Root für die Layer bestimmen: entweder 'node' selbst oder <param id="Coating">
306+
307+
int numberLayer = 0;
308+
if (!paramInt(node, "numberLayer", &numberLayer)) {
305309
return false;
306310
}
311+
out->numLayers = numberLayer;
312+
313+
for (int i = 0; i < numberLayer; ++i) {
314+
std::string materialParam = "materialCoating" + std::to_string(i + 1);
315+
std::string thicknessParam = "thicknessCoating" + std::to_string(i + 1);
316+
std::string roughnessParam = "roughnessCoating" + std::to_string(i + 1);
317+
const char* materialStr = nullptr;
318+
if (!paramStr(node, materialParam.c_str(), &materialStr)) {
319+
RAYX_VERB << "Layer " << i + 1 << " is missing a <material> element.";
320+
return false;
321+
}
322+
Material material;
323+
materialFromString(materialStr, &material);
324+
out->material[i] = static_cast<int>(material);
325+
326+
if (!paramDouble(node, thicknessParam.c_str(), &out->thickness[i])) {
327+
RAYX_VERB << "Missing thickness for layer " << (i + 1);
328+
return false;
329+
}
330+
331+
if (!paramDouble(node, roughnessParam.c_str(), &out->roughness[i])) {
332+
RAYX_VERB << "Missing roughness for layer " << (i + 1);
333+
return false;
334+
}
335+
}
336+
337+
const char* materialStr = nullptr;
338+
if (paramStr(node, "materialTopLayer", &materialStr)) {
339+
Material material;
340+
materialFromString(materialStr, &material);
341+
out->material[numberLayer] = static_cast<int>(material);
342+
343+
if (!paramDouble(node, "thicknessTopLayer", &out->thickness[numberLayer])) {
344+
RAYX_VERB << "Missing thickness for toplayer ";
345+
return false;
346+
}
347+
348+
if (!paramDouble(node, "roughnessTopLayer", &out->roughness[numberLayer])) {
349+
RAYX_VERB << "Missing roughness for toplayer ";
350+
return false;
351+
}
352+
out->numLayers += 1;
353+
}
354+
}
355+
356+
// multilayer coating
357+
bool paramCoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating* out) {
358+
if (!node || !out) { return false; }
307359

308360
// Root für die Layer bestimmen: entweder 'node' selbst oder <param id="Coating">
309361
rapidxml::xml_node<>* layersRoot = nullptr;
310362
if (node->first_node("layer")) {
311363
layersRoot = const_cast<rapidxml::xml_node<>*>(node);
312364
} else {
313365
if (!param(node, "Coating", &layersRoot)) {
314-
RAYX_WARN << "Missing <param id='Coating'> for multilayer";
366+
RAYX_VERB << "Missing <param id='Coating'> for multilayer";
315367
return false;
316368
}
317369
}
@@ -327,7 +379,7 @@ bool paramCoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating*
327379
}
328380

329381
if (numLayers <= 0) {
330-
RAYX_WARN << "Number of layers must be positive.";
382+
RAYX_VERB << "Number of layers must be positive.";
331383
return false;
332384
}
333385

@@ -340,7 +392,7 @@ bool paramCoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating*
340392
if (auto* m = layerNode->first_attribute("material")) {
341393
materialStr = m->value();
342394
} else {
343-
RAYX_WARN << "Layer " << i + 1 << " is missing a <material> element.";
395+
RAYX_VERB << "Layer " << i + 1 << " is missing a <material> element.";
344396
return false;
345397
}
346398
Material material;
@@ -350,14 +402,14 @@ bool paramCoating(const rapidxml::xml_node<>* node, Coating::MultilayerCoating*
350402
if (auto* t = layerNode->first_attribute("thickness")) {
351403
out->thickness[i] = std::stod(t->value());
352404
} else {
353-
RAYX_WARN << "Missing thickness for layer " << (i + 1);
405+
RAYX_VERB << "Missing thickness for layer " << (i + 1);
354406
return false;
355407
}
356408

357409
if (auto* r = layerNode->first_attribute("roughness")) {
358410
out->roughness[i] = std::stod(r->value());
359411
} else {
360-
RAYX_WARN << "Missing roughness for layer " << (i + 1);
412+
RAYX_VERB << "Missing roughness for layer " << (i + 1);
361413
return false;
362414
}
363415
}
@@ -626,11 +678,9 @@ Material Parser::parseMaterial() const {
626678

627679
Coating::MultilayerCoating Parser::parseCoating() const {
628680
Coating::MultilayerCoating m;
629-
// get children from param Cotaing
630-
631-
if (!paramCoating(node, &m)) {
632-
RAYX_EXIT << "parseCoating failed";
633-
}
681+
// get children from param Coating
682+
683+
if (!paramCoating(node, &m) && !paramRAYUICoating(node, &m)) { RAYX_EXIT << "parseCoating failed"; }
634684
return m;
635685
}
636686

0 commit comments

Comments
 (0)