1、增加马克间距;
2、完善dxf解析;
This commit is contained in:
华海艳 2024-03-26 08:54:57 +08:00
parent 80684daf9b
commit 42e10f6b15
8 changed files with 51 additions and 21 deletions

5
.gitignore vendored
View File

@ -2,3 +2,8 @@
*.user.*
boost/
spline_library/
*.stash
*.sdf
*.vcxproj
*.filters
rccs/

View File

@ -90,7 +90,7 @@ bool DxfHelper::generateDxf(const QString &fileName)
{
//获取引用块集合
QList<std::string> blockNameList;
getDxfReferenceBlocks(fileName,blockNameList);
//getDxfReferenceBlocks(fileName,blockNameList);
// currentPos = QPointF(QRandomGenerator::global()->bounded(9999.99), QRandomGenerator::global()->bounded(9999.99));
currentPos = QPointF(9999.99, 9999.99);
@ -343,17 +343,17 @@ bool DxfHelper::generateDxf(const QString &fileName)
if(path.size() == 2)
{
if(i+1 < blockData.dxfVertexs.size())
{
QPointF point1;
//qDebug() << "vertexs data:" << d.x << d.y << d.z << d.bulge;
point1.setX(blockData.dxfVertexs.at(i+1).x);
point1.setY(blockData.dxfVertexs.at(i+1).y);
if(point1 != point)
{
path.append(point1);
}
}
// if(i+1 < blockData.dxfVertexs.size())
// {
// QPointF point1;
// //qDebug() << "vertexs data:" << d.x << d.y << d.z << d.bulge;
// point1.setX(blockData.dxfVertexs.at(i+1).x);
// point1.setY(blockData.dxfVertexs.at(i+1).y);
// if(point1 != point)
// {
// path.append(point1);
// }
// }
dxfPaths.append(path);
path.clear();
}

View File

@ -15,6 +15,7 @@ CreatPrintBmp::CreatPrintBmp(QObject *parent) : QObject(parent)
m_moveFileIdx = -1;//上下移动打印文件索引
m_moveDir = 0;//-1,上移 1下移
m_rotateAngle = 0;
m_markSpace = 0;
m_autoDirFilesList.clear();
}
@ -169,6 +170,19 @@ int CreatPrintBmp::creatBmpBlockDatAndSend(int fileidx, int idx)
num += 1;
}
//计算每块位图的走纸距离
u32 paperDis = 0;
int moveOft = abs(offset)+PIXMAPWIDTH;
if(moveOft <= pic.width())
{
paperDis = ((double)PIXMAPWIDTH / MMPIXELY)*100;
}
else
{
u32 cLength = moveOft - (pic.width() - oft);
paperDis = ((double)(PIXMAPWIDTH-cLength) / MMPIXELY)*100 + m_markSpace*100;
}
QBitmap *pixmap = new QBitmap(PIXMAPWIDTH,height);
QPainter *pixPainter = new QPainter();
pixPainter->begin(pixmap);
@ -218,6 +232,11 @@ int CreatPrintBmp::creatBmpBlockDatAndSend(int fileidx, int idx)
return -1;
}
QByteArray dat = bwBmp.getPrBmpDat();
//写入每块位图走纸距离
CompBmpHead *bmphead = new CompBmpHead;
memcpy((u8*)bmphead,(u8*)dat.data(),sizeof(CompBmpHead));
bmphead->segBitPaperDis = paperDis;
emit siSendDatToMc(dat);
m_mcPrintInfo->m_filesList[fileidx].m_curPrintBlock = cidx + 1;
m_mcPrintInfo->m_filesList[fileidx].m_printedBlockNum = cidx;
@ -460,8 +479,9 @@ QString CreatPrintBmp::getSavePath()
return m_savePath;
}
void CreatPrintBmp::setMcPrintInfo(int fileIdx, McPrintInfo *printInfo)
void CreatPrintBmp::setMcPrintInfo(int fileIdx,u32 markSpace,McPrintInfo *printInfo)
{
m_markSpace = markSpace;
m_mcPrintInfo = printInfo;
if(fileIdx < 0)

View File

@ -45,6 +45,7 @@ private:
int m_moveFileIdx;//上下移动打印文件索引
s16 m_moveDir;//-1,上移 1下移
double m_rotateAngle;
u32 m_markSpace;//马克间距
QFileInfoList m_autoDirFilesList;//自动绘图目录中文件列表
@ -58,7 +59,7 @@ public:
void setPicture(QBitmap bitmap);
void setSavePath(QString path);
QString getSavePath();
void setMcPrintInfo(int fileIdx,McPrintInfo *printInfo);//设置机器信息
void setMcPrintInfo(int fileIdx,u32 markSpace,McPrintInfo *printInfo);//设置机器信息
void stopCreatPrintDat();//停止生成打印数据
void setDeleteFile(McPrintInfo *printInfo, int fileIdx);//删除文件
void setMoveFile(McPrintInfo *printInfo, int fileIdx, int dir = -1);//上下移动文件

View File

@ -122,9 +122,11 @@ typedef struct
u8 compType[4]; // 本块位图压缩类型, =0, 不压缩; =1, 按字节压缩(分段压缩);
u32 compSegOffset[4]; // 分段数据起始位置
#if (1)
// 60
u8 rev[128-2-60]; // 保留
u32 segBitPaperDis; // 每段位图走纸距离0.01mm
#if (1)
//64
u8 rev[128-2-64]; // 保留
#else
// 保存原图中BMP头文件(算法测试用)
// 60

View File

@ -411,11 +411,11 @@ void Machine::invalidateWorkFile(int idx)
setMcStatus(MC_INVALID_FILE, idx);
}
void Machine::creatPrintDat(int fileIdx,int setFlag)
void Machine::creatPrintDat(int fileIdx,u32 markSpace,int setFlag)
{
if(setFlag == 1)
{
m_pCreatPrintDat->setMcPrintInfo(fileIdx,&m_mcPrintInfo);
m_pCreatPrintDat->setMcPrintInfo(fileIdx,markSpace,&m_mcPrintInfo);
}
emit siCreatData();
}

