////////////////////////////////////////////////////////////////// //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 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& 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& indexarray); virtual void GetCurveEx(vector& CurveVec,vector& faciescode); friend class CGDFObjectCreator; };