QuiltingHMI/datafile/datafilequix.h

119 lines
6.1 KiB
C
Raw Normal View History

2024-02-06 07:10:48 +00:00
#ifndef DATAFILEQUIX_H
#define DATAFILEQUIX_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 QUIX_DATADIRX (1) // X向数据坐标与下位机坐标系统的差异
#define QUIX_DATADIRY (-1) // Y向数据坐标与下位机坐标系统的差异
#define QUIX_DATADIRR (-1) // R向数据坐标与下位机坐标系统的差异
#define QUIX_SHOWDIRX (1) // X向显示坐标和数据坐标的差异
#define QUIX_SHOWDIRY (-1) // Y向显示坐标和数据坐标的差异
#define QUIX_PREVIEW_SIDE (15) // 留边大小
#define QUIX_PREVIEW_WIDTH (156) // 默认预览图区域宽度
#define QUIX_PREVIEW_HEIGHT (164) // 默认预览图区域高度
typedef struct tagQuixFileHead
{
char id[7]; // 0x00000x0006; 标志:=="RICH"
char name[1]; // 0x0007; 文件名
unsigned char reserve1[6]; // 0x00080x000D; 保留
unsigned char rotateStyle; // 0x000E; 旋转式样
unsigned char rotateAngle; // 0x000F; 旋转角度
unsigned int left; // 0x00100x0013; 左边 (中间数据后,可以修改,改变起始点,单针机)
unsigned int front; // 0x00140x0017; 前边 (中间数据后,可以修改,改变起始点,单针机)
unsigned int scanX; // 0x00180x001B; 缩放X (中间数据前,可以修改,单针机和多针机)
unsigned int scanY; // 0x001C0x001F; 缩放Y (中间数据前,可以修改,单针机和多针机)
unsigned int normalStep; // 0x00200x0023; 针步大小(中间数据前,可以修改,单针机和多针机)
unsigned int reinMode; // 0x00240x0027; 加固模式(中间数据后,可以修改,终点有跨步的才加,单针机和多针机)
unsigned int reinNeedles; // 0x00280x002B; 加固针数(中间数据后,可以修改,终点有跨步的才加,单针机和多针机)
unsigned int reinNum; // 0x002C0x002F; 加固次数(中间数据后,可以修改,终点有跨步的才加,单针机和多针机)
unsigned int angleCorrPosX; // 0x00300x0033; 角度修正x正中间数据后可以修改拐角补偿单针机和多针机
unsigned int angleCorrPosY; // 0x00340x0037; 角度修正y正中间数据后可以修改拐角补偿单针机和多针机
unsigned int angleCorrNegX; // 0x00380x003B; 角度修正x负中间数据后可以修改拐角补偿单针机和多针机
unsigned int angleCorrNegY; // 0x003C0x003F; 角度修正y负中间数据后可以修改拐角补偿单针机和多针机
unsigned int stepQuiCorrection; // 0x00400x0043; 跨步绗缝修正(中间数据后,可以修改,拐角补偿,单针机和多针机)
unsigned int rollaComp; // 0x00440x0047; 罗拉补偿(中间数据后,让图形闭合,可以修改,多针机)
unsigned short angleCorrOffset; // 0x00480x0049; 角度修正量 (中间数据后,可以修改,拐角补偿,单针机和多针机,新加-hhy
unsigned char reserve2[6]; // 0x004A0x004F; 保留
unsigned int HStep; // 0x00500x0053; 水平方向针距 单位:0.1mm(绘制用,多针机)
unsigned int leftRightLen; // 0x00540x0057; 左针右针距离 单位:0.1mm(绘制用,多针机)
unsigned int VStep12; // 0x00580x005B; 第1 2排针距 单位:0.1mm(绘制用,多针机)
unsigned int VStep23; // 0x005C0x005F; 第2 3排针距 单位:0.1mm(绘制用,多针机)
// 排针每个字节:XXXX XXXX
// 针位n (0x00:无针,0x01:右针, 0x10:左针,0x11:左右针)
unsigned char arrayNeedle1[48]; // 0x00600x008F; 第1排排针绘制用多针机
unsigned char arrayNeedle2[48]; // 0x00900x00BF; 第2排排针绘制用多针机
unsigned char arrayNeedle3[48]; // 0x00C00x00EF; 第3排排针绘制用多针机
unsigned int firstPullLen; // 0x00F00x00F3; 一次拉料长度
unsigned int secondPullLen; // 0x00F40x00F7; 二次拉料长度
unsigned int triplePullLen; // 0x00F80x00FB; 三次拉料长度
unsigned char reserve3[4]; // 0x00FC0x00FF; 保留
unsigned char reserve4[768]; // 0x01000x0400; 保留
unsigned char reserve5[3072]; // 0x04010x1000; 保留
} __attribute__ ((packed)) QuixFileHead;
class DataFileQuix
{
public:
DataFileQuix();
protected:
QString m_fileFullPathName; // 文件路径
QByteArray m_absData; // 转换后的绝对坐标数据
QByteArray m_fileData;// 文件数据内容(原始数据)
private:
double m_minX;
double m_maxX;
double m_minY;
double m_maxY;
QuiPoint m_firstPoint;
private:
void creatAbsHeadAndAr();//生成绝对坐标数据文件头及ar
void getQuixMinMax();
int checkFileHead();
double getMutiUnit(int unit);
public:
void initFile(const QString & fullPathName);
void clear();
void loadFile();
void convertDataToEmbAbs(s16 falg = 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;} // 得到转换后的数据
QuixFileHead *getQuixHead();
void writePatternParaToFile(QuixFileHead *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