|
|
//////////////////////////////////////////////////////////////////
|
|
|
//FaciesObject.h
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "CommonDefines.h"
|
|
|
|
|
|
class FACIESPOINT;
|
|
|
class CGDFLayer;
|
|
|
class CGDFSegment;
|
|
|
class CPointSegmentArray;
|
|
|
|
|
|
//基本的图形元素,是点、线、区域及字串的基类
|
|
|
class CGDFObject : public CObject
|
|
|
{
|
|
|
public:
|
|
|
DECLARE_SERIAL(CGDFObject)
|
|
|
CGDFObject(CGDFLayer* pLayer=NULL);
|
|
|
virtual ~CGDFObject();
|
|
|
//Attributes
|
|
|
public:
|
|
|
//enum EDITMODE
|
|
|
//{
|
|
|
// modeNone,
|
|
|
// modeCreate,
|
|
|
// modeEdit,
|
|
|
// modeMove,
|
|
|
// modeHeadAdd,
|
|
|
// modeEndAdd,
|
|
|
// modeResize,
|
|
|
// modeMovePoint,
|
|
|
// modeInsertPoint,
|
|
|
// modeChangeRound,
|
|
|
// modeChangeTopInterface,
|
|
|
// modeChangeBottomInterface,
|
|
|
// modeNewStratum,
|
|
|
// modeNewSedimentUnit
|
|
|
//};
|
|
|
|
|
|
protected:
|
|
|
|
|
|
CObject* m_pManagerCell;//如果这个对象位于表格内部,这里是表格的指针
|
|
|
|
|
|
CGDFLayer* m_pLayer;
|
|
|
double m_dZoomFactor;
|
|
|
BOOL m_bModifyFlag;
|
|
|
CString m_strName;
|
|
|
CString m_strTypeName;
|
|
|
|
|
|
CObject* m_pManagerObject;
|
|
|
|
|
|
//EDITMODE m_editmode;
|
|
|
|
|
|
CTypedPtrArray<CPtrArray,CGDFSegment*> m_segmentarray;
|
|
|
|
|
|
//保存控制点序列
|
|
|
int m_iNodePointCount;
|
|
|
int m_iNodeDrawPointCount;
|
|
|
|
|
|
//对象的坐标范围
|
|
|
CRect m_drawrect;
|
|
|
CRect8 m_maprect;
|
|
|
|
|
|
CPoint m_firstpoint;
|
|
|
CPoint m_oldpoint;
|
|
|
|
|
|
//CYAPropertyManager m_PropertyManager;
|
|
|
|
|
|
CString m_strClassName;
|
|
|
|
|
|
BOOL m_bVisible;
|
|
|
|
|
|
ULONGLONG m_ullTimeStamp;
|
|
|
|
|
|
BOOL m_bReceiveChangeMessage;//为了避免相互影响的控制点造成消息死循环
|
|
|
//Operations
|
|
|
public:
|
|
|
void AddSegment(CGDFSegment* pSegment);
|
|
|
//线及控制点的绘制
|
|
|
virtual void BuildControlNodePointArray();
|
|
|
virtual void Clear();
|
|
|
void ClearPoint();
|
|
|
virtual void DuplicateObject(CGDFObject** ppObject,CGDFLayer* pLayer);//复制的对象与原对象不使用同一个点序列
|
|
|
virtual void DuplicateObject(CGDFObject* pObject);
|
|
|
void DeleteAllSegment();
|
|
|
virtual void DuplicateAttribute(CGDFObject* pObject);
|
|
|
CString GetClassNameG();
|
|
|
virtual int GetControlNodePointCount();//对象的控制点数
|
|
|
virtual int GetControlNodeDrawPointCount();//对象用于显示及编辑的控制点数,可能多于实际的控制点数
|
|
|
//用于显示的控制点保存在m_nodedrawpointarray中,该序列的个数就是GetControlNodeDrawPointCount()的返回值,
|
|
|
//只有CObjectPolyline是例外,保存在m_borderpointdrawarray中,该序列的个数是GetControlNodeDrawPointCount()*3
|
|
|
virtual POINT* GetControlNodeDrawPointArray();
|
|
|
void GetControlNodePointArray(CArray<FACIESPOINT,FACIESPOINT>& pointarray);
|
|
|
virtual CPoint2D* GetControlNodeMapPointArray();
|
|
|
virtual CRect GetDrawRect();
|
|
|
CGDFLayer* GetLayer();
|
|
|
virtual void SetLayer(CGDFLayer* pLayer);
|
|
|
virtual CRect8 GetMapRect();
|
|
|
|
|
|
virtual BYTE GetPointAttribute(int index,BYTE byteMask);
|
|
|
//CYAPropertyManager* GetPropertyManager();
|
|
|
|
|
|
CGDFSegment* GetSegment(int index);
|
|
|
void SetSegment(int index,CGDFSegment& segment);
|
|
|
int GetSegmentCount();
|
|
|
CString GetTypeName();
|
|
|
void SetTypeName(LPCTSTR str);
|
|
|
//接收Segment发来的消息
|
|
|
virtual BOOL OnChanged(CGDFSegment* pSegment=NULL);//一般的Segment改变的消息,如index0改变等
|
|
|
void SetManagerObject(CObject* pObject);
|
|
|
CObject* GetManagerObject();
|
|
|
//void SetModifyFlag(BOOL bValue);
|
|
|
virtual BOOL GetModifyFlag();
|
|
|
CString GetName();
|
|
|
BOOL SetName(LPCTSTR str);
|
|
|
BOOL GetVisible();
|
|
|
void SetVisible(BOOL bVisible);
|
|
|
double GetZoomFactor();
|
|
|
virtual void SetZoomFactor(double dZoomFactor);
|
|
|
|
|
|
void GetControlNodeIndexArray(CArray<POINTINDEX,POINTINDEX>& indexarray);
|
|
|
virtual void GetCurveEx(vector<CCurveEx*>& CurveVec,vector<CString>& faciescode);
|
|
|
|
|
|
friend class CGDFObjectCreator;
|
|
|
};
|
|
|
|