|
|
|
|
|
#ifndef __POLYGONCREATORBOUNDARY_H__
|
|
|
|
|
|
#define __POLYGONCREATORBOUNDARY_H__
|
|
|
|
|
|
|
|
|
|
|
|
class CGDFObjectLine;
|
|
|
|
|
|
class CObjectPolyline;
|
|
|
|
|
|
class CGDFObjectFill;
|
|
|
|
|
|
class CGDFLayer;
|
|
|
|
|
|
class CGDFSegment;
|
|
|
|
|
|
class CFillBoundary;
|
|
|
|
|
|
|
|
|
|
|
|
#include <float.h>
|
|
|
|
|
|
#include "CommonDefines.h"
|
|
|
|
|
|
#include "PointSegment.h"
|
|
|
|
|
|
#include "BezierPointSegment.h"
|
|
|
|
|
|
class CPolygonCreatorLine;
|
|
|
|
|
|
|
|
|
|
|
|
class POLYGONCREATORSEGMENT
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
POLYGONCREATORSEGMENT();
|
|
|
|
|
|
|
|
|
|
|
|
char m_iType;//-1--invalid 0--ʵ<>߶<EFBFBD>,Ϊ<>ߵ<EFBFBD>һ<EFBFBD><D2BB> 1--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD> 3--<2D><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ķ˵<C4B6> 4--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
double m_dPosition;//<2F><><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>λ<EFBFBD><CEBB>(ͼ<><CDBC><EFBFBD><EFBFBD>)
|
|
|
|
|
|
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
double m_dHeadIndex;//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>߶<EFBFBD>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
|
|
|
|
|
|
double m_dHeadPosition;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(ͼ<><CDBC><EFBFBD><EFBFBD>)
|
|
|
|
|
|
};
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
double m_dEndIndex;//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>߶<EFBFBD>,<2C><>ʾ<EFBFBD>յ<EFBFBD><D5B5>ĵ<EFBFBD><C4B5><EFBFBD>
|
|
|
|
|
|
double m_dEndPosition;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><>ʾ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD>λ<EFBFBD><CEBB>(ͼ<><CDBC><EFBFBD><EFBFBD>)
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
CGDFObjectLine* m_pObject;
|
|
|
|
|
|
int m_iIndex;//<>ٵ<EFBFBD>ֵ<EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
BYTE m_byteHeadIsEnd;
|
|
|
|
|
|
BYTE m_byteEndIsEnd;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL OnInsertPoint(CObjectPolyline* pLine,double dIndex);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL EndIsEndOfObject();
|
|
|
|
|
|
BOOL HeadIsEndOfObject();
|
|
|
|
|
|
BOOL IsWholeClosedLine();
|
|
|
|
|
|
BOOL IsOnePoint();
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CPolygonCreatorSegment : public POLYGONCREATORSEGMENT
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPolygonCreatorSegment();
|
|
|
|
|
|
CPolygonCreatorSegment(CGDFObjectLine* pObject,double index0,double index1);//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
|
|
|
|
|
|
CPolygonCreatorSegment(int iType,double position,double headposition,double endposition);
|
|
|
|
|
|
CPolygonCreatorSegment(CPolygonCreatorSegment& segment);
|
|
|
|
|
|
CPolygonCreatorSegment(POLYGONCREATORSEGMENT& segment);
|
|
|
|
|
|
~CPolygonCreatorSegment();
|
|
|
|
|
|
|
|
|
|
|
|
//Attributes
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPoint2D m_headpoint;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
CPoint2D m_endpoint;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
|
|
|
|
|
|
CPoint2D m_headmappoint[6];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
CPoint2D m_endmappoint[6];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
|
|
|
|
|
|
//used for draw
|
|
|
|
|
|
POINT m_headdrawpoint[6];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
POINT m_enddrawpoint[6];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
|
|
|
|
|
|
|
short m_middlestartindex;
|
|
|
|
|
|
short m_middlepointcount;
|
|
|
|
|
|
|
|
|
|
|
|
//Operations
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
BOOL AddEnd(CGDFObjectLine* pObject,double index0,double index1);
|
|
|
|
|
|
BOOL AddEnd(int iType,double position,double headposition,double endposition);
|
|
|
|
|
|
BOOL AddEnd(CPolygonCreatorSegment& segment);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL AddHead(CGDFObjectLine* pObject,double index0,double index1);
|
|
|
|
|
|
BOOL AddHead(int iType,double position,double headposition,double endposition);
|
|
|
|
|
|
BOOL AddHead(CPolygonCreatorSegment& segment);
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
void CreateMapPoint();
|
|
|
|
|
|
CGDFObjectLine* CreateObject(CGDFLayer* pLayer,CTypedPtrArray<CPtrArray,CPolygonCreatorLine*>& linearray,CArray<POLYGONCREATORSEGMENT,POLYGONCREATORSEGMENT>& segmentarray);
|
|
|
|
|
|
FACIESSEGMENTDIRECTION GetDirection();
|
|
|
|
|
|
double GetEndPosition();
|
|
|
|
|
|
double GetHeadPosition();
|
|
|
|
|
|
double GetHeadIndex();
|
|
|
|
|
|
double GetEndIndex();
|
|
|
|
|
|
CGDFObjectLine* GetObjectG();
|
|
|
|
|
|
void SetPosition(double dValue);
|
|
|
|
|
|
double GetPosition();
|
|
|
|
|
|
void SetType(int iValue);
|
|
|
|
|
|
int GetType();
|
|
|
|
|
|
void SetHeadPosition(double dValue);
|
|
|
|
|
|
void SetEndPosition(double dValue);
|
|
|
|
|
|
BOOL OnInsertPoint(CObjectPolyline* pLine,double dIndex);
|
|
|
|
|
|
void operator=(CPolygonCreatorSegment& segment);
|
|
|
|
|
|
void operator=(POLYGONCREATORSEGMENT& segment);
|
|
|
|
|
|
void SendInsertPointMessage(CTypedPtrArray<CPtrArray,CPolygonCreatorLine*>& linearray,CArray<POLYGONCREATORSEGMENT,POLYGONCREATORSEGMENT>& segmentarray,CObjectPolyline* pLine,double dIndex);
|
|
|
|
|
|
void SetHeadIndex(double dValue);
|
|
|
|
|
|
void SetEndIndex(double dValue);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class CPolygonCreatorLine//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ߽<DAB1>
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPolygonCreatorLine();
|
|
|
|
|
|
~CPolygonCreatorLine();
|
|
|
|
|
|
//Attributes
|
|
|
|
|
|
public:
|
|
|
|
|
|
CArray<CPolygonCreatorSegment,CPolygonCreatorSegment> m_segmentarray;
|
|
|
|
|
|
private:
|
|
|
|
|
|
CBezierStyleDrawPointSegmentArray m_drawsegmentarray;
|
|
|
|
|
|
CBezierStyleMapPointSegmentArray m_mapsegmentarray;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL m_bNeedExtend;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL m_bModifyFlag;
|
|
|
|
|
|
//Operations
|
|
|
|
|
|
public:
|
|
|
|
|
|
void AddSegment(CGDFObjectLine* pObject,double index0,double index1);//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>߽<EFBFBD><DFBD><EFBFBD>
|
|
|
|
|
|
void AddSegment(int iType,double position,double headposition,double endposition);
|
|
|
|
|
|
int AddSegment(CPolygonCreatorSegment& segment,BOOL bCanCombine=TRUE);//bCanCombine<6E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĶκϲ<CEBA>
|
|
|
|
|
|
CFillBoundary* CreateBoundary(CGDFLayer* pLayer,CTypedPtrArray<CPtrArray,CPolygonCreatorLine*>& linearray,CArray<POLYGONCREATORSEGMENT,POLYGONCREATORSEGMENT>& segmentarray);
|
|
|
|
|
|
void DeleteSegment(int index,int count=1);
|
|
|
|
|
|
CPolygonCreatorSegment* GetSegment(int index);
|
|
|
|
|
|
CPolygonCreatorSegment* GetSegmentArray();
|
|
|
|
|
|
void GetSegmentArray(CArray<CPolygonCreatorSegment,CPolygonCreatorSegment>& segmentarray);
|
|
|
|
|
|
int GetSegmentCount();
|
|
|
|
|
|
void OnInsertPoint(CObjectPolyline* pLine,double dIndex);
|
|
|
|
|
|
int PointInBorder(int iType,double dPosition,double dHeadPosition,double dEndPosition,int iBorderType);
|
|
|
|
|
|
int PointInBorder(CPoint2D point);//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>ı߽<C4B1><DFBD><EFBFBD>
|
|
|
|
|
|
int PointInBorder(int iType,double dPosition,double dPointPosition);
|
|
|
|
|
|
BOOL GetModifyFlag();
|
|
|
|
|
|
|
|
|
|
|
|
void SetSegmentAsHead(int index);
|
|
|
|
|
|
CPolygonCreatorLine* TrySplitLine(int index);
|
|
|
|
|
|
int TryCombineSegment(int index);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|