diff --git a/GUI/Model/Sample/FormFactorItems.cpp b/GUI/Model/Sample/FormFactorItems.cpp index 86a6a96bd0b2c178df2b9d439ea3daefc895e8cb..ed7f8ef94eee2600c500f376f51a6d95e08b7d9b 100644 --- a/GUI/Model/Sample/FormFactorItems.cpp +++ b/GUI/Model/Sample/FormFactorItems.cpp @@ -417,3 +417,10 @@ std::unique_ptr<IBornFF> TruncatedSpheroidItem::createFormFactor() const return std::make_unique<FormFactorTruncatedSpheroid>(radius(), height(), heightFlattening(), removedTop()); } + +void FormFactorItem::serialize(Serializer& s) +{ + s.assertVersion(0); + for (auto* p : serializationProperties()) + s.rw(*p); +} diff --git a/GUI/Model/Sample/FormFactorItems.h b/GUI/Model/Sample/FormFactorItems.h index 613ab0fb6b75f47fbdb3773cc4e24d5540cf4580..9aeb84e7e0ede36627348610dd35e749ec6567a0 100644 --- a/GUI/Model/Sample/FormFactorItems.h +++ b/GUI/Model/Sample/FormFactorItems.h @@ -15,7 +15,9 @@ #ifndef BORNAGAIN_GUI_MODEL_SAMPLE_FORMFACTORITEMS_H #define BORNAGAIN_GUI_MODEL_SAMPLE_FORMFACTORITEMS_H +#include "GUI/Model/Session/Serializer.h" #include "GUI/Model/Types/DoubleProperty.h" +#include <QVector> #include <memory> class IBornFF; @@ -36,6 +38,8 @@ public: public: virtual std::unique_ptr<IBornFF> createFormFactor() const = 0; virtual DoubleDescriptors geometryValues() const = 0; + virtual QVector<DoubleProperty*> serializationProperties() = 0; + virtual void serialize(Serializer& s); }; class AnisoPyramidItem : public FormFactorItem { @@ -52,6 +56,10 @@ public: { return {length(), width(), height(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height, &m_alpha}; + } }; class BarGaussItem : public FormFactorItem { @@ -64,6 +72,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class BarLorentzItem : public FormFactorItem { @@ -76,6 +88,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class BoxItem : public FormFactorItem { @@ -88,6 +104,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class ConeItem : public FormFactorItem { @@ -100,6 +120,10 @@ public: FF_PROPERTY(alpha, Alpha) DoubleDescriptors geometryValues() const override { return {radius(), height(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_radius, &m_height, &m_alpha}; + } }; class Cone6Item : public FormFactorItem { @@ -112,6 +136,10 @@ public: FF_PROPERTY(alpha, Alpha) DoubleDescriptors geometryValues() const override { return {baseEdge(), height(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_baseEdge, &m_height, &m_alpha}; + } }; class CuboctahedronItem : public FormFactorItem { @@ -128,6 +156,10 @@ public: { return {length(), height(), heightRatio(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_height, &m_heightRatio, &m_alpha}; + } }; class CylinderItem : public FormFactorItem { @@ -139,6 +171,7 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {radius(), height()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_radius, &m_height}; } }; class DodecahedronItem : public FormFactorItem { @@ -149,6 +182,7 @@ public: FF_PROPERTY(edge, Edge) DoubleDescriptors geometryValues() const override { return {edge()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_edge}; } }; class EllipsoidalCylinderItem : public FormFactorItem { @@ -161,6 +195,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {radiusX(), radiusY(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_radiusX, &m_radiusY, &m_height}; + } }; class FullSphereItem : public FormFactorItem { @@ -171,6 +209,7 @@ public: FF_PROPERTY(radius, Radius) DoubleDescriptors geometryValues() const override { return {radius()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_radius}; } }; class FullSpheroidItem : public FormFactorItem { @@ -182,6 +221,7 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {radius(), height()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_radius, &m_height}; } }; class HemiEllipsoidItem : public FormFactorItem { @@ -194,6 +234,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {radiusX(), radiusY(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_radiusX, &m_radiusY, &m_height}; + } }; class IcosahedronItem : public FormFactorItem { @@ -204,6 +248,7 @@ public: FF_PROPERTY(edge, Edge) DoubleDescriptors geometryValues() const override { return {edge()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_edge}; } }; class Prism3Item : public FormFactorItem { @@ -215,6 +260,7 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {baseEdge(), height()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_baseEdge, &m_height}; } }; class Prism6Item : public FormFactorItem { @@ -226,6 +272,7 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {baseEdge(), height()}; } + QVector<DoubleProperty*> serializationProperties() override { return {&m_baseEdge, &m_height}; } }; class PyramidItem : public FormFactorItem { @@ -238,6 +285,10 @@ public: FF_PROPERTY(alpha, Alpha) DoubleDescriptors geometryValues() const override { return {baseEdge(), height(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_baseEdge, &m_height, &m_alpha}; + } }; class CosineRippleBoxItem : public FormFactorItem { @@ -250,6 +301,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class CosineRippleGaussItem : public FormFactorItem { @@ -262,6 +317,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class CosineRippleLorentzItem : public FormFactorItem { @@ -274,6 +333,10 @@ public: FF_PROPERTY(height, Height) DoubleDescriptors geometryValues() const override { return {length(), width(), height()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height}; + } }; class SawtoothRippleBoxItem : public FormFactorItem { @@ -290,6 +353,10 @@ public: { return {length(), width(), height(), asymmetry()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height, &m_asymmetry}; + } }; class SawtoothRippleGaussItem : public FormFactorItem { @@ -306,6 +373,10 @@ public: { return {length(), width(), height(), asymmetry()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height, &m_asymmetry}; + } }; class SawtoothRippleLorentzItem : public FormFactorItem { @@ -322,6 +393,10 @@ public: { return {length(), width(), height(), asymmetry()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_width, &m_height, &m_asymmetry}; + } }; class TetrahedronItem : public FormFactorItem { @@ -334,6 +409,10 @@ public: FF_PROPERTY(alpha, Alpha) DoubleDescriptors geometryValues() const override { return {baseEdge(), height(), alpha()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_baseEdge, &m_height, &m_alpha}; + } }; class TruncatedCubeItem : public FormFactorItem { @@ -345,6 +424,10 @@ public: FF_PROPERTY(removedLength, RemovedLength) DoubleDescriptors geometryValues() const override { return {length(), removedLength()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_length, &m_removedLength}; + } }; class TruncatedSphereItem : public FormFactorItem { @@ -357,6 +440,10 @@ public: FF_PROPERTY(removedTop, RemovedTop) DoubleDescriptors geometryValues() const override { return {radius(), height(), removedTop()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_radius, &m_height, &m_removedTop}; + } }; class TruncatedSpheroidItem : public FormFactorItem { @@ -373,6 +460,10 @@ public: { return {radius(), height(), heightFlattening(), removedTop()}; } + QVector<DoubleProperty*> serializationProperties() override + { + return {&m_radius, &m_height, &m_heightFlattening, &m_removedTop}; + } }; #endif // BORNAGAIN_GUI_MODEL_SAMPLE_FORMFACTORITEMS_H