#pragma once #include "SmartPtr.h" #include "ObjBase.h" #include "GlobalDefine.h" #include "ObjContainer.h" //偏移区域 class COffsetRect { public: DbRect m_Rect; Dbxy m_Offset; }; class CLayer { public: ~CLayer(void); static CLayer &Instance();//单例模式 void Serialize(CArchive& ar); void Draw(CDC* pDC); void XorRedrawObj(CDC* pDC,bool bNeedSel = true); void AddObject(CObjBase *pMarkObject); void AddObject(Sptr p); void AddObject(CObjContainer &ObjContainer); void AddTmpObject(Sptr p); void DelSelObj(); void DelObj(Sptr p); void DelObj(CObjContainer &ObjContainer); void ClearTmpObj(); bool SelObjectInRect(DbRect rect,bool bNeedAllIn); void SelAllObj(); void DelAllObj(); void NotSelAllObj(); void RevSelAllObj(); bool HasSelObjectInRect(DbRect rect); bool HasObjSel(); MOUSE_TOOL JudgeMouseToolType(Dbxy pt); void OperateObj(SObjOperatePar &par,bool bAll); DbRect GetSelObjRect(); void OnRotato(double Angle); void OnMirror(X_OR_Y xy); void OnMove(double MoveX,double MoveY,bool bAddUndo = true); void GetLineInRect(DbRect &rect,vector &DataPtLineVec,bool bCatchTemp); void CloneObj(CObjContainer &ObjContainer,bool bNeedSel); Sptr GetFirstObjInRect(DbRect &rect); Sptr GetFirstNodeObjInRect(DbRect &rect); bool HasObjectInRect(DbRect rect); void GetIntersectPoint(DbLine &line,vector &PointVec); bool HasObjIntersectWithLine(DbLine &line); void OnReverseSelObj(); bool OnJoin(); void OnExplode(); bool HasSelNodeInRect(DbRect rect); void BindingSelObjToDlg(); CObjContainer &GetObjContainer(){return *m_ObjContainer;}; void FillObj(SFillPar FillPar,bool bNeedSel = true); CMFCPropertyGridProperty *CreatSpecialGridProperty(CModule *pModule); void OnSpecialPropertyChanged(); void BindObjContainer(CObjContainer &Container); void GetAllPointObjPt(vector &PtVec); bool IsOffsetRect(DbRect rect); void UpdateRectObjOffset(); private: CLayer(void); void DrawAllObj(CDC* pDC); private: static CLayer m_Instance;//单例模式 CObjContainer *m_ObjContainer;//obj 对象容器 CObjContainer m_TmpObjContainer;//临时obj 对象容器(主要用于创建时捕捉) };