PlotterHMI/datafile/dxf/dxflib/GroupCode.h
huahaiyan 9f74511e69 20240315
1、增加数据分割功能(完成)
2、更换dxf库(进行中)
2024-03-15 16:49:50 +08:00

848 lines
23 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#if !defined(GROUPCODE_H)
#define GROUPCODE_H
#include <iostream>
#include <QPoint>
#include <QRect>
#include <QObject>
//#include <afxtempl.h>
#define MAX_LINESTRING 2048 //一行中最大的字符数
#define OriginPoint (0, 0)
#define MIN_SAMEPOINTDISTANCE 0.001 //单位跟当前读入文件一致用于判断点是否为同一个点两个点的X/Y差都小于这个值就认为相同 20181009 从0.15改为0.01,用于QPointData类中的==判断
//20221102 XQ 将值由0.01改为0.001 绣花精度比较高,存在很小的圆
//#define MAX_SAMEPOINTDISTANCE 0.15 //20190221 寻找闭合曲线时, 判断两条曲线端点为同一个点的最大距离, 单位跟当前读入文件一致 0.15与V9保持一致
#define MIN_MAXDISTANCE 1 //单位跟当前读入文件一致, 误差最大值, 用于判断两条曲线距离,判断两条线是否为同一条
#define V10_G_MAX_SPLINE_ERROR 0.05 //曲线的逼近最大误差,单位:mm
#define V10_G_MAX_SPLINECTRL_ERROR 0.1 //反求样条曲线控制点的逼近最大误差,单位:mm
//////////////////////////////////////////////////////////////////////////
//点类型
#define POINT_TURN 0 //转折点
#define POINT_CURVE 1 //曲线点
#define POINT_ARC 2 //圆弧点
#define POINT_SPILINE 3 //三次样条
//组码类型
#define CODE_NULL -1
#define CODE_POLYLINE 0
#define CODE_LWPOLYLINE 1
#define CODE_LINE 2
#define CODE_MLINE 3
#define CODE_SPILINE 4
#define CODE_TEXT 5
#define CODE_MTEXT 6
#define CODE_ARC 7
#define CODE_CIRCLE 8
#define CODE_ELLIPSE 9
#define CODE_DIMENSION 10
//单位
#define CONST_MM 0
#define CONST_INCH 1
//////////////////////////////////////////////////////////////////////////
class CTextDataList;
class CPDSNurbsPointList;
class QPointData : public QObject
{
public:
double m_dX;
double m_dY; //点的坐标
QString m_strLayer; //点所属层 AutoCAD文件中层可以为字符串
/*
点类型
=POINT_TURN 转折点;
=POINT_CURVE曲线点
=POINT_ARC圆弧点
=POINT_SPILINE三次样条
默认转折点
*/
int m_iType;
int m_iGradeID; //放码ID
public:
QPointData(void);
QPointData(QPointData& a);
~QPointData(void);
void operator=(QPointData& a);
bool operator==(QPointData& a); //判断点坐标是否相等,按范围 MIN_SAMEPOINTDISTANCE
bool operator!=(QPointData& a); //按范围 MIN_SAMEPOINTDISTANCE
void Initial(void);
//20190221 判断两个点是否相等,按照给定的范围判断
//输入参数:
// a
// dMaxValue 范围
//返回值:
// =true 相等 =false不相等
bool Equal(QPointData&a, double dMaxValue);
//将点信息偏移
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
QPoint GetIntPoint();
//设置放码ID
//输入参数:
// listPointGrade 查找点链
void SetGradeID(CTextDataList &listPointGrade);
};
class CCurveNotchInforList;
class QPointDataList : public QList<QPointData,QPointData&>
{
public:
QPointDataList& operator=(QPointDataList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
QPointData& operator[](int iIndex);
//将曲线点链所有点信息偏移
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//得到矩形
QRect GetRect();
void GetIntPoint(QList<QPoint, QPoint> &listPoint);
//设置放码ID
//输入参数:
// listPointGrade 查找点链
void SetGradeID(CTextDataList &listPointGrade);
//设置点类型
//输入参数:
// listTurnPoint 转折点链
// listCurvePoint 曲线点链
void SetPointType(QPointDataList &listTurnPoint, QPointDataList &listCurvePoint);
//查找给定坐标点
//输入参数:
// PointData 点
//返回值:
// =true 找到;=false没有找到
bool FindSamePoint(QPointData PointData);
//将每一个点转成一个曲线链
void GetCurveInforList(CCurveNotchInforList &listCurveInfor);
//20201021 XQ 移除相邻的相同点,头尾点不处理
void RemoveSamePoint();
};
class CGroupCode : public QObject
{
public:
//在Auto CAD中颜色和线型都是使用符号表示的
int m_iType; //类型CODE_NULL....
QString m_strLayer; //所属层
QString m_strColor; //所属颜色, 如果为空,为所属层颜色
QString m_strViewCurveType; //通过查找对应表得到线类型..... 如果为空表示默认线型
public:
CGroupCode(void);
CGroupCode(CGroupCode& a);
~CGroupCode(void);
void operator=(CGroupCode& a);
void Initial(void);
void CopyData(CGroupCode &a);
};
//////////////////////////////////////////////////////////////////////////
//曲线信息
class CCurveInfor : public CGroupCode
{
public:
QPointDataList m_listCtrlCurve;
bool m_bClose; //=true 闭合曲线;=false 开口曲线
//下面三个变量目前只有m_iCurveType为CODE_SPILINE时有效
int m_iCtrlPointType; //= 0表示曲线经过控制点=1 不经过,三次样条; =2 表示 CODE_SPILINE已经被处理过 默认1
QList<double, double> m_listdCode40; //存放组码为40的值 结点数
QList<double, double> m_listdCode41; //存放组码为41的值 权值 如果为空权值为1
QPointDataList m_listReadCurve; //存放读入的拟合点, 不做任何处理,读入什么数据存放什么数据
QList<QPoint, QPoint> m_listPoint; //实际点链
public:
CCurveInfor(void);
CCurveInfor(CCurveInfor& a);
~CCurveInfor(void);
void operator=(CCurveInfor& a);
void Initial(void);
//将曲线点链所有点信息偏移
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//得到矩形
QRect GetRect();
//翻转头点变尾点,尾点变头点
void Reverse();
//得到闭合曲线的中心点(将所有点的X/Y坐标加起来取平局值)
void GetMiddlePoint(QPointData &PDMiddle);
//计算CODE_SPILINE的控制点
void CalcuateSPlineCurve();
//将曲线控制点链分段
void Segmentation(QList<QPointDataList, QPointDataList&> &listPointDataList);
//设置曲线链中的点类型和放码ID
//输入参数:
// listPointGrade 放码点
// listTurnPointLayer 转折点
// listCurvePointLayer 曲线点
void SetPointTypeGradeID(CTextDataList &listPointGrade, QPointDataList &listTurnPointLayer, QPointDataList &listCurvePointLayer);
//计算曲线实际点链
//[输入] iDPMM 放大比例
void CalcuateActualPoint(int iDPMM);
//20200219 XQ 获取实际点链
//输出参数:
// listCurve 实际点链
//说明:
// 调用该函数之前必须调用计算实际点链函数
void GetCurve(QList<QPoint, QPoint> &listCurve);
//20201021 XQ 移除相邻的相同点,只对控制点操作
void RemoveSamePoint();
private:
//计算实际点链
//[输入] iDPMM 放大比例
//[输入] listCtrlPoint 控制点 只有一种类型(头尾点除外,中间点只有一种类型转折点,曲线点,圆弧点)
//[输出] listPoint实际点链
void CalcuateCurveInfor(int iDPMM, QPointDataList &listCtrlPoint, QList<QPoint, QPoint> &listPoint);
//计算三次样条
// [输入] listPoint 三次样条的四个控制点,
// [输出] listCtrl 逼近的控制点
//返回值:
// =ture 计算成功;=false 计算失败
//说明:
// 不管是否计算成功;两头点为转折点,中间点为控制点
bool CalculateSPLine(QPointDataList &listPoint, QPointDataList &listCtrl);
//设置点类型
//输入参数:
// listPoint 需要处理的点链
// bTurn =true所有点处理为转折点=false两头点为转折点中间点为曲线点
void SetPointType(QPointDataList &listPoint, bool bTurn);
//计算方程 t*t*t*ptPoint0+2*t*t*(1-t)ptPoint1+3*t*(1-t)*(1-t)ptPoint2+(1-t)*(1-t)*(1-t)ptPoint3
//[输入] ptPoint0ptPoint1ptPoint2ptPoint3方程的四个已知点
//[输入] dPro 比值t的值该值范围在0到1
//返回值:
// 方程的结果点
QPointData CalcuateEquation(QPointData ptPoint0, QPointData ptPoint1, QPointData ptPoint2, QPointData ptPoint3, double dPro);
//QPointData转CPDSNurbsPoint
void PointDataToNurbsPoint(QPointDataList &listPointData, CPDSNurbsPointList &listNurbsPoint);
//CPDSNurbsPoint转QPoint
void NurbsPointToPoint(CPDSNurbsPointList &listNurbsPoint, int iDPMM, QList<QPoint, QPoint> &listPoint);
//QPoint转QPointData
void PointToPointData(QList<QPoint, QPoint> &listPoint, int iDPMM, QPointDataList &listPointData);
//根据listDataPoint中点类型将listDataPointlistRealPoint分段
void NurbsSegmention(CPDSNurbsPointList &listDataPoint, CPDSNurbsPointList &listRealPoint, int iDPMM,
CArray < QList <QPoint, QPoint> , QList <QPoint, QPoint> > &arCtrlPoint, CArray < QList <QPoint, QPoint> , QList <QPoint, QPoint> > &arRealPoint, bool &bClose);
};
//////////////////////////////////////////////////////////////////////////
//剪口信息
class CNotchInfor : public QObject
{
public:
QPointData m_ptNotch;
int m_iNotchLayer; //剪口层 =4 I型; = 80 T型;= 81 Box型 =82 V型; =83 U型;
double m_dNotchWidth;
bool m_bNotchWidth; //=true 按读入数据处理;=false 按系统默认数据处理
double m_dNotchDepth;
bool m_bNotchDepth; //=true 按读入数据处理;=false 按系统默认数据处理
double m_dNotchAngle;
bool m_bAngle; //=true 表示角度可以用,=false 表示角度不可用
public:
CNotchInfor(void);
CNotchInfor(CNotchInfor& a);
~CNotchInfor(void);
void operator=(CNotchInfor& a);
void Initial(void);
//位置偏移,旋转和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
};
class CNotchInforList : public QList<CNotchInfor,CNotchInfor&>
{
public:
CNotchInforList& operator=(CNotchInforList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CNotchInfor& operator[](int iIndex);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
};
//////////////////////////////////////////////////////////////////////////
//线及其线上附带信息(例如:剪口)
class CCurveNotchInfor : public QObject
{
public:
CCurveInfor m_CurveInfor;
CNotchInforList m_listNotch;
public:
CCurveNotchInfor(void);
CCurveNotchInfor(CCurveNotchInfor& a);
~CCurveNotchInfor(void);
void operator=(CCurveNotchInfor& a);
void Initial(void);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置曲线链中的点类型和放码ID
//输入参数:
// listPointGrade 放码点
// listTurnPointLayer 转折点
// listCurvePointLayer 曲线点
void SetPointTypeGradeID(CTextDataList &listPointGrade, QPointDataList &listTurnPointLayer, QPointDataList &listCurvePointLayer);
//得到矩形
QRect GetRect();
//翻转头点变尾点,尾点变头点
void Reverse();
//20200219 XQ 获取实际点链
//输出参数:
// listCurve 实际点链
//说明:
// 调用该函数之前必须调用计算实际点链函数
void GetCurve(QList<QPoint, QPoint> &listCurve);
};
class CCurveNotchInforList: public QList<CCurveNotchInfor,CCurveNotchInfor&>
{
public:
CCurveNotchInforList& operator=(CCurveNotchInforList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CCurveNotchInfor& operator[](int iIndex);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置曲线链中的点类型和放码ID
//输入参数:
// listPointGrade 放码点
// listTurnPointLayer 转折点
// listCurvePointLayer 曲线点
void SetPointTypeGradeID(CTextDataList &listPointGrade, QPointDataList &listTurnPointLayer, QPointDataList &listCurvePointLayer);
//得到矩形
QRect GetRect();
//得到所有点
void GetAllPointData(QPointDataList &listPointData);
//20200220 XQ 得到所有剪口点
void GetAllNotchPoint(CNotchInforList &listNotchInfor);
//得到实际点链
//[输入] bClose =true 闭合
//[输出] listCurve 实际点链
//说明:
// 按照链表的顺序连接所有链, 除去相同点
void GetCurve(QList<QPoint, QPoint> &listCurve, bool bClose);
//计算实际点链
//[输入] iDPMM 放大比例
void CalcuateActualPoint(int iDPMM);
//20201021 XQ 移除相邻的相同点,头尾点不处理
void RemoveSamePoint();
};
//////////////////////////////////////////////////////////////////////////
//文字
class CTextData : public CGroupCode
{
public:
QPointData m_PointData;
QString m_strText;
bool m_bReadHeight;
double m_dHeight;
double m_dAngle;
public:
CTextData(void);
CTextData(CTextData& a);
~CTextData(void);
bool operator==(CTextData& a);
void operator=(CTextData& a);
void Initial(void);
//文字位置偏移
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//得到矩形
QRect GetRect();
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
};
class CTextDataList : public QList<CTextData,CTextData&>
{
public:
CTextDataList& operator=(CTextDataList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CTextData& operator[](int iIndex);
//文字位置偏移
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//得到矩形
QRect GetRect();
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
//查找给定坐标的字符串
//输入参数:
// PointData坐标
//输出参数:
// TextData 找到文本 返回值为true有效
//返回值:
// =true 找到;=false没有找到
bool FindSamePointText(QPointData PointData, CTextData &TextData);
};
//////////////////////////////////////////////////////////////////////////
//钻孔信息
class CDrillInfor : public QObject
{
public:
QPointData m_ptDrill;
bool m_bRadius; //=true 按读入数据处理钻孔;=false 按系统默认数据处理钻孔
double m_dRadius;
int m_iCommand; // =0 GP_DCM_DRILL = 1 GP_DCM_DRAW
public:
CDrillInfor(void);
CDrillInfor(CDrillInfor& a);
~CDrillInfor(void);
void operator=(CDrillInfor& a);
void Initial(void);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
};
class CDrillInforList : public QList<CDrillInfor,CDrillInfor&>
{
public:
CDrillInforList& operator=(CDrillInforList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CDrillInfor& operator[](int iIndex);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//设置放大
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
//设置点放码ID
void SetGradeID(CTextDataList &listGradePoint);
};
//////////////////////////////////////////////////////////////////////////
//INSERT标识符信息
class CInsertData : public CGroupCode
{
public:
QString m_strBlockName;
QPointData m_InsertPoint;
double m_dScaleX; //20191012 XQ
double m_dScaleY;
double m_dRotateAngle; //旋转角度
public:
CInsertData(void);
CInsertData(CInsertData& a);
~CInsertData(void);
bool operator==(CInsertData& a);
void operator=(CInsertData& a);
void Initial(void);
};
class CInsertDataList : public QList<CInsertData,CInsertData&>
{
public:
CInsertDataList& operator=(CInsertDataList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CInsertData& operator[](int iIndex);
//根据给定的块名找出对应的块
//[输入] strBlockName 块名
//[输出] InsertData 插入位置
//返回值:
// 找到插入位置, 没有找到返回NULL
POSITION FindBlockName(QString strBlockName, CInsertData &InsertData);
};
//////////////////////////////////////////////////////////////////////////
class CCurveNotchInforList;
//寻找纸样边线所用到的结构
class CCloseCurveInfor : public QObject
{
public:
CCurveNotchInforList m_listCurveInfor;
double m_dAreaRect; //所在矩形面积
public:
CCloseCurveInfor(void);
CCloseCurveInfor(CCloseCurveInfor& a);
~CCloseCurveInfor(void);
void operator=(CCloseCurveInfor& a);
void Initial(void);
void GetAreaRect();
void GetHeadTail(QPointData &PointDataH, QPointData &PointDataT);
//得到点链
//说明:
// 将链表中的m_listCurveInfor放到一个链中
void GetPointList(QPointDataList &listPointData);
//得到闭合曲线的中心点(将所有点的X/Y坐标加起来取平局值)
void GetMiddlePoint(QPointData &PDMiddle);
};
class CCloseCurveInforList: public QList<CCloseCurveInfor,CCloseCurveInfor&>
{
public:
CCloseCurveInforList& operator=(CCloseCurveInforList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CCloseCurveInfor& operator[](int iIndex);
//找列表中面积最大的
POSITION FindMaxAreaRect();
};
/////////////////////////////////////////////////////////////////////////
//纸样块, 该类主要用于读入数据之后处理纸样数据时用到的
//说明:
//该类没有SetRotateOffsetScale的原因 在类中不需要对数据进行偏移->旋转->放大缩小, 偏移和旋转 放在m_ptOffsetm_dAngle中
class CPatternBlock : public QObject
{
public:
QString m_strPatternName; //纸样名
QString m_strSizeName; //号型名
QString m_strComment; //注释COMMENT/ANNOTATION
CStringArray m_arrMaterial; //布料名
CUIntArray m_arrQuantity; //总片布料份数 Quantity:<R,L>
CUIntArray m_arrLQuantity; //左片布料份数 Quantity:<R,L>
//m_arrQuantity, m_arrLQuantity大小保持一致
bool m_bFlip; //翻转信息 =true 允许翻转
double m_dRotation; //最大倾斜角 Rotation<0...360>
bool m_bFold; //折叠 Fold:<Y/N> =true 允许折叠
double m_dTilt; //最大倾斜角度 Tilt:<+/-0..90>
CCurveNotchInforList m_listBorder; //边线
CCurveNotchInforList m_listSeam; //缝份线
CCurveNotchInforList m_listAssistantCurve; //辅助线
CTextDataList m_listText; //字符串
//读AutoCAD文件
//CNotchInforList m_listNotch; //剪口
CDrillInforList m_listDrill; //钻孔
CCurveNotchInfor m_GrainLine; //布纹线
CCurveNotchInfor m_SymmetryLine; //对称轴
//下面变量只用于读ASTM/AAMA
CCurveNotchInfor m_GradeLine; //放码线
//纸样的偏移和旋转角度旋转点为QPoint(0,0), 水平为零度
QPointData m_ptOffset;
double m_dAngle;
public:
CPatternBlock(void);
CPatternBlock(CPatternBlock& a);
~CPatternBlock(void);
void operator=(CPatternBlock& a);
void Initial(void);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//放缩
//输入参数:
//dScale 放大缩小比例
void SetScale( double dScale);
QRect GetRect();
//计算实际点链
//[输入] iDPMM 放大比例
void CalcuateActualPoint(int iDPMM);
private:
//拷贝
void CopyPatternInfor(CPatternBlock& a);
};
class CPatternBlockList : public QList<CPatternBlock,CPatternBlock&>
{
public:
CPatternBlockList& operator=(CPatternBlockList& rhs); // 赋值
//获取指定索引值上的项
//输入参数:
// iIndex 索引值,从0开始,不可越界
//返回值:
CPatternBlock& operator[](int iIndex);
//位置偏移和放缩
//输入参数:
//dOffsetX/dOffsetY 偏移量
//dSin/dCos 旋转角度, 旋转点为QPoint(dOffsetX, dOffsetY), 水平为零度
//dScaleX/dScaleY 放大缩小 20220408 XQ
//说明:
// 偏移->旋转->放大缩小
void SetRotateOffset(double dOffsetX, double dOffsetY, double dSin, double dCos, double dScaleX, double dScaleY);
//放缩
//输入参数:
//dScale 放大缩小比例
void SetScale(double dScale);
QRect GetRect();
//下列函数用于V10系统中创建纸样所用
//得到列表中所有纸样的号型名
//输出参数:
// listAllSizeName 号型名大小与this列表一样 顺序也一致
void GetAllSizeName(QList<QString,QString> &listAllSizeName);
//找给定名称的号型的在列表中的位置
//输入参数:
// strSizeName 号型名
//返回值:
// 号型名的在列表中的位置, 找到的第一个; NULL表示没有
POSITION FindSizeName(QString strSizeName);
//计算实际点链
//[输入] iDPMM 放大比例
void CalcuateActualPoint(int iDPMM);
};
//读一行字符串
//[输入] bReadWindowText =true 回车是用0x0A表示的=false 回车则是0x0D0A
//[输入] iMaxCount 一行中最大的长度
//[输入] fFile 文件
//返回值:
// 读入的文字
QString GetALineOfFile(bool bReadWindowText, int iMaxCount, FILE *fFile);
//读两行字符串
//[输入] bReadWindowText =true 回车是用0x0A表示的=false 回车则是0x0D0A
//[输入] fFile 文件
//[输出] strString1/strString2 连续两行数据
void ReadTwoLineString(bool bReadWindowText, FILE *fFile, QString &strString1, QString &strString2);
//判断给定的字符串是否为一个数据块的开始标识符(strValue1是否为0strValue2是否为 POLYLINE, LINE...)
//[输入] strValue1 需要判断的字符串
//[输入] strValue2 需要判断的字符串
//返回值:
// =true 是false 不是
//说明:
//strValue1为空的话不判断不为空 判断是否为0 为0继续strValue2的判断
bool JudgeCode(QString strValue1, QString strValue2);
#endif