From ca559fcd19fa1170302e2d965752a26ce21a0b48 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Thu, 9 Dec 2021 06:23:12 +0100
Subject: [PATCH] ensure correct layer-thickness when creating sample
 (GUI->domain)

---
 GUI/Model/To/DomainObjectBuilder.cpp | 8 +++++---
 GUI/Model/To/DomainObjectBuilder.h   | 2 +-
 GUI/Model/To/ToDomain.cpp            | 7 ++++---
 GUI/Model/To/ToDomain.h              | 2 +-
 4 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/GUI/Model/To/DomainObjectBuilder.cpp b/GUI/Model/To/DomainObjectBuilder.cpp
index 13984572b0a..20a65f09846 100644
--- a/GUI/Model/To/DomainObjectBuilder.cpp
+++ b/GUI/Model/To/DomainObjectBuilder.cpp
@@ -26,7 +26,8 @@ GUI::Model::DomainObjectBuilder::buildMultiLayer(const MultiLayerItem& item)
 {
     auto P_multilayer = GUI::Transform::ToDomain::createMultiLayer(item);
     for (auto* layerItem : item.layers()) {
-        auto P_layer = buildLayer(*layerItem);
+        const bool isFirstOrLastLayer = layerItem == item.layers().first() || item.layers().last();
+        auto P_layer = buildLayer(*layerItem, isFirstOrLastLayer);
         const auto roughness = layerItem->roughness().currentItem();
         auto P_roughness = GUI::Transform::ToDomain::createLayerRoughness(roughness);
         if (P_layer) {
@@ -39,9 +40,10 @@ GUI::Model::DomainObjectBuilder::buildMultiLayer(const MultiLayerItem& item)
     return P_multilayer;
 }
 
-std::unique_ptr<Layer> GUI::Model::DomainObjectBuilder::buildLayer(const LayerItem& item)
+std::unique_ptr<Layer> GUI::Model::DomainObjectBuilder::buildLayer(const LayerItem& item,
+                                                                   bool isFirstOrLastLayer)
 {
-    auto P_layer = GUI::Transform::ToDomain::createLayer(item);
+    auto P_layer = GUI::Transform::ToDomain::createLayer(item, isFirstOrLastLayer);
     for (ParticleLayoutItem* layout : item.layouts()) {
         auto P_layout = buildParticleLayout(*layout);
         if (P_layout)
diff --git a/GUI/Model/To/DomainObjectBuilder.h b/GUI/Model/To/DomainObjectBuilder.h
index 6221e2b81c7..132010d55d5 100644
--- a/GUI/Model/To/DomainObjectBuilder.h
+++ b/GUI/Model/To/DomainObjectBuilder.h
@@ -32,7 +32,7 @@ class ICoordSystem;
 namespace GUI::Model::DomainObjectBuilder {
 
 std::unique_ptr<MultiLayer> buildMultiLayer(const MultiLayerItem& item);
-std::unique_ptr<Layer> buildLayer(const LayerItem& item);
+std::unique_ptr<Layer> buildLayer(const LayerItem& item, bool isFirstOrLastLayer);
 std::unique_ptr<ParticleLayout> buildParticleLayout(const ParticleLayoutItem& item);
 
 } // namespace GUI::Model::DomainObjectBuilder
diff --git a/GUI/Model/To/ToDomain.cpp b/GUI/Model/To/ToDomain.cpp
index b7184922a69..9cc724da0ee 100644
--- a/GUI/Model/To/ToDomain.cpp
+++ b/GUI/Model/To/ToDomain.cpp
@@ -39,10 +39,11 @@ std::unique_ptr<MultiLayer> GUI::Transform::ToDomain::createMultiLayer(const Mul
     return P_multilayer;
 }
 
-std::unique_ptr<Layer> GUI::Transform::ToDomain::createLayer(const LayerItem& item)
+std::unique_ptr<Layer> GUI::Transform::ToDomain::createLayer(const LayerItem& item,
+                                                             bool isFirstOrLastLayer)
 {
-    auto P_layer =
-        std::make_unique<Layer>(*item.materialItem()->createMaterial(), item.thickness());
+    auto P_layer = std::make_unique<Layer>(*item.materialItem()->createMaterial(),
+                                           isFirstOrLastLayer ? 0.0 : item.thickness());
     P_layer->setNumberOfSlices(item.numSlices());
     return P_layer;
 }
diff --git a/GUI/Model/To/ToDomain.h b/GUI/Model/To/ToDomain.h
index c2f7607f978..3094cc184c4 100644
--- a/GUI/Model/To/ToDomain.h
+++ b/GUI/Model/To/ToDomain.h
@@ -37,7 +37,7 @@ class LayerBasicRoughnessItem;
 namespace GUI::Transform::ToDomain {
 
 std::unique_ptr<IParticle> createIParticle(const SessionItem& item);
-std::unique_ptr<Layer> createLayer(const LayerItem& item);
+std::unique_ptr<Layer> createLayer(const LayerItem& item, bool isFirstOrLastLayer);
 std::unique_ptr<LayerRoughness> createLayerRoughness(
     const std::variant<LayerZeroRoughnessItem*, LayerBasicRoughnessItem*>& roughness);
 std::unique_ptr<MultiLayer> createMultiLayer(const MultiLayerItem& item);
-- 
GitLab