QuiltingHMI/datafile/datafilequi.h

131 lines
6.5 KiB
C
Raw Normal View History

2024-02-06 07:10:48 +00:00
#ifndef DATAFILEQUI_H
#define DATAFILEQUI_H
#include <QFileInfo>
#include <QFile>
#include <QString>
#include <QByteArray>
#include <QImage>
#include <QDebug>
#include <QPainter>
#include <QRgb>
#include "math.h"
#include <QBrush>
#include "stdint.h"
//#include "vectorsqrt.h"
#include "machine/comm/datadef.h"
#include "machine/comm/crc16.h"
#include "datafile/dataoperat.h"
#define QUI_DATADIRX (1) // X向数据坐标与下位机坐标系统的差异
#define QUI_DATADIRY (-1) // Y向数据坐标与下位机坐标系统的差异
#define QUI_DATADIRR (-1) // R向数据坐标与下位机坐标系统的差异
#define QUI_SHOWDIRX (1) // X向显示坐标和数据坐标的差异
#define QUI_SHOWDIRY (-1) // Y向显示坐标和数据坐标的差异
#define QUI_PREVIEW_SIDE (15) // 留边大小
#define QUI_PREVIEW_WIDTH (156) // 默认预览图区域宽度
#define QUI_PREVIEW_HEIGHT (164) // 默认预览图区域高度
typedef struct tagQuiltingFileHead
{
char id[4]; // 0x00—0x03; 标志:=="RICH"
char name[8]; // 0x04—0x07; 文件名
unsigned char reserve1[4]; // 0x0C—0x0F; 保留
unsigned char ver; // 0x10; 版本号
unsigned char unit; // 0x11; 单位 0x00: 0.1mm; 0x01: 1/1000inch; 0x02: 0.04mm;0x03: 0.01mm
unsigned char type; // 0x12; 类型, 0x00: 多针机英制; 0x01: 多针机公制; 0x10: 单头机英制; 0x11:单头机公制
unsigned char reserve2[11]; // 0x13—0x1D; 保留
unsigned short HStep; // 0x1E—0x1F; 水平方向针距 单位:0.1mm(绘制用,多针机)
unsigned short leftRightLen; // 0x20—0x21; 左针右针距离 单位:0.1mm(绘制用,多针机)
unsigned short VStep12; // 0x22—0x23; 第1 2排针距 单位:0.1mm(绘制用,多针机)
unsigned short VStep23; // 0x24—0x25; 第2 3排针距 单位:0.1mm(绘制用,多针机)
// 排针每个字节:XXXX XXXX
// 针位n (0x00:无针,0x01:右针, 0x10:左针,0x11:左右针)
unsigned char arrayNeedle1[48]; // 0x26—0x55; 第1排排针绘制用多针机
unsigned char arrayNeedle2[48]; // 0x56—0x85; 第2排排针绘制用多针机
unsigned char arrayNeedle3[48]; // 0x86—0xB5; 第3排排针绘制用多针机
unsigned char rotateStyle; // 0xB6; 旋转式样
unsigned char rotateAngle; // 0xB7; 旋转角度
unsigned char reinMode; // 0xB8; 加固方式
unsigned char reinNum; // 0xB9; 次数
unsigned char reserve3[4]; // 0xBA—0xBD; 保留
unsigned short angleCorrOffset; // 0xBE ; 角度修正量 (中间数据后,可以修改,拐角补偿,单针机和多针机,新加-hhy
unsigned char angleCorrPosX; // 0xC0 ; 角度修正x正中间数据后可以修改拐角补偿单针机和多针机
unsigned char angleCorrPosY; // 0xC1 ; 角度修正y正中间数据后可以修改拐角补偿单针机和多针机
unsigned char angleCorrNegX; // 0xC2 ; 角度修正x负中间数据后可以修改拐角补偿单针机和多针机
unsigned char angleCorrNegY; // 0xC3 ; 角度修正y负中间数据后可以修改拐角补偿单针机和多针机
unsigned char stepQui[2]; // 0xC4—0xC5; 跨步绗缝
unsigned char reinNeedles; // 0xC6; 加固绗缝针数(中间数据后,可以修改,终点有跨步的才加,单针机和多针机)
unsigned char rollaYUpDn; // 0xC7; 罗拉补偿y上下中间数据后让图形闭合可以修改多针机
unsigned char rollaYRev; // 0xC8; 罗拉补偿y预留
unsigned char normalStep; // 0xC9; 针步大小(中间数据前,可以修改,单针机和多针机)
unsigned char miniStep; // 0xCA; 最小针步
unsigned char reserve4[4]; // 0xCB—0xCE; 保留
unsigned char saddleRatio[2]; // 0xCF—0xD0; 鞍架比例
unsigned char rollaRatio[2]; // 0xD1—0xD2; 罗拉比例
unsigned char reinQuiNeedleHigh; // 0xD3; 加固绗缝针数高字节
unsigned short left; // 0xD4—0xD5; 左边 (中间数据后,可以修改,改变起始点,单针机)
unsigned short front; // 0xD6—0xD7; 前边 (中间数据后,可以修改,改变起始点,单针机)
unsigned short scanX; // 0xD8—0xD9; 缩放X (中间数据前,可以修改,单针机和多针机)
unsigned short scanY; // 0xDA—0xDB; 缩放Y (中间数据前,可以修改,单针机和多针机)
unsigned short totalOutput; // 0xDC—0xDD; 本花样累计总产量
unsigned short currentOutput; // 0xDE—0xDF; 本花样当次产量
unsigned short serWorkLa; // 0xE0-0xE1; 连续作业前留边
unsigned short serWorkLb; // 0xE2-0xE3; 连续作业后留边
unsigned char stepCompUpDn; // 0xE4; 跨步补偿y上下(多针机专业)(中间数据后,可以修改,多针机)
unsigned char reserve6[27]; // 0xE5—0xFF; 保留
} __attribute__ ((packed)) QuiFileHead;
class DataFileQui
{
public:
DataFileQui();
protected:
QString m_fileFullPathName; // 文件路径
QByteArray m_absData; // 转换后的绝对坐标数据
QByteArray m_quiFileData;// 文件数据内容(原始数据)
private:
double m_minX;
double m_maxX;
double m_minY;
double m_maxY;
QuiPoint m_firstPoint;
private:
void creatAbsHeadAndAr();//生成绝对坐标数据文件头及ar
void getQuiMinMax();
int checkFileHead();
double getMutiUnit(int unit);
public:
void initFile(const QString & fullPathName);
void clear();
void loadFile();
void convertDataToEmbAbs(s16 flag = 1);
int createPreviewImage(QImage * pImg = NULL, int saveflag = 0, int penwidth = 1, int reDraw = 0); // 生成预览文件
inline const QString & getFileFullPathName() const {return m_fileFullPathName;} // 文件路径名称
inline QByteArray & getEmbAbsData() {return m_absData;} // 得到转换后的数据
QuiFileHead *getQuiHead();
void writePatternParaToFile(QuiFileHead *head);//将花样参数配置写到文件中
void moveDataBeginPonit(s32 left, s32 front);//移动数据起始点
public:
int getStitchNums();//得到数据的针数
int getDatWidth();//得到数据的图形宽度
int getDatHeight();//得到数据的图形高度
int getMaxX();//得到数据最大X+
int getMinX();//得到数据最小X-
int getMaxY();//得到数据最大Y+
int getMinY();//得到数据最小Y-
};
#endif // DATAFILEQUI_H