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.

157 lines
4.6 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.

#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);
};