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.

85 lines
2.2 KiB
C

1 month ago
#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 };
};