|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "dllExport.h"
|
|
|
|
|
|
#include "XJPoint2D.h"
|
|
|
|
|
|
#include "XJPoint3D.h"
|
|
|
|
|
|
#include "Isopleth.h"
|
|
|
|
|
|
#include "ControlPoint2d.h"
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include <limits>
|
|
|
|
|
|
#include <Eigen/Dense>
|
|
|
|
|
|
#include "RBFInterpolator.hpp"
|
|
|
|
|
|
#include <atomic>
|
|
|
|
|
|
#include "kdtree.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
typedef void(*ProgressCallback)(int percent, void* userData);
|
|
|
|
|
|
|
|
|
|
|
|
enum class InterpolationMethod
|
|
|
|
|
|
{
|
|
|
|
|
|
Default = 0, // Ĭ<><C4AC>
|
|
|
|
|
|
Kriging = 1, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
RFB = 2, // RFB
|
|
|
|
|
|
IDW = 3 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class RectificationMeshWell
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
RectificationMeshWell();
|
|
|
|
|
|
virtual ~RectificationMeshWell();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//progressCallback<63><6B>C#<23><><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool RectificationMeshWellCompute(
|
|
|
|
|
|
unsigned int numx, unsigned int numy, double x0, double y0, double stepX, double stepY, double* values,
|
|
|
|
|
|
const std::vector<ControlPoint2d>& pointList, InterpolationMethod method, const std::vector<uint8_t>& fault, double deltaz, double factor = 1,
|
|
|
|
|
|
ProgressCallback progressCallback = nullptr,
|
|
|
|
|
|
void* progressUserData = nullptr // <20><><EFBFBD>Ȼص<C8BB><D8B5>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ѡ
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ֹ<EFBFBD>߳<EFBFBD>
|
|
|
|
|
|
void requestStop() { m_stopFlag.store(true); }
|
|
|
|
|
|
void resetStopFlag(); // ÿ<>μ<EFBFBD><CEBC><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
//˫<><CBAB><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
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; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double m_deltaZ; //<2F><><EFBFBD><EFBFBD><EFBFBD>뾮<EFBFBD><EBBEAE><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
|
|
|
|
|
|
uint64_t m_row; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint64_t m_col; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
Point2D m_minPoint; //<2F><>С<EFBFBD><D0A1>
|
|
|
|
|
|
Point2D m_maxPoint; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double m_zMin;
|
|
|
|
|
|
double m_zMax;
|
|
|
|
|
|
double m_stepX; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
double m_stepY;
|
|
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<double[]> m_data; //zֵ<7A><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<ControlPoint2d> m_controlPnts; //<2F><><EFBFBD>Ƶ<EFBFBD>
|
|
|
|
|
|
std::vector<uint8_t> m_fault; //<2F>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::atomic<bool> m_stopFlag{ false };
|
|
|
|
|
|
};
|
|
|
|
|
|
|