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

1 month ago
#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); //<2F><>¡<EFBFBD>Լ<EFBFBD>
virtual int CreateDimension(int dn); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ά<EFBFBD><CEAC>
virtual void Empty(); //<2F><><EFBFBD><EFBFBD>
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<46><47>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
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 <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> smooth_coefΪƽ<CEAA><C6BD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>Ŷȣ<C5B6>ֵԽ<D6B5><D4BD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>Խǿ*/
virtual void Smooth(double smooth_coef = 1.0 ); // NVI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дSmooth<74><68><EFBFBD><EFBFBD>
double xGrid(double x);
double yGrid(double x);
double x(int i);
double y(int j);
CRect8 GetRect(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>η<EFBFBD>Χ
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; };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1A3>ΪSegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pCoorCurve<76><65>Ϊ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><58><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ֵƽ<D6B5><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool WriteSegY(LPCTSTR strOutput, CCurve* pCoorCurve = NULL);
public:
long n; ///< n<><6E>ʾά<CABE><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2<CEAA><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ3
long * num; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double *P0; ///< ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double *delt; ///< <20><><EFBFBD><EFBFBD>
double range[2]; ///< zֵ<7A><D6B5>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA>Ч
///< <20><><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(24B)
struct SGridParam
{
short times; ///<2 <20><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
short timesFlt; ///<2 <20>ڼ<EFBFBD><DABC>ο<EFBFBD><CEBF>Ƕϲ<C7B6>
double smooth; ///<8 ƽ<><C6BD><EFBFBD><EFBFBD>
double precision; ///<8 <20><><EFBFBD><EFBFBD><EEBEAB>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>Ϊ100<30>ֽڣ<D6BD><DAA3>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>
struct SGridHead
{
char fileType[16]; ///<16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ϲ<EFBFBD>=GDF-FGrid<69><64><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>=GDF-DGrid<69><64><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>Ϊ.f(x,y)
char fileVer[8]; ///<8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD>V2.0
SGridParam gridParam; ///<20 <20><><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char strExtend[56]; ///<56
};
SGridHead m_fileHead; ///< <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>壬Ҳ<E5A3AC><D2B2><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>Ϊ: char version[100];
SGridParam& GetGridParam() { return m_fileHead.gridParam; }
virtual bool CreateGridParam(SGridParamEx& gp); ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool IsValueInRange(double z); ///< <20>ж<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD>Χ<EFBFBD><CEA7>
};
struct SGridParamEx : public CGrid::SGridParam
{
double coord[6]; ///<48 <20><><EFBFBD>Χ[0=xmin,1=ymin,2=zmin,3=xmax,4=ymax,5=zmax]
int num[3]; ///<6 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[0=numx,1=numy,2=numz]
};
};
using namespace NContour;