From 23f1c62aed6cc5f8ddbc0f3d862cde8a2536d340 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Wed, 14 Jul 2021 20:44:51 +0200 Subject: [PATCH] start moving refined stack out of IFresnelMap --- Resample/Processed/ProcessedSample.cpp | 26 +++++++++----------------- Resample/Processed/ProcessedSample.h | 1 + 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/Resample/Processed/ProcessedSample.cpp b/Resample/Processed/ProcessedSample.cpp index 9045b9229ee..b7d68848bc2 100644 --- a/Resample/Processed/ProcessedSample.cpp +++ b/Resample/Processed/ProcessedSample.cpp @@ -114,6 +114,7 @@ SliceStack refineStack(const SliceStack& stack, const std::vector<ProcessedLayou result[i_slice].setMaterial(createAveragedMaterial(slice_mat, entry.second)); } } + ASSERT(result.size()==stack.size()); return result; } @@ -199,22 +200,6 @@ std::vector<ProcessedLayout> collectLayouts(const MultiLayer& sample, const Slic return result; } -//! Returns a Fresnel map, for use in ProcessedSample constructor. - -std::unique_ptr<IFresnelMap> fresnelify(const MultiLayer& sample, const SliceStack& slices, - const std::vector<ProcessedLayout>& layouts, - const SimulationOptions& options) -{ - SliceStack fresnelStack = options.useAvgMaterials() ? refineStack(slices, layouts) : slices; - - if (slices.containsMagneticMaterial()) - return std::make_unique<MatrixFresnelMap>( - fresnelStack, - SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel())); - return std::make_unique<ScalarFresnelMap>( - fresnelStack, SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel())); -} - } // namespace @@ -228,7 +213,14 @@ ProcessedSample::ProcessedSample(const MultiLayer& sample, const SimulationOptio , m_polarized{forcePolarized || sample.isMagnetic()} , m_slices{slicify(sample, options).setBField(sample.externalField())} , m_layouts{collectLayouts(sample, m_slices, m_polarized)} - , m_fresnel_map{fresnelify(sample, m_slices, m_layouts, options)} + , m_refined_stack(options.useAvgMaterials() ? refineStack(m_slices, m_layouts) : m_slices) + , m_fresnel_map(m_slices.containsMagneticMaterial() + ? (std::unique_ptr<IFresnelMap>)std::make_unique<MatrixFresnelMap>( + m_refined_stack, + SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel())) + : (std::unique_ptr<IFresnelMap>)std::make_unique<ScalarFresnelMap>( + m_refined_stack, + SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel()))) { } diff --git a/Resample/Processed/ProcessedSample.h b/Resample/Processed/ProcessedSample.h index 99883470095..ce97012897a 100644 --- a/Resample/Processed/ProcessedSample.h +++ b/Resample/Processed/ProcessedSample.h @@ -63,6 +63,7 @@ private: const bool m_polarized; const SliceStack m_slices; const std::vector<ProcessedLayout> m_layouts; + const SliceStack m_refined_stack; const std::unique_ptr<const IFresnelMap> m_fresnel_map; }; -- GitLab