From 84ea93b68ce05960540c2b417f87a2edae652176 Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Mon, 12 Aug 2024 15:25:30 +0200
Subject: [PATCH] to core

---
 GUI/Model/Sample/CrosscorrelationItems.cpp |  6 ++++++
 GUI/Model/Sample/CrosscorrelationItems.h   |  4 ++++
 GUI/Model/ToCore/SampleToCore.cpp          | 22 +++++++++++++++-------
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/GUI/Model/Sample/CrosscorrelationItems.cpp b/GUI/Model/Sample/CrosscorrelationItems.cpp
index 74f505a0d18..289ef01786a 100644
--- a/GUI/Model/Sample/CrosscorrelationItems.cpp
+++ b/GUI/Model/Sample/CrosscorrelationItems.cpp
@@ -14,6 +14,7 @@
 
 #include "GUI/Model/Sample/CrosscorrelationItems.h"
 #include "GUI/Model/Util/UtilXML.h"
+#include "Sample/Interface/CrosscorrelationModels.h"
 
 namespace {
 namespace Tag {
@@ -47,3 +48,8 @@ void CommonDepthCrosscorrelationItem::readFrom(QXmlStreamReader* r)
             r->skipCurrentElement();
     }
 }
+
+std::unique_ptr<CrosscorrelationModel> CommonDepthCrosscorrelationItem::createModel() const
+{
+    return std::make_unique<CommonDepthCrosscorrelation>(m_crosscorrelation_depth.dVal());
+}
diff --git a/GUI/Model/Sample/CrosscorrelationItems.h b/GUI/Model/Sample/CrosscorrelationItems.h
index 021f424ce6b..a84e51194d7 100644
--- a/GUI/Model/Sample/CrosscorrelationItems.h
+++ b/GUI/Model/Sample/CrosscorrelationItems.h
@@ -18,12 +18,15 @@
 #include "GUI/Model/Descriptor/DoubleProperty.h"
 #include <QXmlStreamReader>
 
+class CrosscorrelationModel;
+
 class CrosscorrelationItem {
 public:
     virtual ~CrosscorrelationItem() = default;
 
     virtual void writeTo(QXmlStreamWriter*) const {}
     virtual void readFrom(QXmlStreamReader*) {}
+    virtual std::unique_ptr<CrosscorrelationModel> createModel() const = 0;
     virtual DoubleProperties crossCorrProperties() = 0;
 
 protected:
@@ -37,6 +40,7 @@ public:
     void writeTo(QXmlStreamWriter* w) const override;
     void readFrom(QXmlStreamReader* r) override;
 
+    std::unique_ptr<CrosscorrelationModel> createModel() const override;
     DoubleProperties crossCorrProperties() override { return {&m_crosscorrelation_depth}; }
 
 private:
diff --git a/GUI/Model/ToCore/SampleToCore.cpp b/GUI/Model/ToCore/SampleToCore.cpp
index 5069db80aaf..b2262958e0c 100644
--- a/GUI/Model/ToCore/SampleToCore.cpp
+++ b/GUI/Model/ToCore/SampleToCore.cpp
@@ -121,17 +121,25 @@ std::unique_ptr<MultiLayer> GUI::ToCore::itemToSample(const SampleItem& sampleIt
             continue;
         }
 
-        std::unique_ptr<InterlayerModel> interlayer(
-            roughItem->certainInterlayerModel()->createModel());
+        // autocorrelation
         std::unique_ptr<AutocorrelationModel> autocorrelation;
-
-        if (const auto* br = dynamic_cast<const K_CorrelationRoughnessItem*>(roughItem))
-            autocorrelation = std::make_unique<K_CorrelationModel>(
-                br->sigma().dVal(), br->hurst().dVal(), br->lateralCorrelationLength().dVal());
+        if (const auto* k_corr = dynamic_cast<const K_CorrelationRoughnessItem*>(roughItem))
+            autocorrelation =
+                std::make_unique<K_CorrelationModel>(k_corr->sigma().dVal(), k_corr->hurst().dVal(),
+                                                     k_corr->lateralCorrelationLength().dVal());
         else
             ASSERT_NEVER;
 
-        LayerRoughness roughness(autocorrelation.get(), interlayer.get());
+        // interlayer
+        std::unique_ptr<InterlayerModel> interlayer(
+            roughItem->certainInterlayerModel()->createModel());
+
+        // crosscorrelation
+        std::unique_ptr<CrosscorrelationModel> crosscorrelation;
+        if (const auto* item = roughItem->certainCrosscorrModel())
+            crosscorrelation = item->createModel();
+
+        LayerRoughness roughness(autocorrelation.get(), interlayer.get(), crosscorrelation.get());
         sample->addLayerWithTopRoughness(*layer, roughness);
     }
     return sample;
-- 
GitLab