#ifndef DATAFILEDST_H #define DATAFILEDST_H #include #include #include #include #include #include #include #include #include "math.h" #include #include "machine/comm/datadef.h" #include "machine/comm/crc16.h" #include "datafile/dataoperat.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 rotateStyle; //旋转式样 u8 horizontalStyle; //水平翻转式样 u8 verticalStyle; //垂直翻转式样 u8 rotateAngle; //旋转角度 u8 reinMode; //加固方式 u8 reinNeedles; //针数 u8 reinNum; //次数 s16 normalStep; //针步大小 s16 angleCorrOffset; //角度修正量 s16 angleCorrPosX; //角度修正量X正 s16 angleCorrPosY; //角度修正量Y正 s16 angleCorrNegX; //角度修正量X负 s16 angleCorrNegY; //角度修正量Y负 int scanX; //X向宽度 int scanY; //Y向高度 int left; //左边 int front; //前边 // 163 u8 reserved2[256-163]; //BYTE // 256 s16 reserved3; // 258 int anchorX; //定位点 int anchorY; // 266 s32 startX; //起始点 s32 startY; // 274 u8 reserved4[512-274]; //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 initFile(const QString & fullPathName); int createPreviewImage(QImage * pImg = NULL, int saveflag = 0, int penwidth = 1, int reDraw = 0); // 生成预览文件 void convertDataToAbs(); // 转换为绝对坐标数据 void writePointToFile(int x, int y, int flag = 0);//写入起始点到文件中 void writePatternParaToFile(DstHead *head);//将花样参数配置写到文件中 void writeOffsetXYMoveToFile(s32 EnFlag,s32 offsetX,s32 offsetY); int checkDstFile();//检查dst文件是否正确 DstHead * getDstHead(); void moveDataBeginPonit(s32 left, s32 front);//移动数据起始点 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 getFileid();//得到fileid int getDatWidth();//得到数据的图形宽度 int getDatHeight();//得到数据的图形高度 int getMaxX();//得到数据最大X+ int getMinX();//得到数据最小X- int getMaxY();//得到数据最大Y+ int getMinY();//得到数据最小Y- int getBeginXYAndAnchorXY(int &beginX, int &beginY, int &anchorX, int &anchorY); protected: QString m_fileFullPathName; // 文件路径 QByteArray m_embAbsData; // 转换后的绝对坐标数据 private: QByteArray m_fileData;// 文件数据内容(原始数据) QString m_fileName; // 文件路径 private: double m_minX; double m_maxX; double m_minY; double m_maxY; private: int changeDstStep(DstStep * pDststep, Ds4Item & ds4step); }; #endif // DATAFILEDST_H