25 : m_material(std::move(material)), m_thickness(thickness)
31 Layer::~Layer() =
default;
35 Layer* p_result =
new Layer(m_material, m_thickness);
36 p_result->setName(getName());
37 p_result->m_B_field = m_B_field;
38 p_result->m_n_slices = m_n_slices;
39 for (
auto p_layout : layouts())
40 p_result->addLayout(*p_layout);
49 m_thickness = thickness;
52 void Layer::setMaterial(
Material material)
57 void Layer::addLayout(
const ILayout& layout)
60 m_layouts.push_back(
clone);
64 std::vector<const ILayout*> Layer::layouts()
const
66 std::vector<const ILayout*> result;
67 for (
auto p_layout : m_layouts)
68 result.push_back(p_layout);
74 std::vector<const INode*> result;
75 for (
auto layout : m_layouts)
76 result.push_back(layout);
80 void Layer::registerThickness(
bool make_registered)
82 if (make_registered) {
84 registerParameter(
"Thickness", &m_thickness).setUnit(
"nm").setNonnegative();
86 removeParameter(
"Thickness");
Defines many exception classes in namespace Exceptionss.
Defines and implements interface class ILayout.
Defines class ParameterPool.
Defines class RealParameter.
Pure virtual interface class to equip a sample layer with scattering properties.
virtual ILayout * clone() const =0
Returns a clone of this ISample object.
RealParameter * parameter(const std::string &name) const
Returns parameter with given 'name'.
A layer, with thickness (in nanometer) and material.
const Material * material() const override final
Returns nullptr, unless overwritten to return a specific material.
std::vector< const INode * > getChildren() const override final
Returns a vector of children (const).
Layer * clone() const override final
Returns a clone of this ISample object.
void setThickness(double thickness)
Sets layer thickness in nanometers.
Layer(Material material, double thickness=0)
Constructor of a layer with thickness and material.
A wrapper for underlying material implementation.