#ifndef DATAFILEDST_H #define DATAFILEDST_H #include #include #include #include #include #include #include #include #include "math.h" #include #include #include "main.h" #include "machine/comm/datadef.h" #include "machine/comm/crc16.h" #define DATAFACTOR 10 //dst绝对坐标数据转换为ds16前需要扩大10倍 #define DST_EMB_DATADIRX (1) // X向数据坐标与下位机坐标系统的差异 #define DST_EMB_DATADIRY (-1) // Y向数据坐标与下位机坐标系统的差异 #define DST_SHOWDIRX (-1) // X向显示坐标和数据坐标的差异 #define DST_SHOWDIRY (1) // Y向显示坐标和数据坐标的差异 #define DST_PREVIEW_SIDE (15) // 留边大小 #define DST_PREVIEW_WIDTH (156) // 默认预览图区域宽度 #define DST_PREVIEW_HEIGHT (164) // 默认预览图区域高度 // dst文件头 #pragma pack(1)//设定为1字节对齐 struct DstHead { // 0 char la[20]; char st[11]; char co[7]; char xp[9]; char xn[9]; char yp[9]; char yn[9]; char ax[10]; char ay[10]; char mx[10]; char my[10]; char pd[10]; char sub; char reserved1[3]; // 128 // 自定义,存储色序 u8 switchTable[256-128]; //BYTE // 色序设定表, 支持128个色序设定(缝绣机) // 256 s16 reserved2; // 258 int anchorX; //定位点 int anchorY; // 266 s32 startX; //起绣点 s32 startY; // 274 u32 begWorkHead;//工作机头 //278 u32 offsetEn; // bit0,偏移点X向允许 0,不允许 1,允许 // // bit1,偏移点Y向允许 0,不允许 1,允许 // // bit2,平绣数据有无 0,无 1,有 // // bit3,激光数据有无 0,无 1,有 // // bit4,毛巾链式数据有无 0,无 1,有 // // bit5,缠绕锯齿盘带数据有无 0,无 1,有 //282 s32 offsetX; // 偏移点X // 286 s32 offsetY; //290 u8 reserved3[512-290]; //BYTE // 保留字节 }; #pragma pack(1)//恢复对齐状态 // 针步数据 typedef struct strDstStep { u8 c1; ////BYTE u8 c2; ////BYTE u8 c3; ////BYTE }__attribute__ ((packed)) DstStep; class DataFileDst { public: DataFileDst(); ~DataFileDst(); public: void initColor(int cnum = 0, QRgb * pColor = NULL); void initFile(const QString & fullPathName); int createPreviewImage(QImage * pImg = NULL, int saveflag = 0, int penwidth = 1, int gradientFlag = 1, int reDraw = 0); // 生成预览文件 void convertDataToAbs(); // 转换为绝对坐标数据 void writePointToFile(u8 type, int x, int y, int st = 0,u8 workHead=0);//写入起绣点到文件中 void writeOffsetXYMoveToFile(s32 EnFlag,s32 offsetX,s32 offsetY); int checkDstFile();//检查dst文件是否正确 public: void clear(); void loadFile(); void saveFile(); inline const QString & getFileFullPathName() const {return m_fileFullPathName;} // 文件路径名称 inline QByteArray & getFileData() {return m_fileData;} // 得到文件数据 inline QByteArray & getEmbAbsData() {return m_embAbsData;} // 得到转换后的数据 QString getFileFullPath(); // 文件所在目录 QString getFileFullName(); // 文件名称(包括扩展名) QString getFileName(); // 文件名称(不包括扩展名) QString getFileSuffix(); // 文件扩展名 int getStitchNums();//得到数据的针数 int getColorNums();//得到数据的色数 int getFileid();//得到fileid int getDatWidth();//得到数据的图形宽度 int getDatHeight();//得到数据的图形高度 int getMaxX();//得到数据最大X+ int getMinX();//得到数据最小X- int getMaxY();//得到数据最大Y+ int getMinY();//得到数据最小Y- int getJumpNeedleNum();//得到总的跳针数 int getBeadSequinMap(QByteArray & map); // 得到有效珠片码的位图 int setBeadSequinTable(u8 * val); // 设置珠片码对应表 protected: QString m_fileFullPathName; // 文件路径 QByteArray m_embAbsData; // 转换后的绝对坐标数据 private: QByteArray m_fileData;// 文件数据内容(原始数据) int m_colorNum;//颜色数 QRgb * m_pColor;//颜色rgb值 QString m_fileName; // 文件路径 private: double m_minX; double m_maxX; double m_minY; double m_maxY; QByteArray m_beadSequinMap; // 有效珠片码的位图 QByteArray m_beadSequinTable; // 珠片码对应表 private: int checkDefaultSwitchTable(int colornum = 0); int changeDstStep(DstStep * pDststep, Ds4Item & ds4step); QColor getBrightAdd(QColor embcolor);//补光增加 QColor getBrightDec(QColor embcolor);//补光减少 }; #endif // DATAFILEDST_H