848 lines
23 KiB
C++
848 lines
23 KiB
C++
#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
|
||
//[输入] ptPoint0,ptPoint1,ptPoint2,ptPoint3方程的四个已知点
|
||
//[输入] 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中点类型将listDataPoint,listRealPoint分段
|
||
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_ptOffset,m_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是否为0,strValue2是否为 POLYLINE, LINE...)
|
||
//[输入] strValue1 需要判断的字符串
|
||
//[输入] strValue2 需要判断的字符串
|
||
//返回值:
|
||
// =true 是;false 不是
|
||
//说明:
|
||
//strValue1为空的话不判断不为空 判断是否为0, 为0继续strValue2的判断
|
||
bool JudgeCode(QString strValue1, QString strValue2);
|
||
|
||
#endif
|