#pragma once #include "GlobalDefine.h" #include "DataPoint.h" #include "SequentialPoint.h" #include "SmartPtr.h" #include "ObjFill.h" #include "MarkParMgr.h" #include "LabVecRang.h" #include "ObjGeometryPorp.h" class CModule; class CObjPline; class CObjBase { public: CObjBase(void); CObjBase(CObjBase &rhs); virtual void WriteWorkFileExt(vector &LabVec); virtual void ReadWorkFileExt(CLabVecRang &LabVecRang); virtual ~CObjBase(void); virtual CString GetStr(){return "objbase";}; virtual CObjBase * Clone(){return new CObjBase;}; virtual void Draw(CDC* pDC,CPen &Pen); virtual void Draw(CDC* pDC); virtual bool IsInRect(DbRect rect,bool bNeedAllIn){return m_PtContainer.IsInRect(rect,bNeedAllIn);};//obj 的点是否在rect 内 virtual OBJ_TYPE GetType(){return _TYPE_BASE;}; //创建特殊设置属性 virtual CMFCPropertyGridProperty *CreatSpecialGridProperty(CModule *pModule){return NULL;}; virtual void OnSpecialPropertyChanged(){}; virtual void SetSelected(bool bSelected); virtual void Operate(SObjOperatePar &par); virtual DbRect GetRect(); virtual Dbxy GetCenterPt(){return GetRect().GetCenterPt();}; virtual void BindingDlg(){}; virtual void GetPtData(vector> &vec); virtual void GetFillData(vector> &vec); virtual void CreatFillData(SFillPar FillPar); virtual void GetLineInRect(DbRect &rect,vector &DataPtLineVec,bool bGetCatchNode = true); virtual void CreatByDia(double Dia){}; public: void WriteWorkFile(vector &LabVec); void ReadWorkFile(CLabVecRang &LabVecRang); void AddDataPoint(CDataPoint pt); void CopyPt(CObjBase &rhs); void AddNodePt(CDataPoint pt); bool Empty(); void DelAllPt();//删除所有数据点 void DelLastDataPoint();//删除最后一个节点 void DrawLastLine(CDC* pDC,CPen &Pen); bool IsSelected(); bool HasNodeInRect(DbRect rect); vector& GetPtContainer(){return m_PtContainer.GetPtContainer();}; void SetLastPoint(CDataPoint &pt); Dbxy GetFirstPt(); Dbxy GetLastPt(); int GetNodePtIdx(Dbxy pt); void DelNodePtByIdx(int idx); void InsertNode(int idx,Dbxy pt); void SetNodePtByIdx(int idx,Dbxy pt); int GetPtCnt(); SFillPar GetFillPar(){return m_FillPar;}; bool IntersectWithLine(DbLine &line); void SetLock(bool b){m_bLocked = b;}; void SetbDraw(bool b){m_bDraw = b;}; void CreatConcentricData(vector &GapVec); void SaveOldSelState(){m_OldSelState = m_bSelected;}; void RecoverOldSelState(){m_bSelected = m_OldSelState;}; bool IsbCollected(){return m_bCollected;}; void SetbCollected(bool b){m_bCollected = b;}; int GetPenNum(){return m_PenNum;}; void SetPenNum(int n){m_PenNum =n;}; void SetbOffsetAreaRect(bool b){m_bOffsetAreaRect = b;}; bool IsbOffsetAreaRect(){return m_bOffsetAreaRect;}; protected: void OnCreat(); void DrawFill(CDC* pDC,CPen &Pen); void OperateFill(SObjOperatePar &par); void SaveSequentialPoint(ofstream *pfile); void SaveObjType(ofstream *pfile,CString s); private: void WriteWorkFileBase(vector &LabVec); void ReadWorkFileBase(CLabVecRang &LabVecRang); COLORREF GetColor(); vector GetConcentricData(double Gap); void AddDataPointVec(vector &DataPointVec); Dbxy GetSizeAdjust2(); protected: CSequentialPoint m_PtContainer;//坐标数据的容器(一条连续线段) CSequentialPoint m_NodePtContainer;//存储额外用于捕获的点(比如圆心点) vector m_FillDataVec;//填充数据容器 SFillPar m_FillPar;//填充参数 bool m_bSelected;//是否被选中 bool m_OldSelState;//旧的选择状态 bool m_bLocked;//是否锁定,锁定后不能修改 bool m_bDraw;//是否绘制 int m_PenNum;//笔号 CObjGeometryPorp m_GeometryPorp;//管理obj 的几何属性 bool m_bCollected;//是否被收集 Dbxy m_CutOffset;//切割偏移 bool m_bOffsetAreaRect;//是否为偏移调整区域对象 };