#pragma once #include "nmSubWxs_global.h" #include "nmDataReservoir.h" #include "nmDataVerticalWell.h" #include "nmDataVerticalFracturedWell.h" #include "nmDataHorizontalFracturedWell.h" #include "nmDataRegionMark.h" #include "nmDataFault.h" #include "nmDataFracture.h" #include "nmDataRegion.h" class nmDataAnalyzeManager; /** * @brief 储层参数编辑快照。 * @note 快照保存一次编辑会话所需的全部数据副本,不包含普通水平井。 */ struct NM_SUB_WXS_EXPORT nmReservoirPropertiesSnapshot { /** @brief 构造空快照。 */ nmReservoirPropertiesSnapshot(); int m_nSolverModelType; ///< 打开对话框时的求解器模型类型数值。 nmDataReservoir m_oReservoir; ///< 储层参数副本。 QVector m_vecVerticalWells; ///< 直井参数副本。 QVector m_vecVerticalFracturedWells; ///< 垂直压裂井参数副本。 QVector m_vecHorizontalFracturedWells; ///< 水平压裂井参数副本。 QVector m_vecRegionMarks; ///< 区域标记参数副本。 QVector m_vecFaults; ///< 断层参数副本。 QVector m_vecFractures; ///< 裂缝参数副本,包含DFN以保持提交索引稳定。 QVector m_vecRegions; ///< 复合区参数副本。 }; /** * @brief 储层参数数据源接口。 * @note 对话框只依赖此接口,不直接访问全局数据管理器。 */ class NM_SUB_WXS_EXPORT nmIReservoirPropertiesDataSource { public: /** @brief 析构数据源接口。 */ virtual ~nmIReservoirPropertiesDataSource(); /** * @brief 读取当前分析窗口的数据快照。 * @param oSnapshot 输出的工作快照。 * @param sError 输出的错误信息。 * @return 读取成功返回true。 */ virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, QString& sError) const = 0; /** * @brief 一次性提交编辑后的工作快照。 * @param oSnapshot 待提交的工作快照。 * @param bGeometryChanged 井坐标或几何参数是否发生变化。 * @param sError 输出的错误信息。 * @return 提交成功返回true。 */ virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, bool bGeometryChanged, QString& sError) = 0; }; /** * @brief 基于nmDataAnalyzeManager的数据源适配器。 */ class NM_SUB_WXS_EXPORT nmAnalyzeManagerReservoirDataSource : public nmIReservoirPropertiesDataSource { public: /** * @brief 构造数据源适配器。 * @param pDataManager 当前分析窗口的数据管理器,不转移所有权。 */ explicit nmAnalyzeManagerReservoirDataSource(nmDataAnalyzeManager* pDataManager); /** @brief 析构数据源适配器。 */ virtual ~nmAnalyzeManagerReservoirDataSource(); virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot, QString& sError) const; virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot, bool bGeometryChanged, QString& sError); private: nmDataAnalyzeManager* m_pDataManager; ///< 当前分析窗口的数据管理器,不拥有所有权。 };