You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmData/nmDataAttribute.h

134 lines
5.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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