View File

@ -104,7 +104,7 @@ public:
// 机器工作命令
void mcWorkCmd(int workcode, int para1 = 0 , int para2 = 0);
void creatPrintDat(int fileIdx,int setFlag = 1); //生成打印数据
void creatPrintDat(int fileIdx,u32 markSpace,int setFlag = 1); //生成打印数据
void stopPrint(); //停止打印
void deleteFilePrintDat(int fileIdx);//删除文件打印数据

View File

@ -222,6 +222,7 @@ void MainWindow::startCreatBmpAndSend(int mcIdx)
{
int mcBegIdx, mcEndIdx;
mcBegIdx = mcEndIdx = 0;
u32 markSpace = m_pSettings->value("DrawSet/markmargin").toUInt();//马克间距
//自动打印时mcIdx为-1
//mcIdx = -1;
@ -257,7 +258,7 @@ void MainWindow::startCreatBmpAndSend(int mcIdx)
{
mcDir.mkdir(mcFile);
}
g_machineList[i]->creatPrintDat(m_curFileRow);
g_machineList[i]->creatPrintDat(m_curFileRow,markSpace);
if(m_curFileRow > 0)
{
@ -1042,6 +1043,7 @@ void MainWindow::slotDeleteFileFromList(int mcNum, int fileIdx, int refreshFlag)
{
//是否自动打印
int autoPrint = 0;
u32 markSpace = m_pSettings->value("DrawSet/markmargin").toUInt();//马克间距
//刷新进度
if(refreshFlag != 0)
@ -1091,7 +1093,7 @@ void MainWindow::slotDeleteFileFromList(int mcNum, int fileIdx, int refreshFlag)
if(m_curFileRow >= 0 && autoPrint == 1)
{
g_machineList[i]->creatPrintDat(m_curFileRow,0);
g_machineList[i]->creatPrintDat(m_curFileRow,markSpace,0);
}
}
}