#pragma once #include "afxcoll.h" #include #include #include "DrawOperator/Xy.h" #include "geos_c.h" namespace NItem { class GenerateSECReserve { public: GenerateSECReserve(); ~GenerateSECReserve(); /** * @brief 计算 PDP(已开发生产)储量面积边界线 * @param wells 井位点坐标集合 * @param width 单井控制单元的宽度 * @param height 单井控制单元的高度 * @param angle_deg 控制单元的旋转角度 * @param gap 去缝合并参数 * @param boundaryPoints 用于裁剪的外部约束边界点集合 * @param useClip 是否执行边界裁剪逻辑 * @return PDP面积 */ std::vector> CalculatePDP( const std::vector& wells, double width, double height, double angle_deg, double gap, const std::vector& boundaryPoints, bool useClip); /** * @brief 计算 PDNP 和 PUD 储量面积线 * @param wells 井位点坐标集合 * @param width 单井控制单元的宽度 * @param height 单井控制单元的高度 * @param angle_deg 控制单元的旋转角度 * @param gap 去缝合并参数 * ¶m pud_mult PUD外扩 * @param boundaryPoints 用于裁剪的外部约束边界点集合 * @param useClip 是否执行边界裁剪逻辑 * @param pdnpLines pdnp面积 * @param pudLines pud面积 */ void CalculateExpansion( const std::vector& wells, double width, double height, double angle_deg, double gap, double pud_mult, const std::vector& boundaryPoints, bool useClip, std::vector>& pdnpLines, std::vector>& pudLines); /** * @brief 计算 PDNP 储量面积线 * @param wells 井位点坐标集合 * @param width 单井控制单元的宽度 * @param height 单井控制单元的高度 * @param angle_deg 控制单元的旋转角度 * @param gap 去缝合并参数 * @param useClip 是否执行边界裁剪逻辑 * @param boundaryPoints 用于裁剪的外部约束边界点集合 * @param pdnpLines pdnp面积 */ void CalculatePDNP( const std::vector& wells, double width, double height, double angle_deg, double gap, bool useClip, const std::vector& boundaryPoints, std::vector>& pdnpLines); /** * @brief 计算 PUD 储量面积线 * @param wells 井位点坐标集合 * @param width 单井控制单元的宽度 * @param height 单井控制单元的高度 * @param angle_deg 控制单元的旋转角度 * @param gap 去缝合并参数 * ¶m pud_mult PUD外扩 * @param useClip 是否执行边界裁剪逻辑 * @param boundaryPoints 用于裁剪的外部约束边界点集合 * @param pudLines pud面积 */ void CalculatePUD( const std::vector& wells, double width, double height, double angle_deg, double gap, double pud_mult, bool useClip, const std::vector& boundaryPoints, std::vector>& pudLines); protected: void Init(); void InternalClipAndExport( GEOSGeometry* geom, const std::vector& boundaryPoints, bool useClip, std::vector>& outLines); private: }; }