#ifndef NMDATAPERFORATION_H #define NMDATAPERFORATION_H #include "nmData_global.h" #include "nmDataBase.h" #include "nmDataAttribute.h" #include #include #include // 流动段数据结构 struct NM_DATA_EXPORT FlowSegmentData { nmDataAttribute startTime; // 开始时间 nmDataAttribute skinValue; // 表皮系数 nmDataAttribute segmentStart; // 流动段开始时间 nmDataAttribute segmentEnd; // 流动段结束时间 nmDataAttribute dSdQ; // dS/dq值(流量段相关参数) bool isSelected; // 是否选中状态 FlowSegmentData(); FlowSegmentData(const nmDataAttribute& start, const nmDataAttribute& skin, const nmDataAttribute& segStart, const nmDataAttribute& segEnd, bool selected = false); FlowSegmentData(const nmDataAttribute& start, const nmDataAttribute& skin, const nmDataAttribute& segStart, const nmDataAttribute& segEnd, const nmDataAttribute& dSdq, bool selected = false); }; // 射孔段 class NM_DATA_EXPORT nmDataPerforation : public nmDataBase { Q_OBJECT public: nmDataPerforation(); nmDataPerforation(const nmDataPerforation& other); // 拷贝构造函数 nmDataPerforation& operator=(const nmDataPerforation& other); // 赋值运算符 ~nmDataPerforation(); // 实现 nmDataBase 的抽象方法:将当前 C++ 对象序列化为 RapidJSON Value virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override; // 实现 nmDataBase 的抽象方法:从 RapidJSON Value 反序列化数据到当前 C++ 对象 virtual void FromJsonValue(const rapidjson::Value& jsonValue) override; public: // Getter and Setter for m_name (射孔名称) nmDataAttribute& getName(); void setName(const nmDataAttribute& name); // Getter and Setter for m_mdStart (测深起点) nmDataAttribute& getMdStart(); void setMdStart(const nmDataAttribute& mdStart); // Getter and Setter for m_mdEnd (测深终点) nmDataAttribute& getMdEnd(); void setMdEnd(const nmDataAttribute& mdEnd); // Getter and Setter for m_skin (表皮系数) nmDataAttribute& getSkin(); void setSkin(const nmDataAttribute& skin); // 表皮系数与流量关系 nmDataAttribute& getSkin0(); void setSkin0(const nmDataAttribute& skin0); nmDataAttribute& getdSkindq(); void setdSkindq(const nmDataAttribute& dSkindq); // 线条位置相关 nmDataAttribute& getLinePoint1X(); nmDataAttribute& getLinePoint1Y(); nmDataAttribute& getLinePoint2X(); nmDataAttribute& getLinePoint2Y(); void setLinePoint1X(const nmDataAttribute& value); void setLinePoint1Y(const nmDataAttribute& value); void setLinePoint2X(const nmDataAttribute& value); void setLinePoint2Y(const nmDataAttribute& value); void setLinePositions(double x1, double y1, double x2, double y2); void getLinePositions(double& x1, double& y1, double& x2, double& y2) const; // 流动段管理 const QVector& getFlowSegments() const; void setFlowSegments(const QVector& segments); int getSelectedSegmentIndex() const; void setSelectedSegmentIndex(int index); bool isSnapToRateChangesEnabled() const; void setSnapToRateChangesEnabled(bool enabled); bool isRateDependentEnabled() const; void setRateDependentEnabled(bool enabled); bool isShowDatesEnabled() const; void setShowDatesEnabled(bool enabled); QDateTime getStartDateTime() const; void setStartDateTime(const QDateTime& dateTime); // 射孔封堵管理 QList getTimeValues() const; void setTimeValues(const QList& timeValues); QStringList getTimeStates() const; void setTimeStates(const QStringList& timeStates); QDateTime getBaseTime() const; void setBaseTime(const QDateTime& baseTime); // 射孔段级别的流动段查询 int findFlowSegmentByTime(double timePoint) const; private: nmDataAttribute m_name; // 射孔名称 nmDataAttribute m_mdStart; // 测深起点 nmDataAttribute m_mdEnd; // 测深终点 nmDataAttribute m_skin; // 表皮系数 // 表皮系数与流量关系数据 nmDataAttribute m_skin0; // 基础表皮系数 nmDataAttribute m_dSkindq; // dSkin/dq值 // 线条位置数据 nmDataAttribute m_linePoint1X, m_linePoint1Y; // 线条第一点 nmDataAttribute m_linePoint2X, m_linePoint2Y; // 线条第二点 // 流动段数据 QVector m_flowSegments; // 流动段数据集合 int m_selectedSegmentIndex; // 当前选中的流动段索引 bool m_isSnapToRateChanges; // 对齐到流动段 bool m_isRateDependentEnabled; // 是否启用流量依赖选项 bool m_showDatesEnabled; // 是否显示日期 QDateTime m_startDateTime; // 开始时间 // 射孔封堵数据 QList m_timeValues; // 时间值数组(以小时为基准单位) QStringList m_timeStates; // 对应的状态数组 QDateTime m_baseTime; // 基准时间 }; #endif // NMDATAPERFORATION_H