|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef AFX_EXT_CLASS
|
|
|
|
|
|
#define AFX_EXT_CLASS Q_DECL_IMPORT
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#include "Triangulation.h"
|
|
|
|
|
|
#include <list>
|
|
|
|
|
|
|
|
|
|
|
|
namespace NVoronoi
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
class CVoronoi;
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>VoronoiͼԪ
|
|
|
|
|
|
class AFX_EXT_CLASS CVoronoiUnit
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CVoronoiUnit(CVoronoi* pParent);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief<65>жϸ<D0B6>ͼԪ<CDBC>Ƿ<EFBFBD><C7B7>պ<EFBFBD> */
|
|
|
|
|
|
bool IsClosed();
|
|
|
|
|
|
/** @brief <20><><EFBFBD>ӱ߽磬<DFBD><E7A3AC><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE><EFBFBD>ӳɹ<D3B3> */
|
|
|
|
|
|
bool AddBorder(CMyCurve& border);
|
|
|
|
|
|
/** @brief <20><><EFBFBD>Ӷϲ㣬<CFB2><E3A3AC><EFBFBD>ɶϲ<C9B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>*/
|
|
|
|
|
|
bool ClipWithFlts(vector<CMyCurve*>* pFlts, vector<CRect8>* pRects = 0);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool GetPolygon(CMyCurve& curve);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void EraseOtherPgns(void);
|
|
|
|
|
|
list<CMyCurve*>& GetOtherPgns(void);
|
|
|
|
|
|
int npt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CPoint3D* ppt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
list<CPoint3D> m_nodPoints; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
list<CMyCurve*> m_otherPgns; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
/** @brief <20>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>С<EFBFBD><D0A1>Χ<EFBFBD><CEA7><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptlist,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>otherpgns*/
|
|
|
|
|
|
bool MinClosedCurve(CMyCurve& nodCur, CMyCurve& border,CPointList& ptlist, list<CMyCurve*>& otherPgns);
|
|
|
|
|
|
//<2F><><EFBFBD>걳ͼ
|
|
|
|
|
|
CVoronoi* m_pParent;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//vorono<6E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
class CVoronoiPolygon
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CVoronoiPolygon();
|
|
|
|
|
|
~CVoronoiPolygon();
|
|
|
|
|
|
int GetWell(void){return m_iWellPt; }
|
|
|
|
|
|
bool ContainWell(void) {return m_bWellInside;}
|
|
|
|
|
|
CMyCurve* GetPolygon(void) {return m_pPolygon; }
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool IsAdjacent(CVoronoiPolygon* pOther);
|
|
|
|
|
|
|
|
|
|
|
|
int m_iWellPt; //<2F><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool m_bWellInside; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CMyCurve* m_pPolygon;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS CVoronoi : public CTriangulation
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CVoronoi(void);
|
|
|
|
|
|
virtual ~CVoronoi(void);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صı߽<C4B1><DFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽硢<DFBD>ϲ<EFBFBD><CFB2>ȣ<EFBFBD>pFltΪ<74>ϲ<EFBFBD> pFltRectsΪ<73>ϲ<EFBFBD><CFB2><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>η<EFBFBD>Χ */
|
|
|
|
|
|
int InitBoundary(CMyCurve* border = NULL, vector<CMyCurve*>* pFlts = 0, vector<CRect8>* pFltRects = 0);
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD>Voronoiͼ<69><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA> */
|
|
|
|
|
|
int CreateVoronoiMap(TPtrList& curveVoronoiList);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><>ȡ2Dɢ<44><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
virtual int ReadPoints(vector<double>& X, vector<double>& Y);
|
|
|
|
|
|
virtual int ReadPoints(int num, double* X, double* Y);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪͼԪ<CDBC><D4AA><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ĵ㣨<C4B5><E3A3A8><EFBFBD>㣩<EFBFBD><E3A3A9><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SetMarkedPoints(vector<int>& markVec);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ǹ걳ͼԪPolygon<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼԪPolygon<6F><6E>
|
|
|
|
|
|
void SplitMarkedUnits(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ɶϲ<C9B6><CFB2>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>voronoi<6F><69>Ԫ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>Ԫ<EFBFBD>Ϸ֣<CFB7><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>طָ<D8B7><D6B8><EFBFBD><EFBFBD><EFBFBD>ԭʼvunit<69><74><EFBFBD><EFBFBD>
|
|
|
|
|
|
int SplitVUnitWithFlts(void);
|
|
|
|
|
|
//<2F>ɶϲ<C9B6><CFB2>ָ<EFBFBD><D6B8>걳<EFBFBD><EAB1B3>ԪpScrVUnit<69><74><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>voronoi<6F><69><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>dstVUnits<74><73><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>δ<EFBFBD>ָ<D6B8><EEA3AC>v unit<69>߽<EFBFBD><DFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool SplitVUnitWithFlts(CVoronoiUnit* pScrVUnit,list<CVoronoiPolygon*>& dstVPgns,
|
|
|
|
|
|
vector<CMyCurve*>* pFlts);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ÿ<EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ctCurs,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ<EFBFBD><D3A6><EFBFBD>·<EFBFBD><C2B7><EFBFBD>m_vPolygons & m_VUnitList
|
|
|
|
|
|
//<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void ReassignWithConstraintRects( double width, double height );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾֲ<C9BE><D6B2>걳ͼ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
virtual void ClearAll();
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա*/
|
|
|
|
|
|
void ClearVoronoi();
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>ϱ߽<CFB1> <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
|
int CreateUnitedBoundaries( vector<CMyCurve*>& pgns, vector<CMyCurve*>& borders );
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ĵ<EFBFBD><C4B5>ú<EFBFBD><C3BA><EFBFBD>
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><>ȡVoronoi<6F><69>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetVUnitCurves(vector<CMyCurve*>& curs);
|
|
|
|
|
|
//<2F><>ȡV<C8A1><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetVPolygonCurves(vector<CMyCurve*>& curs);
|
|
|
|
|
|
//<2F><>ȡˮ<C8A1><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetMWSplitterCurves(vector<CMyCurve*>& curs);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD>curveVoronoiList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>(CCurveEx)<29><><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
int GetUnitCurve(TPtrList& curveVoronoiList);
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>VoronoiͼԪ<CDBC><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
int GetUnitCurve(int nIndex, CMyCurve& pCurve);
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>Voronoiͼ<69><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>*/
|
|
|
|
|
|
int GetUnitCount() { return (int)m_VUnitList.size(); }
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD>voronoi<6F><69>Ԫ*/
|
|
|
|
|
|
CVoronoiUnit* GetUnit(int index);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><>Voronoiͼд<CDBC><D0B4><EFBFBD>ļ<EFBFBD>*/
|
|
|
|
|
|
void Write(char* filename);
|
|
|
|
|
|
/** @brief <20>ɱ߽<C9B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Voronoiͼ*/
|
|
|
|
|
|
virtual int Create();
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>λ<EFBFBD>ڶϲ<DAB6><CFB2>ڲ<EFBFBD><DAB2>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
void FindWellInFlts(void);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list<VSegment>& GetSplitterSegments(void);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>voronoiͼԪ<CDBC><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼԪ<CDBC><D4AA> idxΪ<78><CEAA><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SplitMarkedUnit(int wellIndex);
|
|
|
|
|
|
//dest<73>ϲ<EFBFBD>subject<63><74><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
|
|
|
|
|
|
void MergeAdjacentPart(CVoronoiPolygon* pSubjectUnit, CVoronoiPolygon* pDestUnit);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>*/
|
|
|
|
|
|
bool MidPoint(int npt1, int npt2,CPoint3D& mpt);
|
|
|
|
|
|
/** @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>*/
|
|
|
|
|
|
bool MidPoint(CPoint3D& pt1, CPoint3D& pt2,CPoint3D& mpt);
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief <20>ɱ߽<C9B1>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ݵ㣬ɾ<E3A3AC><C9BE><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>*/
|
|
|
|
|
|
void SelectPointsByBorder();
|
|
|
|
|
|
/** @brief <20><><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>걳ͼԪ*/
|
|
|
|
|
|
bool CreateVoronoiUnit(int npt, int nTri, CVoronoiUnit& vunit);
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7B7>nTri<72><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Voronoi<6F><69><EFBFBD><EFBFBD>,addMode == 0Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD>ӵ㣬1 Ϊͷ<CEAA><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
virtual int DirectionalTrace(int& nTri, int& npt1, int& npt2, set<int>& FDTriNos,list<CPoint3D>& nodlist, int addMode = 0);
|
|
|
|
|
|
/**@brief <><D7BC><EFBFBD>٣<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD> m_LastPoint*/
|
|
|
|
|
|
int PrepareTrace(int nTri, int npt1, int bot0,int bot1,list<CPoint3D>& nodlist, int addMode);
|
|
|
|
|
|
/**@brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5>߽<EFBFBD> <20><><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
int EndDirectionalTrace(int nTri, int nTop, int nBottom,list<CPoint3D>& nodlist, int addMode);
|
|
|
|
|
|
/** @brief <><D7B7>ntri<72><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Voronoi<6F><69><EFBFBD><EFBFBD>,addMode == 0Ϊβ<CEAA><CEB2><EFBFBD><EFBFBD><EFBFBD>ӵ㣬1 Ϊͷ<CEAA><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
int GetVNodePoint(int nTri, int npt1, int npt2, int npt3,list<CPoint3D>& nodlist, int addMode );
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쵽<EFBFBD>߽磬<DFBD><EFBFBD><EFBFBD><D7AE>*/
|
|
|
|
|
|
bool ExtendToBorder(list<CPoint3D>& nodlist, double& l0 , double extlen);
|
|
|
|
|
|
/** @brief <20><><EFBFBD>ɰ<EFBFBD><C9B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
bool CreateEnvelopeCurve();
|
|
|
|
|
|
/** @brief<65><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
bool CreateCirCenterPoints();
|
|
|
|
|
|
/* @brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>(x1,y1)(x3,y3)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(x1,y1)(x2,y2)<29><><EFBFBD>Ҳ<D2B2><E0BBB9><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD>Ҳ<D2B2><E0B7B5>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0B7B5>1,<2C><><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>2 **/
|
|
|
|
|
|
int VectorSide(double x1, double y1, double x2, double y2, double x3, double y3);
|
|
|
|
|
|
/**@brief <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>(pt0-pt2)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(pt0,pt1)<29><><EFBFBD>Ҳ<D2B2><E0BBB9><EFBFBD><EFBFBD><EFBFBD>࣬<EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>0 <20><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>2*/
|
|
|
|
|
|
int VectorSide(CPoint2D& pt0, CPoint2D& pt1,CPoint2D& pt2);
|
|
|
|
|
|
//<2F><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>걳ͼ<EAB1B3><CDBC>Ӧ<EFBFBD><D3A6>ϵ
|
|
|
|
|
|
void MapPointVoronoiUnit(void);
|
|
|
|
|
|
//<2F><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>VPolygon<6F>Ķ<EFBFBD>Ӧmap
|
|
|
|
|
|
void MapPointVoronoiPolygon(void);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<D0B5><C4B5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>غ<EFBFBD>
|
|
|
|
|
|
bool IsAdjacent(CPoint3D& pt, list<CPoint3D>& polygon,CRect8* pRect );
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡĿ<C8A1><C4BF>vector<6F><72><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>polygon<6F><6E><EFBFBD>ڽӹ<DABD>ϵ,<2C><><EFBFBD>ڽӵ<DABD><D3B5><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>vecAdjacent<6E><74> <20><><EFBFBD><EFBFBD><EFBFBD>ڽӵ<DABD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetAdjacentPoint(list<CPoint3D>& targetPts, list<CPoint3D>& polygon,set<CPoint3D*>& adjResult);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void AddPoint(list<CPoint3D>& nodlist, CPoint3D& pt, int addMode=0);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>true <20><> <20><><EFBFBD><EFBFBD>false
|
|
|
|
|
|
bool IsCollinear(double prec);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>㹲<EFBFBD><E3B9B2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>voronoi<6F><69>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
|
int CreateCollinearVoronoiMap();
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>㹲<EFBFBD><E3B9B2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>voronoi<6F><69>Ԫ<EFBFBD><D4AA>curveVoronoiList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>(CCurveEx)<29><><EFBFBD><EFBFBD>
|
|
|
|
|
|
int CreateCollinearVoronoiMap(TPtrList& curveVoronoiList);
|
|
|
|
|
|
//<2F><>ȡV<C8A1><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĶ<DAB5><C4B6><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD>,bCompareAllPgns= true <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚϣ<C8BD>false= ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>
|
|
|
|
|
|
int GetAdjacentPolygons(CVoronoiPolygon* pscrPgn, list<CVoronoiPolygon*>& dstpgns, bool bCompareAllPgns = false);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Voronoi<6F><69>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetNeighborWells(int iWell, vector<int>& neighborWells);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>εĴ<CEB5><C4B4>߽<EFBFBD>
|
|
|
|
|
|
CMyCurve* CreateBoundary( list<CVoronoiPolygon*>& pgns );
|
|
|
|
|
|
//<2F><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>εĴ<CEB5><C4B4>߽<EFBFBD><DFBD>߶<EFBFBD>
|
|
|
|
|
|
void GetBoundarySegs( list<CVoronoiPolygon*>& scrPgns, list<VSegment>& dstSegs );
|
|
|
|
|
|
//<2F><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>εĴ<CEB5><C4B4>߽<EFBFBD><DFBD>߶<EFBFBD>
|
|
|
|
|
|
void GetBoundarySegs( vector<CMyCurve*>& scrPgns, list<VSegment>& dstSegs );
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>繫<EFBFBD><E7B9AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>0
|
|
|
|
|
|
CMyCurve* CreateBoundary(list<VSegment>& scrSegs);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>VORONOIͼ
|
|
|
|
|
|
bool CreateSubVoronoi(list<CVoronoiPolygon*>& pgns, CMyCurve* pBoundary,CVoronoi& dstVrn,
|
|
|
|
|
|
std::map<int,int>& subwell2origwell,vector<CMyCurve*>* pFlts);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>voronoiͼ<69><CDBC><EFBFBD><EFBFBD>ԭͼ
|
|
|
|
|
|
void UpdateWithSubVoronoi(CVoronoi& dstVrn, std::map<int,int>& subwell2origwell);
|
|
|
|
|
|
//<2F><>vpolygon<6F><6E><EFBFBD><EFBFBD>vunit
|
|
|
|
|
|
void UpdateVUnitWithVPolygon(CVoronoiUnit* pDstUnit, CVoronoiPolygon* pScrPolygon);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>vpolygons
|
|
|
|
|
|
void ClearVPolygons(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int GetWellIndex(double x, double y);
|
|
|
|
|
|
//<2F><><EFBFBD>߶μ<DFB6>ȥ<EFBFBD><C8A5>ͬ<EFBFBD><CDAC><EFBFBD>֣<EFBFBD><D6A3>õ<EFBFBD><C3B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ֵ<EFBFBD><D6B5>߶θ<DFB6><CEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ཻ<EFBFBD><E0BDBB> <20><><EFBFBD><EFBFBD>0
|
|
|
|
|
|
int SubtractSegment(VSegment& v1, VSegment& v2, vector<VSegment>& dstSegs);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڶϲ<DAB6><CFB2>еľ<D0B5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
set<int>& GetWellInFlt(void);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD> etdLen Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳤<EFBFBD>ȣ<EFBFBD>ȱʡ-1
|
|
|
|
|
|
void GetRectLines(double x0, double y0, double w, double h,CMyCurve* lines, double etdLen = -0.1);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
vector<CPoint3D*> m_CCPoints;
|
|
|
|
|
|
/** @brief <20><><EFBFBD>й걳ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
vector<CVoronoiUnit*> m_VUnitList;
|
|
|
|
|
|
/** @brief voronoi<6F><69>Ԫ<EFBFBD><D4AA><EFBFBD>ϲ<EFBFBD><CFB2>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
list<CVoronoiPolygon*> m_vPolygons;
|
|
|
|
|
|
typedef list<CVoronoiPolygon*>::iterator VPITER;
|
|
|
|
|
|
|
|
|
|
|
|
/** @brief Voronoiͼ<69>߽<EFBFBD><DFBD><EFBFBD> */
|
|
|
|
|
|
CMyCurve m_Border;
|
|
|
|
|
|
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
CMyCurve m_OutlineCurve;
|
|
|
|
|
|
|
|
|
|
|
|
vector<CMyCurve*>* m_pFlts;
|
|
|
|
|
|
vector<CRect8> m_fltRects;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>///////////////////////
|
|
|
|
|
|
CPoint3D m_LastPoint;
|
|
|
|
|
|
set<int> m_markedPoints; //<2F><><EFBFBD>ǵľ<C7B5><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
map<int, int> m_mapPtVUnit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>voronoi unit<69><74><EFBFBD>ŵ<EFBFBD>map
|
|
|
|
|
|
map<int,CVoronoiPolygon*> m_mapPtVPng; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦVPolygonָ<6E><D6B8><EFBFBD><EFBFBD>map
|
|
|
|
|
|
set<int> m_wellinflt; //λ<>ڶϲ<DAB6><CFB2>ڲ<EFBFBD><DAB2>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڶϲ<DAB6><CFB2>ָ<EFBFBD>
|
|
|
|
|
|
CSize8* m_pConstrainSize; //<2F><><EFBFBD>ڷָ<DAB7><D6B8>ľ<EFBFBD><C4BE>γ<EFBFBD><CEB3><EFBFBD>
|
|
|
|
|
|
list<VSegment> m_splitterSegments; //<2F>ָ<EFBFBD>ˮ<EFBFBD><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}; //NTriangle
|