|
|
|
|
|
#ifndef NMDATAATTRIBUTE_H
|
|
|
|
|
|
#define NMDATAATTRIBUTE_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <QString>
|
|
|
|
|
|
#include <QVariant>
|
|
|
|
|
|
#include <QStringList>
|
|
|
|
|
|
#include <QMap>
|
|
|
|
|
|
#include "nmData_global.h"
|
|
|
|
|
|
#include "nmDataBase.h"
|
|
|
|
|
|
//#include "rapidjson/document.h"
|
|
|
|
|
|
|
|
|
|
|
|
enum UnitType {
|
|
|
|
|
|
UNIT_TYPE_UNKNOWN = 0,
|
|
|
|
|
|
UNIT_TYPE_DIMENSIONLESS, // 无量纲:储能比、泊松比、饱和度等
|
|
|
|
|
|
UNIT_TYPE_LENGTH, // 长度:m, cm, mm, in, ft, km等
|
|
|
|
|
|
UNIT_TYPE_CONDUCTIVITY, // 导流能力:md.m, md.ft, m^3
|
|
|
|
|
|
UNIT_TYPE_PRESSURE, // 压力:MPa, psia, Pa, kPa, bar等
|
|
|
|
|
|
UNIT_TYPE_PERMEABILITY, // 渗透率:md, Darcy, m^2, cm^2等
|
|
|
|
|
|
UNIT_TYPE_ANGLE, // 角度:o (degree), radian
|
|
|
|
|
|
UNIT_TYPE_FLOW_RATE_RECIPROCAL, // 流量倒数:1/B/D, 1/m^3/D等
|
|
|
|
|
|
UNIT_TYPE_COMPRESSIBILITY, // 压缩系数:m^3/MPa, bbl/psi等
|
|
|
|
|
|
UNIT_TYPE_TIME, // 时间:ms, sec, min, hr, day等
|
|
|
|
|
|
UNIT_TYPE_FLOW_RATE, // 流量: m^3/hr等
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class NM_DATA_EXPORT nmDataAttribute : public nmDataBase
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
|
|
|
|
// 构造函数
|
|
|
|
|
|
nmDataAttribute();
|
|
|
|
|
|
nmDataAttribute(const QString& name, QVariant value, const QString& unit);
|
|
|
|
|
|
nmDataAttribute(const QString& name, QVariant value, const QString& unit, UnitType unitType,
|
|
|
|
|
|
const QStringList& valueSelections, const QStringList& unitSelections);
|
|
|
|
|
|
~nmDataAttribute();
|
|
|
|
|
|
|
|
|
|
|
|
// 拷贝构造函数
|
|
|
|
|
|
nmDataAttribute(const nmDataAttribute& other);
|
|
|
|
|
|
|
|
|
|
|
|
// 赋值运算符
|
|
|
|
|
|
nmDataAttribute& operator=(const nmDataAttribute& other);
|
|
|
|
|
|
|
|
|
|
|
|
// 实现 nmDataBase 的抽象方法,将 nmDataAttribute 序列化为 JSON 对象 Value
|
|
|
|
|
|
virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override;
|
|
|
|
|
|
|
|
|
|
|
|
// 实现 nmDataBase 的抽象方法,从 JSON 对象 Value 反序列化数据到 nmDataAttribute
|
|
|
|
|
|
virtual void FromJsonValue(const rapidjson::Value& jsonValue) override;
|
|
|
|
|
|
|
|
|
|
|
|
signals:
|
|
|
|
|
|
// 当属性值发生改变时发出的信号
|
|
|
|
|
|
void sigValueChanged();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
// 获取属性名称
|
|
|
|
|
|
QString getName() const;
|
|
|
|
|
|
// 设置属性名称
|
|
|
|
|
|
void setName(const QString& name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取当前显示值(会根据当前单位转换)
|
|
|
|
|
|
QVariant getValue() const;
|
|
|
|
|
|
// 设置值(以基准单位存储)
|
|
|
|
|
|
void setValue(const QVariant& value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取当前显示单位
|
|
|
|
|
|
QString getUnit() const;
|
|
|
|
|
|
// 设置单位
|
|
|
|
|
|
void setUnit(const QString& unit);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 设置值范围
|
|
|
|
|
|
void setValueRange(const QVariant& min, const QVariant& max);
|
|
|
|
|
|
// 检查值是否有效
|
|
|
|
|
|
bool isValueValid() const;
|
|
|
|
|
|
// 获取最小值
|
|
|
|
|
|
QVariant getMinValue() const;
|
|
|
|
|
|
// 获取最大值
|
|
|
|
|
|
QVariant getMaxValue() const;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取可选值列表
|
|
|
|
|
|
QStringList getListValueSelections() const;
|
|
|
|
|
|
// 设置可选值列表
|
|
|
|
|
|
void setListValueSelections(const QStringList &listSelections);
|
|
|
|
|
|
// 获取可选单位列表
|
|
|
|
|
|
QStringList getListUnitSelections() const;
|
|
|
|
|
|
// 设置可选单位列表
|
|
|
|
|
|
void setListUnitSelections(const QStringList &listUnitSelections);
|
|
|
|
|
|
|
|
|
|
|
|
// 获取单位类型
|
|
|
|
|
|
UnitType getAttributeUnitType() const;
|
|
|
|
|
|
void setAttributeUnitType(UnitType type);
|
|
|
|
|
|
|
|
|
|
|
|
// 获取显示文本
|
|
|
|
|
|
QString getDisplayText() const;
|
|
|
|
|
|
|
|
|
|
|
|
/// 按当前属性的 unitType 做值转换,不修改成员,只返回转换结果
|
|
|
|
|
|
double convertValueByUnitType(double value, const QString& fromUnit, const QString& toUnit) const;
|
|
|
|
|
|
// 自动识别单位类型
|
|
|
|
|
|
static UnitType detectUnitType(const QString& unit);
|
|
|
|
|
|
// 单位转换
|
|
|
|
|
|
static double convertValue(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
|
|
|
|
|
|
// 各种单位类型的转换实现
|
|
|
|
|
|
static double convertLengthUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertPressureUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertPermeabilityUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertConductivityUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertAngleUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertTimeUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertCompressibilityUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertFlowRateReciprocalUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
static double convertFlowRateUnit(double value, const QString& fromUnit, const QString& toUnit);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
QString m_name; // 属性名称
|
|
|
|
|
|
QVariant m_value; // 当前值(以基准单位存储)
|
|
|
|
|
|
QString m_unit; // 当前显示单位
|
|
|
|
|
|
|
|
|
|
|
|
QVariant m_minValue; // 最小值
|
|
|
|
|
|
QVariant m_maxValue; // 最大值
|
|
|
|
|
|
|
|
|
|
|
|
QStringList m_listValueSelections; // 可选值列表
|
|
|
|
|
|
QStringList m_listUnitSelections; // 可选单位列表
|
|
|
|
|
|
|
|
|
|
|
|
UnitType m_unitType; // 单位类型
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Q_DECLARE_METATYPE(nmDataAttribute*)
|
|
|
|
|
|
|
|
|
|
|
|
#endif // NMDATAATTRIBUTE_H
|