191 lines
7.7 KiB
C++
191 lines
7.7 KiB
C++
#ifndef EMBDATA_H
|
||
#define EMBDATA_H
|
||
|
||
#include <QList>
|
||
#include <QByteArray>
|
||
#include <QApplication>
|
||
#include <QDir>
|
||
#include <QImage>
|
||
#include <qmath.h>
|
||
#include <QDebug>
|
||
#include <QFile>
|
||
#include <QFileInfo>
|
||
#include <QPainter>
|
||
#include <QObject>
|
||
#include <QRgb>
|
||
#include "machine/comm/datadef.h"
|
||
#include "machine/comm/crc16.h"
|
||
|
||
#define TOTAL_NEEDLE_NUM 49//总的针杆数,绣花32个(1-32),冲孔16个(33-48),缝纫1个(49)
|
||
#define EMB_NEEDLE_NUM 32//绣花32个针杆
|
||
#define PUNCH_NEEDLE_NUM 16//冲孔16个针杆
|
||
#define SEW_NEEDLE_NUM 1 //缝纫1个针杆
|
||
|
||
#define PREVIEW_SIDE (32) // 留边大小
|
||
#define TENTHOUSANDNEEDLE 100000
|
||
|
||
#define SHOWDIRX (-1) // X向显示坐标和数据坐标的差异
|
||
#define SHOWDIRY (1) // Y向显示坐标和数据坐标的差异
|
||
|
||
#define COLOR_GREY 186 //纯灰色的rgb
|
||
#define PREVIEW_SIDE (32) // 留边大小
|
||
|
||
#define PI10000 31416
|
||
#define PI20000 62832
|
||
|
||
|
||
class EmbData: public QObject
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
EmbData();
|
||
~EmbData();
|
||
|
||
public:
|
||
void clear();
|
||
void initColor(int cnum = 0, QRgb * pColor = NULL);//初始化颜色
|
||
QByteArray & getDsDat();//得到转换后的ds16数据
|
||
inline DataDs16FileHead * getDsDatHead(){return m_pDs16Head;}//得到转换后的ds16数据的文件头
|
||
|
||
void setDsDatHeadFileID(u32 fileid);//设置数据区文件头的fileid
|
||
void appendAbsFile(QString filePath,QByteArray array,int mirror = 0);//附加一个绝对坐标的花样文件
|
||
void getAbsDatRangeXY();//得到绝对坐标的maxXY和minXY
|
||
|
||
int addLockStitchs(int locktimes, int locksteps, int lockstepsize);//加锁针
|
||
int addContinuousRunCompensate(int value, int idx = -1);//连续动框补偿
|
||
|
||
public:
|
||
inline QString getFileName(){return m_pDs16Head->fileName;}//得到花版名称
|
||
inline int getStitchNums(){return m_pDs16Head->itemNums;}//得到数据的针数
|
||
inline u32 getColorNums(){return m_pDs16Head->colorNumber;}//得到数据的色数
|
||
inline int getDatWidth(){return m_pDs16Head->maxX - m_pDs16Head->minX;}//得到数据的图形宽度
|
||
inline int getDatHeight(){return m_pDs16Head->maxY - m_pDs16Head->minY;}//得到数据的图形高度
|
||
inline int getMaxX(){return m_pDs16Head->maxX;}//得到数据最大X+
|
||
inline int getMinX(){return m_pDs16Head->minX;}//得到数据最小X-
|
||
inline int getMaxY(){return m_pDs16Head->maxY;}//得到数据最大Y+
|
||
inline int getMinY(){return m_pDs16Head->minY;}//得到数据最小Y-
|
||
inline int getBeginX(){return m_pDs16Head->beginX;}//得到数据起始点
|
||
inline int getBeginY(){return m_pDs16Head->beginY;}//得到数据起始点
|
||
inline int getAnchorX(){return m_pDs16Head->anchorX;}//得到数据定位点
|
||
inline int getAnchorY(){return m_pDs16Head->anchorY;}//得到数据定位点
|
||
inline int getPunchNum(){return m_pDs16Head->punchNum;}//得到总的冲孔个数
|
||
|
||
public:
|
||
QByteArray getColorTable();//得到数据的色序表
|
||
void setAbsDat(QByteArray & dat);
|
||
QByteArray & getAbsDat(void);
|
||
void setDs16ColorOfTable(u8* table); //改变色序颜色
|
||
int getPosInfoFromNeedleIdx(int stitchIdx, int & posx, int & posy, int & posr, int & colorIdx);
|
||
int getPosInfoFromColorIdx(int & stitchIdx, int & posx, int & posy, int & posr, int colorIdx);
|
||
int getNeedleIdxFromColorIdx(int & needleIdx, int colorIdx, u8 & stepCtrl);
|
||
void setNeedleColorTable(int colorIdx, int colorvalue); //针杆颜色
|
||
void setStartPosition(int x, int y);//设置起始点
|
||
void setAnchorPosition(int x, int y);//设置定位点
|
||
void setSplitStitchLength(int length = 0);
|
||
|
||
public:
|
||
int setDatSizeChange(int dsx, int dsy, int idx = -1);//设置尺寸变化
|
||
int setMirror(int mirror, int idx = -1);//设置镜像
|
||
int setFLip(int mirror, int idx = -1);//设置垂直翻转
|
||
int setNeedleTipCompensation(s16 correct = 0); // 旋转机头针尖补偿
|
||
int setRotate(int dr, int idx = -1);//设置旋转
|
||
int setToMiddle(int idx = -1);//设置居中
|
||
int setDatMove(int dx, int dy, int idx = -1);//设置数据移动
|
||
|
||
private:
|
||
//此函数转换传入的绝对坐标值,是否取镜像及反复时数据之间的间距
|
||
void convertAbsDat(QByteArray & dat,int mirror = 0);
|
||
int createDs16FromAbs();//生成DS16数据
|
||
int reCalcDataChecksum();//重新计算文件CRC
|
||
QByteArray intTo2ByteArray(s16 value);//短整型转换为byte
|
||
void drawNeedleIdxPen(int x, int y, QPainter &painter);//绘制针数索引的跟踪笔
|
||
void eraseNeedleIdxPen(QPainter &painter);//擦除针数索引的跟踪笔
|
||
|
||
public:
|
||
int m_editedflag;//数据被编辑的标志
|
||
int m_spaceX;//横向间隙
|
||
int m_spaceY;//纵向移动距离
|
||
int m_stitchSplitLength;
|
||
|
||
double m_minX;
|
||
double m_maxX;
|
||
double m_minY;
|
||
double m_maxY;
|
||
|
||
double m_factor;//绘制数据与实际数据的缩放率
|
||
|
||
int m_tabelColorNum;//颜色数
|
||
QRgb * m_pColor;//颜色rgb
|
||
s16 m_needleColorTable[TOTAL_NEEDLE_NUM];//针杆颜色索引
|
||
QByteArray m_colortab;//发给下位机的数据(需要转换)
|
||
|
||
private:
|
||
QByteArray m_absData; // 转换后的绝对坐标数据
|
||
QList <QByteArray> m_dataAbsList;//文件绝对位置列表
|
||
QByteArray m_ds16Data;//发给下位机的ds16数据(需要转换)
|
||
int m_totalJumpNeedle;//总跳针数
|
||
DataDs16FileHead * m_pDs16Head;//ds16 文件头 //数据转换用的都是DataDs16FileHead
|
||
u8 m_startSerrPos;//起针锯齿位置
|
||
int m_showColorBeg;
|
||
int m_showColorEnd;
|
||
int m_greyColorBeg;
|
||
int m_greyColorEnd;
|
||
|
||
//图形预览、刷新
|
||
public:
|
||
//显示所有线迹(原色显示)
|
||
//显示所有线迹(有效区域内的显示原色,其余显示灰色)
|
||
//显示所有线迹(执行过的显示原色,其余显示灰色)
|
||
//刷新部分线迹(缝纫中进度显示)
|
||
enum DISP_MODE {DISP_ALL_NORMAL = 0, DISP_ALL_AREA, DISP_ALL_EXEC, DISP_EXECING};
|
||
enum DRAW_MODE {DRAW_VIEW = 0, DRAW_PREVIEW};//绘制模式(非预览模式、预览模式)
|
||
|
||
public:
|
||
int setViewInfo(int width, int height);//设置视图尺寸(透明背景)
|
||
void setViewInfo(QPixmap pix);//设置视图(带背景图片背景)
|
||
|
||
//重新重置ds16数据(换色点击取消后数据会变为单个图元的原数据,
|
||
//若图形经过变换数据会不对,换色界面保存了最后的数据和XY范围,
|
||
//若点击换色并取消后恢复为换色界面最后保存的数据即可)
|
||
void reSetEmbData(QByteArray ary);
|
||
void reSetEmbDataRange(int maxX,int minX,int maxY,int minY);
|
||
|
||
void setEmbData(int redraw = 0);//重置数据
|
||
//是否重绘 //是否为渐变
|
||
void setDispMode(DISP_MODE dispmode = DISP_ALL_NORMAL, int redraw = 0);//设置预览模式
|
||
void setDrawMode(DRAW_MODE drawmode = DRAW_VIEW);//设置绘制模式
|
||
void setGreyAreaRange(int begin, int end);//设置灰色区域显示
|
||
void setDispAreaRange(int begin, int end, int redraw = 0);//设置区域显示参数
|
||
void setExecIndex(int index);//设置进度显示数据
|
||
void reDraw();//重新绘图
|
||
|
||
public:
|
||
inline QPixmap getPreviewImage(){return m_canvas;}//返回预览图片
|
||
|
||
private:
|
||
int createDispFromDs16Dat(QByteArray & ds16dat);//创建显示用的数据(为了快速显示)
|
||
int drawImageByDispFile();//用显示数据画图
|
||
|
||
private:
|
||
int m_penX, m_penY;//执行过程中绘制跟踪笔的坐标索引
|
||
QPixmap m_canvas;
|
||
QPixmap m_penPix;//跟踪笔绘制的临时区域
|
||
int m_viewWidth;
|
||
int m_viewHight;
|
||
QString m_filePath;//文件路径
|
||
|
||
private:
|
||
QByteArray m_dispDat;//绘制图形的绝对数据(进行缩放的)
|
||
int m_stitchIndex;
|
||
int m_dispIndex;
|
||
DISP_MODE m_dispMode;
|
||
DRAW_MODE m_drawMode;
|
||
|
||
signals:
|
||
void siDrawNeedleIdx(int idx);
|
||
|
||
};
|
||
|
||
#endif // EMBDATA_H
|