#pragma once #include "nmDataHorizontalWell.h" #include "nmDataAttribute.h" class nmDataReservoir; class NM_DATA_EXPORT nmDataHorizontalFracturedWell : public nmDataHorizontalWell { Q_OBJECT public: nmDataHorizontalFracturedWell(); nmDataHorizontalFracturedWell(const nmDataHorizontalFracturedWell& other); // 拷贝构造函数声明 nmDataHorizontalFracturedWell& operator=(const nmDataHorizontalFracturedWell& other); // 赋值运算符声明 // 创建当前对象的深拷贝 nmDataWellBase* clone() const override; // 实现 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; // 连接属性值变化信号 void connectAttributeSignals() override; // 用于获取某个射孔的允许MD范围 void getPerforationAllowedMdRange(nmDataPerforation* pPerfToValidate, double& dUpperAllowedMd, double& dLowerAllowedMd) override; private slots: void onFractureAttributeChanged(); // 处理裂缝属性变化,更新裂缝点 public: void setModelingType(const nmDataAttribute& attr); void setFractureModel(const nmDataAttribute& attr); void setNumberOfFractures(const nmDataAttribute& attr); void setFractureHalfLength(const nmDataAttribute& attr); void setFractureHeight(const nmDataAttribute& attr); void setFractureMidPointHeight(const nmDataAttribute& attr); void setWidth(const nmDataAttribute& attr); void setFractureAngle(const nmDataAttribute& attr); void setStimulatedZonesAroundFracture(const nmDataAttribute& attr); void setStimulationRadius(const nmDataAttribute& attr); void setPermeabilityMultiplier(const nmDataAttribute& attr); void setPorosityMultiplier(const nmDataAttribute& attr); // 设置当前多段压裂水平井的裂缝信息 void setFracs(); nmDataAttribute& getModelingType(); nmDataAttribute& getFractureModel(); nmDataAttribute& getNumberOfFractures(); nmDataAttribute& getFractureHalfLength(); nmDataAttribute& getFractureHeight(); nmDataAttribute& getFractureMidPointHeight(); nmDataAttribute& getWidth(); nmDataAttribute& getFractureAngle(); nmDataAttribute& getStimulatedZonesAroundFracture(); nmDataAttribute& getStimulationRadius(); nmDataAttribute& getPermeabilityMultiplier(); nmDataAttribute& getPorosityMultiplier(); void setDfc(const nmDataAttribute& attr); nmDataAttribute& getDfc(); QVector>& getFracs(); // 获取裂缝的测深列表 (用于纵截面视图的X坐标) QVector getFractureMds() const; private: nmDataAttribute m_modelingType; // 建模类型 nmDataAttribute m_fractureModel; // 裂缝模型 nmDataAttribute m_dFc; // 导流能力 nmDataAttribute m_numberOfFractures; // 裂缝条数 nmDataAttribute m_fractureHalfLength; // 裂缝半长 nmDataAttribute m_fractureHeight; // 裂缝高度 nmDataAttribute m_fractureMidPointHeight; // 裂缝中点高度 nmDataAttribute m_width; // 裂缝宽度 nmDataAttribute m_fractureAngle; // 裂缝角度 nmDataAttribute m_stimulatedZonesAroundFracture; //裂缝周围改造区 nmDataAttribute m_stimulationRadius; // 改造半径 nmDataAttribute m_permeabilityMultiplier; // 渗透率乘数 nmDataAttribute m_porosityMultiplier; // 孔隙度乘数 // 所有裂缝,每个裂缝有1个起始点和终止点 QVector> m_vecFracs; QVector m_fractureMds; // 用于纵截面视图的裂缝测深MD nmDataReservoir* m_pReservoir; };