#ifndef NMDATASENSITIVE_H #define NMDATASENSITIVE_H #include #include #include #include #include #include #include "nmData_global.h" #include "nmDataBase.h" #include "nmDataAttribute.h" #include class NM_DATA_EXPORT nmDataSensitive : public nmDataBase { Q_OBJECT public: // 顶部 Calculation type enum CalculationType { CALC_DETERMINISTIC = 0, CALC_DETERMINISTIC_MULTIVARIATE = 1 }; struct NM_DATA_EXPORT VariableSampling { // 变量所属分组 QString m_varGroup; // 变量名称 QString m_varName; // 是否勾选 bool m_enabled; // Mode 枚举 enum Mode { MODE_AUTOMATIC = 0, MODE_MANUAL = 1 }; // Mode 存储字段 Mode m_mode; // Log? 勾选 bool m_log; // Number int m_number; // 数据参数 nmDataAttribute m_modelValue; // Model value nmDataAttribute m_minValue; // Minimum nmDataAttribute m_maxValue; // Maximum // 表格中的数值列表 QVector m_values; VariableSampling(); // JSON 序列化 / 反序列化 rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const; void FromJsonValue(const rapidjson::Value& jsonValue); // varGroup QString getVarGroup() const; void setVarGroup(const QString& group); // varName QString getVarName() const; void setVarName(const QString& name); // enabled bool getEnabled() const; void setEnabled(bool e); // mode Mode getMode() const; void setMode(Mode m); // log bool getLog() const; void setLog(bool l); // number int getNumber() const; void setNumber(int n); // modelValue nmDataAttribute& getModelValue(); void setModelValue(const nmDataAttribute& attr); // minValue nmDataAttribute& getMinValue(); void setMinValue(const nmDataAttribute& attr); // maxValue nmDataAttribute& getMaxValue(); void setMaxValue(const nmDataAttribute& attr); // values QVector& getValues(); void setValues(const QVector& vals); // 自动采样始终保留原始精度;手动模式直接返回用户指定值。 QVector samplingValues() const; }; // 运行结果属于分析数据,求解器与界面共用同一结构,避免重复复制整批曲线。 struct RunResult { RunResult() : m_nRunIndex(0), m_bSucceeded(false), m_bCancelled(false), m_bVisible(true) {} quint64 m_nRunIndex; QVector m_vecParameters; QVector > m_vecPressure; QVector > m_vecLogLog; QVector > m_vecSemiLog; bool m_bSucceeded; bool m_bCancelled; bool m_bVisible; QString m_sFailureReason; }; struct NM_DATA_EXPORT BatchResult { BatchResult() : m_calcType(CALC_DETERMINISTIC), m_bCompleted(false), m_bStopped(false) {} CalculationType m_calcType; QList m_variables; // 求解时冻结的配置,独立于之后的参数编辑。 QString m_sWellCode; QString m_sWellName; QString m_sAxisXName; QString m_sAxisXUnit; QString m_sAxisYName; QString m_sAxisYUnit; QVector > m_vecHistoryLogLog; QVector > m_vecBaseLogLog; // 批次启动时原模型已有的数值解。 std::vector m_runs; bool m_bCompleted; bool m_bStopped; QString m_sFailureReason; rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const; void FromJsonValue(const rapidjson::Value& value); }; public: nmDataSensitive(); ~nmDataSensitive(); nmDataSensitive(const nmDataSensitive& other); nmDataSensitive& operator=(const nmDataSensitive& other); // === 实现 nmDataBase 的抽象方法 === virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override; virtual void FromJsonValue(const rapidjson::Value& jsonValue) override; // === Calculation type === CalculationType getCalculationType() const; void setCalculationType(CalculationType type); // === 总模型数 === quint64 getTotalModelCount() const; void setTotalModelCount(quint64 count); quint64 calculateModelCount(bool* overflow = nullptr) const; // 返回与变量列表对应的基准单位值,未改变的参数保持模型值。 bool getRunValues(quint64 runIndex, QVector& values) const; bool usesBaseUnits() const; void setUsesBaseUnits(bool enabled); // 后台运行时由任务独占,线程结束后交给分析数据管理并由界面修改可见性。 QSharedPointer getResults() const; void setResults(const QSharedPointer& results); // === 变量列表 === QList& getVariables(); const QList& getVariables() const; void setVariables(const QList& vars); int getVariableCount() const; VariableSampling& getVariable(int index); private: CalculationType m_calcType; quint64 m_totalModelCount; bool m_usesBaseUnits; QList m_variables; QSharedPointer m_results; }; #endif // NMDATASENSITIVE_H