#include "nmDataRegionMark.h" #include "ZxSerializer.h" nmDataRegionMark::nmDataRegionMark() : m_sRegionMarkName() , m_bSelectRegion(false) , m_ptPos() , m_reservoirType() , m_comKr() , m_comW() , m_netToGross() , m_clrBackground() , m_bPlotVisible(true) { m_reservoirType = nmDataAttribute("Reservoir type", "Homogeneous", "", UNIT_TYPE_DIMENSIONLESS, QStringList() << "Homogeneous" << "Dual porosity pseudo steady state", QStringList()); m_comKr = nmDataAttribute("ComKr", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_comW = nmDataAttribute("ComW", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); m_netToGross = nmDataAttribute("NetToGross", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList()); // 图元可见性,默认为true } nmDataRegionMark::nmDataRegionMark(const nmDataRegionMark& other) { *this = other; // 使用赋值运算符实现 } nmDataRegionMark& nmDataRegionMark::operator=(const nmDataRegionMark& other) { if (this != &other) { // 拷贝基本类型和Qt对象(自动深拷贝) m_sRegionMarkName = other.m_sRegionMarkName; m_bSelectRegion = other.m_bSelectRegion; m_ptPos = other.m_ptPos; m_reservoirType = other.m_reservoirType; m_comKr = other.m_comKr; m_comW = other.m_comW; m_netToGross = other.m_netToGross; m_clrBackground = other.m_clrBackground; m_bPlotVisible = other.m_bPlotVisible; } return *this; } nmDataRegionMark::~nmDataRegionMark(){ } // 序列化 nmDataRegionMark 为 RapidJSON Value rapidjson::Value nmDataRegionMark::ToJsonValue(rapidjson::Document::AllocatorType& allocator) const { // 创建一个 RapidJSON 对象类型的值 rapidjson::Value regionMarkObject(rapidjson::kObjectType); // 序列化名称 // 将 QString 转换为 UTF-8 编码的 C 字符串,并添加到 JSON 中 regionMarkObject.AddMember("RegionName", rapidjson::Value(m_sRegionMarkName.toStdString().c_str(), allocator).Move(), allocator); // 序列化 nmDataAttribute 类型的成员 // 调用 nmDataAttribute 自身的 ToJsonValue 方法进行递归序列化 regionMarkObject.AddMember("ReservoirType", m_reservoirType.ToJsonValue(allocator), allocator); regionMarkObject.AddMember("ComKr", m_comKr.ToJsonValue(allocator), allocator); regionMarkObject.AddMember("ComW", m_comW.ToJsonValue(allocator), allocator); regionMarkObject.AddMember("NetToGross", m_netToGross.ToJsonValue(allocator), allocator); // 序列化图元可见性 (m_bPlotVisible) regionMarkObject.AddMember("PlotVisible", m_bPlotVisible, allocator); return regionMarkObject; // 返回序列化后的 RapidJSON Value } // 从 RapidJSON Value 反序列化数据到 nmDataRegionMark void nmDataRegionMark::FromJsonValue(const rapidjson::Value& jsonValue) { // 反序列化名称 if (jsonValue.HasMember("RegionMarkName") && jsonValue["RegionMarkName"].IsString()) { m_sRegionMarkName = QString::fromUtf8(jsonValue["RegionMarkName"].GetString()); } // 反序列化 nmDataAttribute 类型的成员 // 调用 nmDataAttribute 自身的 FromJsonValue 方法进行递归反序列化 if (jsonValue.HasMember("ReservoirType") && jsonValue["ReservoirType"].IsObject()) { m_reservoirType.FromJsonValue(jsonValue["ReservoirType"]); } if (jsonValue.HasMember("ComKr") && jsonValue["ComKr"].IsObject()) { m_comKr.FromJsonValue(jsonValue["ComKr"]); } if (jsonValue.HasMember("ComW") && jsonValue["ComW"].IsObject()) { m_comW.FromJsonValue(jsonValue["ComW"]); } if (jsonValue.HasMember("NetToGross") && jsonValue["NetToGross"].IsObject()) { m_netToGross.FromJsonValue(jsonValue["NetToGross"]); } // 反序列化图元可见性 (m_bPlotVisible) if (jsonValue.HasMember("PlotVisible") && jsonValue["PlotVisible"].IsBool()) { m_bPlotVisible = jsonValue["PlotVisible"].GetBool(); } } QString nmDataRegionMark::getRegionMarkName() const { return m_sRegionMarkName; } void nmDataRegionMark::setRegionMarkName(QString sRegionMarkName) { m_sRegionMarkName = sRegionMarkName; } QPointF nmDataRegionMark::getPtPos() const { return m_ptPos; } void nmDataRegionMark::setPtPos(const QPointF& ptPos) { m_ptPos = ptPos; } // Getter and Setter for m_reservoirType nmDataAttribute& nmDataRegionMark::getReservoirType() { return m_reservoirType; } void nmDataRegionMark::setReservoirType(const nmDataAttribute& reservoirType) { m_reservoirType = reservoirType; } bool nmDataRegionMark::isSelectRegion() const { return m_bSelectRegion; } void nmDataRegionMark::setSelectRegion(bool bSelectRegion) { m_bSelectRegion = bSelectRegion; } // Getter and Setter for m_comKr nmDataAttribute& nmDataRegionMark::getComKr() { return m_comKr; } void nmDataRegionMark::setComKr(const nmDataAttribute& comKr) { m_comKr = comKr; } // Getter and Setter for m_comW nmDataAttribute& nmDataRegionMark::getComW() { return m_comW; } void nmDataRegionMark::setComW(const nmDataAttribute& comW) { m_comW = comW; } // Getter and Setter for m_netToGross nmDataAttribute& nmDataRegionMark::getNetToGross() { return m_netToGross; } void nmDataRegionMark::setNetToGross(const nmDataAttribute& netToGross) { m_netToGross = netToGross; } QColor nmDataRegionMark::getBackgroundColor() const { return m_clrBackground; } void nmDataRegionMark::setBackgroundColor(const QColor& clrBackground) { m_clrBackground = clrBackground; } bool nmDataRegionMark::getPlotVisible() const{ return m_bPlotVisible; } void nmDataRegionMark::setPlotVisible(const bool newState) { m_bPlotVisible = newState; }