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.

127 lines
3.3 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//////////////////////////////////////////////////////////////////
//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;
};