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.

104 lines
3.0 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 "rect8.h"
#include ".\curve.h"
namespace NContour
{
struct SGridParamEx;
class AFX_EXT_CLASS CGrid
{
public:
CGrid(void);
~CGrid(void);
void operator=(CGrid& grid);
virtual CGrid* CloneObject(void); //克隆自己
virtual int CreateDimension(int dn); //生成指定维数
virtual void Empty(); //清空
virtual int Create(int numx, int numy, double x0, double y0, double dx, double dy);
virtual void SetValue(int i, int j, double v){}
virtual double Value(double x0, double y0) { return 1e301; }
virtual double Value(int i, int j) { return 1e301; }
virtual bool IsInRangeZ(double z0);
//写DFG格式网格文件
virtual int WriteDfg(LPCTSTR m_output) { return 0; }
virtual void Write(CFile& fw);
virtual int Read(CFile& fr);
virtual void Serialize(CArchive& ar, const short& ver) { }
/** @brief 网格平滑函数 smooth_coef为平滑系数当前数据不可信度值越大平滑效果越强*/
virtual void Smooth(double smooth_coef = 1.0 ); // NVI 子类需重写Smooth函数
double xGrid(double x);
double yGrid(double x);
double x(int i);
double y(int j);
CRect8 GetRect(void); //获得最大最小矩形范围
double xmin(void) { return P0[0]; }
double ymin(void) { return P0[1]; }
double xmax(void);
double ymax(void);
long& xnum(void) { return num[0]; }
long& ynum(void)
{
return num[1];
}
double& dx(void) { return delt[0];}
double& dy(void) { return delt[1];}
double vmin(void) { return range[0]; }
double vmax(void) { return range[1]; }
void SetRange(double vmin, double vmax) { range[0]=vmin; range[1]=vmax; }
// virtual int GetRange(double minValidValue = -1e100, double maxValidValue = 1e100) { return 0; };
//将网格剖面保存为SegY文件参数pCoorCurve是为了根据曲面中的X值在曲线中插值平面坐标
bool WriteSegY(LPCTSTR strOutput, CCurve* pCoorCurve = NULL);
public:
long n; ///< n表示维数曲面为2体网格为3
long * num; ///< 各方向网络个数
double *P0; ///< 原点坐标
double *delt; ///< 间隔
double range[2]; ///< z值范围范围外的值认为无效
///< 生成该网格时的初始化参数(24B)
struct SGridParam
{
short times; ///<2 加密次数
short timesFlt; ///<2 第几次考虑断层
double smooth; ///<8 平滑度
double precision; ///<8 误差精度
};
//网格文件的文件头定义固定长度为100字节内部变量可变
struct SGridHead
{
char fileType[16]; ///<16 网格类型,
///< 新网格格式中:逆断层=GDF-FGrid正断层=GDF-DGrid扩展名称为.f(x,y)
char fileVer[8]; ///<8 网格版本如V2.0
SGridParam gridParam; ///<20 生成该网格时的初始化参数
char strExtend[56]; ///<56
};
SGridHead m_fileHead; ///< 文件头定义,也可以直接定义为: char version[100];
SGridParam& GetGridParam() { return m_fileHead.gridParam; }
virtual bool CreateGridParam(SGridParamEx& gp); ///< 根据网格参数生成参数对象
bool IsValueInRange(double z); ///< 判断值是否在范围内
};
struct SGridParamEx : public CGrid::SGridParam
{
double coord[6]; ///<48 坐标范围[0=xmin,1=ymin,2=zmin,3=xmax,4=ymax,5=zmax]
int num[3]; ///<6 初始化网格参数[0=numx,1=numy,2=numz]
};
};
using namespace NContour;