You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.6 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include "afxcoll.h"
#include <vector>
#include <string>
#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<std::vector<CPoint2D>> CalculatePDP(
const std::vector<CPoint2D>& wells,
double width, double height, double angle_deg, double gap,
const std::vector<CPoint2D>& boundaryPoints,
bool useClip);
/**
* @brief 计算 PDNP 和 PUD 储量面积线
* @param wells 井位点坐标集合
* @param width 单井控制单元的宽度
* @param height 单井控制单元的高度
* @param angle_deg 控制单元的旋转角度
* @param gap 去缝合并参数
* &param pud_mult PUD外扩
* @param boundaryPoints 用于裁剪的外部约束边界点集合
* @param useClip 是否执行边界裁剪逻辑
* @param pdnpLines pdnp面积
* @param pudLines pud面积
*/
void CalculateExpansion(
const std::vector<CPoint2D>& wells,
double width, double height, double angle_deg, double gap, double pud_mult,
const std::vector<CPoint2D>& boundaryPoints,
bool useClip,
std::vector<std::vector<CPoint2D>>& pdnpLines,
std::vector<std::vector<CPoint2D>>& 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<CPoint2D>& wells, double width, double height, double angle_deg, double gap,
bool useClip, const std::vector<CPoint2D>& boundaryPoints,
std::vector<std::vector<CPoint2D>>& pdnpLines);
/**
* @brief 计算 PUD 储量面积线
* @param wells 井位点坐标集合
* @param width 单井控制单元的宽度
* @param height 单井控制单元的高度
* @param angle_deg 控制单元的旋转角度
* @param gap 去缝合并参数
* &param pud_mult PUD外扩
* @param useClip 是否执行边界裁剪逻辑
* @param boundaryPoints 用于裁剪的外部约束边界点集合
* @param pudLines pud面积
*/
void CalculatePUD(
const std::vector<CPoint2D>& wells, double width, double height, double angle_deg, double gap, double pud_mult,
bool useClip, const std::vector<CPoint2D>& boundaryPoints,
std::vector<std::vector<CPoint2D>>& pudLines);
protected:
void Init();
void InternalClipAndExport(
GEOSGeometry* geom,
const std::vector<CPoint2D>& boundaryPoints,
bool useClip,
std::vector<std::vector<CPoint2D>>& outLines);
private:
};
}