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.
kev/Drawer/SSBase/FaciesTrackingAlgo/PolygonCreatorBoundary.h

152 lines
4.8 KiB
C

1 month ago
#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