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.

265 lines
8.0 KiB
C

1 month ago
/************************************************************
* @ file Function2D.h <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @ version 1.0
* @ date 2011-2012
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(CFLineLink)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽڵCFPointLink)
ָ<EFBFBD><EFBFBD>ɣ<EFBFBD>
<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺ţ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>(i,j<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̺Ŷ<EFBFBD>Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD>ڲ<EFBFBD>Ϊ<EFBFBD><EFBFBD>Ӧ<EFBFBD>̺š<EFBFBD><EFBFBD><EFBFBD>ͼ
|0
|
----|-|------------- <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD> -10
-10 | |10 <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>
----|-|------------- <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD> 10
|
|
|
| 0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|0
|
----|-------------- <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>10
| <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>
----|-------------- <EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>10
|
|
|0
************************************************************/
#pragma once
#include "grid.h"
#include ".\plane.h"
#include "ContourCreate.h"
#include "ContourValue.h"
#include <vector>
using namespace std;
namespace NContour
{
class CDimension2D;
class AFX_EXT_CLASS CFunction2D :
public CGrid
{
public:
CFunction2D(void);
~CFunction2D(void);
CString bjSurfacePath;
void SetBJSurfacePath(CString pSurfacePath);
//<2F><><EFBFBD>ɵ<EFBFBD>ֵ<EFBFBD><D6B5>,<2C><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
void ContourCreate(CString m_contour, double cmin, double cmax, double step, long markNameStep, CString m_color);
void ContourCreate(CString m_contour, double cmin, double cmax, double step, long markNameStep, CString m_flt, CString m_color);
void ContourCreate(CString m_contour, double cmin, double cmax, double step, long markNameStep, LPCTSTR markLayer, LPCTSTR otherLayer , CString m_color);
void ContourCreate(CString m_contour, double cmin, double cmax, double step, long markNameStep, LPCTSTR markLayer, LPCTSTR otherLayer , CString m_flt, CString m_color);
void ContourCreate(FILE* fw, double cmin, double cmax, double step, long markNameStep, CString m_color);
void ContourCreate(FILE* fw, double cmin, double cmax, double step, long markNameStep, LPCTSTR markLayer, LPCTSTR otherLayer , CString m_color, LPCTSTR lpszDfgFileName);
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`
void ContourCreate( POSITION AddContourCurve(CCurve* pCurve, CString strLayer),
double cmin, double cmax, double step, long markNameStep, LPCTSTR markLayer, LPCTSTR otherLayer );
void ContourCreate( POSITION AddContourCurve(CCurve* pCurve, CString strLayer), CContour& cv, LPCTSTR markLayer, LPCTSTR otherLayer );
void ContourCreate(std::vector<CCurve*>* curves, std::vector<CString*>* layers, CContour& cv, CString markLayer, CString otherLayer);
// <20>õ<EFBFBD><C3B5>޶<EFBFBD><DEB6><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CFunction2D* SubFunction2D(int ib, int jb,int it,int jt);
/** @brief <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ㸳<C4B5><E3B8B3>ֵ */
void NullPtOutside(CCurve* pCurve);
/** @brief <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ㸳<C4B5><E3B8B3>ֵ */
void NullPtInside(CCurve* pCurve);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7A><D6B5><EFBFBD>мӼ<D0BC><D3BC>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>,0<><30><EFBFBD><EFBFBD>+ <20><>1 Ϊ<><CEAA><EFBFBD><EFBFBD><32>ˣ<EFBFBD><33><CEAA>*/
void ChangeZValue(double cv, int mode);
virtual void Empty(); //<2F><><EFBFBD><EFBFBD>
virtual int WriteDfg(LPCTSTR m_output);
virtual void Serialize(CArchive& ar, const short& ver);
virtual int Read(CFile& fr); //<2F><>չ<EFBFBD><D5B9>Ϊ*.fxy
virtual void Write(CFile& fw);
/**@brief <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Smooth<74><68><EFBFBD><EFBFBD>*/
virtual void Smooth(double smooth_coef = 1.0 );
int ReadOld(CFile& fr); //<2F><>չ<EFBFBD><D5B9>Ϊ*.f(x,y)
void WriteOld(CFile& fw);
/** @brief <20><>Dimension2D<32><44><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> */
int ReadDimension2D(CDimension2D* dim);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>Dimension2D<32><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int WriteDimension2D(CDimension2D* dim);
int Read(LPCTSTR m_input);
int Write(LPCTSTR strOutput);
protected:
int ReadOther(CFile& fr);
void WriteOther(CFile& fw);
std::vector<CCurve*>* m_pCurves = nullptr;
std::vector<CString*>* m_pLayers = nullptr;
public:
void WriteLine(FILE *fw);
void WriteLink(LPCTSTR m_link);
int WriteLine(LPCTSTR m_output);
void WriteDifferential(LPCTSTR m_output,int IsNo,int IsDY);
void WriteDifferential(FILE *fw,int IsNo,int IsDY);
/** @brief <20>õ<EFBFBD><7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ<D0A7><D6B5><EFBFBD><EFBFBD> */
int GetRange(double minValidValue=-1e100, double maxValidValue=1e100);
double Differential(double &x, double &y,int no,int dy);
/** @brief <20><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>㣬lΪ<6C><CEAA><EFBFBD><EFBFBD><E3B4A6>ֱ<EFBFBD>߲<EFBFBD><DFB2><EFBFBD>ֵ<EFBFBD><D6B5>preΪ<65><CEAA><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>*/
int Cross(CLine3D& line, double& l, double pre);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>pre<72><65><EFBFBD><EFBFBD>, <20><><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>false */
bool Cross(CPoint3D& pt1, CPoint3D& pt2, CPoint3D& csPt, double pre);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>pre<72><65><EFBFBD><EFBFBD>, <20><><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>false */
bool Cross(CCurve& curve, CPoint3D& csPt, double pre);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><7A><D6B5><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻǽ<CFBD><C7BD>㴦pPoint<6E><74><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵľ<C9B5><C4BE>ν<EFBFBD><CEBD>в<EFBFBD>ֵ
B---*-A
| P. |
|___*_| <EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ֵ<EFBFBD><EFBFBD>AB<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>*1<EFBFBD><EFBFBD>CD<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>*2<EFBFBD><EFBFBD>*1*2<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>P
C D
*/
virtual double Value(double x0, double y0);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(i,j)<29><>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPointLink<6E><6B><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ*/
virtual double Value(int i, int j);
virtual void SetValue(int i, int j, double v);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>(x,y)<29><><EFBFBD>̺<EFBFBD>Ϊno<6E>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ֵ*/
double f(double x, double y, int no);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>꣨x,y)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><5A><D6B5><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ӧ<EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>pValue <20><> pNo */
int f(double x, double y, int *pNo, double *pValue);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD>(i,j<><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pPointָ<74><D6B8>pPointIj<49>Ͷ<EFBFBD>ӦCLineX<65><58><EFBFBD><EFBFBD>__ValueNoIJ */
int GetValueNumber(int i, int j);
void * GetValue(int i, int j,int no);
int GetValue(int i, int j,int *__ValueNoIJ,double *pValue);
double ValueFaultage(double& x, double& y, int no);
int Float(double& rx, double& ry, double& rz);
double GetNo(double x, double y,double z,int &m_No);//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EBA3AC>0<EFBFBD><30>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetOther(void);
virtual CGrid* CloneObject(void); //<2F><>¡<EFBFBD>Լ<EFBFBD>
void operator=(CFunction2D& d2d);
public:
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><D6B8>*/
class AFX_EXT_CLASS CPointLink
{
public:
CPointLink(void);
~CPointLink(void);
int Read (CFile& fr, CFunction2D* pGrid2D);
void Write(CFile& fw, CFunction2D* pGrid2D);
void WriteLink(FILE* fw);
void operator=(CPointLink& pk);
/** @<40><>ֵ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>Ϊ<EFBFBD><CEAA>i,j<><6A><EFBFBD>ĵ<EFBFBD>zֵ i = <20><>ֵ<EFBFBD><D6B5>.x - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.x
j = <EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>.y - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.y
*/
int GetValue(double i, double j, double& m_result);
int Differential(double& m_result,int dy);
void SetOther(void);
int IsFlt(void);
public:
/** @brief <20>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PointLink<6E><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬˳<EBA3AC><CBB3>Ϊ
|1
2--+--0
|3
*/
CPointLink** m_pLink;
double value;
char IsOther;
char nCount; ///< <20><>¼<EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>׷<EFBFBD>ٹ<EFBFBD>
};
/* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
class AFX_EXT_CLASS CLineX
{
public:
CLineX(void);
~CLineX(void);
int Read (CFile& fr, CFunction2D* pGrid2D);
void Write(CFile& fw, CFunction2D* pGrid2D);
///< <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>CLineX<65>ϵ<EFBFBD>ָ<EFBFBD><D6B8>
void *GetValue(int j);
void operator=(CLineX& lx);
public:
short nCount; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
CPointLink* pPoint; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short j0; ///< <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD>3 j<><6A><EFBFBD><EFBFBD>5<EFBFBD><35>j0Ϊ5
short No; ///< <20>̺<EFBFBD>
};
/* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ֱ)<29><>
|
|
| CLineX1
|
| CLineX2
|
CLine
*/
class AFX_EXT_CLASS CLine
{
public:
CLine(void);
~CLine(void);
int Read (CFile& fr, CFunction2D* pGrid2D);
void Write(CFile& fw, CFunction2D* pGrid2D);
void operator=(CLine& line);
public:
CLineX *pX;
_int32 nCount;
};
public:
int GetFaultageNo(int i, int j, CPointLink* pPl);
int GetFaultageNo(CPointLink* pPl);
public:
CPoint2D _ContourIJ,_LastContourIJ;
CPoint2D _ContourXY;
char _ContourDirect;
double _ContourValue,t;
CList<CPoint2D,CPoint2D>_ContourXyList; ///< <20><>ʱ<EFBFBD><CAB1><EFBFBD>ŵ<EFBFBD>ǰ<EFBFBD><C7B0>ֵ<EFBFBD><D6B5><EFBFBD>ϵĵ<CFB5>
CLine* pLine; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPointLink* pPoint; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
_int32 total; ///< <20><><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
char IsTail;
CPointLink** pPointIJ; ///< <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼(i,j)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pPoint<6E><74><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
int * __ValueNoIJ; ///< <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼(i,j)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ClineX<65><58>No
CMap<int,int,void *,void *> CurveMap;
protected:
void ContourPointLink(CPointLink *&pPl);
double ContourPointLink(CPointLink* pLink, char m_direct);
void Contour(double cv);
void ContourWrite(void);
int ContourTrim(int IsTail,int fn);
//void Contour(double cmin, double cmax, double step, long markNameStep);
void Contour(CContour& cv);
CContourCreate m_contourCreate;
};
}//namespace