QuiltingHMI/datafile/datafilequix.h
2024-02-06 15:10:48 +08:00

119 lines
6.1 KiB
C++
Raw 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.

#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