|
|
|
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
|
/* <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>Zֵ<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>zֵ<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>Zֵ<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>Zֵ<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>0Ϊ<30><CEAA><EFBFBD>У<EFBFBD>1Ϊ<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);
|
|
|
|
|
|
|
|
|
|
|
|
|