|
|
|
|
|
/**************************************************************************************
|
|
|
|
|
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Contour2Polygon.h
|
|
|
|
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
|
|
|
|
|
|
*****************************************************************************************/
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#ifndef AFX_EXT_CLASS
|
|
|
|
|
|
#define AFX_EXT_CLASS Q_DECL_IMPORT
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#include "MyCurve.h"
|
|
|
|
|
|
#include "TBase/TMultiTree.h"
|
|
|
|
|
|
#include "curvegraph.h"
|
|
|
|
|
|
#include <set>
|
|
|
|
|
|
#include <map>
|
|
|
|
|
|
#include <functional>
|
|
|
|
|
|
namespace GObjects
|
|
|
|
|
|
{
|
|
|
|
|
|
//class CPolygonTree;
|
|
|
|
|
|
class AFX_EXT_CLASS CCon2Pgn : protected CCurveGraph
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CCon2Pgn(void);
|
|
|
|
|
|
virtual ~CCon2Pgn(void);
|
|
|
|
|
|
|
|
|
|
|
|
void ClearAll(void);
|
|
|
|
|
|
void SetContours(vector<CMyCurve*>& vec);
|
|
|
|
|
|
void SetFlts(vector<CMyCurve*>& scrFlts);
|
|
|
|
|
|
void SetBorder(CMyCurve& border);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>õ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>쳤<EFBFBD><ECB3A4>
|
|
|
|
|
|
void SetExtensivePara(double dext) { m_dext = dext; }
|
|
|
|
|
|
double GetExtensivePara(void) const { return m_dext; }
|
|
|
|
|
|
//<2F><><EFBFBD>˱߽<CBB1><DFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ֵ<EFBFBD>ߺͶϲ<CDB6>
|
|
|
|
|
|
void FilterOutsideContours(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ɵ<EFBFBD>ֵ<EFBFBD><D6B5>
|
|
|
|
|
|
void CreatePolygons(void); //
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5>ļ<EFBFBD><C4BC><EFBFBD> ,decimalPlaces Ϊ<><CEAA><EFBFBD>ౣ<EFBFBD><E0B1A3><EFBFBD><EFBFBD>λС<CEBB><D0A1>
|
|
|
|
|
|
void WritePolygons(char* strOutput, int decimalPlaces = 2);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5>ļ<EFBFBD><C4BC>У<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Χ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>,<2C><>','<27>ָ<EFBFBD>
|
|
|
|
|
|
void WritePurePolygons(char* strOutput);
|
|
|
|
|
|
|
|
|
|
|
|
vector<CMyCurve*>& GetPolygons() { return m_dstPolygons; }
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2>zֵ<7A><D6B5>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zֵ
|
|
|
|
|
|
double GetPolygonValue(CMyCurve& curve);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>ɫ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ֵ<EFBFBD><D6B5>ֵ<EFBFBD><D6B5>ȡ<EFBFBD>õ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
COLORREF GetColor(double val);
|
|
|
|
|
|
//psubj<62>Ƿ<EFBFBD><C7B7><EFBFBD>prange<67><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><F2B2BFB7><EFBFBD><EFBFBD>ڲ<EFBFBD>
|
|
|
|
|
|
static bool IsCurveInside(CMyCurve* pRange, CMyCurve* pSubj);
|
|
|
|
|
|
|
|
|
|
|
|
//override
|
|
|
|
|
|
protected:
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>佻<DFBC><E4BDBB> <20>ɰ<EFBFBD><C9B0>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
|
|
|
|
|
|
virtual int GetCrossPoints(void);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>д<EFBFBD><D0B4><EFBFBD>ຯ<EFBFBD><E0BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ҹ<EFBFBD><D2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|
|
|
|
|
virtual PT3Node* GetNextNode(PT3Node* pLastNode, PT3Node* pCurrentNode);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ŵ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ɱպ<C9B1><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
public:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>λ<EFBFBD><CEBB>
|
|
|
|
|
|
class STurning
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
/* SFltSec(void);*/
|
|
|
|
|
|
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> С<><D0A1>ǰ <20><><EFBFBD>ں<EFBFBD>
|
|
|
|
|
|
STurning(CCurveGraph::PT3Node* pLast, CCurveGraph::PT3Node* pCurrent, CCurveGraph::PT3Node* pNext, ESide eside);
|
|
|
|
|
|
/*bool operator==(const SFltSec& pd2) const;*/
|
|
|
|
|
|
bool operator<(const STurning& pt2) const;
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
CCurveGraph::PT3Node* mp1;
|
|
|
|
|
|
CCurveGraph::PT3Node* mp2;
|
|
|
|
|
|
CCurveGraph::PT3Node* mp3;
|
|
|
|
|
|
//bool mbForw; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6>߷<EFBFBD><DFB7><EFBFBD>
|
|
|
|
|
|
CCurveGraph::ESide mSide;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
////<2F><><EFBFBD><EFBFBD><EFBFBD>߽磬<DFBD><E7A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
//void SortBorder(void);
|
|
|
|
|
|
////<2F><>ȡ<EFBFBD>߽<EFBFBD>,<2C>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ߵĽ<DFB5><C4BD>㣬<EFBFBD><E3A3AC><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//void GetAllCrossPoints(void);
|
|
|
|
|
|
////<2F><>ȡ<EFBFBD><C8A1><EFBFBD>е<EFBFBD>ֵ<EFBFBD>߶<EFBFBD>Ӧ<EFBFBD>ı߽罻<DFBD><E7BDBB><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>Ӧ<EFBFBD>ĵ<EFBFBD>ֵ<EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
|
|
|
|
|
|
//void GetContourNodes(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<><D7B7><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Trace(void);
|
|
|
|
|
|
//<>ٱ߽<D9B1><DFBD><EFBFBD>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void TraceBorderPolygons(CMyCurve* border);
|
|
|
|
|
|
//<>ٱ߽<D9B1>(<28><><EFBFBD>ϲ<EFBFBD>)<29><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶ζ<DFB6>Ӧ<EFBFBD>ıպ϶<D5BA><CFB6><EFBFBD><EFBFBD>ν<EFBFBD><CEBD><EFBFBD>list<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>list<73><74><EFBFBD><EFBFBD>ccurve,<2C><><EFBFBD><EFBFBD>m_outputPolygons<6E><73>
|
|
|
|
|
|
bool TraceFltSegPolygon(CMyCurve* curve, SCRPoint* startSCRPt, bool bBorder);
|
|
|
|
|
|
//<><D7B7>һ<EFBFBD><D2BB><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void TraceFltPolygons(CMyCurve* flt);
|
|
|
|
|
|
//<><D7B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ֵ<EFBFBD>߶<EFBFBD>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> ww 2019
|
|
|
|
|
|
void TraceContourPolygons(CMyCurve* pContour);
|
|
|
|
|
|
//<2F>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CMyCurve* CreateOneOpenPolygon(list<PT3Node*>& lstNodes);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ֵ<EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>,<2C>պϵ<D5BA>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD> ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
// m_bCheckZ<6B>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD>
|
|
|
|
|
|
void TraceOutputPolygons(void);
|
|
|
|
|
|
|
|
|
|
|
|
void EnableCheckZ(bool b) { m_bCheckZ = b; }
|
|
|
|
|
|
|
|
|
|
|
|
//members
|
|
|
|
|
|
private:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|
|
|
|
|
double m_dext;
|
|
|
|
|
|
CMyCurve* m_pBorder;
|
|
|
|
|
|
vector<CMyCurve*> m_contours; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> <20>ⲿָ<E2B2BF><D6B8>
|
|
|
|
|
|
vector<CMyCurve*> m_bd_faults; //<2F><><EFBFBD><EFBFBD><EFBFBD>ı߽<C4B1><DFBD><EFBFBD>ַ<EFBFBD>Ͷϲ<CDB6> <20>ⲿָ<E2B2BF><D6B8> <20><>һ<EFBFBD><D2BB>Ϊ<EFBFBD>߽<EFBFBD>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
vector<CMyCurve*> m_dstPolygons;
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>պ϶<D5BA><CFB6><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>״ͼ<D7B4><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ww 2019.4.16
|
|
|
|
|
|
void TraceOutputCircles(list<CMyCurve*>& closingCurves);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>openpolygons<6E>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
void CombineOpenPolygons(void);
|
|
|
|
|
|
bool IsFltZ(double z);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD>߽<EFBFBD><DFBD>ϵĽ<CFB5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ָ<EFBFBD><D6B8> <20><><EFBFBD><EFBFBD>m_borderCxNodes
|
|
|
|
|
|
void GetBorderCXNodes(void);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>zֵ<7A><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD> m_checkZ<6B>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void FilterDstPolygons(void);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϸö<CFB8><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>legal
|
|
|
|
|
|
bool IsPolygonLegal(CMyCurve* pgn);
|
|
|
|
|
|
//<2F>жϽ<D0B6><CFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><D7B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʱʹ<CAB1><CAB9>
|
|
|
|
|
|
virtual bool IsNodeAvaliable(PT3Node* pNode) override;
|
|
|
|
|
|
|
|
|
|
|
|
//ɾ<><C9BE><EFBFBD>ϲ<EFBFBD><CFB2>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>߽߱<DFB1><DFBD>ⲿ<EFBFBD>ķǷ<C4B7><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void EraseIllegalPolygons(vector<CMyCurve*>& srcCurves);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
set<STurning> m_tracedTurnings; // tmp <20><>¼<EFBFBD>Ѿ<EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
private:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|
|
|
|
|
vector<CMyCurve*> m_openContPolygons; //<2F><><EFBFBD>ŵ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ɵıպ϶<D5BA><CFB6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
vector<int> m_circleIndexes; //<2F>պϵ<D5BA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
map<int, list<int> > m_mapFltNodes; //<2F>洢ÿһ<C3BF><D2BB><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĽ<D0B5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD> <20><><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
vector<GBase::CRect8> m_rectFlts; //<2F><><EFBFBD>жϲ<D0B6><CFB2><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
//set<CMyCurve*> m_fltPolygons; //<2F>ɶϲ<C9B6><EFBFBD>ٳ<EFBFBD><D9B3><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1>ͼ<EFBFBD><CDBC><EFBFBD>
|
|
|
|
|
|
double m_maxVal;
|
|
|
|
|
|
double m_minVal;
|
|
|
|
|
|
double m_conStep;
|
|
|
|
|
|
const double m_dFLTZ; //ȱʡ<C8B1><CAA1><EFBFBD>ߺͱ߽<CDB1>zֵ
|
|
|
|
|
|
|
|
|
|
|
|
bool m_bCheckZ; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Zֵ<5A><D6B5><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|
|
|
|
|
|
|
|
|
|
|
set<PT3Node*> m_borderCxNodes; //<2F><>¼<EFBFBD>߽<EFBFBD><DFBD>ϵĽ<CFB5><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
set<CMyCurve*> m_borderPolygons; //<2F>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڱ߽<DAB1><DFBD>ϵĶ<CFB5><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool m_bBorderTracing; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ٱ߽<D9B1>
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
typedef TTreeNode<CMyCurve*> CPgnNode;
|
|
|
|
|
|
typedef TMultiTree<CMyCurve*> CPgnTree;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>պ϶<D5BA><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊһϵ<D2BB><CFB5>PolygonTreeNod<6F><64><EFBFBD>ڵ<EFBFBD> ÿ<><C3BF>nod<6F><64><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
|
class AFX_EXT_CLASS CPolygonTree
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPolygonTree();
|
|
|
|
|
|
~CPolygonTree();
|
|
|
|
|
|
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
void SetRootCurve(CMyCurve* pRootCurve);
|
|
|
|
|
|
CMyCurve* GetRootCurve(void);
|
|
|
|
|
|
void SetChildCurves(vector<CMyCurve*>& childCurves);
|
|
|
|
|
|
void AddChildCurve(CMyCurve* pChild);
|
|
|
|
|
|
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void BuildTree(void);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲㼶<DFB2><E3BCB6>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> minAreaΪ<61><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool BuildTreeWithHierarchy(vector< vector<int> >& hierarchy, double minArea = -100);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SetFilterArea(double area) { m_minArea = area; }
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void CreatePolygons(void);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>״Ȧ<D7B4><C8A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ɾ<EFBFBD><C9BE>
|
|
|
|
|
|
vector<CMyCurve*> m_outCurves;
|
|
|
|
|
|
CPgnTree& GetTree(void) { return m_tree; }
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ݹ麯<DDB9><E9BAAF> <20><><EFBFBD>ݵ<EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>m_outCurves bQuickTraceΪ<65><CEAA><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD>
|
|
|
|
|
|
void TracePolygons(CPgnNode* pNode,bool bCombineAdjacent = true, bool bQuickTrace= false);
|
|
|
|
|
|
//<2F><><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD>CPgnNode* pNode<64><65><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>m_outCurves
|
|
|
|
|
|
void QuickTracePolygons(CPgnNode* pNode, bool bCombineAdjacent = false, bool bQuickTrace = true);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static CMyCurve* CreateCombinedCurve(CMyCurve* pSeed, list<CMyCurve*>& candidates);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD>㲢<EFBFBD><E3B2A2><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void CreateNInsertChild(CMyCurve* pCurve);
|
|
|
|
|
|
//<2F><><EFBFBD>ݲ㼶<DDB2><E3BCB6>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ㲢<DAB5><E3B2A2><EFBFBD>뵽<EFBFBD><EBB5BD>
|
|
|
|
|
|
void CreateNInsertChildrenWithHierarchy(void);
|
|
|
|
|
|
//<2F><><EFBFBD>ݸ<EFBFBD><DDB8>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
|
|
|
|
|
|
void AddChildrenWithHierarchy(int iParent);
|
|
|
|
|
|
//ͨ<><CDA8><EFBFBD>㼶<EFBFBD><E3BCB6>ϵ<EFBFBD><CFB5>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int hSiblingNext(int icurrent);
|
|
|
|
|
|
int hSiblinePrev(int icurrent);
|
|
|
|
|
|
int hChild(int icurrent);
|
|
|
|
|
|
int hParent(int icurrent);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>dstcurves
|
|
|
|
|
|
int CombineAdjacentPolygons(list<CMyCurve*>& scrlst, float rootValue, vector<CMyCurve*>& dstcurves);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>,<2C><>scrVecȡ<63><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dstgroups,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>dstgroups
|
|
|
|
|
|
int SelectAdjacentPolygons(list<CMyCurve*>& scrlst, vector<vector<CMyCurve*> >& dstgroups);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>scrlst<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pscr<63><72><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>scrlst<73><74><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dstpgns,<2C><><EFBFBD>ز<EFBFBD><D8B2>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int SelectAdjacentPolygons(CMyCurve* pscr, list<CMyCurve*>& scrlst, vector<CMyCurve*>& dstpgns);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>Σ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϼ<EFBFBD>Ȧ<EFBFBD>սӽ<D5BD><D3BD><EFBFBD>zֵ
|
|
|
|
|
|
int CreateUnitedPolgons(vector< vector<CMyCurve*> >& groups, float rootValue, vector<CMyCurve*>& dstcurves);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>Σ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ϼ<EFBFBD>Ȧ<EFBFBD>սӽ<D5BD><D3BD><EFBFBD>zֵ
|
|
|
|
|
|
int CreateUnitedPolgons(vector<CMyCurve*>& group, float rootValue, vector<CMyCurve*>& dstcurves);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>
|
|
|
|
|
|
CMyCurve* m_rootCurve;
|
|
|
|
|
|
vector<CMyCurve*> m_childCurves;
|
|
|
|
|
|
vector<CPgnNode*> m_nodeVec;
|
|
|
|
|
|
CPgnTree m_tree;
|
|
|
|
|
|
double m_minArea; //<2F><>СȦ<D0A1><C8A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F>ӽڵ<D3BD><DAB5>㼶<EFBFBD><E3BCB6>ϵ <20><><EFBFBD><EFBFBD>opencv<63>ã<EFBFBD>
|
|
|
|
|
|
//vector<int><3E><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ԫ<EFBFBD><D4AA> <20><>ʾ 0<><30><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
vector< vector<int> > m_hierarchy;
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
using namespace GObjects;
|
|
|
|
|
|
//<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ཻ<EFBFBD><E0BDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غϲ<D8BA><CFB2><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD> isInsideFunc<6E><63>ʾp2<70>Ƿ<EFBFBD>λ<EFBFBD><CEBB>p1<70>ڲ<EFBFBD><DAB2>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
AFX_EXT_API CMyCurve* CombinePolygons(vector<CMyCurve*>& polygons,
|
|
|
|
|
|
function<bool(CMyCurve*, CMyCurve*)> insideFunPtr = nullptr);
|
|
|
|
|
|
//ֻ<>ϲ<EFBFBD><CFB2>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD>غϲ<D8BA><CFB2><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
AFX_EXT_API void CombinePolygons(vector<CMyCurve*>& polygons, vector<CMyCurve*>& polygonsOut,
|
|
|
|
|
|
function<bool(CMyCurve*, CMyCurve*)> insideFunPtr = nullptr);
|
|
|
|
|
|
//<2F>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>õĶ<C3B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
AFX_EXT_API CMyCurve* CombinePolygons(vector<CPolygonTree*>& pgnTrees);
|