#pragma once #include "DrawOperator/PathXy.h" class AFX_EXT_CLASS CXyGroup :public CBaseExtend,public CXyBlock { public: CXyGroup(); virtual ~CXyGroup(); public: CRect8 m_rect; //框的矩形范围 CRect8 m_rtMargin; //外框和内部图的边距 CPoint2D m_ptAnchor; //锚点 double m_dPercent; //锚宽度比例,默认为1/4 public: virtual void Draw(CXyDC* pDC); virtual void Draw(CXyDC &dc); virtual void Draw(CXyDC& dc, void* pHowToView); virtual void Offset(double dx, double dy); virtual void ScaleCoor(double xs, double ys, double dx, double dy); virtual void ScaleProperty(double sx, double sy); virtual void Rotate(double xs, double ys, double angle); virtual void ScaleCoordinate(double sx, double sy, int mode); //mode=0:加,1:减,2:乘,3:除 virtual void ExchangeXY(void); //交换XY坐标 virtual void ExchangeXY(CProjection* pxyz); //转换到指定投影坐标 virtual void SetXy(void* pPathXy, BOOL bClear = TRUE); virtual void Serialize(CArchive& ar, const short& ver); void operator=(CXyGroup& pn); CCurveEx* GetCurve() { return &m_curve; } //计算外框范围 void ComputeRect(); //开关变量值 virtual void SetHide(BOOL bFlag); virtual void SetFrameAnchor(BOOL bFlag); virtual void SetAnchorFit(BOOL bFlag); virtual void SetFrameLineType(DWORD type); virtual void RemoveFrameLineType(DWORD type); virtual void SetFrameType(DWORD type); virtual void SetAlignH(DWORD type); virtual void SetAlignV(DWORD type); virtual void SetPathFillType(DWORD type); virtual BOOL IsShowFrame(); virtual BOOL IsHide(); virtual BOOL IsFrameAnchor(); virtual BOOL IsAnchorFit(); virtual BOOL IsFrameLineL(); virtual BOOL IsFrameLineR(); virtual BOOL IsFrameLineT(); virtual BOOL IsFrameLineB(); virtual BOOL IsFrameLineIcU(); virtual BOOL IsFrameLineIcD(); virtual BOOL IsFrameRect(); virtual BOOL IsFrameCircle(); virtual BOOL IsFrameEllipse(); virtual BOOL IsAlignLeft(); virtual BOOL IsAlignRight(); virtual BOOL IsAlignCenterH(); virtual BOOL IsAlignTop(); virtual BOOL IsAlignBottom(); virtual BOOL IsAlignCenterV(); virtual BOOL IsFillStyleAlternate(); virtual BOOL IsFillStyleWinding(); virtual int ReadPCG(CFile &fr, const short &ver); /** @brief 处理组合块符号没有加载到当前符号 */ virtual int ReadPCGEx(CFile &fr, const short &ver, void * pXy); void WritePCG(CFile &fw, const short& ver, int nBaseTabNum); virtual void GetRange(CRect8& range); virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint); virtual BOOL IsInRange(CRect8& range); //virtual void Calibrate(int type, void* pValue); virtual void SetRange(CRect8& range); int GetAnchorEdgeIndex(CPoint2D point); void CreateCurve(); void CreateRectCurve(); void CreateEllipseCurve(double dRadiusX, double dRadiusY); void Transform(CXyDC* pDC, float* matrix, BOOL bUndo); //根据偏移矩阵修改参数 virtual CBaseExtend* CreateClone(); public: enum enumGroupStyleFlags { GroupHide = 0x00000001, //隐藏 GroupFrameLineL = 0x00000002, //画左边框线 GroupFrameLineR = 0x00000004, //画右边框线 GroupFrameLineT = 0x00000008, //画上边框线 GroupFrameLineB = 0x00000010, //画下边框线 GroupFrameLineStraAll = (GroupFrameLineL | GroupFrameLineR | GroupFrameLineT | GroupFrameLineB), GroupFrameLineIcU = 0x00000020, //画斜上边框线 GroupFrameLineIcD = 0x00000040, //画斜下边框线 GroupFrameLineIcAll = (GroupFrameLineIcU | GroupFrameLineIcD), GroupFrameLineAll = (GroupFrameLineStraAll | GroupFrameLineIcAll), GroupFrameAnchor = 0x00000100, //边框使用锚点 GroupFrameRect = 0x00000200, //边框矩形 GroupFrameRoundRect = 0x00000400, //边框圆角矩形 GroupFrameEllipse = 0x00000800, //边框椭圆 GroupFrameAll = (GroupFrameRect | GroupFrameRoundRect | GroupFrameEllipse), //水平对齐方式 GroupAlignLeft = 0x00001000, //居左 GroupAlignCenterH = 0x00002000, //水平居中 GroupAlignRight = 0x00004000, //居右(缺省) GroupAlignAllH = (GroupAlignLeft | GroupAlignCenterH | GroupAlignRight), //垂直对齐方式 GroupAlignTop = 0x00008000, //居上 GroupAlignCenterV = 0x00010000, //垂直居中 GroupAlignBottom = 0x00020000, //居下(缺省) GroupAlignAllV = (GroupAlignTop | GroupAlignCenterV | GroupAlignBottom), PathFillAlternate = 0x00100000, //奇数充填,偶数不充填方式 PathFillWinding = 0x00200000, //不管是奇数还是偶数均充填 PathFillAll = (PathFillAlternate | PathFillWinding) }; enum enumAnchorStyleFlags { AnchorFit = 0x00000001, //固定 }; protected: CCurveEx m_curve; //边框线 DWORD m_dwAnchorFlags;//锚点风格 double m_dAnchorWidth; //锚宽度 protected: virtual void WritePCG_Callout(CFile& fw, int nBaseTabNum); //ggff2025 public: virtual int ReadPCG(CKXmlParse& xp, const short &ver); virtual int ReadPCGEx(CKXmlParse& xp, const short &ver, void * pXy); };