#pragma once #include "dllExport.h" #include "XJPoint2D.h" #include "XJPoint3D.h" #include "Isopleth.h" #include "ControlPoint2d.h" #include #include #include #include #include "RBFInterpolator.hpp" #include #include "kdtree.hpp" typedef void(*ProgressCallback)(int percent, void* userData); enum class InterpolationMethod { Default = 0, // 默认 Kriging = 1, // 克里金 RFB = 2, // RFB IDW = 3 // 反距离加权 }; class RectificationMeshWell { public: RectificationMeshWell(); virtual ~RectificationMeshWell(); //progressCallback,C#传入 bool RectificationMeshWellCompute( unsigned int numx, unsigned int numy, double x0, double y0, double stepX, double stepY, double* values, const std::vector& pointList, InterpolationMethod method, const std::vector& fault, double deltaz, double factor = 1, ProgressCallback progressCallback = nullptr, void* progressUserData = nullptr // 进度回调用户数据,可选 ); //终止线程 void requestStop() { m_stopFlag.store(true); } void resetStopFlag(); // 每次计算前重置 bool isStopRequested() const { return m_stopFlag.load(); } protected: //Kriging bool KrigingInterpolatorCompute(ProgressCallback progressCallback, void* progressUserData); //RFB bool RFBInterpolatorCompute(ProgressCallback progressCallback, void* progressUserData); //IDW bool IDWInterpolatorCompute(ProgressCallback progressCallback, void* progressUserData); //双线性插值函数 double bilinear(const Eigen::MatrixXd& grid, double xmin, double xmax, double ymin, double ymax, double x, double y); double bicubic( const Eigen::MatrixXd& grid, double xmin, double xmax, double ymin, double ymax, double x, double y); public: double m_factor; //步长放大倍数 double m_deltaZ; //网格与井点差值 uint64_t m_row; //行数 uint64_t m_col; //列数 Point2D m_minPoint; //最小点 Point2D m_maxPoint; //最大点 double m_zMin; double m_zMax; double m_stepX; //步长 double m_stepY; std::unique_ptr m_data; //z值数据 std::vector m_controlPnts; //控制点 std::vector m_fault; //断层点 std::atomic m_stopFlag{ false }; };