274 lines
8.4 KiB
C++
274 lines
8.4 KiB
C++
#ifndef IMPORTHPGL_H
|
||
#define IMPORTHPGL_H
|
||
|
||
#include <QObject>
|
||
#include <QPen>
|
||
#include <QPainter>
|
||
#include <QFont>
|
||
#include <QFile>
|
||
#include <QCoreApplication>
|
||
#include <QDir>
|
||
#include <QProcess>
|
||
#include <QStringList>
|
||
#include <QImage>
|
||
#include <QBitmap>
|
||
#include <qtextcodec.h>
|
||
#include <QByteArray>
|
||
#include "marker.h"
|
||
#include "plotbitmap.h"
|
||
#include "QtGui/private/qzipreader_p.h"
|
||
//#include "QtGui/private/qzipwriter_p.h"
|
||
#include "datafile/qrencode/qrencode.h"
|
||
|
||
#define DEFCMD_IN 0x8A //IN
|
||
#define DEFCMD_SP 0x7C //SP
|
||
#define DEFCMD_LT 0xE6 //LT 0:PS_SOLID; 1:PS_DASH; 2:PS_DOT; 3:PS_DASHDOT
|
||
#define DEFCMD_PG 0x97 //PG
|
||
#define DEFCMD_PU 0xB5 //PU 单个PU
|
||
#define DEFCMD_PD 0x3D //PD 单个PD
|
||
#define DEFCMD_LPU 0x5E //PU 连续PU
|
||
#define DEFCMD_LPD 0x3B //PD 连续PD
|
||
#define DEFCMD_DI 0x5B //AG 角度
|
||
#define DEFCMD_SI 0x5D //SI 64位双精度浮点
|
||
#define DEFCMD_FN 0x4B //FN 字体名
|
||
#define DEFCMD_LB 0x4D //LB
|
||
#define DEFCMD_BT 0x9A //BIT 位图
|
||
#define DEFCMD_CODE 0xE7 //CODE 条形码、二维码
|
||
#define DEFCMD_NULL 0x00 //NUll 空指令
|
||
#define DEFCMD_DRILL 0xD2 //DRILL 冲孔
|
||
#define DEFCMD_NOTCH 0xD3 //NOTCH 剪口
|
||
|
||
#define M_IDPMM 40.0
|
||
#define MMPIXELY (600/25.4)
|
||
|
||
#define PREVIEW_SIDE (10)
|
||
#define PREVIEW_WIDTH (240)
|
||
#define PREVIEW_HEIGHT (240)
|
||
|
||
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
|
||
|
||
#define PixelFormatIndexed 0x00010000 // Indexes into a palette
|
||
#define PixelFormatGDI 0x00020000 // Is a GDI-supported format
|
||
#define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
|
||
|
||
#pragma pack(1) //设定为1字节对齐
|
||
|
||
struct SC
|
||
{
|
||
double dXMin;
|
||
double dXMax;
|
||
double dYMin;
|
||
double dYMax;
|
||
int nType;
|
||
double dLeft;
|
||
double dBottom;
|
||
};
|
||
|
||
class ImportHPGL : public QObject
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
explicit ImportHPGL(QObject *parent = 0);
|
||
virtual ~ImportHPGL();
|
||
|
||
signals:
|
||
|
||
public slots:
|
||
|
||
private:
|
||
//获得QR二维码版本
|
||
//输入参数:nCount 字符个数
|
||
//返回参数:QR二维码版本
|
||
int GetQRVesion(int nCount);
|
||
|
||
//样点旋转
|
||
//输入参数:
|
||
// ptPoint被旋转点,ptPointO旋转原点,dSinBeta,dCosBeta逆时针旋转角度的正余弦
|
||
//输出参数:
|
||
// ptPoint旋转后的值
|
||
void PointRotate(QPoint &ptPoint,QPoint ptPointO,double dSinBeta,double dCosBeta);
|
||
|
||
protected:
|
||
|
||
//分析S指令
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// bEndOfFile =true 已到文件尾
|
||
//返回值:
|
||
// true 正确的G指令
|
||
// false 不正确的G指令
|
||
bool S_Code();
|
||
bool I_Code();
|
||
bool P_Code();
|
||
bool PU_Code();
|
||
bool PD_Code();
|
||
bool L_Code();
|
||
bool D_Code();
|
||
bool SC_Code();
|
||
bool C_Code();
|
||
|
||
//读取一个字符
|
||
//输出参数:
|
||
// *pChar 读取的字符
|
||
//返回值:
|
||
// 1 成功取得一个字符
|
||
// 0 失败
|
||
uint ReadChar(char* lpBuf);
|
||
|
||
//读取一个非空格、非回车、非换行的字符
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// *pChar 读取的字符
|
||
//返回值:
|
||
// true 成功取得一个字符
|
||
// false 失败
|
||
bool GetChar(char *pChar);
|
||
//判断下一个非空格、非回车、非换行的字符是不是','
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//返回值:
|
||
// true 下一个非空格、非回车、非换行的字符是',', 并且已将','从文件中读出
|
||
// false 下一个非空格、非回车、非换行的字符不是',', 并且该字符没有从文件中读出
|
||
bool NextCharIsComma();
|
||
|
||
//取一个双精度浮点数
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// dValue 取得的双精度浮点数
|
||
//返回值:
|
||
// true 成功取得一个双精度浮点数dValue
|
||
// false 失败
|
||
bool GetDoubleData(double &dValue);
|
||
|
||
//取一个整数
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// iValue 取得的整数
|
||
//返回值:
|
||
// true 成功取得一个整数iValue
|
||
// false 失败
|
||
bool GetIntegerData(int &iValue);
|
||
|
||
//取坐标值
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// ptPoint 坐标
|
||
//返回值:
|
||
// true 成功
|
||
// false 失败
|
||
bool GetCoordinate(QPoint &ptPoint);
|
||
|
||
//获得线的类型
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// lineType 线型
|
||
//返回值:
|
||
// true 成功
|
||
// false 失败
|
||
bool GetLineType(LineType &lineType);
|
||
|
||
//查找一个指定的字符
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
// cFind 指定的字符
|
||
//输出参数:
|
||
// strInfo 从开始位置到指定字符之前的内容(不包括最后的指定字符)
|
||
//返回值:
|
||
// true 成功取得一个字符
|
||
// false 失败
|
||
bool SearchChar(char cFind,QString &strInfo);
|
||
|
||
//将文件的读取位置移到下一个英文字母(26个英文字母)
|
||
//输入参数:
|
||
// pFile 切割数据文件
|
||
//输出参数:
|
||
// *pChar 读取的字符
|
||
//返回值:
|
||
// true 成功将文件的读取位置移到下一个英文字母
|
||
// false 失败
|
||
bool MoveToNextEnglishChar();
|
||
|
||
//将m_listXY加入到m_pMarker中,并将m_listXY清空
|
||
void AddPolylineToMarker();
|
||
|
||
void AddPoint2listXY(QPoint ptPoint);
|
||
|
||
int m_iDPMM; //长度数据单位:m_iDPMM(每毫米点)
|
||
int m_iPenNo; //当前的笔号
|
||
QPoint m_ptCurrentPos; //笔的当前位置,单位:(1/CMarker::m_iDPMM)毫米
|
||
LineType m_lineType;//当前线型
|
||
bool m_bPenUp;//当前刀具的状态 true:刀具状态为抬起 false:刀具状态为落下
|
||
bool m_bPage;//是否识别到PG指令
|
||
|
||
Marker *m_pMarker; //当前使用的唛架,仅能在读文件时使用
|
||
double m_dScale; //读入文件时将切割数据文件的单位转换成内部数据单位时的比例
|
||
double m_rotateAngle;//旋转角度
|
||
QPen m_penPen;//笔绘画笔
|
||
QPen m_cutPen;//切割画笔
|
||
QPen m_halfCutPen;//半透切割画笔
|
||
|
||
QList <QPointF> m_listXY; //还没有确定抬落刀的坐标
|
||
//QPainterPath m_polylinePainterPath;//绘图路径-线段
|
||
|
||
unsigned char m_chTerminator;//标志终结符,除了NULL LF ESC及;十进制分别为0,5,27,59;外的所有字符,默认为ETX 十进制3
|
||
int m_nTerminatorMode;//模式0:打印1:不打印 默认值为1
|
||
|
||
double m_dTextHeight;//字的高度 单位cm
|
||
double m_dTextWidth;//字的宽度 单位cm
|
||
int m_nLableOrigin;//字符串相对于原点位置
|
||
double m_dTextAngle;//指定每行文本输出时相对于设备x轴的角度,其单位为1/10度
|
||
QPoint m_ptP1;//解析IP指令中的坐标点
|
||
QPoint m_ptP2;//解析IP指令中的坐标点
|
||
SC m_sc;//解析SC指令
|
||
double m_dScaleX;//通过 IP和SC指令算出的缩放比例
|
||
double m_dScaleY;//通过 IP和SC指令算出的缩放比例
|
||
QPoint m_ptOrigin;//通过 IP和SC指令算出的原点
|
||
int m_nLength;//用于PG分页,记录累计长度
|
||
char* m_pFileBuf;//存放从文件中读取的全部字符
|
||
int m_nCharCount;//已经读取的字符个数
|
||
int m_nFileLength;//文件长度
|
||
QString m_workPath;
|
||
|
||
bool m_bFontItalic; //文字斜体
|
||
int m_iFontSize; //字体榜数
|
||
QString m_strFontName;//字体名称
|
||
|
||
public:
|
||
//输入参数:
|
||
// pFile 需要读入的RS274D文件
|
||
// pMarker 解析到的数据保存到此唛架
|
||
//返回值:
|
||
// true 读入文件成功
|
||
// false 读入文件失败
|
||
bool Read(QString strPathName,Marker *pMarker);
|
||
bool Write(QString strPathName,Marker *pMarker);
|
||
//void creatPolylinePainterPath();//获得文件图形的范围
|
||
//QPainterPath GetPolylinePainterPath();
|
||
//int CreatePreviewImage(QString saveName,QImage * pImg = NULL, int saveflag = 0);
|
||
|
||
//初始化参数,读取参数前,需将参数值重置,避免造成参数值读取错误
|
||
void IniPara();
|
||
inline void setRotateAngle(double angle){m_rotateAngle = angle;}
|
||
|
||
QPoint GetTextOrigin(QPoint pt,QString strText);
|
||
double GetTextAngle(double dX,double dY);
|
||
void SetScale();
|
||
bool IsSecretFile(QString strPatnName);
|
||
int BitMapDtat(QString strFileName,QString strSecretFile);
|
||
bool ReadSecretFile(QString stePathName,Marker *pMarker); // 打开位图文件
|
||
|
||
private slots:
|
||
//输入参数:
|
||
// bUp 刀的状态,true:抬起状态 false:落下状态
|
||
// ptPoint 矢量字体中点阵中的一个坐标
|
||
void AddTextPointToLine(bool bUp,QPoint ptPoint);
|
||
};
|
||
|
||
#endif // IMPORTHPGL_H
|