| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef MATERIAL_MATERIALVALUE_H |
| | #define MATERIAL_MATERIALVALUE_H |
| |
|
| | #include <memory> |
| |
|
| | #include <QList> |
| | #include <QMetaType> |
| | #include <QVariant> |
| |
|
| | #include <Gui/MetaTypes.h> |
| |
|
| | #include <Mod/Material/MaterialGlobal.h> |
| |
|
| | namespace Materials |
| | { |
| |
|
| | class MaterialsExport MaterialValue: public Base::BaseClass |
| | { |
| | TYPESYSTEM_HEADER(); |
| |
|
| | public: |
| | enum ValueType |
| | { |
| | None = 0, |
| | String = 1, |
| | Boolean = 2, |
| | Integer = 3, |
| | Float = 4, |
| | Quantity = 5, |
| | Distribution = 6, |
| | List = 7, |
| | Array2D = 8, |
| | Array3D = 9, |
| | Color = 10, |
| | Image = 11, |
| | File = 12, |
| | URL = 13, |
| | MultiLineString = 14, |
| | FileList = 15, |
| | ImageList = 16, |
| | SVG |
| | }; |
| | MaterialValue(); |
| | explicit MaterialValue(const MaterialValue& other); |
| | explicit MaterialValue(ValueType type); |
| | virtual ~MaterialValue() = default; |
| |
|
| | MaterialValue& operator=(const MaterialValue& other); |
| | virtual bool operator==(const MaterialValue& other) const; |
| | bool operator!=(const MaterialValue& other) const |
| | { |
| | return !operator==(other); |
| | } |
| |
|
| | ValueType getType() const |
| | { |
| | return _valueType; |
| | } |
| |
|
| | QVariant getValue() const |
| | { |
| | return _value; |
| | } |
| | QList<QVariant> getList() |
| | { |
| | return _value.value<QList<QVariant>>(); |
| | } |
| | const QList<QVariant> getList() const |
| | { |
| | return _value.value<QList<QVariant>>(); |
| | } |
| | virtual bool isNull() const; |
| | virtual bool isEmpty() const; |
| |
|
| | virtual const QVariant getValueAt(const QVariant& value) const |
| | { |
| | Q_UNUSED(value); |
| | return _value; |
| | } |
| | void setValue(const QVariant& value) |
| | { |
| | _value = value; |
| | } |
| | void setList(const QList<QVariant>& value); |
| |
|
| | virtual QString getYAMLString() const; |
| | static QString escapeString(const QString& source); |
| | static ValueType mapType(const QString& stringType); |
| |
|
| | static const Base::QuantityFormat getQuantityFormat(); |
| |
|
| | |
| | static const int PRECISION = 6; |
| |
|
| | void validate(const MaterialValue& other) const; |
| |
|
| | protected: |
| | MaterialValue(ValueType type, ValueType inherited); |
| |
|
| | void setType(ValueType type) |
| | { |
| | _valueType = type; |
| | } |
| | void setInitialValue(ValueType inherited); |
| |
|
| | QString getYAMLStringImage() const; |
| | QString getYAMLStringList() const; |
| | QString getYAMLStringImageList() const; |
| | QString getYAMLStringMultiLine() const; |
| |
|
| | ValueType _valueType; |
| | QVariant _value; |
| |
|
| | private: |
| | static QMap<QString, ValueType> _typeMap; |
| | }; |
| |
|
| | class MaterialsExport Array2D: public MaterialValue |
| | { |
| | TYPESYSTEM_HEADER_WITH_OVERRIDE(); |
| |
|
| | public: |
| | Array2D(); |
| | Array2D(const Array2D& other); |
| | ~Array2D() override = default; |
| |
|
| | Array2D& operator=(const Array2D& other); |
| |
|
| | bool isNull() const override; |
| | bool isEmpty() const override; |
| |
|
| | const QList<std::shared_ptr<QList<QVariant>>>& getArray() const |
| | { |
| | return _rows; |
| | } |
| |
|
| | void validateRow(int row) const; |
| | void validateColumn(int column) const; |
| | void validate(const Array2D& other) const; |
| |
|
| | std::shared_ptr<QList<QVariant>> getRow(int row) const; |
| | std::shared_ptr<QList<QVariant>> getRow(int row); |
| | int rows() const |
| | { |
| | return _rows.size(); |
| | } |
| | int columns() const |
| | { |
| | return _columns; |
| | } |
| | void setColumns(int size) |
| | { |
| | _columns = size; |
| | } |
| | void addRow(const std::shared_ptr<QList<QVariant>>& row); |
| | void insertRow(int index, const std::shared_ptr<QList<QVariant>>& row); |
| | void deleteRow(int row); |
| | void setRows(int rowCount); |
| |
|
| | void setValue(int row, int column, const QVariant& value); |
| | QVariant getValue(int row, int column) const; |
| |
|
| | QString getYAMLString() const override; |
| |
|
| | protected: |
| | void deepCopy(const Array2D& other); |
| |
|
| | QList<std::shared_ptr<QList<QVariant>>> _rows; |
| | int _columns; |
| |
|
| | private: |
| | static void dumpRow(const std::shared_ptr<QList<QVariant>>& row); |
| | void dump() const; |
| | }; |
| |
|
| | class MaterialsExport Array3D: public MaterialValue |
| | { |
| | TYPESYSTEM_HEADER_WITH_OVERRIDE(); |
| |
|
| | public: |
| | Array3D(); |
| | Array3D(const Array3D& other); |
| | ~Array3D() override = default; |
| |
|
| | Array3D& operator=(const Array3D& other); |
| |
|
| | bool isNull() const override; |
| | bool isEmpty() const override; |
| |
|
| | const QList< |
| | std::pair<Base::Quantity, std::shared_ptr<QList<std::shared_ptr<QList<Base::Quantity>>>>>>& |
| | getArray() const |
| | { |
| | return _rowMap; |
| | } |
| |
|
| | void validateDepth(int level) const; |
| | void validateColumn(int column) const; |
| | void validateRow(int level, int row) const; |
| | void validate(const Array3D& other) const; |
| |
|
| | const std::shared_ptr<QList<std::shared_ptr<QList<Base::Quantity>>>>& |
| | getTable(const Base::Quantity& depth) const; |
| | const std::shared_ptr<QList<std::shared_ptr<QList<Base::Quantity>>>>& |
| | getTable(int depthIndex) const; |
| | std::shared_ptr<QList<Base::Quantity>> getRow(int depth, int row) const; |
| | std::shared_ptr<QList<Base::Quantity>> getRow(int row) const; |
| | std::shared_ptr<QList<Base::Quantity>> getRow(int depth, int row); |
| | std::shared_ptr<QList<Base::Quantity>> getRow(int row); |
| | void addRow(int depth, const std::shared_ptr<QList<Base::Quantity>>& row); |
| | void addRow(const std::shared_ptr<QList<Base::Quantity>>& row); |
| | int addDepth(int depth, const Base::Quantity& value); |
| | int addDepth(const Base::Quantity& value); |
| | void deleteDepth(int depth); |
| | void insertRow(int depth, int row, const std::shared_ptr<QList<Base::Quantity>>& rowData); |
| | void insertRow(int row, const std::shared_ptr<QList<Base::Quantity>>& rowData); |
| | void deleteRow(int depth, int row); |
| | void deleteRow(int row); |
| | void deleteRows(int depth); |
| | void deleteRows(); |
| | int depth() const |
| | { |
| | return _rowMap.size(); |
| | } |
| | int rows(int depth) const; |
| | int rows() const |
| | { |
| | return rows(_currentDepth); |
| | } |
| | int columns() const |
| | { |
| | return _columns; |
| | } |
| | void setColumns(int size) |
| | { |
| | _columns = size; |
| | } |
| | void setDepth(int depthCount); |
| | void setRows(int depth, int rowCount); |
| |
|
| | void setValue(int depth, int row, int column, const Base::Quantity& value); |
| | void setValue(int row, int column, const Base::Quantity& value); |
| | void setDepthValue(int depth, const Base::Quantity& value); |
| | void setDepthValue(const Base::Quantity& value); |
| | Base::Quantity getValue(int depth, int row, int column) const; |
| | Base::Quantity getValue(int row, int column) const; |
| | Base::Quantity getDepthValue(int depth) const; |
| |
|
| | int currentDepth() const; |
| | void setCurrentDepth(int depth); |
| |
|
| | QString getYAMLString() const override; |
| |
|
| | protected: |
| | void deepCopy(const Array3D& other); |
| |
|
| | QList<std::pair<Base::Quantity, std::shared_ptr<QList<std::shared_ptr<QList<Base::Quantity>>>>>> |
| | _rowMap; |
| | int _currentDepth; |
| | int _columns; |
| | }; |
| |
|
| | } |
| |
|
| | Q_DECLARE_METATYPE(Materials::MaterialValue) |
| | Q_DECLARE_METATYPE(std::shared_ptr<Materials::Array2D>) |
| | Q_DECLARE_METATYPE(std::shared_ptr<Materials::Array3D>) |
| |
|
| | #endif |
| |
|