Skip to content
Snippets Groups Projects
Commit fc65f4ff authored by Mikhail Svechnikov's avatar Mikhail Svechnikov
Browse files

serialize model

parent 931be650
No related branches found
No related tags found
1 merge request!2704Serialize RoughnessModel in GUI
Pipeline #154270 passed
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
namespace { namespace {
namespace Tag { namespace Tag {
const QString BaseData("BaseData");
const QString HeightDistributionModel("HeightDistributionModel");
const QString Sigma("Sigma"); const QString Sigma("Sigma");
const QString Hurst("Hurst"); const QString Hurst("Hurst");
const QString LateralCorrelationLength("LateralCorrelationLength"); const QString LateralCorrelationLength("LateralCorrelationLength");
...@@ -25,17 +27,29 @@ const QString LateralCorrelationLength("LateralCorrelationLength"); ...@@ -25,17 +27,29 @@ const QString LateralCorrelationLength("LateralCorrelationLength");
} // namespace Tag } // namespace Tag
} // namespace } // namespace
void RoughnessItem::writeTo(QXmlStreamWriter* w) const {} void RoughnessItem::writeTo(QXmlStreamWriter* w) const
{
XML::writeTaggedElement(w, Tag::HeightDistributionModel, m_roughness_model);
}
void RoughnessItem::readFrom(QXmlStreamReader* r)
{
while (r->readNextStartElement()) {
QString tag = r->name().toString();
void RoughnessItem::readFrom(QXmlStreamReader* r) {} if (tag == Tag::HeightDistributionModel)
XML::readTaggedElement(r, tag, m_roughness_model);
else
r->skipCurrentElement();
}
}
RoughnessItem::RoughnessItem() RoughnessItem::RoughnessItem()
{ {
DefaultRoughness default_roughness_type;
m_roughness_model.simpleInit("Interlayer profile", m_roughness_model.simpleInit("Interlayer profile",
"Laterally averaged profile of the interlayer transition (or " "Laterally averaged profile of the interlayer transition (or "
"roughness height distribution)", "roughness height distribution)",
RoughnessModelCatalog::type(&default_roughness_type)); RoughnessModelCatalog::Type::Tanh);
} }
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
...@@ -54,6 +68,7 @@ BasicRoughnessItem::BasicRoughnessItem(double sigma, double hurst, double corr_l ...@@ -54,6 +68,7 @@ BasicRoughnessItem::BasicRoughnessItem(double sigma, double hurst, double corr_l
void BasicRoughnessItem::writeTo(QXmlStreamWriter* w) const void BasicRoughnessItem::writeTo(QXmlStreamWriter* w) const
{ {
XML::writeBaseElement<RoughnessItem>(w, Tag::BaseData, this);
m_sigma.writeTo2(w, Tag::Sigma); m_sigma.writeTo2(w, Tag::Sigma);
m_hurst.writeTo2(w, Tag::Hurst); m_hurst.writeTo2(w, Tag::Hurst);
m_lateral_correlation_length.writeTo2(w, Tag::LateralCorrelationLength); m_lateral_correlation_length.writeTo2(w, Tag::LateralCorrelationLength);
...@@ -64,7 +79,9 @@ void BasicRoughnessItem::readFrom(QXmlStreamReader* r) ...@@ -64,7 +79,9 @@ void BasicRoughnessItem::readFrom(QXmlStreamReader* r)
while (r->readNextStartElement()) { while (r->readNextStartElement()) {
QString tag = r->name().toString(); QString tag = r->name().toString();
if (tag == Tag::Sigma) if (tag == Tag::BaseData)
XML::readBaseElement<RoughnessItem>(r, tag, this);
else if (tag == Tag::Sigma)
m_sigma.readFrom2(r, tag); m_sigma.readFrom2(r, tag);
else if (tag == Tag::Hurst) else if (tag == Tag::Hurst)
m_hurst.readFrom2(r, tag); m_hurst.readFrom2(r, tag);
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "GUI/Model/Descriptor/DoubleProperty.h" #include "GUI/Model/Descriptor/DoubleProperty.h"
#include "GUI/Model/Descriptor/PolyPtr.h" #include "GUI/Model/Descriptor/PolyPtr.h"
#include "GUI/Model/Sample/RoughnessCatalog.h" #include "GUI/Model/Sample/RoughnessCatalog.h"
#include "Sample/Interface/RoughnessModels.h" #include "GUI/Model/Sample/RoughnessModelItems.h"
class RoughnessItem { class RoughnessItem {
public: public:
...@@ -28,16 +28,16 @@ public: ...@@ -28,16 +28,16 @@ public:
virtual void readFrom(QXmlStreamReader* r); virtual void readFrom(QXmlStreamReader* r);
virtual DoubleProperties roughnessProperties() = 0; virtual DoubleProperties roughnessProperties() = 0;
PolyPtr<RoughnessModel, RoughnessModelCatalog>& roughnessModelSelection() PolyPtr<RoughnessModelItem, RoughnessModelCatalog>& roughnessModelSelection()
{ {
return m_roughness_model; return m_roughness_model;
} }
RoughnessModel* certainRoughnessModel() const { return m_roughness_model.certainItem(); } RoughnessModelItem* certainRoughnessModel() const { return m_roughness_model.certainItem(); }
void setRoughnessModelType(RoughnessModel* p) { m_roughness_model.setCertainItem(p); } void setRoughnessModelType(RoughnessModelItem* p) { m_roughness_model.setCertainItem(p); }
protected: protected:
RoughnessItem(); RoughnessItem();
PolyPtr<RoughnessModel, RoughnessModelCatalog> m_roughness_model; PolyPtr<RoughnessModelItem, RoughnessModelCatalog> m_roughness_model;
}; };
class BasicRoughnessItem : public RoughnessItem { class BasicRoughnessItem : public RoughnessItem {
......
...@@ -16,17 +16,34 @@ ...@@ -16,17 +16,34 @@
#define BORNAGAIN_GUI_MODEL_SAMPLE_ROUGHNESSMODELITEMS_H #define BORNAGAIN_GUI_MODEL_SAMPLE_ROUGHNESSMODELITEMS_H
#include "Sample/Interface/RoughnessModels.h" #include "Sample/Interface/RoughnessModels.h"
#include <memory>
class RoughnessModelItem { class RoughnessModelItem {
public: public:
virtual ~RoughnessModelItem() = default; virtual ~RoughnessModelItem() = default;
virtual void writeTo(QXmlStreamWriter*) const = {}; virtual void writeTo(QXmlStreamWriter*) const {}
virtual void readFrom(QXmlStreamReader*) = {}; virtual void readFrom(QXmlStreamReader*) {}
virtual std::unique_ptr<RoughnessModel> createModel() const = 0;
protected:
RoughnessModelItem() = default;
}; };
class ErfRoughnessItem : public RoughnessModelItem {}; class ErfRoughnessItem : public RoughnessModelItem {
public:
ErfRoughnessItem() = default;
std::unique_ptr<RoughnessModel> createModel() const { return std::make_unique<ErfRoughness>(); }
};
class TanhRoughnessItem : public RoughnessModelItem {}; class TanhRoughnessItem : public RoughnessModelItem {
public:
TanhRoughnessItem() = default;
std::unique_ptr<RoughnessModel> createModel() const
{
return std::make_unique<TanhRoughness>();
}
};
#endif // BORNAGAIN_GUI_MODEL_SAMPLE_ROUGHNESSMODELITEMS_H #endif // BORNAGAIN_GUI_MODEL_SAMPLE_ROUGHNESSMODELITEMS_H
...@@ -121,7 +121,7 @@ std::unique_ptr<MultiLayer> GUI::ToCore::itemToSample(const SampleItem& sampleIt ...@@ -121,7 +121,7 @@ std::unique_ptr<MultiLayer> GUI::ToCore::itemToSample(const SampleItem& sampleIt
layerItem->roughnessSelection().certainItem())) { layerItem->roughnessSelection().certainItem())) {
LayerRoughness roughness(t->sigma().dVal(), t->hurst().dVal(), LayerRoughness roughness(t->sigma().dVal(), t->hurst().dVal(),
t->lateralCorrelationLength().dVal(), t->lateralCorrelationLength().dVal(),
t->certainRoughnessModel()); t->certainRoughnessModel()->createModel().release());
sample->addLayerWithTopRoughness(*layer, roughness); sample->addLayerWithTopRoughness(*layer, roughness);
} else } else
sample->addLayer(*layer); sample->addLayer(*layer);
......
...@@ -96,9 +96,9 @@ std::unique_ptr<const double2d_t> layerRoughnessMap(const LayerItem& layerItem, ...@@ -96,9 +96,9 @@ std::unique_ptr<const double2d_t> layerRoughnessMap(const LayerItem& layerItem,
std::unique_ptr<const double2d_t> result; std::unique_ptr<const double2d_t> result;
if (const auto* br = dynamic_cast<const BasicRoughnessItem*>(layerItem.certainRoughness())) { if (const auto* br = dynamic_cast<const BasicRoughnessItem*>(layerItem.certainRoughness())) {
auto roughness = auto roughness = LayerRoughness(br->sigma().dVal(), br->hurst().dVal(),
LayerRoughness(br->sigma().dVal(), br->hurst().dVal(), br->lateralCorrelationLength().dVal(),
br->lateralCorrelationLength().dVal(), br->certainRoughnessModel()); br->certainRoughnessModel()->createModel().release());
int n = sceneGeometry.numRoughnessPointsAlongAxis; int n = sceneGeometry.numRoughnessPointsAlongAxis;
double L = 2 * sceneGeometry.layerSize; double L = 2 * sceneGeometry.layerSize;
auto rmap = RoughnessMap(n, n, L, L, &roughness, seed); // seed < 0 ==> random every time auto rmap = RoughnessMap(n, n, L, L, &roughness, seed); // seed < 0 ==> random every time
......
...@@ -53,7 +53,7 @@ DoubleProperties PolyForm::doublePropertiesOfItem(FormfactorItem* item) ...@@ -53,7 +53,7 @@ DoubleProperties PolyForm::doublePropertiesOfItem(FormfactorItem* item)
return item->geometryProperties(); return item->geometryProperties();
} }
DoubleProperties PolyForm::doublePropertiesOfItem(RoughnessModel*) DoubleProperties PolyForm::doublePropertiesOfItem(RoughnessModelItem*)
{ {
return {}; return {};
} }
...@@ -52,7 +52,7 @@ public: ...@@ -52,7 +52,7 @@ public:
virtual void createContent(); virtual void createContent();
private: private:
static DoubleProperties doublePropertiesOfItem(class RoughnessModel* item); static DoubleProperties doublePropertiesOfItem(class RoughnessModelItem* item);
static DoubleProperties doublePropertiesOfItem(class FormfactorItem* item); static DoubleProperties doublePropertiesOfItem(class FormfactorItem* item);
static DoubleProperties doublePropertiesOfItem(class Profile1DItem* item); static DoubleProperties doublePropertiesOfItem(class Profile1DItem* item);
static DoubleProperties doublePropertiesOfItem(class Profile2DItem* item); static DoubleProperties doublePropertiesOfItem(class Profile2DItem* item);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment