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.

411 lines
14 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> Mesh.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "ImageInsert.h"
#include "colorruler.h"
#include "rect8ex.h"
#include ".\name.h"
#include ".\curveex.h"
#include <vector>
#include "MeshPackage.h"
#include <memory>
using namespace std;
#define MESH_TEXT 0x00000001 //3DMesh<73><68>ʽ<EFBFBD><CABD>ʹ<EFBFBD><CAB9>CDimension2D<32><44>
#define MESH_DFG 0x00000002 //DFG<46><47>ʽ
#define MESH_FXY 0x00000004 //F(x,y)<29><>ʽ
#define MESH_FUN_2D 0x00000008 //ʹ<><CAB9>CFunction2D<32><44>
#define MESH_DIFFERENTIAL_X 0x00000010 //X<><58><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB>
#define MESH_DIFFERENTIAL_Y 0x00000020 //Y<><59><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB>
#define MESH_DIFFERENTIAL_XY 0x00000040 //XY<58><59><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB>
#define MESH_DIFFERENTIAL_X2 0x00000100 //X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
#define MESH_DIFFERENTIAL_Y2 0x00000200 //Y<><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
#define MESH_DIFFERENTIAL_XY2 0x00000400 //XY<58><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
#define MESH_DRAW_RULER 0x00001000 //<2F><>ʾ<EFBFBD><CABE>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
#define MESH_UPDATE_RULER 0x00002000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
//#define IMAGE_TRANSPARENT_ALPHA 0x00004000 //λͼ͸<CDBC><CDB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>ͬ<EFBFBD><CDAC>ɫ<EFBFBD>IJ<EFBFBD>ͬ͸<CDAC><CDB8><EFBFBD>ȣ<EFBFBD>Ϊ<EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD>CImageInsert<72>е<EFBFBD><D0B5><EFBFBD>ͬ
//#define IMAGE_TRANSPARENT_COLOR 0x00008000 //λͼ͸<CDBC><CDB8><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>ȫ͸<C8AB><CDB8>
#define MESH_SERIALIZE_RULER 0x00010000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class AFX_EXT_CLASS CMesh
: public CMeshBase
, public CRect8
{
public:
CMesh(void);
virtual ~CMesh(void);
int64_t GetId() const;
void SetId(int64_t id);
void Serialize(CArchive& ar, const short& ver) override;
virtual int Read(CFile& fr, const short& ver);
virtual void Write(CFile &fw, const short& ver);
virtual void GetRange(CRect8& range);
virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint);
virtual BOOL IsInRange(CRect8& range);
virtual void Empty(void);
virtual void Rotate(double xs, double ys, double angle);
virtual void ScaleProperty(double sx, double sy);
virtual void Calibrate(int type, void* pValue);
virtual void ScaleCoordinate(double sx, double sy, int mode); //mode=0:<3A>ӣ<EFBFBD>1:<3A><><EFBFBD><EFBFBD>2:<3A>ˣ<EFBFBD>3:<3A><>
virtual void WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadDML(CFile &fr, const short &ver);
virtual void WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadPCG(CFile &fr, const short &ver);
virtual void WritePCG2(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadPCG2(CFile &fr, const short &ver);
void WriteElementDML(BYTE*& buffElement, int& buffLen);
BOOL ReadElementDML(BYTE* bufData, const short& ver, int bufLen);
int ReadElementDML(CFile &fr, const short &ver);
void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint, BOOL bValue4);//bValue4<65><34>ʾ<EFBFBD>Ƿ<EFBFBD><5A><D6B5><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
void SetMesh(CGrid* pDfg, int nMeshType, BOOL bGetZRange=FALSE, double dInvaliData=1e30, BOOL bInitColor=TRUE);
int Read(CFile& fr, const short& ver, BOOL bNewFormat);
int ReadGrid_SurferAscii(LPCTSTR lpszFileName); //<2F><>ȡSurfer<65><72><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
void WriteGrid_SurferAscii(LPCTSTR lpszFileName); //д
int ReadGrid_SurferBinary6(LPCTSTR lpszFileName); //<2F><>ȡSurfer6<72>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
void WriteGrid_SurferBinary6(LPCTSTR lpszFileName); //д
int ReadGrid_SurferBinary7(LPCTSTR lpszFileName, void* pParentXy); //<2F><>ȡSurfer7<72>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
int ReadGrid_GeoFrameAscii(LPCTSTR lpszFileName);
void WriteGrid_GeoFrameAscii(LPCTSTR lpszFileName);
int ReadGrid_EPT(LPCTSTR lpszFileName); //<2F><>ȡEPT<50><54><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
int ReadGrid_Zmap(LPCTSTR lpszFileName); //<2F><>ȡPetrel<65><6C>ZMAP grid<69>ļ<EFBFBD>
int ReadGrid_EarthVision(LPCTSTR lpszFileName); //<2F><>ȡEarthVision<6F><6E><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
int ReadGrid_DEMAscii(LPCTSTR lpszFileName); //Digital Elevation Models
int ReadGrid_ArcInfoASCII(LPCTSTR lpszFileName); //<2F><>ȡArcInfo ASCII Grid Format<61><74><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
int ReadGridData(CFile& fr, CDimension2D* pDfg, BOOL bReversal=FALSE); //<2F><>ȡASCII<49>ļ<EFBFBD><C4BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
//<2F><>DFG<46><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
int Smooth(double smooth_coe = 1.0, long smooth_times = 1);
//<2F><>һ<EFBFBD>У<EFBFBD>GDFGRID
void WriteGdfGrid(LPCTSTR lpszFileName);
void WriteGdfGrid(CFile& fw, int times);
int ReadGdfGrid(CFile& fr);
int ReadGdfGrid(CString strGridFile);
int CreateImage(CImageInsert* pImage, int times=1);
void ContourCreate(POSITION(AddContourCurve)(CCurve* pCurve, CString strLayer),
double step, long nameStep, CString nameLineLayer, CString otherLineLayer,
double czmin, double czmax);
void ContourCreate(std::vector<CCurve*>* curves, std::vector<CString*>* layers,
double step, long nameStep, CString nameLineLayer, CString otherLineLayer,
double czmin, double czmax);
void GetM( double &zmin, double &zmax, BOOL bRerange=FALSE, double minValidValue=-1e100, double maxValidValue=1e100 );
void SetM(double zmin, double zmax);
void GetDelt(double& dx, double& dy);
void GetOrg(double& x0, double& y0);
virtual void CreateColor(void);
virtual void GetBitmap(void);
virtual void UpdateColorRuler(void);
virtual void ExchangeXY(void); //<2F><><EFBFBD><EFBFBD>XY<58><59><EFBFBD><EFBFBD>
virtual void ExchangeXY(void* pProjection); //ת<><D7AA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>,CProjection* pProjection
CColorRuler *m_pRuler;
CColorBase color;
void InitColor();
int ReadColor(CFile &fr, const short &ver);
void WriteColor(CFile &fw, const short &ver);
int CreateColorFromRuler(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ߵĸ<DFB5><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
void Offset(double dx, double dy);
void SetValue(CPtrList& curveList, double z0, BOOL bRangeOut);
void SetZ(long i, long j, double z0);
int DeleteValue(double valueStart, double endValue, double invalidValue);
BOOL IsInRangeZ(double z0);
long SetValueZ(double a, int nModeSel);
void ScaleZ(double dScale);
double Volume(CCurveEx& curve, double dClosedZ); //<2F><><EFBFBD><EFBFBD><E3B9B9>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD>ձպ<D5B1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double TradeArea(CCurve& curve, double baseZ = 0);
double GetClosedZ(CCurveEx& curve, double hightPointZ); //<2F><><EFBFBD>ñպ<C3B1><5A><D6B5>hightPointZһ<5A><D2BB>ΪGetHightPoint<6E><74><EFBFBD>õĸߵ<C4B8>
int GetHightPoint(CCurveEx* pCurve, CPoint3D& hightPoint); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD>Χ<EFBFBD>ڵĸߵ<C4B8>, <20><><EFBFBD><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
void operator=(CMesh& mesh);
void CloneOtherParamter(CMesh& mesh); //<2F><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
int GetNumber(long& numx, long& numy, long* pNumz=NULL);
int AutoReadFile(CString strMeshPathName); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD>Զ<EFBFBD>ʶ<EFBFBD><CAB6>
int AutoReadFile(CFile& fr, CString strExt);
int ReadMeshFile(CString strMeshPathName);
int GeologicalSection(CCurveEx& split, CCurveEx& section); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteMesh(LPCTSTR lpszMeshName, DWORD dwFileType); //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
void WriteOnlyDataToXYZ(CFile& fw, int times, const short& ver);
/**
* <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD><EFBFBD>
*/
bool IsLightingEnabled() const;
/**
* <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>
*/
void EnableLighting();
/**
* <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>
*/
void DisableLighting();
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
*/
int GetLightAzimuth() const;
/**
* <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
* \param azimuth ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕȣ<EFBFBD><EFBFBD><EFBFBD>Χ [0, 360]
*/
void SetLightAzimuth(float azimuth);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
*/
float GetLightElevation() const;
/**
* <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD>ߴ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
* \param elevation ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕȣ<EFBFBD><EFBFBD><EFBFBD>Χ [0, 360]
*/
void SetLightElevation(float elevation);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>
*/
float GetLightIntensity() const;
/**
* <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>
*/
void SetLightIntensity(float intensity);
/**
* <EFBFBD><EFBFBD>ȡ z <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
float GetZScaleFactor() const;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> z <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void SetZScaleFactor(double factor);
public:
BOOL CutOut(CCurveEx* pCurve); //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
BOOL CutIn(CCurveEx* pCurve); //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
int CutSectionDfg(CCurveEx& split, CDimension2D& outDfg); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6A3A8><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB>ά<EFBFBD><CEAC><EFBFBD>
int CutSlice(CDimension2D& outDfg, double zValue); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><5A>е<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EEA3A9>Ƭ
CString GetName(void);
void SetName(LPCTSTR lpszName);
void EnableUpdateRuler(BOOL bDraw);
void EnableDrawRuler(BOOL bDraw);
BOOL IsSerializeRuler(void);
BOOL IsDrawRuler(void);
BOOL IsUpdateRuler(void);
CRect8 GetRulerRange(void);
CMeshPackage* GetPackage();
void InitMeshBaseType();
DWORD GetMeshType(void);
void SetMeshType(DWORD nType);
void SetMeshFunction(DWORD nFunType);
DWORD GetMeshFunction(void);
CDimension3D* FunToDfg(CFunction2D* pfun);
BOOL EncryptGrid(CDimension3D* pInDfg, CDimension3D* pOutDfg, int times);
static BOOL GetSaveAsFileName(CString &strePathName, LPCTSTR lpExt);
CImageInsert* GetImage() { return this->m_pImage.get(); }
public:
long m_nTimes; //<2F><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
long m_FunctionSelect; //û<><C3BB>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString m_name;
int m_nFxyIndexZ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ƽ<EFBFBD><C6BD><EFBFBD>ϵ<EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱʡΪ0
DWORD m_nFlags; //<2F>Ƿ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ʾ....
COLORREF m_colTransparent; //͸<><CDB8>ɫ, ͸<><CDB8><EFBFBD>ȣ<EFBFBD>͸<EFBFBD><CDB8>0-255<35><35>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
CString m_FileName;
bool IsPropertyChanged; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>޸<EFBFBD>
1 month ago
CxImage m_imgCapture; // ͻ<><CDBB><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8>ͼ <20><><EFBFBD><EFBFBD>pdf gdbx
1 month ago
public:
CDimension3D* GetDfg(void);
void SetTransparentColor(COLORREF col); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ɫ
COLORREF GetTransparentColor(void);
BOOL IsTransparent(void); //<2F>Ƿ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>ʾ
void SetTransparentMode(DWORD nMode); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
DWORD GetTransparentMode(void); //<2F><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void MakePackages(vector<CCurveEx*>* pFaults);
void RecreatPackages(vector<CCurveEx*>* pFaults, BOOL force);
bool SetAlpha(BYTE level);
void RemoveAlpha(void);
void CreateDfgPackage(CCurveEx* pCurve, vector<CCurveEx*>& packages
, std::vector<CRect8>& ranges, vector<COLORREF>& colors
, vector<double>& Zs);
inline void CreatePackageCross2(CCrossList &list, CCurveEx * pCurveGrid
, dfPoint &pt1, dfPoint &pt2, dfPoint &pt3, dfPoint &pt4
, std::vector<COLORREF> & colors,vector<double>& dZs
, std::vector<CCurveEx *> & packages, std::vector<CRect8>& ranges);
inline void CreatePackageCross4(CCrossList &list, CCurveEx * pCurveGrid
, dfPoint &pt1, dfPoint &pt2, dfPoint &pt3, dfPoint &pt4
, std::vector<COLORREF> & colors, vector<double>& Zs
, std::vector<CCurveEx *> & packages, vector<CRect8>& ranges);
void SetEnablePackage(BOOL enable) { EnablePackage = enable; }
BOOL GetEnablePackage() { return EnablePackage; }
double CalculateAngle(dfPoint& pt1, dfPoint& pt2);
double CalculateAngle(CCurveEx& curve);
protected:
std::unique_ptr<CImageInsert> m_pImage;
CGrid* m_pMeshFun; //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><E6B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,CDimension3D* or CFunction2D*
CMeshPackage* m_pMeshPackage; // <20><><EFBFBD>񲹶<EFBFBD>
BOOL EnablePackage = TRUE;
protected:
CFunction2D* GetFun(void);
void ClearMeshFun(void);
virtual void ClearMesh(void);
// void SerializeDfg(CArchive& ar);
// void SerializeFxy(CArchive& ar);
void WriteDfg(CFile &fw, const short& ver);
void WriteFxy(CFile &fw, const short& ver);
void WriteFun(CFile &fw, const short& ver);
BOOL BeforeWrite(LPCTSTR lpszExtStr);
int Read3DMesh(CString strPathName);
int Read3DMesh(CFile& fr);
void Write3DMesh(CFile& fw, int times, const short& ver);
//<2F><>ȡ<EFBFBD>ڴ洮<DAB4>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
int ReadBuffer(BYTE* pDataBuffer, DWORD nDataLen, CString& strType);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>д<EFBFBD>һ<EBB5BD><D2BB><EFBFBD>ڴ洮<DAB4><E6B4AE>
int GetFileBuffer(BYTE** ppBuffer, DWORD& nBufSize, CString& strType);
int ReadDfg(CString strDfgPathName);
int ReadFxy(CString strFxyPathName);
void DfgToBitmap(CImageBase& image,CColorBase& color, int times, int selPlane);
void DfgToBitmap(CImageBase& image,CColorBase& color,int times, long bnumx, long bnumy, long enumx, long enumy);
void FunToBitmap(CImageBase& image,CColorBase& color,int times, long bnumx, long bnumy, long enumx, long enumy);
void MeshFunction(CDimension3D* pSourceDim, CDimension3D* pDestDim, long nFunSel);
void MeshFunction(CFunction2D* pSourceDim, CFunction2D* pDestDim, long nFunSel);
double GetZ(CDimension3D* pDim, long i, long j, long nFunSel);
double GetZ(CFunction2D* pDim, long i, long j, long nFunSel);
inline int GetZ(vector<dfPoint> pts, CCurveEx& area,double& zValue);
inline COLORREF GetZColor(double& z);
CString GetDfgFileName(CString strSourcePathName, CString ext);
void SetValueDfg(CPtrList& curveList, double z0, BOOL bRangeOut);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ⲿ(<28><>bRangeOut<75><74><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊz0 */
void SetValueFun(CPtrList& curveList, double z0, BOOL bRangeOut);
BOOL CutOutDfg(CCurveEx* pCurve); //<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳü<C8B2><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B8B3>*/
BOOL CutOutFun(CCurveEx* pCurve);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> wcw*/
BOOL CutInFun(CCurveEx* pCurve);
int GeologicalSectionDfg(CCurveEx& split, CCurveEx& section); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GeologicalSectionFun(CCurveEx& split, CCurveEx& section); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1 month ago
public:
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL NeedVectorDraw();
// ʸ<><CAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void DrawVectorContours(CDC* pDC, void* pXyDc);
/******************************************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*************************************************/
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetFaciesType(bool state);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GetFaciesType();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B4A6> <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void DrawSmoothFill(CDC* pDC, void* pXyDc);
/*******************************************************************************************************/
private:
// <20><>ɫ<EFBFBD><C9AB><EFBFBD>Բ<EFBFBD>ֵ
COLORREF InterpolateColor(COLORREF c1, COLORREF c2, double ratio);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3BA><EFBFBD>Բ<EFBFBD>ֵ
inline double GetInterpT(double v1, double v2, double threshold);
// contourf<72><66><EFBFBD><EFBFBD>
void DrawIsoRegion(CDC* pDC, void* pXyDc, CDimension3D* pDfg, int nIndexZ, double threshold, COLORREF color, double nextThreshold, int step);
/******************************************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool m_faciesType = false;
/*******************************************************************************************************/
1 month ago
private:
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊz0*/
void SetValueFunOutside(CFunction2D* pf,CPtrList& curveList, double z0);
/** @brief <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>ⲿ*/
BOOL IsPtOutside(double x0, double y0, CPtrList& curveList);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊz0*/
void SetValueFunInside(CFunction2D* pf,CPtrList& curveList, double z0);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊz0*/
void SetValueCurveInside(CFunction2D* pf,CCurveEx* pCurve, double z0);
double zero = 1e-30;
bool isEdited = true;
// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>Ч<EFBFBD><D0A7>
bool m_isLightingEnabled = false;
// <20><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
float m_lightAzimuth = 127.0f;
// <20><><EFBFBD>ߴ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
float m_lightElevation = 50.0f;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>
float m_lightIntensity = 0.1f;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> z <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float m_zScaleFactor = 1.0f;
int64_t m_id = -1;
public:
virtual int ReadPCG(void *pxp, const short &ver);
virtual int ReadPCG2(void *pxp, const short &ver);
};