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.

251 lines
9.0 KiB
C

1 month ago
/************************************************************************/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CTriangulation */
/* <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񻯼<EFBFBD><F1BBAFBC><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> */
/* <20><><EFBFBD><EFBFBD>ΰ 2011-10-9 */
/************************************************************************/
#pragma once
#include "stdafx.h"
#include "triangle.h"
#include <vector>
#include <list>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <set>
#include <map>
using namespace std;
#define SCATTERPOINT_MODE 0 //ɢ<><C9A2>ģʽ
#define LINEARPOINT_MODE 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
#define POLYGON_MODE 2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
class AFX_EXT_CLASS CTriangle
{
public:
CTriangle();
~CTriangle();
/** @brief<65><66><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ƽ<EFBFBD><C6BD>ϵ<EFBFBD><CFB5>A,B,C,D,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>*/
bool CreatePlane();
void Initial();
/** @brief<65>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>*/
bool IsEmpty();
/** @brief <20><><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><E3A3AC><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>false*/
bool CrossPoint(CPoint3D& pt1, CPoint3D& pt2,CPoint3D& cspt);
/** @brief <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><5A><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD>false*/
bool GetZValue(double x, double y ,double& z);
/** @brief <20>жϸ<D0B6><7A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bool IsZOnTriangle( double z );
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ߵĽ<DFB5><C4BD><EFBFBD> */
bool GetCircumCenter(CPoint3D& ccpt);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>*/
bool GetGravityCenter(CPoint3D& gcpt);
/** @brief <20><><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD><EFBFBD><EFBFBD>ڶԱ<DAB6><D4B1>ϵĴ<CFB5><C4B4><EFBFBD>*/
bool GetOrthoPoint(CPoint3D& rpt,int npt1,int npt2);
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2Dƽ<44><C6BD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>н<EFBFBD><D0BD><EFBFBD>*/
int IsCross2D(CCurve& curve);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>step<65><70><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>ܵĵ<DCB5><C4B5><EFBFBD><EFBFBD><EFBFBD>*/
int InterInfill(vector<CPoint3D*>& newPtVec, double step);
private:
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ù<EFBFBD>ϵ<EFBFBD><CFB5>1 Ϊͬ<CEAA>࣬ 0 Ϊ<><CEAA><EFBFBD>࣬ 11 Ϊ<><CEAA>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>22Ϊ<32><CEAA>2<EFBFBD><32>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>*/
int IsPtsOneSide(CPoint3D& pt1, CPoint3D& pt2);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7BD><EFBFBD><EFBFBD>ֵ */
double EquationValue(double x, double y, double z);
double EquationValue(CPoint3D& pt);
/** @brief <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD>λ<EFBFBD><CEBB>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD> */
bool IsPtOnPlane(CPoint3D& pt);
/** @brief <20>жϵ<D0B6><CFB5><EFBFBD>XOYƽ<59><C6BD><EFBFBD>ϵ<EFBFBD>ͶӰ<CDB6>Ƿ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XOY<4F><59><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD>ڲ<EFBFBD>,<2C><><EFBFBD><EFBFBD>2<EFBFBD><32>ʾ<EFBFBD>ڱ߽<DAB1><DFBD><EFBFBD><EFBFBD><EFBFBD>*/
int IsPtInside2D(CPoint2D& pt);
int IsPtInside2D(double x, double y);
/** @brief <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7>ڿռ<DABF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>*/
int IsPtInside3D(CPoint3D& pt);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>޽<EFBFBD><DEBD><EFBFBD> */
bool IsTriBodySeparated(CTriangle& tri);
/** @brief <20><><EFBFBD><EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-1*/
int The3rdPoint(int nt1,int nt2);
private:
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ*/
bool GetExtremeValues();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>ų⣬<C5B3>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ*/
bool IsPtOutTriBody(CPoint3D& pt);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>ų⣬<C5B3>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ*/
bool IsPtOutTriSquare(CPoint2D& pt);
/** @brief <20>ж<EFBFBD><D0B6>߶<EFBFBD><DFB6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ */
bool IsSegmentOutTriBody(CPoint3D& pt1, CPoint3D& pt2);
/** @brief <20>ж<EFBFBD><D0B6>߶<EFBFBD><DFB6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD>ⲿ */
bool IsSegmentOutTriSquare(double x1, double y1, double x2, double y2);
//<2F>踳ֵ<E8B8B3><D6B5>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
public:
int npt[3]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPoint3D* ppt[3]; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
int neighbor[3]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
double m_xMin, m_yMin,m_zMin,m_xMax,m_yMax,m_zMax; //<2F><><EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD><CEB8><EFBFBD><EFBFBD>꼫ֵ
double A,B,C,D; // <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>Ax+By+Cz+D = 0 <20>ĸ<EFBFBD><C4B8><EFBFBD>ϵ<EFBFBD><CFB5> <20><><EFBFBD>У<EFBFBD><D0A3><EFBFBD>A,B,C<><43>Ϊƽ<CEAA><EFBFBD><E6B7A8><EFBFBD><EFBFBD>
};
//<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD>
class AFX_EXT_CLASS CTSegment
{
public:
CTSegment();
/** @brief <20>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>*/
bool Create(int np1,int np2);
bool operator == ( const CTSegment& seg) const;
bool operator < ( const CTSegment& seg) const;
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD>n<EFBFBD><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int Pt(int n) const;
private:
int npt[2]; ///< <20>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>ţ<EFBFBD>npt[0]<npt[1]
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef map<int, int* > LNOMAP; ///< <20><>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>Ӧɢ<D3A6><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
class AFX_EXT_CLASS CTriangulation
{
public:
CTriangulation();
virtual ~CTriangulation();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
virtual void ClearAll();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
BOOL CutIn(CCurve& border);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
BOOL CutOut(CCurve& border);
//<2F><>д
public:
/** @brief <20><>Net<65><74><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><E6B4A2>dft<66>ļ<EFBFBD><C4BC><EFBFBD>*/
bool WriteFile(char* filename, char* projectname = NULL);
/** @brief <20><>dft<66>ļ<EFBFBD><C4BC>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
bool ReadFile(char* filename);
/** @brief ɢ<><C9A2><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>*/
virtual int ReadPoints(vector<double>& X, vector<double>& Y,vector<double>& Z);
virtual int ReadPoints(vector<double>& X, vector<double>& Y,vector<double>& Z, vector<int>& Attr,int attrnum = 1);
int ReadPoints(int num, double* X, double* Y, double* Z);
//<2F><><EFBFBD><EFBFBD>
public:
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ʾ<EFBFBD><CABE>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񣬲<EFBFBD><F1A3ACB2><EFBFBD>Ϊ1<CEAA><31>ʾ<EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
virtual int Create(int createMode = SCATTERPOINT_MODE);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dfd<66><64>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>*/
void WriteTriangles(char* filename);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ*/
int NumberofTriangles();
/** @brief <20><><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD>Ŀ*/
int NumberofPoints();
/** @brief <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><5A><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD>false*/
bool GetZValue(double x, double y ,double& z);
/** @brief <20>߶<EFBFBD><DFB6>ϲ<EFBFBD>ֵ<EFBFBD>õ<EFBFBD><5A><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
bool GetZPoint( double z,CPoint3D& pt1, CPoint3D& pt2, CPoint3D& pt);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>triNo<4E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ڱ<EFBFBD>Ϊnpt1,npt2<74><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int GetNeighborTriangle(int triNo,int npt1, int npt2);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nptΪ<74><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ntri Ϊ<><CEAA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int GetCommonPointTriangles(int npt,list<int>& tNOLST,int ntri = -1);
/** @brief ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void DeleteOuterTriangles();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1>߼<EFBFBD><DFBC>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>Ϊstep,<2C><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>µ<EFBFBD><C2B5><EFBFBD>Ŀ */
int InfillSegPoints(vector<CPoint3D*>& newPtVec, double step);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽磩<DFBD><E7A3A9><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD>Ϊstep,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5>µ<EFBFBD><C2B5><EFBFBD>Ŀ */
int InfillInterPoints(vector<CPoint3D*>& newPtVec, double step);
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>*/
bool IsPointVecEmpty();
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>*/
bool IsTriangleVecEmpty();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶δ<DFB6><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_nTSegmentVec*/
int CreateAllSegments();
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ָ<EFBFBD><D6B8>NULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_TriangleList <20><>˳<EFBFBD><CBB3><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> */
bool DeleteMultiTriangles(list<int>& nolst);
//<2F><EFBFBD><E0BDBB><EFBFBD><EFBFBD>
public:
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD> */
bool CrossPoint(CPoint3D& pt1, CPoint3D& pt2, CPoint3D& cspt);
/** @brief <20>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>޽<EFBFBD><DEBD><EFBFBD><E3B7B5>false */
bool CrossPoint(CCurve& curve, CPoint3D& cspt);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>,<2C><><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int CrossCurve(CTriangulation& tNet, CCurve& crossCurve);
/** @brief m_TriangleList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD>ؿ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
int DeleteAllNullTriangles();
private:
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ߺŴ<DFBA><C5B4><EFBFBD>m_pointattributevec<65><63>*/
int CreateByLine();
/** &brief <20><><EFBFBD>ߺ<EFBFBD>Ϊlno<6E>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int CreateInPolygon(int lno = 0);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, bno eno<6E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>*/
int AddSubNet(int bno, int eno, int createMode );
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lno<6E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD>ϵ*/
int SetNeighbor(int btr, int etr,int lno);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><E4BDA8><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD>ϵ*/
int SetNeighbor(int ntr1, int ntr2);
/** @brief <20>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>,CutModeΪ<65>г<EFBFBD><D0B3><EFBFBD>ʽ<EFBFBD><CABD><30><CEAA><EFBFBD>У<EFBFBD><31><CEAA><EFBFBD><EFBFBD>*/
BOOL CutNet(CCurve& border,int CutMode);
/** @brief <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD>*/
bool IsPtOnEnvelope(int ptNo);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ָ<EFBFBD><D6B8>NULL */
bool NullOneTriangle(int triNo);
/** @brief <20>ж<EFBFBD><D0B6>߶<EFBFBD><DFB6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>*/
bool IsSegmentOutNetBody(CPoint3D& pt1, CPoint3D& pt2);
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> */
bool IsTriOutNetBody(CTriangle& tri);
/** @brief ɾ<><C9BE>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void DeletePointList();
/** @brief ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void DeleteTriangleList();
int GetExtremeValues();
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>뽻 */
bool IsNetBodySeparated(CTriangulation& tNet);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BDBB>,0Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>1Ϊͷ<CEAA><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
virtual bool OneWayTrace(CTriangulation& tNet, int& bNo, int& npt1, int& npt2, CPointList& PointList, set<int>& m_FDTriLib, int addMode = 0 );
/** @brief<65><66><EFBFBD>ߺž<DFBA><C5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void SimpleByLineNo();
/** @brief<65><66><EFBFBD>ߺž<DFBA><C5BE>򲿷<EFBFBD><F2B2BFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void SimpleByLineNo(int btr, int etr);
/** @brief <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>*/
bool RebuildSameLineTriangles();
/** @brief <20><><EFBFBD>¹<EFBFBD><C2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>ߣ<EFBFBD>npt1,npt2Ϊ<32><CEAA><EFBFBD>ڱ<EFBFBD>*/
bool RebuildTwoTriangles(int ntr1, int ntr2, int npt1, int npt2);
/** @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bool IsLinearNeighbor(const int& npt1, const int& npt2);
/** @brief <20><><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>Ų<EFBFBD>ѯmap*/
bool CreateLineDataMap();
/** @brief ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>Ų<EFBFBD>ѯmap*/
void DeleteLineDataMap();
//<2F><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
public:
/** @brief ɢ<><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
vector<CPoint3D*> m_PointVec;
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>*/
int m_NumofPointAttributes;
/** @brief ɢ<><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
vector<int> m_PointAttributeVec;
/** @brief <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
vector<CTriangle*> m_TriangleVec;
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EABCAB><EFBFBD><EFBFBD>Сֵ */
double m_xMax,m_xMin,m_yMax,m_yMin,m_zMax,m_zMin;
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ݵ<EFBFBD>,<2C><>β<EFBFBD><CEB2><EFBFBD><EFBFBD> */
vector<int> m_OutlinePoints;
//˽<>б<EFBFBD><D0B1><EFBFBD>
private:
vector<int> m_nTSegmentVec; ///< <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶ζ˵㣬<CBB5><E3A3AC><EFBFBD><EFBFBD>0<EFBFBD><30>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
list<int> m_SameLineTriNoLst; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list
LNOMAP m_lmp; ///<<3C><>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: key <20>ߺ<EFBFBD>, value <20><><EFBFBD><EFBFBD>[2]
};
/** @brief <20><><EFBFBD>߶ν<DFB6><CEBD>м<EFBFBD><D0BC>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵĵĵ㼯<C4B5><E3BCAF><EFBFBD><EFBFBD>CPoint3D<33><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int Infill(vector<CPoint3D* >& newPtVec,CPoint3D& pt1, CPoint3D& pt2,double step);