1、完善dxf解析
This commit is contained in:
华海艳 2024-03-22 15:58:53 +08:00
parent 3ce55cebbd
commit 80684daf9b
35 changed files with 1381 additions and 871 deletions

View File

@ -179,7 +179,7 @@
<context>
<name>ImportHPGL</name>
<message>
<location filename="datafile/hpgl/importhpgl.cpp" line="1816"/>
<location filename="datafile/hpgl/importhpgl.cpp" line="1965"/>
<source>Encrypted file parsing error!</source>
<translation></translation>
</message>
@ -269,21 +269,19 @@
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="350"/>
<location filename="mainwindow.ui" line="465"/>
<source>Start</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="355"/>
<location filename="mainwindow.ui" line="477"/>
<source>Pause</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="360"/>
<location filename="mainwindow.cpp" line="823"/>
<location filename="mainwindow.cpp" line="853"/>
<location filename="mainwindow.cpp" line="764"/>
<location filename="mainwindow.cpp" line="794"/>
<source>Delete</source>
<translation></translation>
</message>
@ -390,6 +388,7 @@
<message>
<location filename="mainwindow.ui" line="489"/>
<source>DrawingSetting</source>
<extracomment></extracomment>
<translation></translation>
</message>
<message>
@ -408,233 +407,255 @@
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="149"/>
<location filename="mainwindow.cpp" line="923"/>
<location filename="mainwindow.cpp" line="931"/>
<location filename="mainwindow.cpp" line="956"/>
<location filename="mainwindow.cpp" line="1369"/>
<location filename="mainwindow.cpp" line="1378"/>
<location filename="mainwindow.cpp" line="1501"/>
<location filename="mainwindow.cpp" line="1510"/>
<location filename="mainwindow.cpp" line="1561"/>
<location filename="mainwindow.cpp" line="1649"/>
<location filename="mainwindow.cpp" line="71"/>
<location filename="mainwindow.cpp" line="162"/>
<location filename="mainwindow.cpp" line="873"/>
<location filename="mainwindow.cpp" line="880"/>
<location filename="mainwindow.cpp" line="903"/>
<location filename="mainwindow.cpp" line="1280"/>
<location filename="mainwindow.cpp" line="1289"/>
<location filename="mainwindow.cpp" line="1420"/>
<location filename="mainwindow.cpp" line="1429"/>
<location filename="mainwindow.cpp" line="1481"/>
<location filename="mainwindow.cpp" line="1518"/>
<location filename="mainwindow.cpp" line="1604"/>
<source>Prompt</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="150"/>
<location filename="mainwindow.cpp" line="163"/>
<source>Printing this file, it cannot be moved!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="393"/>
<location filename="mainwindow.cpp" line="455"/>
<location filename="mainwindow.cpp" line="362"/>
<location filename="mainwindow.cpp" line="424"/>
<source>Connnecting...</source>
<translation>...</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="459"/>
<location filename="mainwindow.cpp" line="366"/>
<location filename="mainwindow.cpp" line="428"/>
<source>Connected</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="401"/>
<location filename="mainwindow.cpp" line="422"/>
<location filename="mainwindow.cpp" line="452"/>
<location filename="mainwindow.cpp" line="370"/>
<location filename="mainwindow.cpp" line="391"/>
<location filename="mainwindow.cpp" line="421"/>
<source>NotConnected</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="428"/>
<location filename="mainwindow.cpp" line="466"/>
<location filename="mainwindow.cpp" line="311"/>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="435"/>
<location filename="mainwindow.cpp" line="1108"/>
<source>Idle</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="432"/>
<location filename="mainwindow.cpp" line="470"/>
<location filename="mainwindow.cpp" line="72"/>
<source>Do you want to exit the program?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="319"/>
<location filename="mainwindow.cpp" line="1156"/>
<source>Pause print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="401"/>
<location filename="mainwindow.cpp" line="439"/>
<location filename="mainwindow.cpp" line="1112"/>
<source>Working</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="539"/>
<location filename="mainwindow.cpp" line="712"/>
<location filename="mainwindow.cpp" line="1057"/>
<location filename="mainwindow.cpp" line="512"/>
<location filename="mainwindow.cpp" line="698"/>
<location filename="mainwindow.cpp" line="961"/>
<location filename="mainwindow.cpp" line="1148"/>
<source>Waitting</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="543"/>
<location filename="mainwindow.cpp" line="716"/>
<location filename="mainwindow.cpp" line="1196"/>
<location filename="mainwindow.cpp" line="516"/>
<location filename="mainwindow.cpp" line="702"/>
<location filename="mainwindow.cpp" line="1152"/>
<source>Printting</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>FileName</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>Length</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>Width</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Printed</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Progress</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Numbers</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>State</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>FilePath</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>StartPoint</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McName</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McIp</source>
<translation>IP</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McConState</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McState</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McProgress</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="819"/>
<location filename="mainwindow.cpp" line="760"/>
<source>Print preview</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="820"/>
<location filename="mainwindow.cpp" line="761"/>
<source>Number of modified print</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="821"/>
<location filename="mainwindow.cpp" line="762"/>
<source>Modify the starting print point</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="822"/>
<location filename="mainwindow.cpp" line="763"/>
<source>View print information</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="924"/>
<location filename="mainwindow.cpp" line="881"/>
<source>Do you want to delete this drawing?</source>
<translation>?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="932"/>
<location filename="mainwindow.cpp" line="874"/>
<source>Printing this file, it cannot be deleted!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="957"/>
<location filename="mainwindow.cpp" line="904"/>
<source>After deletion, the machine cannot be controlled. Do you want to delete this machine?</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1192"/>
<location filename="mainwindow.cpp" line="1160"/>
<source>Complete</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1370"/>
<location filename="mainwindow.cpp" line="1502"/>
<location filename="mainwindow.cpp" line="1281"/>
<location filename="mainwindow.cpp" line="1421"/>
<source>Please select a machine!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1379"/>
<location filename="mainwindow.cpp" line="1511"/>
<location filename="mainwindow.cpp" line="1290"/>
<location filename="mainwindow.cpp" line="1430"/>
<source>Loading file, please wait!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1392"/>
<location filename="mainwindow.cpp" line="1524"/>
<location filename="mainwindow.cpp" line="1300"/>
<location filename="mainwindow.cpp" line="1440"/>
<source>Open File Dialog</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1394"/>
<location filename="mainwindow.cpp" line="1302"/>
<source>File(*.plt *.dxf)</source>
<translation>(*.plt *.dxf)</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1526"/>
<location filename="mainwindow.cpp" line="1442"/>
<source>Image File(*.png *.bmp *.jpg)</source>
<translation>(*.png *.bmp *.jpg)</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1562"/>
<location filename="mainwindow.cpp" line="1482"/>
<source>Please select the machine you want to set the directory!</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1574"/>
<location filename="mainwindow.cpp" line="1494"/>
<source>Select Folder</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1650"/>
<location filename="mainwindow.cpp" line="1519"/>
<source>Do you want to start printing on all machines?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1605"/>
<source>The maximum number of connections has been reached and cannot be added again!</source>
<translation></translation>
</message>
@ -934,7 +955,7 @@
<translation></translation>
</message>
<message>
<location filename="printinfodialog.cpp" line="78"/>
<location filename="printinfodialog.cpp" line="80"/>
<source>piece</source>
<translation></translation>
</message>
@ -1033,12 +1054,12 @@
<translation></translation>
</message>
<message>
<location filename="printviewwindow.cpp" line="106"/>
<location filename="printviewwindow.cpp" line="111"/>
<source>Prompt</source>
<translation></translation>
</message>
<message>
<location filename="printviewwindow.cpp" line="107"/>
<location filename="printviewwindow.cpp" line="112"/>
<source>Unreasonable value input!</source>
<translation></translation>
</message>

View File

@ -88,6 +88,10 @@ QList<QVector3D> DxfHelper::expandPolygon(QList<QVector3D> polygon, float expand
bool DxfHelper::generateDxf(const QString &fileName)
{
//获取引用块集合
QList<std::string> blockNameList;
getDxfReferenceBlocks(fileName,blockNameList);
// currentPos = QPointF(QRandomGenerator::global()->bounded(9999.99), QRandomGenerator::global()->bounded(9999.99));
currentPos = QPointF(9999.99, 9999.99);
vertexIndex = 0;
@ -95,60 +99,64 @@ bool DxfHelper::generateDxf(const QString &fileName)
dxfPaths.clear();
DxfReader dxfReader(fileName);
for(auto d: dxfReader.dxfText) {
//qDebug() << "text data:" << d.text.c_str() << d.angle << d.style.c_str() << d.height;
QList<BlockDatas> blockDataList = dxfReader.getBlockDatas();
BlockDatas blockData;
//扫描判断哪个块的数据最多,其他块的数据全部不显示,只显示数据最多的块
for (int i = 0; i < blockDataList.size(); i++)
{
if(blockNameList.size() == 0)
{
blockData.dxfLines.append(blockDataList[i].dxfLines);
//blockData.dxfText.append(blockDataList[i].dxfText);
blockData.dxfArcs.append(blockDataList[i].dxfArcs);
blockData.dxfCircles.append(blockDataList[i].dxfCircles);
blockData.dxfEllipses.append(blockDataList[i].dxfEllipses);
blockData.dxfPolylines.append(blockDataList[i].dxfPolylines);
blockData.dxfPoints.append(blockDataList[i].dxfPoints);
blockData.dxfSplines.append(blockDataList[i].dxfSplines);
blockData.dxfVertexs.append(blockDataList[i].dxfVertexs);
}
else
{
if(blockNameList.contains(blockDataList[i].blockName) == true)
{
blockData.dxfLines.append(blockDataList[i].dxfLines);
//blockData.dxfText.append(blockDataList[i].dxfText);
blockData.dxfArcs.append(blockDataList[i].dxfArcs);
blockData.dxfCircles.append(blockDataList[i].dxfCircles);
blockData.dxfEllipses.append(blockDataList[i].dxfEllipses);
blockData.dxfPolylines.append(blockDataList[i].dxfPolylines);
blockData.dxfPoints.append(blockDataList[i].dxfPoints);
blockData.dxfSplines.append(blockDataList[i].dxfSplines);
blockData.dxfVertexs.append(blockDataList[i].dxfVertexs);
}
}
}
for(auto d: dxfReader.dxfLinetypes) {
//qDebug() << "linetypes data:" << d.name.c_str() << d.flags << d.pattern << d.description.c_str() << d.patternLength << d.numberOfDashes;
for(auto d: blockData.dxfText)
{
qDebug() << "text data:" << d.text.c_str() << d.angle << d.style.c_str() << d.height;
}
for(auto d: dxfReader.dxfLinetypes)
{
qDebug() << "linetypes data:" << d.name.c_str() << d.flags << d.pattern << d.description.c_str() << d.patternLength << d.numberOfDashes;
}
QVector<QPointF> linepath;
for(auto d: dxfReader.dxfLines) {
for(auto d: blockData.dxfLines)
{
//qDebug() << "line data:" << d.x1 << d.y1 << d.z1 << "," << d.x2 << d.y2 << d.z2;
if(currentPos!=QPointF(d.x1, d.y1)) {
if(!linepath.isEmpty()) {
QList<QVector3D> linelist;
foreach(auto point, linepath) linelist.append(QVector3D(point));
linepath.clear();
linelist = expandPolygon(linelist, expandOffset);
foreach(QVector3D point, linelist) {
double x = point.x();
double y = point.y();
linepath.append(QPointF(x, y));
currentPos = QPointF(x, y);
}
dxfPaths.append(linepath);
linepath.clear();
}
linepath.append(QPointF(d.x1, d.y1));
linepath.append(QPointF(d.x2, d.y2));
currentPos = QPointF(d.x2, d.y2);
} else {
linepath.append(QPointF(d.x2, d.y2));
currentPos = QPointF(d.x2, d.y2);
}
}
if(!linepath.isEmpty()) {
QList<QVector3D> linelist;
foreach(auto point, linepath) linelist.append(QVector3D(point));
linepath.clear();
linelist = expandPolygon(linelist, expandOffset);
foreach(QVector3D point, linelist) {
double x = point.x();
double y = point.y();
linepath.append(QPointF(x, y));
currentPos = QPointF(x, y);
}
linepath.append(QPointF(d.x1, d.y1));
linepath.append(QPointF(d.x2, d.y2));
dxfPaths.append(linepath);
linepath.clear();
}
for(auto d: dxfReader.dxfArcs) {
for(auto d: blockData.dxfArcs)
{
//qDebug() << "arcs data:" << d.cx << d.cy << d.cz << d.angle1 << d.angle2 << d.radius;
double cx = d.cx;
double cy = d.cy;
// double cz = d.cz;
@ -158,7 +166,6 @@ bool DxfHelper::generateDxf(const QString &fileName)
radius = radius + expandOffset;
QPainterPath path;
double startXPos = cx + cos(abs(angle1)*M_PI/180)*radius;
double startYPos = cy + sin(abs(angle1)*M_PI/180)*radius;
@ -187,10 +194,10 @@ bool DxfHelper::generateDxf(const QString &fileName)
// dxfPathList.append(path);
}
for(auto d: dxfReader.dxfCircles) {
for(auto d: blockData.dxfCircles)
{
//qDebug() << "circle data:" << d.cx << d.cy << d.cz << d.radius;
double cx = d.cx;
double cy = d.cy;
// double cz = d.cz;
@ -198,7 +205,6 @@ bool DxfHelper::generateDxf(const QString &fileName)
radius = radius + expandOffset;
QPainterPath path;
path.moveTo(cx+radius, cy);
path.arcTo(cx-radius, cy-radius, 2*radius, 2*radius, 0, 360);
@ -212,10 +218,11 @@ bool DxfHelper::generateDxf(const QString &fileName)
currentPos=QPointF(x, y);
}
dxfPaths.append(circlepath);
// dxfPathList.append(path);
}
for(auto d: dxfReader.dxfEllipses) { // 起点角度要×ratio
for(auto d: blockData.dxfEllipses)
{
// 起点角度要×ratio
//qDebug() << "ellipses data:" << d.cx << d.cy << d.cz << d.mx << d.my << d.mz << d.ratio << d.angle1 << d.angle2;
double cx = d.cx;
@ -228,7 +235,6 @@ bool DxfHelper::generateDxf(const QString &fileName)
double angle1 = d.angle1;
double angle2 = d.angle2;
double rab = sqrt((cx- mx)*(cx - mx) +(cy - my)*(cy - my));
double resy = (expandOffset*(my-cy))/rab + my;
double resx = (expandOffset*(mx-cx))/rab + mx;
@ -236,7 +242,6 @@ bool DxfHelper::generateDxf(const QString &fileName)
mx = resx;
my = resy;
QPainterPath path;
double angle_1 = angle1;
double angle_2 = angle2;
@ -285,7 +290,8 @@ bool DxfHelper::generateDxf(const QString &fileName)
path.arcTo(c_x-rx, c_y-ry, 2*rx, 2*ry, angleStart, anglePassed);
QVector<QPointF> ellipsepath;
for(double i = 0; i <= 1; i += 0.003) { // TODO: 步长随图片大小调整
for(double i = 0; i <= 1; i += 0.003)
{ // TODO: 步长随图片大小调整
QPointF point = path.pointAtPercent(i);
double x = point.x();
double y = point.y();
@ -293,18 +299,18 @@ bool DxfHelper::generateDxf(const QString &fileName)
currentPos=QPointF(x, y);
}
dxfPaths.append(ellipsepath);
// dxfPathList.append(path);
}
for(auto d: dxfReader.dxfPolylines) {
for(auto d: blockData.dxfPolylines)
{
//qDebug() << "polylines data:" << d.m << d.n << d.flags << d.number << d.elevation;
QList<QVector3D> pointlist;
QVector<QPointF> path;
for(unsigned int i = 0; i < d.number; i++) {
double x = dxfReader.dxfVertexs.at(vertexIndex).x;
double y = dxfReader.dxfVertexs.at(vertexIndex).y;
double z = dxfReader.dxfVertexs.at(vertexIndex).z;
double x = blockData.dxfVertexs.at(vertexIndex).x;
double y = blockData.dxfVertexs.at(vertexIndex).y;
double z = blockData.dxfVertexs.at(vertexIndex).z;
pointlist.append(QVector3D(x, y, z));
vertexIndex++;
}
@ -317,7 +323,7 @@ bool DxfHelper::generateDxf(const QString &fileName)
currentPos = QPointF(x, y);
}
if(d.flags) {
if(d.flags && pointlist.size() > 0) {
double x = pointlist.first().x();
double y = pointlist.first().y();
path.append(QPointF(x, y));
@ -326,11 +332,50 @@ bool DxfHelper::generateDxf(const QString &fileName)
dxfPaths.append(path);
}
// for(auto d: dxfReader.dxfVertexs) {
// qDebug() << "vertexs data:" << d.x << d.y << d.z << d.bulge;
QVector<QPointF> path;
for(int i = 0; i < blockData.dxfVertexs.size(); i++)
{
QPointF point;
//qDebug() << "vertexs data:" << d.x << d.y << d.z << d.bulge;
point.setX(blockData.dxfVertexs.at(i).x);
point.setY(blockData.dxfVertexs.at(i).y);
path.append(point);
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);
}
}
dxfPaths.append(path);
path.clear();
}
}
// for(auto d: blockData.dxfVertexs)
// {
// QPointF point;
// //qDebug() << "vertexs data:" << d.x << d.y << d.z << d.bulge;
// point.setX(d.x);
// point.setY(d.y);
// path.append(point);
// if(path.size() == 2)
// {
// dxfPaths.append(path);
// path.clear();
// }
// }
for(auto d: dxfReader.dxfPoints) {
for(auto d: blockData.dxfPoints)
{
//qDebug() << "points data:" << d.x << d.y << d.z;
QVector<QPointF> path;
path.append(QPointF(d.x, d.y));
@ -338,32 +383,34 @@ bool DxfHelper::generateDxf(const QString &fileName)
currentPos = QPointF(d.x, d.y);
}
for(auto d: dxfReader.dxfSplines) {
// for(auto d: blockData.dxfSplines)
// {
//qDebug() << "splines data:" << d.nFit << d.flags << d.degree << d.nKnots << d.nControl << d.tangentEndX << d.tangentEndY << d.tangentEndZ << d.tangentStartX << d.tangentStartY << d.tangentStartZ;
std::vector<QVector2D> pointList;
for(unsigned int i = 0; i < d.nControl; i++) {
int x = dxfReader.dxfControlPoints.at(controlIndex).x;
int y = dxfReader.dxfControlPoints.at(controlIndex).y;
pointList.push_back(QVector2D(x, y));
currentPos = QPointF(x, y);
controlIndex++;
}
// std::vector<QVector2D> pointList;
// for(unsigned int i = 0; i < d.nControl; i++)
// {
// int x = blockData.dxfControlPoints.at(controlIndex).x;
// int y = blockData.dxfControlPoints.at(controlIndex).y;
// pointList.push_back(QVector2D(x, y));
// currentPos = QPointF(x, y);
// controlIndex++;
// }
QList<QVector3D> templist;
foreach(auto point, pointList) templist.append(point);
templist = expandPolygon(templist, expandOffset);
// QList<QVector3D> templist;
// foreach(auto point, pointList) templist.append(point);
// templist = expandPolygon(templist, expandOffset);
QVector<QVector2D> inputList;
foreach(auto point, templist) inputList.append(point.toVector2D());
inputList.push_front(inputList.first());
inputList.push_back(inputList.back());
// QVector<QVector2D> inputList;
// foreach(auto point, templist) inputList.append(point.toVector2D());
// inputList.push_front(inputList.first());
// inputList.push_back(inputList.back());
// std::vector<QVector2D> finalList(inputList.begin(), inputList.end());
// SplineHelper splineHelper(finalList, TypeCubicBSpline);
// auto splinePath = splineHelper.getSplinePath();
// dxfPaths.append(splinePath);
}
// }
// for(auto d: dxfReader.dxfControlPoints) {
// qDebug() << "control points data:" << d.w << d.x << d.y << d.z;
@ -425,6 +472,23 @@ void DxfHelper::matchDXFSize()
QImage DxfHelper::generateDXFImage()
{
// //放大数据
// QVector<QVector<QPointF>> dxfPathscp;
// foreach (QVector<QPointF> path, dxfPaths)
// {
// QVector<QPointF> pathcp;
// for(int i = 0; i < path.length(); i++)
// {
// QPointF point = path.at(i);
// double x = point.x()*10;
// double y = point.y()*10;
// pathcp.append(QPointF(x,y));
// }
// dxfPathscp.append(pathcp);
// }
// dxfPaths.clear();
// dxfPaths = dxfPathscp;
matchDXFSize();
double minx = dxfBorderList.at(0);
double miny = dxfBorderList.at(1);
@ -464,6 +528,82 @@ QList<double> DxfHelper::getDxfBorderList() const
return dxfBorderList;
}
bool DxfHelper::getDxfReferenceBlocks(const QString &fileName, QList<std::string> &blockNameList)
{
blockNameList.clear();
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Failed to open file:" << fileName;
return false;
}
int addFlag = 0;
int blockFlag = 0;
int getFlag = 0;
int endFlag = 0;
QTextStream in(&file);
while (!in.atEnd())
{
std::string line = in.readLine().remove(QRegExp("\\s")).toStdString();
// 处理每一行数据
if(line == "AcDbBlockReference")//块被引用的标志
{
addFlag = 1;
continue;
}
if(addFlag == 1)
{
if(line == "AcDbBlockBegin")//块开始标志
{
blockFlag = 1;
endFlag = 0;
continue;
}
if(blockFlag == 1)
{
if(line == "2")//下一行为块名称
{
getFlag = 1;
continue;
}
if(getFlag == 1)//块名称
{
if(blockNameList.contains(line) == false)
//if(!line.empty() && line[0] != '*')
{
blockNameList.append(line);
}
getFlag = 0;
continue;
}
}
if(line == "AcDbBlockEnd")//块结束标志
{
blockFlag = 0;
endFlag = 1;
continue;
}
}
}
if(endFlag == 0 && addFlag == 1)
{
if(blockNameList.size() > 0)
{
blockNameList.removeLast();
}
}
file.close();
return true;
}
QSize DxfHelper::getImageSize() const
{
return imageSize;

View File

@ -91,7 +91,10 @@ public:
QList<QPainterPath> getDxfPathList() const;
QSize getImageSize() const;
QList<double> getDxfBorderList() const;
private:
bool getDxfReferenceBlocks(const QString &fileName,QList<std::string> &blockNameList);
QPointF currentPos;
unsigned int vertexIndex = 0;
unsigned int controlIndex = 0;

View File

@ -36,21 +36,11 @@
#pragma once
#endif // _MSC_VER > 1000
//#if defined(__OS2__)||defined(__EMX__)
//#define strcasecmp(s,t) stricmp(s,t)
//#endif
//#if defined(_WIN32)
//#define strcasecmp(s,t) _stricmp(s,t)
//#endif
#ifdef _WIN32
#undef M_PI
#define M_PI 3.14159265358979323846
//#pragma warning(disable : 4800)
#if defined(__OS2__)||defined(__EMX__)
#define strcasecmp(s,t) stricmp(s,t)
#endif
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif
@ -501,7 +491,7 @@ const double dxfColors[][3] = {
// Flags
#define DL_OPEN_PLINE 0x00
#define DL_CLOSED_PLINE 0x01
#define DL_POLYLINE3D 0x80
#define DL_POLYLINE3D 0x08
#define DL_PFACE_MESH 0x40
#define DL_PGON_MESH 0x10
// Vertices follow entity, required in POLYLINES

View File

@ -82,7 +82,7 @@ public:
virtual void addDimDiametric(const DL_DimensionData&,
const DL_DimDiametricData&) {}
virtual void addDimAngular(const DL_DimensionData&,
const DL_DimAngularData&) {}
const DL_DimAngular2LData&) {}
virtual void addDimAngular3P(const DL_DimensionData&,
const DL_DimAngular3PData&) {}
virtual void addDimOrdinate(const DL_DimensionData&,

View File

@ -191,7 +191,7 @@ public:
* Called for every angular dimension (2 lines version) entity.
*/
virtual void addDimAngular(const DL_DimensionData& data,
const DL_DimAngularData& edata) = 0;
const DL_DimAngular2LData& edata) = 0;
/**
* Called for every angular dimension (3 points version) entity.

View File

@ -129,14 +129,14 @@ bool DL_Dxf::in(const std::string& file, DL_CreationInterface* creationInterface
/**
* Reads a DXF file from an existing stream.
*
* @param stream The string stream.
* @param stream The input stream.
* @param creationInterface
* Pointer to the class which takes care of the entities in the file.
*
* @retval true If \p file could be opened.
* @retval false If \p file could not be opened.
*/
bool DL_Dxf::in(std::stringstream& stream,
bool DL_Dxf::in(std::istream& stream,
DL_CreationInterface* creationInterface) {
if (stream.good()) {
@ -193,9 +193,9 @@ bool DL_Dxf::readDxfGroups(FILE *fp, DL_CreationInterface* creationInterface) {
/**
* Same as above but for stringstreams.
* Same as above but for input streams.
*/
bool DL_Dxf::readDxfGroups(std::stringstream& stream,
bool DL_Dxf::readDxfGroups(std::istream& stream,
DL_CreationInterface* creationInterface) {
static int line = 1;
@ -263,10 +263,10 @@ bool DL_Dxf::getStrippedLine(std::string& s, unsigned int size, FILE *fp, bool s
/**
* Same as above but for stringstreams.
* Same as above but for input streams.
*/
bool DL_Dxf::getStrippedLine(std::string &s, unsigned int size,
std::stringstream& stream, bool stripSpace) {
std::istream& stream, bool stripSpace) {
if (!stream.eof()) {
// Only the useful part of the line
@ -925,8 +925,6 @@ void DL_Dxf::endBlock(DL_CreationInterface* creationInterface) {
creationInterface->endBlock();
}
void DL_Dxf::addTextStyle(DL_CreationInterface* creationInterface) {
std::string name = getStringValue(2, "");
if (name.length()==0) {
@ -979,8 +977,7 @@ void DL_Dxf::addLine(DL_CreationInterface* creationInterface) {
getRealValue(11, 0.0),
getRealValue(21, 0.0),
getRealValue(31, 0.0));
creationInterface->addLine(d);
creationInterface->addLine(d);
}
/**
@ -1448,10 +1445,10 @@ bool DL_Dxf::handleLWPolylineData(DL_CreationInterface* /*creationInterface*/) {
}
if (groupCode<=30) {
if (vertexIndex>=0 && vertexIndex<maxVertices) {
if (vertexIndex>=0 && vertexIndex<maxVertices && vertexIndex>=0) {
vertices[4*vertexIndex + (groupCode/10-1)] = toReal(groupValue);
}
} else if (groupCode==42 && vertexIndex<maxVertices) {
} else if (groupCode==42 && vertexIndex<maxVertices && vertexIndex>=0) {
vertices[4*vertexIndex + 3] = toReal(groupValue);
}
return true;
@ -1735,7 +1732,7 @@ void DL_Dxf::addAttribute(DL_CreationInterface* creationInterface) {
*/
DL_DimensionData DL_Dxf::getDimData() {
// generic dimension data:
return DL_DimensionData(
DL_DimensionData ret(
// def point
getRealValue(10, 0.0),
getRealValue(20, 0.0),
@ -1758,6 +1755,9 @@ DL_DimensionData DL_Dxf::getDimData() {
getStringValue(3, ""),
// angle
getRealValue(53, 0.0));
ret.arrow1Flipped = getIntValue(74, 0)==1;
ret.arrow2Flipped = getIntValue(75, 0)==1;
return ret;
}
@ -1852,7 +1852,7 @@ void DL_Dxf::addDimAngular(DL_CreationInterface* creationInterface) {
DL_DimensionData d = getDimData();
// angular dimension:
DL_DimAngularData da(
DL_DimAngular2LData da(
// definition point 1
getRealValue(13, 0.0),
getRealValue(23, 0.0),
@ -2505,7 +2505,6 @@ void DL_Dxf::writeVertex(DL_WriterA& dw,
if (version==DL_VERSION_2000) {
dw.dxfReal(10, data.x);
dw.dxfReal(20, data.y);
dw.dxfReal(30, data.z);
if (fabs(data.bulge)>1.0e-10) {
dw.dxfReal(42, data.bulge);
}
@ -2964,10 +2963,18 @@ void DL_Dxf::writeDimStyleOverrides(DL_WriterA& dw,
dw.dxfString(1001, "ACAD");
dw.dxfString(1000, "DSTYLE");
dw.dxfString(1002, "{");
if (data.type&128) {
// custom text position:
dw.dxfInt(1070, 279);
dw.dxfInt(1070, 2);
}
dw.dxfInt(1070, 144);
dw.dxfReal(1040, data.linearFactor);
dw.dxfInt(1070,40);
dw.dxfReal(1040, data.dimScale);
dw.dxfString(1002, "}");
}
}
@ -3008,6 +3015,8 @@ void DL_Dxf::writeDimAligned(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3069,6 +3078,8 @@ void DL_Dxf::writeDimLinear(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3136,6 +3147,8 @@ void DL_Dxf::writeDimRadial(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
//dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3195,6 +3208,8 @@ void DL_Dxf::writeDimDiametric(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3227,9 +3242,9 @@ void DL_Dxf::writeDimDiametric(DL_WriterA& dw,
* @param data Specific angular dimension data from the file
* @param attrib Attributes
*/
void DL_Dxf::writeDimAngular(DL_WriterA& dw,
void DL_Dxf::writeDimAngular2L(DL_WriterA& dw,
const DL_DimensionData& data,
const DL_DimAngularData& edata,
const DL_DimAngular2LData& edata,
const DL_Attributes& attrib) {
dw.entity("DIMENSION");
@ -3254,6 +3269,8 @@ void DL_Dxf::writeDimAngular(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3321,6 +3338,8 @@ void DL_Dxf::writeDimAngular3P(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
dw.dxfInt(74, data.arrow1Flipped);
dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3390,6 +3409,8 @@ void DL_Dxf::writeDimOrdinate(DL_WriterA& dw,
if (version>DL_VERSION_R12) {
dw.dxfInt(71, data.attachmentPoint);
dw.dxfInt(72, data.lineSpacingStyle); // opt
//dw.dxfInt(74, data.arrow1Flipped);
//dw.dxfInt(75, data.arrow2Flipped);
dw.dxfReal(41, data.lineSpacingFactor); // opt
}
@ -3460,6 +3481,18 @@ void DL_Dxf::writeLeaderVertex(DL_WriterA& dw,
}
}
void DL_Dxf::writeLeaderEnd(DL_WriterA& dw,
const DL_LeaderData& data) {
if (version==DL_VERSION_2000) {
dw.dxfString(1001, "ACAD");
dw.dxfString(1000, "DSTYLE");
dw.dxfString(1002, "{");
dw.dxfInt(1070,40);
dw.dxfReal(1040, data.dimScale);
dw.dxfString(1002, "}");
}
}
/**
@ -3664,7 +3697,7 @@ void DL_Dxf::writeHatchEdge(DL_WriterA& dw,
*
* @return IMAGEDEF handle. Needed for the IMAGEDEF counterpart.
*/
int DL_Dxf::writeImage(DL_WriterA& dw,
unsigned long DL_Dxf::writeImage(DL_WriterA& dw,
const DL_ImageData& data,
const DL_Attributes& attrib) {
@ -3704,8 +3737,7 @@ int DL_Dxf::writeImage(DL_WriterA& dw,
dw.dxfReal(23, data.height);
// handle of IMAGEDEF object
int handle = dw.incHandle();
dw.dxfHex(340, handle);
unsigned long handle = dw.handle(340);
// flags
dw.dxfInt(70, 15);
@ -4162,7 +4194,7 @@ void DL_Dxf::writeUcs(DL_WriterA& dw) {
*/
void DL_Dxf::writeDimStyle(DL_WriterA& dw,
double dimasz, double dimexe, double dimexo,
double dimgap, double dimtxt) {
double dimgap, double dimtxt, int dimtad, bool dimtih) {
dw.dxfString( 0, "TABLE");
dw.dxfString( 2, "DIMSTYLE");
@ -4212,13 +4244,15 @@ void DL_Dxf::writeDimStyle(DL_WriterA& dw,
dw.dxfInt( 71, 0);
dw.dxfInt( 72, 0);
}
dw.dxfInt( 73, 0);
// DIMTIH:
dw.dxfInt( 73, (int)dimtih);
dw.dxfInt( 74, 0);
if (version==DL_VERSION_R12) {
dw.dxfInt( 75, 0);
dw.dxfInt( 76, 0);
}
dw.dxfInt( 77, 1);
// DIMTAD:
dw.dxfInt( 77, dimtad);
dw.dxfInt( 78, 8);
dw.dxfReal(140, dimtxt);
dw.dxfReal(141, 2.5);
@ -4353,7 +4387,6 @@ void DL_Dxf::writeObjects(DL_WriterA& dw, const std::string& appDictionaryName)
dw.dxfString( 0, "SECTION");
dw.dxfString( 2, "OBJECTS");
dw.dxfString( 0, "DICTIONARY");
dw.dxfHex(5, 0xC);
dw.dxfString(100, "AcDbDictionary");
@ -4703,12 +4736,9 @@ void DL_Dxf::writeAppDictionary(DL_WriterA& dw) {
dw.dxfInt(281, 1);
}
int DL_Dxf::writeDictionaryEntry(DL_WriterA& dw, const std::string& name) {
unsigned long DL_Dxf::writeDictionaryEntry(DL_WriterA& dw, const std::string& name) {
dw.dxfString( 3, name);
int handle = dw.getNextHandle();
dw.dxfHex(350, handle);
dw.incHandle();
return handle;
return dw.handle(350);
}
void DL_Dxf::writeXRecord(DL_WriterA& dw, int handle, int value) {
@ -4774,427 +4804,427 @@ bool DL_Dxf::checkVariable(const char* var, DL_Codes::version version) {
return true;
} else if (version==DL_VERSION_R12) {
// these are all the variables recognized by dxf r12:
if (!strcmp(var, "$ACADVER")) {
if (!strcmp(var, "ACADVER")) {
return true;
}
if (!strcmp(var, "$ACADVER")) {
if (!strcmp(var, "ACADVER")) {
return true;
}
if (!strcmp(var, "$ANGBASE")) {
if (!strcmp(var, "ANGBASE")) {
return true;
}
if (!strcmp(var, "$ANGDIR")) {
if (!strcmp(var, "ANGDIR")) {
return true;
}
if (!strcmp(var, "$ATTDIA")) {
if (!strcmp(var, "ATTDIA")) {
return true;
}
if (!strcmp(var, "$ATTMODE")) {
if (!strcmp(var, "ATTMODE")) {
return true;
}
if (!strcmp(var, "$ATTREQ")) {
if (!strcmp(var, "ATTREQ")) {
return true;
}
if (!strcmp(var, "$AUNITS")) {
if (!strcmp(var, "AUNITS")) {
return true;
}
if (!strcmp(var, "$AUPREC")) {
if (!strcmp(var, "AUPREC")) {
return true;
}
if (!strcmp(var, "$AXISMODE")) {
if (!strcmp(var, "AXISMODE")) {
return true;
}
if (!strcmp(var, "$AXISUNIT")) {
if (!strcmp(var, "AXISUNIT")) {
return true;
}
if (!strcmp(var, "$BLIPMODE")) {
if (!strcmp(var, "BLIPMODE")) {
return true;
}
if (!strcmp(var, "$CECOLOR")) {
if (!strcmp(var, "CECOLOR")) {
return true;
}
if (!strcmp(var, "$CELTYPE")) {
if (!strcmp(var, "CELTYPE")) {
return true;
}
if (!strcmp(var, "$CHAMFERA")) {
if (!strcmp(var, "CHAMFERA")) {
return true;
}
if (!strcmp(var, "$CHAMFERB")) {
if (!strcmp(var, "CHAMFERB")) {
return true;
}
if (!strcmp(var, "$CLAYER")) {
if (!strcmp(var, "CLAYER")) {
return true;
}
if (!strcmp(var, "$COORDS")) {
if (!strcmp(var, "COORDS")) {
return true;
}
if (!strcmp(var, "$DIMALT")) {
if (!strcmp(var, "DIMALT")) {
return true;
}
if (!strcmp(var, "$DIMALTD")) {
if (!strcmp(var, "DIMALTD")) {
return true;
}
if (!strcmp(var, "$DIMALTF")) {
if (!strcmp(var, "DIMALTF")) {
return true;
}
if (!strcmp(var, "$DIMAPOST")) {
if (!strcmp(var, "DIMAPOST")) {
return true;
}
if (!strcmp(var, "$DIMASO")) {
if (!strcmp(var, "DIMASO")) {
return true;
}
if (!strcmp(var, "$DIMASZ")) {
if (!strcmp(var, "DIMASZ")) {
return true;
}
if (!strcmp(var, "$DIMBLK")) {
if (!strcmp(var, "DIMBLK")) {
return true;
}
if (!strcmp(var, "$DIMBLK1")) {
if (!strcmp(var, "DIMBLK1")) {
return true;
}
if (!strcmp(var, "$DIMBLK2")) {
if (!strcmp(var, "DIMBLK2")) {
return true;
}
if (!strcmp(var, "$DIMCEN")) {
if (!strcmp(var, "DIMCEN")) {
return true;
}
if (!strcmp(var, "$DIMCLRD")) {
if (!strcmp(var, "DIMCLRD")) {
return true;
}
if (!strcmp(var, "$DIMCLRE")) {
if (!strcmp(var, "DIMCLRE")) {
return true;
}
if (!strcmp(var, "$DIMCLRT")) {
if (!strcmp(var, "DIMCLRT")) {
return true;
}
if (!strcmp(var, "$DIMDLE")) {
if (!strcmp(var, "DIMDLE")) {
return true;
}
if (!strcmp(var, "$DIMDLI")) {
if (!strcmp(var, "DIMDLI")) {
return true;
}
if (!strcmp(var, "$DIMEXE")) {
if (!strcmp(var, "DIMEXE")) {
return true;
}
if (!strcmp(var, "$DIMEXO")) {
if (!strcmp(var, "DIMEXO")) {
return true;
}
if (!strcmp(var, "$DIMGAP")) {
if (!strcmp(var, "DIMGAP")) {
return true;
}
if (!strcmp(var, "$DIMLFAC")) {
if (!strcmp(var, "DIMLFAC")) {
return true;
}
if (!strcmp(var, "$DIMLIM")) {
if (!strcmp(var, "DIMLIM")) {
return true;
}
if (!strcmp(var, "$DIMPOST")) {
if (!strcmp(var, "DIMPOST")) {
return true;
}
if (!strcmp(var, "$DIMRND")) {
if (!strcmp(var, "DIMRND")) {
return true;
}
if (!strcmp(var, "$DIMSAH")) {
if (!strcmp(var, "DIMSAH")) {
return true;
}
if (!strcmp(var, "$DIMSCALE")) {
if (!strcmp(var, "DIMSCALE")) {
return true;
}
if (!strcmp(var, "$DIMSE1")) {
if (!strcmp(var, "DIMSE1")) {
return true;
}
if (!strcmp(var, "$DIMSE2")) {
if (!strcmp(var, "DIMSE2")) {
return true;
}
if (!strcmp(var, "$DIMSHO")) {
if (!strcmp(var, "DIMSHO")) {
return true;
}
if (!strcmp(var, "$DIMSOXD")) {
if (!strcmp(var, "DIMSOXD")) {
return true;
}
if (!strcmp(var, "$DIMSTYLE")) {
if (!strcmp(var, "DIMSTYLE")) {
return true;
}
if (!strcmp(var, "$DIMTAD")) {
if (!strcmp(var, "DIMTAD")) {
return true;
}
if (!strcmp(var, "$DIMTFAC")) {
if (!strcmp(var, "DIMTFAC")) {
return true;
}
if (!strcmp(var, "$DIMTIH")) {
if (!strcmp(var, "DIMTIH")) {
return true;
}
if (!strcmp(var, "$DIMTIX")) {
if (!strcmp(var, "DIMTIX")) {
return true;
}
if (!strcmp(var, "$DIMTM")) {
if (!strcmp(var, "DIMTM")) {
return true;
}
if (!strcmp(var, "$DIMTOFL")) {
if (!strcmp(var, "DIMTOFL")) {
return true;
}
if (!strcmp(var, "$DIMTOH")) {
if (!strcmp(var, "DIMTOH")) {
return true;
}
if (!strcmp(var, "$DIMTOL")) {
if (!strcmp(var, "DIMTOL")) {
return true;
}
if (!strcmp(var, "$DIMTP")) {
if (!strcmp(var, "DIMTP")) {
return true;
}
if (!strcmp(var, "$DIMTSZ")) {
if (!strcmp(var, "DIMTSZ")) {
return true;
}
if (!strcmp(var, "$DIMTVP")) {
if (!strcmp(var, "DIMTVP")) {
return true;
}
if (!strcmp(var, "$DIMTXT")) {
if (!strcmp(var, "DIMTXT")) {
return true;
}
if (!strcmp(var, "$DIMZIN")) {
if (!strcmp(var, "DIMZIN")) {
return true;
}
if (!strcmp(var, "$DWGCODEPAGE")) {
if (!strcmp(var, "DWGCODEPAGE")) {
return true;
}
if (!strcmp(var, "$DRAGMODE")) {
if (!strcmp(var, "DRAGMODE")) {
return true;
}
if (!strcmp(var, "$ELEVATION")) {
if (!strcmp(var, "ELEVATION")) {
return true;
}
if (!strcmp(var, "$EXTMAX")) {
if (!strcmp(var, "EXTMAX")) {
return true;
}
if (!strcmp(var, "$EXTMIN")) {
if (!strcmp(var, "EXTMIN")) {
return true;
}
if (!strcmp(var, "$FILLETRAD")) {
if (!strcmp(var, "FILLETRAD")) {
return true;
}
if (!strcmp(var, "$FILLMODE")) {
if (!strcmp(var, "FILLMODE")) {
return true;
}
if (!strcmp(var, "$HANDLING")) {
if (!strcmp(var, "HANDLING")) {
return true;
}
if (!strcmp(var, "$HANDSEED")) {
if (!strcmp(var, "HANDSEED")) {
return true;
}
if (!strcmp(var, "$INSBASE")) {
if (!strcmp(var, "INSBASE")) {
return true;
}
if (!strcmp(var, "$LIMCHECK")) {
if (!strcmp(var, "LIMCHECK")) {
return true;
}
if (!strcmp(var, "$LIMMAX")) {
if (!strcmp(var, "LIMMAX")) {
return true;
}
if (!strcmp(var, "$LIMMIN")) {
if (!strcmp(var, "LIMMIN")) {
return true;
}
if (!strcmp(var, "$LTSCALE")) {
if (!strcmp(var, "LTSCALE")) {
return true;
}
if (!strcmp(var, "$LUNITS")) {
if (!strcmp(var, "LUNITS")) {
return true;
}
if (!strcmp(var, "$LUPREC")) {
if (!strcmp(var, "LUPREC")) {
return true;
}
if (!strcmp(var, "$MAXACTVP")) {
if (!strcmp(var, "MAXACTVP")) {
return true;
}
if (!strcmp(var, "$MENU")) {
if (!strcmp(var, "MENU")) {
return true;
}
if (!strcmp(var, "$MIRRTEXT")) {
if (!strcmp(var, "MIRRTEXT")) {
return true;
}
if (!strcmp(var, "$ORTHOMODE")) {
if (!strcmp(var, "ORTHOMODE")) {
return true;
}
if (!strcmp(var, "$OSMODE")) {
if (!strcmp(var, "OSMODE")) {
return true;
}
if (!strcmp(var, "$PDMODE")) {
if (!strcmp(var, "PDMODE")) {
return true;
}
if (!strcmp(var, "$PDSIZE")) {
if (!strcmp(var, "PDSIZE")) {
return true;
}
if (!strcmp(var, "$PELEVATION")) {
if (!strcmp(var, "PELEVATION")) {
return true;
}
if (!strcmp(var, "$PEXTMAX")) {
if (!strcmp(var, "PEXTMAX")) {
return true;
}
if (!strcmp(var, "$PEXTMIN")) {
if (!strcmp(var, "PEXTMIN")) {
return true;
}
if (!strcmp(var, "$PLIMCHECK")) {
if (!strcmp(var, "PLIMCHECK")) {
return true;
}
if (!strcmp(var, "$PLIMMAX")) {
if (!strcmp(var, "PLIMMAX")) {
return true;
}
if (!strcmp(var, "$PLIMMIN")) {
if (!strcmp(var, "PLIMMIN")) {
return true;
}
if (!strcmp(var, "$PLINEGEN")) {
if (!strcmp(var, "PLINEGEN")) {
return true;
}
if (!strcmp(var, "$PLINEWID")) {
if (!strcmp(var, "PLINEWID")) {
return true;
}
if (!strcmp(var, "$PSLTSCALE")) {
if (!strcmp(var, "PSLTSCALE")) {
return true;
}
if (!strcmp(var, "$PUCSNAME")) {
if (!strcmp(var, "PUCSNAME")) {
return true;
}
if (!strcmp(var, "$PUCSORG")) {
if (!strcmp(var, "PUCSORG")) {
return true;
}
if (!strcmp(var, "$PUCSXDIR")) {
if (!strcmp(var, "PUCSXDIR")) {
return true;
}
if (!strcmp(var, "$PUCSYDIR")) {
if (!strcmp(var, "PUCSYDIR")) {
return true;
}
if (!strcmp(var, "$QTEXTMODE")) {
if (!strcmp(var, "QTEXTMODE")) {
return true;
}
if (!strcmp(var, "$REGENMODE")) {
if (!strcmp(var, "REGENMODE")) {
return true;
}
if (!strcmp(var, "$SHADEDGE")) {
if (!strcmp(var, "SHADEDGE")) {
return true;
}
if (!strcmp(var, "$SHADEDIF")) {
if (!strcmp(var, "SHADEDIF")) {
return true;
}
if (!strcmp(var, "$SKETCHINC")) {
if (!strcmp(var, "SKETCHINC")) {
return true;
}
if (!strcmp(var, "$SKPOLY")) {
if (!strcmp(var, "SKPOLY")) {
return true;
}
if (!strcmp(var, "$SPLFRAME")) {
if (!strcmp(var, "SPLFRAME")) {
return true;
}
if (!strcmp(var, "$SPLINESEGS")) {
if (!strcmp(var, "SPLINESEGS")) {
return true;
}
if (!strcmp(var, "$SPLINETYPE")) {
if (!strcmp(var, "SPLINETYPE")) {
return true;
}
if (!strcmp(var, "$SURFTAB1")) {
if (!strcmp(var, "SURFTAB1")) {
return true;
}
if (!strcmp(var, "$SURFTAB2")) {
if (!strcmp(var, "SURFTAB2")) {
return true;
}
if (!strcmp(var, "$SURFTYPE")) {
if (!strcmp(var, "SURFTYPE")) {
return true;
}
if (!strcmp(var, "$SURFU")) {
if (!strcmp(var, "SURFU")) {
return true;
}
if (!strcmp(var, "$SURFV")) {
if (!strcmp(var, "SURFV")) {
return true;
}
if (!strcmp(var, "$TDCREATE")) {
if (!strcmp(var, "TDCREATE")) {
return true;
}
if (!strcmp(var, "$TDINDWG")) {
if (!strcmp(var, "TDINDWG")) {
return true;
}
if (!strcmp(var, "$TDUPDATE")) {
if (!strcmp(var, "TDUPDATE")) {
return true;
}
if (!strcmp(var, "$TDUSRTIMER")) {
if (!strcmp(var, "TDUSRTIMER")) {
return true;
}
if (!strcmp(var, "$TEXTSIZE")) {
if (!strcmp(var, "TEXTSIZE")) {
return true;
}
if (!strcmp(var, "$TEXTSTYLE")) {
if (!strcmp(var, "TEXTSTYLE")) {
return true;
}
if (!strcmp(var, "$THICKNESS")) {
if (!strcmp(var, "THICKNESS")) {
return true;
}
if (!strcmp(var, "$TILEMODE")) {
if (!strcmp(var, "TILEMODE")) {
return true;
}
if (!strcmp(var, "$TRACEWID")) {
if (!strcmp(var, "TRACEWID")) {
return true;
}
if (!strcmp(var, "$UCSNAME")) {
if (!strcmp(var, "UCSNAME")) {
return true;
}
if (!strcmp(var, "$UCSORG")) {
if (!strcmp(var, "UCSORG")) {
return true;
}
if (!strcmp(var, "$UCSXDIR")) {
if (!strcmp(var, "UCSXDIR")) {
return true;
}
if (!strcmp(var, "$UCSYDIR")) {
if (!strcmp(var, "UCSYDIR")) {
return true;
}
if (!strcmp(var, "$UNITMODE")) {
if (!strcmp(var, "UNITMODE")) {
return true;
}
if (!strcmp(var, "$USERI1")) {
if (!strcmp(var, "USERI1")) {
return true;
}
if (!strcmp(var, "$USERR1")) {
if (!strcmp(var, "USERR1")) {
return true;
}
if (!strcmp(var, "$USRTIMER")) {
if (!strcmp(var, "USRTIMER")) {
return true;
}
if (!strcmp(var, "$VISRETAIN")) {
if (!strcmp(var, "VISRETAIN")) {
return true;
}
if (!strcmp(var, "$WORLDVIEW")) {
if (!strcmp(var, "WORLDVIEW")) {
return true;
}
if (!strcmp(var, "$FASTZOOM")) {
if (!strcmp(var, "FASTZOOM")) {
return true;
}
if (!strcmp(var, "$GRIDMODE")) {
if (!strcmp(var, "GRIDMODE")) {
return true;
}
if (!strcmp(var, "$GRIDUNIT")) {
if (!strcmp(var, "GRIDUNIT")) {
return true;
}
if (!strcmp(var, "$SNAPANG")) {
if (!strcmp(var, "SNAPANG")) {
return true;
}
if (!strcmp(var, "$SNAPBASE")) {
if (!strcmp(var, "SNAPBASE")) {
return true;
}
if (!strcmp(var, "$SNAPISOPAIR")) {
if (!strcmp(var, "SNAPISOPAIR")) {
return true;
}
if (!strcmp(var, "$SNAPMODE")) {
if (!strcmp(var, "SNAPMODE")) {
return true;
}
if (!strcmp(var, "$SNAPSTYLE")) {
if (!strcmp(var, "SNAPSTYLE")) {
return true;
}
if (!strcmp(var, "$SNAPUNIT")) {
if (!strcmp(var, "SNAPUNIT")) {
return true;
}
if (!strcmp(var, "$VIEWCTR")) {
if (!strcmp(var, "VIEWCTR")) {
return true;
}
if (!strcmp(var, "$VIEWDIR")) {
if (!strcmp(var, "VIEWDIR")) {
return true;
}
if (!strcmp(var, "$VIEWSIZE")) {
if (!strcmp(var, "VIEWSIZE")) {
return true;
}
return false;

View File

@ -57,11 +57,11 @@ class DL_CreationInterface;
class DL_WriterA;
#define DL_VERSION "3.17.0.0"
#define DL_VERSION "3.26.4.0"
#define DL_VERSION_MAJOR 3
#define DL_VERSION_MINOR 17
#define DL_VERSION_REV 0
#define DL_VERSION_MINOR 26
#define DL_VERSION_REV 4
#define DL_VERSION_BUILD 0
#define DL_UNKNOWN 0
@ -131,12 +131,12 @@ public:
static bool getStrippedLine(std::string& s, unsigned int size,
FILE* stream, bool stripSpace = true);
bool readDxfGroups(std::stringstream& stream,
bool readDxfGroups(std::istream& stream,
DL_CreationInterface* creationInterface);
bool in(std::stringstream &stream,
bool in(std::istream &stream,
DL_CreationInterface* creationInterface);
static bool getStrippedLine(std::string& s, unsigned int size,
std::stringstream& stream, bool stripSpace = true);
std::istream& stream, bool stripSpace = true);
static bool stripWhiteSpace(char** s, bool stripSpaces = true);
@ -294,9 +294,9 @@ public:
const DL_DimensionData& data,
const DL_DimDiametricData& edata,
const DL_Attributes& attrib);
void writeDimAngular(DL_WriterA& dw,
void writeDimAngular2L(DL_WriterA& dw,
const DL_DimensionData& data,
const DL_DimAngularData& edata,
const DL_DimAngular2LData& edata,
const DL_Attributes& attrib);
void writeDimAngular3P(DL_WriterA& dw,
const DL_DimensionData& data,
@ -311,6 +311,8 @@ public:
const DL_Attributes& attrib);
void writeLeaderVertex(DL_WriterA& dw,
const DL_LeaderVertexData& data);
void writeLeaderEnd(DL_WriterA& dw,
const DL_LeaderData& data);
void writeHatch1(DL_WriterA& dw,
const DL_HatchData& data,
const DL_Attributes& attrib);
@ -324,7 +326,7 @@ public:
void writeHatchEdge(DL_WriterA& dw,
const DL_HatchEdgeData& data);
int writeImage(DL_WriterA& dw,
unsigned long writeImage(DL_WriterA& dw,
const DL_ImageData& data,
const DL_Attributes& attrib);
@ -348,14 +350,15 @@ public:
void writeStyle(DL_WriterA& dw, const DL_StyleData& style);
void writeView(DL_WriterA& dw);
void writeUcs(DL_WriterA& dw);
void writeDimStyle(DL_WriterA& dw,
void writeDimStyle(DL_WriterA& dw,
double dimasz, double dimexe, double dimexo,
double dimgap, double dimtxt);
double dimgap, double dimtxt,
int dimtad = 1, bool dimtih = false);
void writeBlockRecord(DL_WriterA& dw);
void writeBlockRecord(DL_WriterA& dw, const std::string& name);
void writeObjects(DL_WriterA& dw, const std::string& appDictionaryName = "");
void writeAppDictionary(DL_WriterA& dw);
int writeDictionaryEntry(DL_WriterA& dw, const std::string& name);
unsigned long writeDictionaryEntry(DL_WriterA& dw, const std::string& name);
void writeXRecord(DL_WriterA& dw, int handle, int value);
void writeXRecord(DL_WriterA& dw, int handle, double value);
void writeXRecord(DL_WriterA& dw, int handle, bool value);

View File

@ -156,7 +156,7 @@ struct DXFLIB_EXPORT DL_StyleData {
italic(false) {
}
bool operator==(const DL_StyleData& other) {
bool operator==(const DL_StyleData& other) const {
// ignore lastHeightUsed:
return (name==other.name &&
flags==other.flags &&
@ -1090,6 +1090,8 @@ struct DXFLIB_EXPORT DL_DimensionData {
* Dimension scale (dimscale) style override.
*/
double dimScale;
bool arrow1Flipped;
bool arrow2Flipped;
};
@ -1238,12 +1240,12 @@ struct DXFLIB_EXPORT DL_DimDiametricData {
/**
* Angular Dimension Data.
*/
struct DXFLIB_EXPORT DL_DimAngularData {
struct DXFLIB_EXPORT DL_DimAngular2LData {
/**
* Constructor.
* Parameters: see member variables.
*/
DL_DimAngularData(double ddpx1, double ddpy1, double ddpz1,
DL_DimAngular2LData(double ddpx1, double ddpy1, double ddpz1,
double ddpx2, double ddpy2, double ddpz2,
double ddpx3, double ddpy3, double ddpz3,
double ddpx4, double ddpy4, double ddpz4) {
@ -1320,21 +1322,21 @@ struct DXFLIB_EXPORT DL_DimAngular3PData {
dpz3 = ddpz3;
}
/*! X Coordinate of definition point 1. */
/*! X Coordinate of definition point 1 (extension line 1 end). */
double dpx1;
/*! Y Coordinate of definition point 1. */
double dpy1;
/*! Z Coordinate of definition point 1. */
double dpz1;
/*! X Coordinate of definition point 2. */
/*! X Coordinate of definition point 2 (extension line 2 end). */
double dpx2;
/*! Y Coordinate of definition point 2. */
double dpy2;
/*! Z Coordinate of definition point 2. */
double dpz2;
/*! X Coordinate of definition point 3. */
/*! X Coordinate of definition point 3 (center). */
double dpx3;
/*! Y Coordinate of definition point 3. */
double dpy3;
@ -1395,23 +1397,25 @@ struct DXFLIB_EXPORT DL_LeaderData {
* Constructor.
* Parameters: see member variables.
*/
DL_LeaderData(int lArrowHeadFlag,
int lLeaderPathType,
int lLeaderCreationFlag,
int lHooklineDirectionFlag,
int lHooklineFlag,
double lTextAnnotationHeight,
double lTextAnnotationWidth,
int lNumber) {
DL_LeaderData(int arrowHeadFlag,
int leaderPathType,
int leaderCreationFlag,
int hooklineDirectionFlag,
int hooklineFlag,
double textAnnotationHeight,
double textAnnotationWidth,
int number,
double dimScale = 1.0) :
arrowHeadFlag(arrowHeadFlag),
leaderPathType(leaderPathType),
leaderCreationFlag(leaderCreationFlag),
hooklineDirectionFlag(hooklineDirectionFlag),
hooklineFlag(hooklineFlag),
textAnnotationHeight(textAnnotationHeight),
textAnnotationWidth(textAnnotationWidth),
number(number),
dimScale(dimScale) {
arrowHeadFlag = lArrowHeadFlag;
leaderPathType = lLeaderPathType;
leaderCreationFlag = lLeaderCreationFlag;
hooklineDirectionFlag = lHooklineDirectionFlag;
hooklineFlag = lHooklineFlag;
textAnnotationHeight = lTextAnnotationHeight;
textAnnotationWidth = lTextAnnotationWidth;
number = lNumber;
}
/*! Arrow head flag (71). */
@ -1430,6 +1434,8 @@ struct DXFLIB_EXPORT DL_LeaderData {
double textAnnotationWidth;
/*! Number of vertices in leader (76). */
int number;
/*! Dimension scale (dimscale) style override. */
double dimScale;
};

View File

@ -36,6 +36,7 @@
#pragma once
#endif // _MSC_VER > 1000
#include <cstring>
#include <iostream>
#include <algorithm>
@ -539,49 +540,6 @@ public:
return m_handle;
}
/**
* Increases handle, so that the handle returned remains available.
*/
unsigned long incHandle() const {
return m_handle++;
}
/**
* Sets the handle of the model space. Entities refer to
* this handle.
*/
void setModelSpaceHandle(unsigned long h) {
modelSpaceHandle = h;
}
unsigned long getModelSpaceHandle() {
return modelSpaceHandle;
}
/**
* Sets the handle of the paper space. Some special blocks refer to
* this handle.
*/
void setPaperSpaceHandle(unsigned long h) {
paperSpaceHandle = h;
}
unsigned long getPaperSpaceHandle() {
return paperSpaceHandle;
}
/**
* Sets the handle of the paper space 0. Some special blocks refer to
* this handle.
*/
void setPaperSpace0Handle(unsigned long h) {
paperSpace0Handle = h;
}
unsigned long getPaperSpace0Handle() {
return paperSpace0Handle;
}
/**
* Must be overwritten by the implementing class to write a
* real value to the file.

View File

@ -1,79 +1,98 @@
#include "dxfreader.h"
#include <QDebug>
DxfReader::DxfReader(const QString &fileName, QObject *parent)
DxfReader::DxfReader(const QString &m_fileName, QObject *parent)
: QObject(parent)
, fileName(fileName)
,m_fileName(m_fileName)
{
//QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
m_blockDataList.clear();
m_blockData.blockId = 0;
initBlockDatas();
// 读取 dxf 文件
DL_Dxf *dxf = new DL_Dxf;
if (!dxf->in(std::string(fileName.toLocal8Bit()), this)) { // if file open failed
std::cerr << std::string(fileName.toLocal8Bit()) << " could not be opened.\n";
if (!dxf->in(std::string(m_fileName.toLocal8Bit()), this))
{
// if file open failed
std::cerr << std::string(m_fileName.toLocal8Bit()) << " could not be opened.\n";
return;
}
delete dxf;
dxf = nullptr;
else
{
m_blockData.blockId++;
m_blockDataList.append(m_blockData);
initBlockDatas();
}
if(dxf != NULL)
{
delete dxf;
}
}
DxfReader::~DxfReader()
{
}
void DxfReader::addText(const DL_TextData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfText << data;
m_blockData.dxfText << data;
}
void DxfReader::addLine(const DL_LineData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfLines << data;
m_blockData.dxfLines << data;
}
void DxfReader::addArc(const DL_ArcData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfArcs << data;
m_blockData.dxfArcs << data;
}
void DxfReader::addCircle(const DL_CircleData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfCircles << data;
m_blockData.dxfCircles << data;
}
void DxfReader::addEllipse(const DL_EllipseData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfEllipses << data;
m_blockData.dxfEllipses << data;
}
void DxfReader::addPolyline(const DL_PolylineData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfPolylines << data;
m_blockData.dxfPolylines << data;
}
void DxfReader::addPoint(const DL_PointData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfPoints << data;
m_blockData.dxfPoints << data;
}
void DxfReader::addSpline(const DL_SplineData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfSplines << data;
m_blockData.dxfSplines << data;
}
void DxfReader::addBlock(const DL_BlockData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfBlocks << data;
m_blockData.blockName = data.name;
m_blockData.blockId++;
}
void DxfReader::endBlock()
{
m_blockDataList.append(m_blockData);
initBlockDatas();
}
void DxfReader::addLayer(const DL_LayerData &data)
@ -96,31 +115,31 @@ void DxfReader::addLinetypeDash(double length)
void DxfReader::addXLine(const DL_XLineData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfXLines << data;
m_blockData.dxfXLines << data;
}
void DxfReader::addRay(const DL_RayData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfRays << data;
m_blockData.dxfRays << data;
}
void DxfReader::addVertex(const DL_VertexData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfVertexs << data;
m_blockData.dxfVertexs << data;
}
void DxfReader::addControlPoint(const DL_ControlPointData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfControlPoints << data;
m_blockData.dxfControlPoints << data;
}
void DxfReader::addFitPoint(const DL_FitPointData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfFitPoints << data;
m_blockData.dxfFitPoints << data;
}
void DxfReader::addKnot(const DL_KnotData &data)
@ -205,12 +224,12 @@ void DxfReader::addDimDiametric(const DL_DimensionData &data, const DL_DimDiamet
//qDebug() << Q_FUNC_INFO;
}
void DxfReader::addDimAngular(const DL_DimensionData &data, const DL_DimAngularData &edata)
{
if(data.angle == 0){}
if(edata.dpx1 == 0){}
//qDebug() << Q_FUNC_INFO;
}
//void DxfReader::addDimAngular(const DL_DimensionData &data, const DL_DimAngularData &edata)
//{
// if(data.angle == 0){}
// if(edata.dpx1 == 0){}
// //qDebug() << Q_FUNC_INFO;
//}
void DxfReader::addDimAngular3P(const DL_DimensionData &data, const DL_DimAngular3PData &edata)
{
@ -241,19 +260,19 @@ void DxfReader::addLeaderVertex(const DL_LeaderVertexData &data)
void DxfReader::addHatch(const DL_HatchData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfHatchs << data;
m_blockData.dxfHatchs << data;
}
void DxfReader::addHatchLoop(const DL_HatchLoopData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfHatchLoops << data;
m_blockData.dxfHatchLoops << data;
}
void DxfReader::addHatchEdge(const DL_HatchEdgeData &data)
{
//qDebug() << Q_FUNC_INFO;
dxfHatchEdges << data;
m_blockData.dxfHatchEdges << data;
}
void DxfReader::addImage(const DL_ImageData &data)
@ -377,3 +396,29 @@ void DxfReader::endSequence()
{
//qDebug() << Q_FUNC_INFO;
}
QList<BlockDatas> DxfReader::getBlockDatas()
{
return m_blockDataList;
}
void DxfReader::initBlockDatas()
{
m_blockData.dxfArcs.clear();
m_blockData.dxfLines.clear();
m_blockData.dxfText.clear();
m_blockData.dxfArcs.clear();
m_blockData.dxfCircles.clear();
m_blockData.dxfEllipses.clear();
m_blockData.dxfPolylines.clear();
m_blockData.dxfPoints.clear();
m_blockData.dxfSplines.clear();
m_blockData.dxfVertexs.clear();
m_blockData.dxfXLines.clear();
m_blockData.dxfRays.clear();
m_blockData.dxfControlPoints.clear();
m_blockData.dxfFitPoints.clear();
m_blockData.dxfHatchs.clear();
m_blockData.dxfHatchLoops.clear();
m_blockData.dxfHatchEdges.clear();
}

View File

@ -9,6 +9,28 @@
#include <QMetaType>
#include <QtCore/QList>
typedef struct
{
int blockId;//块索引
std::string blockName;//块名称
QList<DL_LineData> dxfLines;
QList<DL_TextData> dxfText;
QList<DL_ArcData> dxfArcs;
QList<DL_CircleData> dxfCircles;
QList<DL_EllipseData> dxfEllipses;
QList<DL_PolylineData> dxfPolylines;
QList<DL_PointData> dxfPoints;
QList<DL_SplineData> dxfSplines;
QList<DL_VertexData> dxfVertexs;
QList<DL_XLineData> dxfXLines;
QList<DL_RayData> dxfRays;
QList<DL_ControlPointData> dxfControlPoints;
QList<DL_FitPointData> dxfFitPoints;
QList<DL_HatchData> dxfHatchs;
QList<DL_HatchLoopData> dxfHatchLoops;
QList<DL_HatchEdgeData> dxfHatchEdges;
} BlockDatas;
class DxfReader : public QObject, public DL_CreationAdapter
{
Q_OBJECT
@ -17,6 +39,7 @@ public:
QString Text;
};
explicit DxfReader(const QString &fileName, QObject *parent = nullptr);
~DxfReader();
virtual void addText(const DL_TextData& data) override;
virtual void addLine(const DL_LineData& data) override;
@ -50,7 +73,7 @@ public:
virtual void addDimLinear(const DL_DimensionData& data, const DL_DimLinearData& edata) override;
virtual void addDimRadial(const DL_DimensionData& data, const DL_DimRadialData& edata) override;
virtual void addDimDiametric(const DL_DimensionData& data, const DL_DimDiametricData& edata) override;
virtual void addDimAngular(const DL_DimensionData& data, const DL_DimAngularData& edata) override;
//virtual void addDimAngular(const DL_DimensionData& data, const DL_DimAngularData& edata) override;
virtual void addDimAngular3P(const DL_DimensionData& data, const DL_DimAngular3PData& edata) override;
virtual void addDimOrdinate(const DL_DimensionData& data, const DL_DimOrdinateData& edata) override;
virtual void addLeader(const DL_LeaderData &data) override;
@ -83,29 +106,19 @@ public:
virtual void add3dFace(const DL_3dFaceData &data) override;
virtual void addComment(const std::string &comment) override;
virtual void endSequence() override;
QList<BlockDatas> getBlockDatas();
QList<DL_LineData> dxfLines;
QList<DL_TextData> dxfText;
QList<DL_ArcData> dxfArcs;
QList<DL_CircleData> dxfCircles;
QList<DL_EllipseData> dxfEllipses;
QList<DL_PolylineData> dxfPolylines;
QList<DL_PointData> dxfPoints;
QList<DL_SplineData> dxfSplines;
QList<DL_BlockData> dxfBlocks;
QList<DL_VertexData> dxfVertexs;
QList<DL_LayerData> dxfLayers;
QList<DL_LinetypeData> dxfLinetypes;
QList<DL_XLineData> dxfXLines;
QList<DL_RayData> dxfRays;
QList<DL_ControlPointData> dxfControlPoints;
QList<DL_FitPointData> dxfFitPoints;
QList<DL_HatchData> dxfHatchs;
QList<DL_HatchLoopData> dxfHatchLoops;
QList<DL_HatchEdgeData> dxfHatchEdges;
QList<DL_BlockData> dxfBlocks;
private:
QString fileName;
void initBlockDatas();
private:
QString m_fileName;
QList<BlockDatas> m_blockDataList;
BlockDatas m_blockData;
};

View File

@ -637,7 +637,7 @@ void ImportHPGL::AddPolylineToMarker()
//长度<0.2mm为钻孔
CRPPolyline RPPolyline1;
QPoint pt1,pt2;
QPointF pt1,pt2;
CDrill drill;
bool bIsdirll = false;
@ -693,6 +693,7 @@ void ImportHPGL::AddPoint2listXY(QPoint ptPoint)
{
double angle, sina, cosa;
double rcx, rcy;
angle = sina = cosa = rcx = rcy = 0;
if(m_rotateAngle != 0)
{
@ -2400,7 +2401,7 @@ bool ImportHPGL::Write(QString strPathName,Marker *pMarker)
for (j = 0; j < iPointCount; j++)
{
QPoint pt = polyLine.m_listPoint.at(j);
QPointF pt = polyLine.m_listPoint.at(j);
if (j == 0)
{

View File

@ -213,7 +213,7 @@ protected:
QPen m_cutPen;//切割画笔
QPen m_halfCutPen;//半透切割画笔
QList <QPoint> m_listXY; //还没有确定抬落刀的坐标
QList <QPointF> m_listXY; //还没有确定抬落刀的坐标
//QPainterPath m_polylinePainterPath;//绘图路径-线段
unsigned char m_chTerminator;//标志终结符,除了NULL LF ESC及;十进制分别为0,5,27,59;外的所有字符默认为ETX 十进制3

View File

@ -47,9 +47,9 @@ void Marker::Initialize()
m_strProductCode = "";
}
QRect Marker::GetRect()
QRectF Marker::GetRect()
{
QRect rect;
QRectF rect;
CRPPolyline RPPolyline;
rect.setRect(0,0,0,0);
@ -63,22 +63,22 @@ QRect Marker::GetRect()
}
else if (RPPolyline.m_nDrawingType == 3)
{
rect |= QRect(RPPolyline.m_text.m_ptPostLU,RPPolyline.m_text.m_ptPostRD);
rect |= QRectF(RPPolyline.m_text.m_ptPostLU,RPPolyline.m_text.m_ptPostRD);
}
else if (RPPolyline.m_nDrawingType == 1)
{
rect |= QRect(RPPolyline.m_bitmapInfo.m_ptAbPostLU,RPPolyline.m_bitmapInfo.m_ptAbPostRD);
rect |= QRectF(RPPolyline.m_bitmapInfo.m_ptAbPostLU,RPPolyline.m_bitmapInfo.m_ptAbPostRD);
}
}
return rect;
}
QRect Marker::RectofPolyline(const QList<QPoint> &listPoint)
QRectF Marker::RectofPolyline(const QList<QPointF> &listPoint)
{
if(listPoint.empty())
{
return QRect(0,0,0,0);
return QRectF(0,0,0,0);
}
int iXMin = INT_MAX;
int iXMax = INT_MIN;
@ -115,7 +115,7 @@ QRect Marker::RectofPolyline(const QList<QPoint> &listPoint)
}
}
return QRect(QPoint(iXMin,iYMin),QPoint(iXMax,iYMax));
return QRectF(QPointF(iXMin,iYMin),QPointF(iXMax,iYMax));
}

View File

@ -293,7 +293,7 @@ public:
class CDrill
{
public:
QPoint m_pt;//冲孔的位置
QPointF m_pt;//冲孔的位置
int m_nDrillType;//冲孔类型
int m_nAngle;//冲孔的角度(逆时针方向为正),单位0.01度
@ -337,7 +337,7 @@ public:
CNotch m_notch;
LineType m_lineType;
QList<QPoint> m_listPoint;
QList<QPointF> m_listPoint;
CRPPolyline()
{
@ -401,8 +401,8 @@ public:
Marker(const Marker &a);
Marker operator=(const Marker &a);
void Initialize();
QRect GetRect();
QRect RectofPolyline(const QList <QPoint> &listPoint);
QRectF GetRect();
QRectF RectofPolyline(const QList <QPointF> &listPoint);
double m_iDPMM; //长度数据单位:m_iDPMM(每毫米点)
QList <CRPPolyline> m_listPolyline; //切割的点链,单位:1/m_iDPMM mm, X向右为正Y向上为正

View File

@ -1,11 +1,14 @@
#include "drawdata.h"
QPicture creatPictureByData(Marker marker, QPainterPath &painterPath, int penWidth)
CreatPictureStr creatPictureByData(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
QPainterPath painterPath;
CBitmapInfo bitmapInfo;
QRect rect = marker.GetRect();
QRectF rect = marker.GetRect();
int minX = rect.left();
int maxY = rect.bottom();
int rectSize = 20;//20毫米-对接符矩形框大小
int blockSpace = 50;//50毫米-块与块之间的间距
int nLineCount = marker.m_listPolyline.size();
for(int i = 0; i < nLineCount; i++)
@ -43,14 +46,14 @@ QPicture creatPictureByData(Marker marker, QPainterPath &painterPath, int penWid
int lux = bitmapInfo.m_ptAbPostLU.x();
int luy = bitmapInfo.m_ptAbPostLU.y();
int nlux = (lux - minX)/M_IDPMM*MMPIXELY;
int nluy = (maxY-luy)/M_IDPMM*MMPIXELY;
int nluy = (maxY - luy)/M_IDPMM*MMPIXELY;
bitmapInfo.m_ptAbPostLU.setX(nlux);
bitmapInfo.m_ptAbPostLU.setY(nluy);
int rdx = bitmapInfo.m_ptAbPostRD.x();
int rdy = bitmapInfo.m_ptAbPostRD.y();
int nrdx = (rdx - minX)/M_IDPMM*MMPIXELY;
int nrdy = (maxY-rdy)/M_IDPMM*MMPIXELY;
int nrdy = (maxY - rdy)/M_IDPMM*MMPIXELY;
bitmapInfo.m_ptAbPostRD.setX(nrdx);
bitmapInfo.m_ptAbPostRD.setY(nrdy);
}
@ -61,13 +64,162 @@ QPicture creatPictureByData(Marker marker, QPainterPath &painterPath, int penWid
qDebug()<<"painterPath.isEmpty";
}
//将路径画在picture上
QPicture pic;
QPen pen(Qt::black, penWidth, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
//pen.setCosmetic(true); // 对于固定宽度的笔划很有用
CreatPictureStr picStr;
QPen pen;
pen.setWidth(1);//设置笔号像素为1用于显示的pic
pen.setColor(QColor(Qt::black));
QPainter painter;
painter.begin(&pic);
//当纸张宽度不够打印时需要对接打印
int width = rect.width()/M_IDPMM;
int length = rect.height()/M_IDPMM;
if(rightSpace != 0)
{
if(paperWidth >= length)
{
paperWidth = length - rightSpace;
}
}
double oft = paperWidth*MMPIXELY;
if(width <= rectSize)
{
rectSize = width / 2;
blockSpace = rectSize / 2;
}
int square = rectSize*MMPIXELY;
if(paperWidth < length)
{
int seNum = length / paperWidth;
if(length % paperWidth != 0)
{
seNum += 1;
}
butSpace += rectSize;
int num = width / butSpace;
double space = (double)width / (double)num;
for(int m = 0; m < seNum-1; m++)
{
for(int i = 0; i < num; i++)
{
//绘制对接符5mm的正方形里面是交叉线X
//添加正方形path
int x = i*space * MMPIXELY;
int y = oft + m * oft - square / 2;
painterPath.moveTo(x,y);
QRectF rect(x,y,square,square);
painterPath.addRect(rect);
//添加交叉线(X)
QPointF diagonalStart(rect.left(), rect.top());
QPointF diagonalEnd(rect.right(), rect.bottom());
painterPath.moveTo(diagonalStart);
painterPath.lineTo(diagonalEnd);
// 另一条对角线
QPointF otherDiagonalStart(rect.right(), rect.top());
QPointF otherDiagonalEnd(rect.left(), rect.bottom());
painterPath.moveTo(otherDiagonalStart);
painterPath.lineTo(otherDiagonalEnd);
}
}
QPainterPath pathSegments[seNum];
splitPaintPath(painterPath,oft,seNum,pathSegments);
int startx,starty,targetWidth,targetHeight,blockSize,bmpNum;
if(bitmapInfo.m_iBytes > 0)//有位图
{
startx = bitmapInfo.m_ptAbPostLU.x();
starty = bitmapInfo.m_ptAbPostLU.y();
targetWidth = abs(bitmapInfo.m_ptAbPostRD.x() - bitmapInfo.m_ptAbPostLU.x());
targetHeight = abs(bitmapInfo.m_ptAbPostRD.y() - bitmapInfo.m_ptAbPostLU.y());
blockSize = paperWidth * MMPIXELY;
if(targetHeight > blockSize)
{
bmpNum = targetHeight / blockSize;
if(targetHeight % blockSize != 0)
{
bmpNum += 1;
}
}
}
painter.begin(&picStr.showPic);
painter.setPen(pen);
int oftH = 0;
int oftW = 0;
for(int i = 0; i < seNum; i++)
{
if(i != 0)
{
oftH = 0 - pathSegments[i].boundingRect().height();
oftW = pathSegments[i].boundingRect().width() + blockSpace * MMPIXELY;
}
painter.translate(oftW, oftH);
painter.drawPath(pathSegments[i]);
int boftH = i*(0 - (starty + oftH));
if(targetHeight > blockSize)
{
int bmpH = bitmapInfo.m_pBitmap.height() / bmpNum;
int bmpOft = i*bmpH;
painter.drawPixmap(startx,boftH,targetWidth,blockSize,bitmapInfo.m_pBitmap,
startx,bmpOft, bitmapInfo.m_pBitmap.width(), bmpH);
}
else
{
if(startx <= abs(oftW) && starty <= abs(oftH))
{
painter.drawPixmap(startx,boftH,targetWidth,targetHeight,bitmapInfo.m_pBitmap,
startx,starty, bitmapInfo.m_pBitmap.width(), bitmapInfo.m_pBitmap.height());
}
}
}
painter.end();
painter.begin(&picStr.sendPic);
pen.setWidth(penWidth);
painter.setPen(pen);
oftH = 0;
oftW = 0;
for(int i = 0; i < seNum; i++)
{
if(i != 0)
{
oftH = 0 - pathSegments[i].boundingRect().height();
oftW = pathSegments[i].boundingRect().width() + blockSpace * MMPIXELY;
}
painter.translate(oftW, oftH);
painter.drawPath(pathSegments[i]);
int boftH = i*(0 - (starty + oftH));
if(targetHeight > blockSize)
{
int bmpH = bitmapInfo.m_pBitmap.height() / bmpNum;
int bmpOft = i*bmpH;
painter.drawPixmap(startx,boftH,targetWidth,blockSize,bitmapInfo.m_pBitmap,
startx,bmpOft, bitmapInfo.m_pBitmap.width(), bmpH);
}
else
{
if(startx <= abs(oftW) && starty <= abs(oftH))
{
painter.drawPixmap(startx,boftH,targetWidth,targetHeight,bitmapInfo.m_pBitmap,
startx,starty, bitmapInfo.m_pBitmap.width(), bitmapInfo.m_pBitmap.height());
}
}
}
painter.end();
return picStr;
}
//将路径画在picture上
painter.begin(&picStr.showPic);
painter.setPen(pen);
painter.drawPath(painterPath);
if(bitmapInfo.m_iBytes > 0)//有位图
@ -79,26 +231,79 @@ QPicture creatPictureByData(Marker marker, QPainterPath &painterPath, int penWid
int targetHeight = abs(bitmapInfo.m_ptAbPostRD.y() - bitmapInfo.m_ptAbPostLU.y());
painter.drawPixmap(startx,starty,targetWidth,targetHeight,bitmapInfo.m_pBitmap,
startx,starty, bitmapInfo.m_pBitmap.width(), bitmapInfo.m_pBitmap.height());
// painter.drawPixmap(bitmapInfo.m_ptAbPostLU.x(),bitmapInfo.m_ptAbPostLU.y(),bitmapInfo.m_pBitmap);
// painter.drawPixmap(bitmapInfo.m_ptAbPostLU.x(),bitmapInfo.m_ptAbPostLU.y(),bitmapInfo.m_pBitmap);
}
painter.end();
return pic;
painter.begin(&picStr.sendPic);
pen.setWidth(penWidth);
painter.setPen(pen);//设置笔号像素为penWidth用于发送的pic
painter.drawPath(painterPath);
if(bitmapInfo.m_iBytes > 0)//有位图
{
int startx = bitmapInfo.m_ptAbPostLU.x();
int starty = bitmapInfo.m_ptAbPostLU.y();
//bitmapInfo.m_pBitmap.save("D:\\1.bmp");
int targetWidth = abs(bitmapInfo.m_ptAbPostRD.x() - bitmapInfo.m_ptAbPostLU.x());
int targetHeight = abs(bitmapInfo.m_ptAbPostRD.y() - bitmapInfo.m_ptAbPostLU.y());
painter.drawPixmap(startx,starty,targetWidth,targetHeight,bitmapInfo.m_pBitmap,
startx,starty, bitmapInfo.m_pBitmap.width(), bitmapInfo.m_pBitmap.height());
// painter.drawPixmap(bitmapInfo.m_ptAbPostLU.x(),bitmapInfo.m_ptAbPostLU.y(),bitmapInfo.m_pBitmap);
}
painter.end();
return picStr;
}
QPicture creatPictureByBmp(QPixmap pixmap,int penWidth)
CreatPictureStr creatPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
//将图片画在picture上
QPicture pic;
CreatPictureStr picStr;
QPen pen;
pen.setWidth(penWidth);//设置笔号
pen.setWidth(1);//设置笔号
pen.setColor(QColor(Qt::black));
int height = pixmap.height() / MMPIXELY;
if(rightSpace != 0)
{
if(paperWidth >= height)
{
paperWidth = height - rightSpace;
}
}
QPainter painter;
painter.begin(&pic);
painter.begin(&picStr.showPic);
painter.setPen(pen);
painter.drawPixmap(0,0,pixmap);
if(height > paperWidth)
{
//功能未实现
if(butSpace == 0)//为了去掉警告
{
}
}
else
{
painter.drawPixmap(0,0,pixmap);
}
painter.end();
return pic;
pen.setWidth(penWidth);//设置笔号
pen.setColor(QColor(Qt::black));
painter.begin(&picStr.sendPic);
painter.setPen(pen);
if(height > paperWidth)
{
//功能未实现
}
else
{
painter.drawPixmap(0,0,pixmap);
}
painter.end();
return picStr;
}
void creatMarkerDat(McFilesInfo &curFilesInfo, QString printDir, QString filePath, int fileIdx, double angle)
@ -108,12 +313,26 @@ void creatMarkerDat(McFilesInfo &curFilesInfo, QString printDir, QString filePat
if(fileInfo.suffix().toUpper() == "DXF")
{
curFilesInfo.m_fileType = TYPE_FILE;
DxfHelper dxfHelper;
if(dxfHelper.generateDxf(filePath))
{
dxfHelper.getDxfPaths(); // 获取转换出来的dxf所有类型图形的点集
QImage img = dxfHelper.generateDXFImage(); // 获取预览图像
img.save("D:\\1.png");
QList <CRPPolyline> polylineList;
CRPPolyline polyline;
QVector<QVector<QPointF>> dxfPaths = dxfHelper.getDxfPaths(); // 获取转换出来的dxf所有类型图形的点集
//创建mark数据
for (int j = 0; j < dxfPaths.size(); j++)
{
polyline.m_listPoint.clear();
for(int i = 0; i < dxfPaths[j].length(); i++)
{
QPointF point = dxfPaths[j].at(i);
polyline.m_listPoint.append(point);
}
polylineList.append(polyline);
}
curFilesInfo.m_marker.m_listPolyline = polylineList;
curFilesInfo.m_fileRect = curFilesInfo.m_marker.GetRect();
}
}
else if(fileInfo.suffix().toUpper() == "PLT")
@ -181,3 +400,197 @@ void creatMarkerDat(McFilesInfo &curFilesInfo, QString printDir, QString filePat
curFilesInfo.m_selectBlockNum = 0;//当前选择块数
curFilesInfo.m_creatDataFlag = 1;
}
void splitPaintPath(QPainterPath originalPath,double segmentHeight,int segmenNum,QPainterPath *pathSegments)
{
QPainterPath::Element element = originalPath.elementAt(0);
QPointF firstPoint(element.x, element.y);
qreal currentY = 0;
pathSegments[0].moveTo(firstPoint);
for (int i = 1; i < originalPath.elementCount(); i++)
{
QPainterPath::Element element = originalPath.elementAt(i);
QPointF curPoint(element.x, element.y);
QPointF prePoint(originalPath.elementAt(i-1).x, originalPath.elementAt(i-1).y);
QPointF prePot = prePoint;
int addFlag = 0;
for(int j = 0; j < segmenNum; j++)
{
currentY = segmentHeight + segmentHeight * j;
//在此块内
if(curPoint.y() <= currentY && curPoint.y() >= (currentY - segmentHeight) &&
prePoint.y() <= currentY && prePoint.y() >= (currentY - segmentHeight))
{
if (element.type == QPainterPath::MoveToElement)
{
pathSegments[j].moveTo(prePot);
pathSegments[j].moveTo(curPoint);
}
if (element.type == QPainterPath::LineToElement)
{
pathSegments[j].moveTo(prePot);
pathSegments[j].lineTo(curPoint);
}
addFlag = 1;
break;
}
}
//未添加时继续判断
if(addFlag == 0)
{
//跨块,要判断跨了几块,求出交点
//判断prePoint在哪个块
int preIdx = 0;
int curIdx = 0;
int flag = 0;
for(int m = 0; m < segmenNum; m++)
{
qreal height = segmentHeight + segmentHeight * m;
//在此块内
if(prePoint.y() <= height && prePoint.y() >= (height - segmentHeight))
{
preIdx = m;
flag |= 1;
}
//在此块内
if(curPoint.y() <= height && curPoint.y() >= (height - segmentHeight))
{
curIdx = m;
flag |= 2;
}
if(flag == 3)
{
break;
}
}
//从上到下
if(preIdx < curIdx)
{
for(int p = preIdx; p < curIdx+1; p++)
{
currentY = segmentHeight + segmentHeight * p;
QPointF intersection;
if (lineIntersection(prePoint, curPoint, currentY, &intersection))
{
if (element.type == QPainterPath::MoveToElement)
{
pathSegments[p].moveTo(prePot);
pathSegments[p].moveTo(intersection);
if(curPoint.y() < currentY + segmentHeight)
{
if(p+1 < segmenNum)
{
pathSegments[p+1].moveTo(intersection);
pathSegments[p+1].moveTo(curPoint);
}
}
}
if (element.type == QPainterPath::LineToElement)
{
pathSegments[p].moveTo(prePot);
pathSegments[p].lineTo(intersection);
if(curPoint.y() < currentY + segmentHeight)
{
if(p+1 < segmenNum)
{
pathSegments[p+1].moveTo(intersection);
pathSegments[p+1].lineTo(curPoint);
}
}
}
prePot = intersection;
}
}
}
else
{
//从下到上
for(int p = preIdx+1; p > curIdx; p--)
{
currentY = segmentHeight * p - segmentHeight;
QPointF intersection;
if (lineIntersection(curPoint, prePoint, currentY, &intersection))
{
if (element.type == QPainterPath::MoveToElement)
{
pathSegments[p-1].moveTo(prePot);
pathSegments[p-1].moveTo(intersection);
if(curPoint.y() > currentY - segmentHeight)
{
if(p-1-1 >= 0)
{
pathSegments[p-1-1].moveTo(intersection);
pathSegments[p-1-1].moveTo(curPoint);
}
}
}
if (element.type == QPainterPath::LineToElement)
{
pathSegments[p-1].moveTo(prePot);
pathSegments[p-1].lineTo(intersection);
if(curPoint.y() > currentY - segmentHeight)
{
if(p-1-1 >= 0)
{
pathSegments[p-1-1].moveTo(intersection);
pathSegments[p-1-1].lineTo(curPoint);
}
}
}
prePot = intersection;
}
}
}
}
}
}
// 求一条线段与y轴的坐标
//返回值:
//-1: 没有交点
// 0: 线段与Y轴重合
// 1: 有一个交点(x)
bool lineIntersection(QPointF p1, QPointF p2, double y, QPointF* intersection)
{
//-1是为了避免double乘除时产生的误差
if (((p1.y() < (y - 1)) && (p2.y() < (y - 1))) ||
((p1.y() > y) && (p2.y() > y)) ||
0)
{// 没有交点
return false;
}
else if ((p1.y() == y) && (p2.y() == y))
{// 线段与Y重合返回false因为这种情况已经被添加到块中
return false;
}
// else if (p1.y() == y)
// {// p1与Y重合
// intersection->setX(p1.x());
// intersection->setY(y);
// return true;
// }
// else if (p2.y() == y)
// {// p2与Y重合
// intersection->setX(p2.x());
// intersection->setY(y);
// return true;
// }
else
{// 有一个交点
double dx1 = p2.x() - p1.x();
double dy1 = p2.y() - p1.y();
double dy = y - p1.y();
double x = (dx1/dy1) * dy + p1.x();
intersection->setX(x);
intersection->setY(y);
return true;
}
return true;
}

View File

@ -2,6 +2,7 @@
#define DRAWDATA_H
#include <QPicture>
#include <QBitmap>
#include "datafile/dxf/dxfhelper.h"
#include "datafile/hpgl/importhpgl.h"
#include "machine/printinfo/mcfiles.h"
@ -9,8 +10,19 @@
#define TYPE_FILE 0
#define TYPE_IMAGE 1
QPicture creatPictureByData(Marker marker, QPainterPath &painterPath,int penWidth = 1);
QPicture creatPictureByBmp(QPixmap pixmap,int penWidth = 1);
typedef struct
{
QPicture showPic;//用于显示的picture画笔为1像素不为1像素时MyGraphicsItem中绘制的线条会很淡
QPicture sendPic;//用于发送的picture画笔为所设置像素
} CreatPictureStr;
//marker数据绘制路径纸宽对接符间距是否对接标志右边距笔宽
CreatPictureStr creatPictureByData(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
CreatPictureStr creatPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
void creatMarkerDat(McFilesInfo &curFilesInfo, QString printDir, QString filePath, int fileIdx = -1, double angle = 0);//创建Marker数据
void splitPaintPath(QPainterPath originalPath,double segmentHeight,int segmenNum,QPainterPath *pathSegments);//纸张宽度不够时分割图形
//计算两线段的交点
bool lineIntersection(QPointF p1, QPointF p2, double y, QPointF* intersection);
#endif // DRAWDATA_H

View File

@ -4,7 +4,6 @@ MyGraphicsItem::MyGraphicsItem()
{
m_point.setX(0);
m_point.setY(0);
m_fileType = TYPE_FILE;
//使item可以被选择
//this->setFlag(QGraphicsItem::ItemIsSelectable);
@ -33,55 +32,25 @@ void MyGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
return QGraphicsItem::mouseReleaseEvent(event);
}
QPicture MyGraphicsItem::getPictureByDat(Marker marker,int penWidth)
CreatPictureStr MyGraphicsItem::getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
m_fileType = TYPE_FILE;
if(penWidth != 1)
{
QPicture pic;
pic = creatPictureByData(marker,m_drawPath,penWidth);
m_boundingRect = pic.boundingRect();
return pic;
}
return m_picture;
m_pictureStr = creatPictureByData(marker,paperWidth,butSpace,rightSpace,penWidth);
m_boundingRect = m_pictureStr.showPic.boundingRect();
return m_pictureStr;
}
QPicture MyGraphicsItem::getPictureByBmp(QPixmap pixmap,int penWidth)
CreatPictureStr MyGraphicsItem::getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
m_fileType = TYPE_IMAGE;
m_picture = creatPictureByBmp(pixmap,penWidth);
m_boundingRect = m_picture.boundingRect();
return m_picture;
}
QPainterPath MyGraphicsItem::getDrawPath()
{
return m_drawPath;
m_pictureStr = creatPictureByBmp(pixmap,paperWidth,butSpace,rightSpace,penWidth);
m_boundingRect = m_pictureStr.showPic.boundingRect();
return m_pictureStr;
}
void MyGraphicsItem::setPicture(QPicture pic)
{
m_fileType = TYPE_IMAGE;
m_picture = pic;
m_pictureStr.showPic = pic;
// 外矩形
m_boundingRect = m_picture.boundingRect();
update();
}
void MyGraphicsItem::setPaintPath(QPainterPath path)
{
m_fileType = TYPE_FILE;
m_drawPath = path;
m_boundingRect = m_drawPath.boundingRect();
update();
}
void MyGraphicsItem::setPaintPathAndPic(QPainterPath path, QPicture pic)
{
m_fileType = TYPE_FILE;
m_drawPath = path;
m_picture = pic;
m_boundingRect = m_drawPath.boundingRect();
m_boundingRect = m_pictureStr.showPic.boundingRect();
update();
}
@ -89,7 +58,7 @@ void MyGraphicsItem::reflushBlockPos(QPoint p)
{
m_point = p;
m_blockPixmap = QPixmap(PIXMAPWIDTH,m_picture.height());
m_blockPixmap = QPixmap(PIXMAPWIDTH,m_pictureStr.showPic.height());
m_blockPixmap.fill(Qt::transparent);//透明色
if(m_point.x() >= 0 && m_point.y() >= 0)
{
@ -133,15 +102,7 @@ void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op
// painter->setRenderHint(QPainter::Antialiasing, true);
// painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
//用MyGraphicsItem画图缩放时如果笔宽不为1直接画QPicture时线条会很轻所以用m_drawPath绘制pic就为原笔宽pic
//文件类型用m_drawPath图片类型为m_picture
if(m_fileType == TYPE_FILE)
{
painter->drawPath(m_drawPath);
}
else if(m_fileType == TYPE_IMAGE)
{
painter->drawPicture(0,0,m_picture);
}
painter->drawPicture(0,0,m_pictureStr.showPic);
painter->drawPixmap(m_point.x(),m_point.y(),m_blockPixmap);
//painter->end();
}

View File

@ -35,20 +35,15 @@ protected: //事件
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
private:
QPicture m_picture;
QPainterPath m_drawPath;
CreatPictureStr m_pictureStr;
QPixmap m_blockPixmap;
QPoint m_point;
QRectF m_boundingRect;//返回形状
int m_fileType;
public:
QPicture getPictureByDat(Marker marker,int penWidth = 1);
QPicture getPictureByBmp(QPixmap pixmap,int penWidth = 1);
QPainterPath getDrawPath();
CreatPictureStr getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
CreatPictureStr getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
void setPicture(QPicture pic);
void setPaintPath(QPainterPath path);
void setPaintPathAndPic(QPainterPath path,QPicture pic);
void reflushBlockPos(QPoint p);//更显打印块位置
public slots:

View File

@ -29,16 +29,6 @@ void MyGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
return QGraphicsScene::mouseReleaseEvent(mouseEvent);
}
void MyGraphicsScene::createScenePathAndPic(QPainterPath path, QPicture pic)
{
if(m_myGraphicsItem != NULL)
{
this->clear();
m_myGraphicsItem->setPaintPathAndPic(path,pic);
this->addItem(m_myGraphicsItem);
}
}
void MyGraphicsScene::addItemToScene()
{
//绘制留边
@ -56,34 +46,24 @@ void MyGraphicsScene::cleanScene()
}
}
QPicture MyGraphicsScene::getPictureByDat(Marker marker,int penWidth)
CreatPictureStr MyGraphicsScene::getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
QPicture pic;
CreatPictureStr picStr;
if(m_myGraphicsItem != NULL)
{
pic = m_myGraphicsItem->getPictureByDat(marker,penWidth);
picStr = m_myGraphicsItem->getPictureByDat(marker,paperWidth,butSpace,rightSpace,penWidth);
}
return pic;
return picStr;
}
QPicture MyGraphicsScene::getPictureByBmp(QPixmap pixmap,int penWidth)
CreatPictureStr MyGraphicsScene::getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
QPicture pic;
CreatPictureStr picStr;
if(m_myGraphicsItem != NULL)
{
pic = m_myGraphicsItem->getPictureByBmp(pixmap,penWidth);
picStr = m_myGraphicsItem->getPictureByBmp(pixmap,paperWidth,butSpace,rightSpace,penWidth);
}
return pic;
}
QPainterPath MyGraphicsScene::getDrawPath()
{
QPainterPath path;
if(m_myGraphicsItem != NULL)
{
path = m_myGraphicsItem->getDrawPath();
}
return path;
return picStr;
}
void MyGraphicsScene::swithSceneByPic(QPicture pic)
@ -96,17 +76,7 @@ void MyGraphicsScene::swithSceneByPic(QPicture pic)
}
}
void MyGraphicsScene::swithSceneByPath(QPainterPath path)
{
if(m_myGraphicsItem != NULL)
{
this->clear();
m_myGraphicsItem->setPaintPath(path);
this->addItem(m_myGraphicsItem);
}
}
void MyGraphicsScene::ReflushBlockScene(QPoint p)
void MyGraphicsScene::reflushBlockScene(QPoint p)
{
if(m_myGraphicsItem != NULL)
{

View File

@ -23,15 +23,12 @@ private:
MyGraphicsItem *m_myGraphicsItem;
public:
void createScenePathAndPic(QPainterPath path,QPicture pic);
void addItemToScene();
void cleanScene();
QPicture getPictureByDat(Marker marker,int penWidth = 1);
QPicture getPictureByBmp(QPixmap pixmap,int penWidth = 1);
QPainterPath getDrawPath();
CreatPictureStr getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
CreatPictureStr getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
void swithSceneByPic(QPicture pic);
void swithSceneByPath(QPainterPath path);
void ReflushBlockScene(QPoint p);
void reflushBlockScene(QPoint p);
signals:

View File

@ -183,50 +183,30 @@ void MyGraphicsView::wheelEvent(QWheelEvent *event)
verticalScrollBar()->setValue(int(viewPoint.y() - viewHeight * vScale));
}
QPicture MyGraphicsView::getPictureByDat(Marker marker,int penWidth)
CreatPictureStr MyGraphicsView::getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
QPicture pic;
CreatPictureStr picStr;
if(m_scene != NULL)
{
pic = m_scene->getPictureByDat(marker,penWidth);
picStr = m_scene->getPictureByDat(marker,paperWidth,butSpace,rightSpace,penWidth);
m_scene->addItemToScene();
QRectF rectItem = m_scene->itemsBoundingRect();
this->fitInView(rectItem, Qt::KeepAspectRatio);
}
return pic;
return picStr;
}
QPicture MyGraphicsView::getPictureByBmp(QPixmap pixmap,int penWidth)
CreatPictureStr MyGraphicsView::getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
QPicture pic;
CreatPictureStr picStr;
if(m_scene != NULL)
{
pic = m_scene->getPictureByBmp(pixmap,penWidth);
picStr = m_scene->getPictureByBmp(pixmap,paperWidth,butSpace,rightSpace,penWidth);
m_scene->addItemToScene();
QRectF rectItem = m_scene->itemsBoundingRect();
this->fitInView(rectItem, Qt::KeepAspectRatio);
}
return pic;
}
QPainterPath MyGraphicsView::getDrawPath()
{
QPainterPath path;
if(m_scene != NULL)
{
path = m_scene->getDrawPath();
}
return path;
}
void MyGraphicsView::creatViewPathAndPic(QPainterPath path,QPicture pic)
{
if(m_scene != NULL)
{
m_scene->createScenePathAndPic(path,pic);
QRectF rectItem = m_scene->itemsBoundingRect();
this->fitInView(rectItem, Qt::KeepAspectRatio);
}
return picStr;
}
void MyGraphicsView::cleanView()
@ -251,20 +231,10 @@ void MyGraphicsView::swithViewByPic(QPicture pic)
}
}
void MyGraphicsView::swithViewByPath(QPainterPath path)
{
if(m_scene != NULL)
{
m_scene->swithSceneByPath(path);
QRectF rectItem = m_scene->itemsBoundingRect();
this->fitInView(rectItem, Qt::KeepAspectRatio);
}
}
void MyGraphicsView::reflushBlockView(QPoint p)
{
if(m_scene != NULL)
{
m_scene->ReflushBlockScene(p);
m_scene->reflushBlockScene(p);
}
}

View File

@ -34,13 +34,10 @@ protected:
void wheelEvent(QWheelEvent *event);
public:
QPicture getPictureByDat(Marker marker,int penWidth = 1);
QPicture getPictureByBmp(QPixmap pixmap,int penWidth = 1);
QPainterPath getDrawPath();
void creatViewPathAndPic(QPainterPath path,QPicture pic);
CreatPictureStr getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
CreatPictureStr getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth = 1);
void cleanView();
void swithViewByPic(QPicture pic);
void swithViewByPath(QPainterPath path);
void reflushBlockView(QPoint p);
signals:

View File

@ -179,7 +179,7 @@
<context>
<name>ImportHPGL</name>
<message>
<location filename="datafile/hpgl/importhpgl.cpp" line="1816"/>
<location filename="datafile/hpgl/importhpgl.cpp" line="1965"/>
<source>Encrypted file parsing error!</source>
<translation type="unfinished"></translation>
</message>
@ -269,21 +269,19 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="350"/>
<location filename="mainwindow.ui" line="465"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="355"/>
<location filename="mainwindow.ui" line="477"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="360"/>
<location filename="mainwindow.cpp" line="823"/>
<location filename="mainwindow.cpp" line="853"/>
<location filename="mainwindow.cpp" line="764"/>
<location filename="mainwindow.cpp" line="794"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
@ -390,6 +388,7 @@
<message>
<location filename="mainwindow.ui" line="489"/>
<source>DrawingSetting</source>
<extracomment></extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@ -408,233 +407,255 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="149"/>
<location filename="mainwindow.cpp" line="923"/>
<location filename="mainwindow.cpp" line="931"/>
<location filename="mainwindow.cpp" line="956"/>
<location filename="mainwindow.cpp" line="1369"/>
<location filename="mainwindow.cpp" line="1378"/>
<location filename="mainwindow.cpp" line="1501"/>
<location filename="mainwindow.cpp" line="1510"/>
<location filename="mainwindow.cpp" line="1561"/>
<location filename="mainwindow.cpp" line="1649"/>
<location filename="mainwindow.cpp" line="71"/>
<location filename="mainwindow.cpp" line="162"/>
<location filename="mainwindow.cpp" line="873"/>
<location filename="mainwindow.cpp" line="880"/>
<location filename="mainwindow.cpp" line="903"/>
<location filename="mainwindow.cpp" line="1280"/>
<location filename="mainwindow.cpp" line="1289"/>
<location filename="mainwindow.cpp" line="1420"/>
<location filename="mainwindow.cpp" line="1429"/>
<location filename="mainwindow.cpp" line="1481"/>
<location filename="mainwindow.cpp" line="1518"/>
<location filename="mainwindow.cpp" line="1604"/>
<source>Prompt</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="150"/>
<location filename="mainwindow.cpp" line="163"/>
<source>Printing this file, it cannot be moved!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="393"/>
<location filename="mainwindow.cpp" line="455"/>
<location filename="mainwindow.cpp" line="362"/>
<location filename="mainwindow.cpp" line="424"/>
<source>Connnecting...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="459"/>
<location filename="mainwindow.cpp" line="366"/>
<location filename="mainwindow.cpp" line="428"/>
<source>Connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="401"/>
<location filename="mainwindow.cpp" line="422"/>
<location filename="mainwindow.cpp" line="452"/>
<location filename="mainwindow.cpp" line="370"/>
<location filename="mainwindow.cpp" line="391"/>
<location filename="mainwindow.cpp" line="421"/>
<source>NotConnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="428"/>
<location filename="mainwindow.cpp" line="466"/>
<location filename="mainwindow.cpp" line="311"/>
<location filename="mainwindow.cpp" line="397"/>
<location filename="mainwindow.cpp" line="435"/>
<location filename="mainwindow.cpp" line="1108"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="432"/>
<location filename="mainwindow.cpp" line="470"/>
<location filename="mainwindow.cpp" line="72"/>
<source>Do you want to exit the program?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="319"/>
<location filename="mainwindow.cpp" line="1156"/>
<source>Pause print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="401"/>
<location filename="mainwindow.cpp" line="439"/>
<location filename="mainwindow.cpp" line="1112"/>
<source>Working</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="539"/>
<location filename="mainwindow.cpp" line="712"/>
<location filename="mainwindow.cpp" line="1057"/>
<location filename="mainwindow.cpp" line="512"/>
<location filename="mainwindow.cpp" line="698"/>
<location filename="mainwindow.cpp" line="961"/>
<location filename="mainwindow.cpp" line="1148"/>
<source>Waitting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="543"/>
<location filename="mainwindow.cpp" line="716"/>
<location filename="mainwindow.cpp" line="1196"/>
<location filename="mainwindow.cpp" line="516"/>
<location filename="mainwindow.cpp" line="702"/>
<location filename="mainwindow.cpp" line="1152"/>
<source>Printting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>FileName</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>Length</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="622"/>
<location filename="mainwindow.cpp" line="1331"/>
<location filename="mainwindow.cpp" line="604"/>
<location filename="mainwindow.cpp" line="1238"/>
<source>Width</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Printed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>Numbers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>State</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>FilePath</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="623"/>
<location filename="mainwindow.cpp" line="1332"/>
<location filename="mainwindow.cpp" line="605"/>
<location filename="mainwindow.cpp" line="1239"/>
<source>StartPoint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McName</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McIp</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McConState</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McState</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="644"/>
<location filename="mainwindow.cpp" line="1336"/>
<location filename="mainwindow.cpp" line="626"/>
<location filename="mainwindow.cpp" line="1243"/>
<source>McProgress</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="819"/>
<location filename="mainwindow.cpp" line="760"/>
<source>Print preview</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="820"/>
<location filename="mainwindow.cpp" line="761"/>
<source>Number of modified print</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="821"/>
<location filename="mainwindow.cpp" line="762"/>
<source>Modify the starting print point</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="822"/>
<location filename="mainwindow.cpp" line="763"/>
<source>View print information</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="924"/>
<location filename="mainwindow.cpp" line="881"/>
<source>Do you want to delete this drawing?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="932"/>
<location filename="mainwindow.cpp" line="874"/>
<source>Printing this file, it cannot be deleted!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="957"/>
<location filename="mainwindow.cpp" line="904"/>
<source>After deletion, the machine cannot be controlled. Do you want to delete this machine?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1192"/>
<location filename="mainwindow.cpp" line="1160"/>
<source>Complete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1370"/>
<location filename="mainwindow.cpp" line="1502"/>
<location filename="mainwindow.cpp" line="1281"/>
<location filename="mainwindow.cpp" line="1421"/>
<source>Please select a machine!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1379"/>
<location filename="mainwindow.cpp" line="1511"/>
<location filename="mainwindow.cpp" line="1290"/>
<location filename="mainwindow.cpp" line="1430"/>
<source>Loading file, please wait!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1392"/>
<location filename="mainwindow.cpp" line="1524"/>
<location filename="mainwindow.cpp" line="1300"/>
<location filename="mainwindow.cpp" line="1440"/>
<source>Open File Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1394"/>
<location filename="mainwindow.cpp" line="1302"/>
<source>File(*.plt *.dxf)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1526"/>
<location filename="mainwindow.cpp" line="1442"/>
<source>Image File(*.png *.bmp *.jpg)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1562"/>
<location filename="mainwindow.cpp" line="1482"/>
<source>Please select the machine you want to set the directory!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1574"/>
<location filename="mainwindow.cpp" line="1494"/>
<source>Select Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1650"/>
<location filename="mainwindow.cpp" line="1519"/>
<source>Do you want to start printing on all machines?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="1605"/>
<source>The maximum number of connections has been reached and cannot be added again!</source>
<translation type="unfinished"></translation>
</message>
@ -934,7 +955,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="printinfodialog.cpp" line="78"/>
<location filename="printinfodialog.cpp" line="80"/>
<source>piece</source>
<translation type="unfinished"></translation>
</message>
@ -1033,12 +1054,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="printviewwindow.cpp" line="106"/>
<location filename="printviewwindow.cpp" line="111"/>
<source>Prompt</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="printviewwindow.cpp" line="107"/>
<location filename="printviewwindow.cpp" line="112"/>
<source>Unreasonable value input!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -154,6 +154,7 @@ int BWBmp::Compress(int idx, int dir, int segWidth, int segHeight)
//---------------------------------------------------------
// 读取位图信息,对数组赋值
unsigned char sta,tmpdat,mod;
sta = tmpdat = mod = 0;
const unsigned char * pBitDat;
int i, j, k, l, m, n;
int addr;
@ -163,7 +164,7 @@ int BWBmp::Compress(int idx, int dir, int segWidth, int segHeight)
int * segdat = new int [msegnum];
//------------------------------------
unsigned char tgtdat;
unsigned char tgtdat = 0;
QVector<unsigned char> compType(wsegnum); // 本块位图压缩类型, =0, 不压缩; =1, 按字节压缩(分段压缩);
QVector<unsigned int> compSegOffset(wsegnum); // 分段数据起始位置

View File

@ -58,7 +58,7 @@ int CreatPrintBmp::creatFileListMarker(int idx)
{
McFilesInfo curFilesInfo;//当前文件信息
creatMarkerDat(curFilesInfo,m_printFileDir,filePath,m_listFileIdx,m_rotateAngle);
long long fileTotalLength = (curFilesInfo.m_fileRect.right() - curFilesInfo.m_fileRect.left())/M_IDPMM;
long long fileTotalLength = (curFilesInfo.m_fileRect.right() - curFilesInfo.m_fileRect.left())/MMPIXELY;
m_mcPrintInfo->m_fileNums += 1;
m_mcPrintInfo->m_fileTotalLength += fileTotalLength;
m_mcPrintInfo->m_filesList.append(curFilesInfo);
@ -107,43 +107,20 @@ int CreatPrintBmp::creatFileListDatAndSend(int idx)
}
QPicture pic;
QPen pen;
pen.setWidth(1);
pen.setColor(QColor(Qt::black));
int oft = 0;//起始打印位置的偏移
if(curFilesInfo.m_fileType == TYPE_FILE)
pic = m_mcPrintInfo->m_filesList[idx].m_sendPic;
oft = (int)(m_mcPrintInfo->m_filesList[idx].m_startPoint*MMPIXELY);
//将picture保存为多个宽度为PIXMAPWIDTH像素的bmp
m_mcPrintInfo->m_totalNums = (pic.width() - oft) / PIXMAPWIDTH;
int lwidth = (pic.width() - oft) % (PIXMAPWIDTH);
if(lwidth != 0)
{
pic = m_mcPrintInfo->m_filesList[idx].m_pic;
oft = (int)(m_mcPrintInfo->m_filesList[idx].m_startPoint*MMPIXELY);
//将picture保存为多个宽度为PIXMAPWIDTH像素的bmp
m_mcPrintInfo->m_totalNums = (pic.width() - oft) / PIXMAPWIDTH;
int lwidth = (pic.width() - oft) % (PIXMAPWIDTH);
if(lwidth != 0)
{
m_mcPrintInfo->m_totalNums += 1;
}
m_mcPrintInfo->m_totalNums += 1;
}
else if(curFilesInfo.m_fileType == TYPE_IMAGE)
{
//将图片画在picture上
QPainter painter;
painter.begin(&pic);
painter.setPen(pen);
painter.drawPixmap(0,0,m_mcPrintInfo->m_filesList[idx].m_pixmap);
painter.end();
//将pixmap保存为多个宽度为PIXMAPWIDTH像素的bmp
m_mcPrintInfo->m_totalNums = curFilesInfo.m_pixmap.width() / PIXMAPWIDTH;
int lwidth = curFilesInfo.m_pixmap.width() % PIXMAPWIDTH;
if(lwidth != 0)
{
m_mcPrintInfo->m_totalNums += 1;
}
}
m_mcPrintInfo->m_filesList[idx].m_totalBlocks = (pic.width() - oft)/ PIXMAPWIDTH;
int lwidth = (pic.width() - oft) % PIXMAPWIDTH;
lwidth = (pic.width() - oft) % PIXMAPWIDTH;
if(lwidth != 0)
{
m_mcPrintInfo->m_filesList[idx].m_totalBlocks += 1;
@ -178,7 +155,7 @@ int CreatPrintBmp::creatBmpBlockDatAndSend(int fileidx, int idx)
int nextNum = idx / oneNumCount;
idx = idx - nextNum * oneNumCount;
QPicture pic = m_mcPrintInfo->m_filesList[fileidx].m_pic;
QPicture pic = m_mcPrintInfo->m_filesList[fileidx].m_sendPic;
int oft = (int)(m_mcPrintInfo->m_filesList[fileidx].m_startPoint*MMPIXELY);
//将picture保存为多个宽度为PIXMAPWIDTH像素的bmp
@ -568,7 +545,7 @@ void CreatPrintBmp::setDeleteFile(McPrintInfo *printInfo, int fileIdx)
if(m_deleteFileIdx != m_fileBegIdx && m_deleteFileIdx != -1)
{
int length = (m_mcPrintInfo->m_filesList[m_deleteFileIdx].m_fileRect.right() - m_mcPrintInfo->m_filesList[m_deleteFileIdx].m_fileRect.left())/M_IDPMM;
int length = (m_mcPrintInfo->m_filesList[m_deleteFileIdx].m_fileRect.right() - m_mcPrintInfo->m_filesList[m_deleteFileIdx].m_fileRect.left())/MMPIXELY;
m_mcPrintInfo->m_fileTotalLength -= length;
QString mcFile = m_printFileDir + QString::number(m_deleteFileIdx+1);

View File

@ -17,7 +17,6 @@
#include "datafile/view/drawdata.h"
#define PIXMAPWIDTH 1200
#define PENWIDTH 5
#define PRINTDIR "print"
#define PRINTMCDIR "mc"

View File

@ -138,7 +138,7 @@ Machine::~Machine()
void Machine::startFileTrans(FileTransCtrl &transCtrl)
{
int rslt;
int rslt = 0;
OperPacket sendPacket;
memset(&sendPacket, 0, sizeof(OperPacket));
sendPacket.startTrans.cmdCode = UCMD_START_TRANS;
@ -969,7 +969,7 @@ void Machine::onSendTimer()
void Machine::slotSendDatToMc(QByteArray dat)
{
if(m_connected == Connected)
//if(m_connected == Connected)
{
if (dat.size() <= 0 || m_pCompBmpHead == NULL)
{
@ -1039,8 +1039,8 @@ void Machine::slotSendPlotFileListToMc(int idx)
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
u32 id =qrand() % (UINT16_MAX);//产生0到UINT16_MAX的随机数
m_pPlotFileList->fileId = id;
m_pPlotFileList->totalWidth = (m_mcPrintInfo.m_filesList[idx].m_pic.width() - oft) * m_mcPrintInfo.m_filesList[idx].m_printNum;
m_pPlotFileList->totalHeight = m_mcPrintInfo.m_filesList[idx].m_pic.height();
m_pPlotFileList->totalWidth = (m_mcPrintInfo.m_filesList[idx].m_sendPic.width() - oft) * m_mcPrintInfo.m_filesList[idx].m_printNum;
m_pPlotFileList->totalHeight = m_mcPrintInfo.m_filesList[idx].m_sendPic.height();
m_pPlotFileList->blkNums = m_mcPrintInfo.m_filesList[idx].m_totalBlocks;
m_pPlotFileList->blkWidth = PIXMAPWIDTH;

View File

@ -41,12 +41,12 @@ public:
QString m_fileName;//文件名称
QString m_filePath;//文件路径
s16 m_fileType;//文件类型
QRect m_fileRect;//图形被包络的矩形区域
QRectF m_fileRect;//图形被包络的矩形区域
s16 m_printNum;//打印份数
s16 m_startPoint;//打印起始点
s16 m_printState;//打印状态
QPicture m_pic;//文件-发送的图片-实际笔宽绘制的pic
QPainterPath m_drawPath;//文件-数据绘图路径-用MyGraphicsItem画图时如果笔宽不为1直接画QPicture时线条会很轻所以用m_drawPath绘制
QPicture m_showPic;//文件-显示的图片-1像素绘制的pic
QPicture m_sendPic;//文件-发送的图片-实际笔宽绘制的pic
QBitmap m_pixmap;//图片-图片
s16 m_totalBlocks;//总块数
s16 m_curPrintBlock;//当前打印块数
@ -58,7 +58,6 @@ public:
void clear()
{
QPicture pic;
QPainterPath path;
m_creatDataFlag = -1;
m_creatBmpFlag = -1;//是否已经生成bmp的标志
@ -68,8 +67,8 @@ public:
m_printNum = 0;//打印份数
m_startPoint = 0;//打印起始点
m_printState = Waitting;//打印状态
m_pic = pic;
m_drawPath = path;
m_showPic = pic;
m_sendPic = pic;
m_pixmap.clear();
m_totalBlocks = 0;//总块数
m_curPrintBlock = 0;//当前打印块数
@ -107,8 +106,8 @@ public:
m_printNum = item.m_printNum;//打印份数
m_startPoint = item.m_startPoint;//打印起始点
m_printState = item.m_printState;//打印状态
m_pic = item.m_pic;
m_drawPath = item.m_drawPath;
m_showPic = item.m_showPic;
m_sendPic = item.m_sendPic;
m_pixmap = item.m_pixmap;
m_totalBlocks = item.m_totalBlocks;//总块数
m_curPrintBlock = item.m_curPrintBlock;//当前打印块数
@ -129,8 +128,8 @@ public:
m_printNum = item.m_printNum;//打印份数
m_startPoint = item.m_startPoint;//打印起始点
m_printState = item.m_printState;//打印状态
m_pic = item.m_pic;
m_drawPath = item.m_drawPath;
m_showPic = item.m_showPic;
m_sendPic = item.m_sendPic;
m_pixmap = item.m_pixmap;
m_totalBlocks = item.m_totalBlocks;//总块数
m_curPrintBlock = item.m_curPrintBlock;//当前打印块数

View File

@ -109,13 +109,19 @@ void MainWindow::reflushPreview(int row)
ui->tableView_Connection->setEnabled(false);
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();
int paperWidth = m_pSettings->value("DrawSet/paperwidth").toInt();
int butSpace = m_pSettings->value("DrawSet/buttmargin").toInt();
int rightSpace = m_pSettings->value("DrawSet/rightmargin").toInt();
//生成绘制图
g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_pic = creatFilePicture(g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row],penWidth);
CreatPictureStr picStr;
picStr = creatFilePicture(g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row],paperWidth,butSpace,rightSpace,penWidth);
g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_showPic = picStr.showPic;
g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_sendPic = picStr.sendPic;
//将picture保存为多个宽度为PIXMAPWIDTH像素的bmp
int num = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_pic.width() / PIXMAPWIDTH;
int lwidth = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_pic.width() % PIXMAPWIDTH;
int num = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_sendPic.width() / PIXMAPWIDTH;
int lwidth = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_sendPic.width() % PIXMAPWIDTH;
if(lwidth != 0)
{
num +=1;
@ -130,16 +136,8 @@ void MainWindow::reflushPreview(int row)
//刷新图形
m_preView->cleanView();
if(g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_fileType == TYPE_FILE)
{
QPainterPath path = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_drawPath;
m_preView->swithViewByPath(path);
}
else if(g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_fileType == TYPE_IMAGE)
{
QPicture pic = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_pic;
m_preView->swithViewByPic(pic);
}
QPicture pic = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row].m_showPic;
m_preView->swithViewByPic(pic);
m_curFilesInfo = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[row];
}
@ -325,24 +323,20 @@ void MainWindow::stopPrint(int mcIdx)
}
}
QPicture MainWindow::creatFilePicture(McFilesInfo & mcFileInfo, s16 penWidth)
CreatPictureStr MainWindow::creatFilePicture(McFilesInfo & mcFileInfo,int paperWidth,int butSpace,int rightSpace,s16 penWidth)
{
//将图片画在picture上
QPicture pic;
CreatPictureStr picStr;
if(mcFileInfo.m_fileType == TYPE_IMAGE)
{
pic = creatPictureByBmp(mcFileInfo.m_pixmap,penWidth);
picStr = creatPictureByBmp(mcFileInfo.m_pixmap,paperWidth,butSpace,rightSpace,penWidth);
}
else
{
pic = creatPictureByData(mcFileInfo.m_marker,mcFileInfo.m_drawPath,penWidth);
if(mcFileInfo.m_drawPath.isEmpty())
{
qDebug()<<"painterPath.isEmpty";
}
picStr = creatPictureByData(mcFileInfo.m_marker,paperWidth,butSpace,rightSpace,penWidth);
}
return pic;
return picStr;
}
void MainWindow::refConnectUi()
@ -488,12 +482,12 @@ int MainWindow::refreshMcFileListShow(int idx)
m_tabelViewModelFile->insertRow(i);//在最后一行的后面插入一行
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(i,COLUMN_FILENAME),filesList[i].m_fileName);
QRect rect = filesList[i].m_fileRect;
QRectF rect = filesList[i].m_fileRect;
QString length = QString::number((rect.right() - rect.left())/(int)M_IDPMM)+"mm";
QString length = QString::number((int)((rect.right() - rect.left())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(i,COLUMN_LENGTH),length);
QString width = QString::number((rect.bottom() - rect.top())/(int)M_IDPMM)+"mm";
QString width = QString::number((int)((rect.bottom() - rect.top())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(i,COLUMN_WIDTH),width);
QString start = QString::number(filesList[i].m_startPoint)+"mm";
@ -674,12 +668,12 @@ void MainWindow::slotAddNewFileToList(int newFlag)
m_tabelViewModelFile->insertRow(row);//在最后一行的后面插入一行
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row,COLUMN_FILENAME),m_curFilesInfo.m_fileName);
QRect rect = m_curFilesInfo.m_fileRect;
QRectF rect = m_curFilesInfo.m_fileRect;
QString length = QString::number((rect.right() - rect.left())/(int)M_IDPMM)+"mm";
QString length = QString::number((int)((rect.right() - rect.left())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row,COLUMN_LENGTH),length);
QString width = QString::number((rect.bottom() - rect.top())/(int)M_IDPMM)+"mm";
QString width = QString::number((int)((rect.bottom() - rect.top())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row,COLUMN_WIDTH),width);
QString start = QString::number(m_printViewWi->getStartPoint())+"mm";
@ -712,23 +706,10 @@ void MainWindow::slotAddNewFileToList(int newFlag)
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row,COLUMN_FILEPATH),m_curFilesInfo.m_filePath);
//m_preView->cleanView();
// int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();//线宽
// if(m_curFilesInfo.m_fileType == TYPE_FILE)
// {
// //刷新显示
// m_curFilesInfo.m_pic = m_preView->getPictureByDat(m_curFilesInfo.m_marker,penWidth);
// m_curFilesInfo.m_drawPath = m_preView->getDrawPath();
// }
// else if(m_curFilesInfo.m_fileType == TYPE_IMAGE)
// {
// m_curFilesInfo.m_pic = m_preView->getPictureByBmp(m_curFilesInfo.m_pixmap);
// }
m_curFilesInfo.m_creatBmpFlag = 1;
//将picture保存为多个宽度为PIXMAPWIDTH像素的bmp
int num = m_curFilesInfo.m_pic.width() / PIXMAPWIDTH;
int lwidth = m_curFilesInfo.m_pic.width() % PIXMAPWIDTH;
int num = m_curFilesInfo.m_sendPic.width() / PIXMAPWIDTH;
int lwidth = m_curFilesInfo.m_sendPic.width() % PIXMAPWIDTH;
if(lwidth != 0)
{
num +=1;
@ -745,7 +726,7 @@ void MainWindow::slotAddNewFileToList(int newFlag)
McPrintInfo McF;
McF.m_fileNums = row+1;
McF.m_fileTotalLength = (m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/M_IDPMM;
McF.m_fileTotalLength = (m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/MMPIXELY;
McF.m_filesList.append(m_curFilesInfo);
m_curFileRow = row;
@ -826,9 +807,13 @@ void MainWindow::slotMcListMenu(QPoint pos)
void MainWindow::slotPrintPreview()
{
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();//线宽
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();
int paperWidth = m_pSettings->value("DrawSet/paperwidth").toInt();
int butSpace = m_pSettings->value("DrawSet/buttmargin").toInt();
int rightSpace = m_pSettings->value("DrawSet/rightmargin").toInt();
m_curFilesInfo = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[m_curFileRow];
m_printViewWi->refreshShow(m_curFilesInfo,penWidth,0);
m_printViewWi->refreshShow(m_curFilesInfo,paperWidth,butSpace,rightSpace,penWidth,0);
}
void MainWindow::slotPrintNumberSetDlgShow()
@ -849,7 +834,7 @@ void MainWindow::slotStartSetDlgShow()
{
QString fileName = m_curFilesInfo.m_fileName;
QString startPoint= QString::number(m_curFilesInfo.m_startPoint);
QString length= QString::number(m_curFilesInfo.m_fileRect.right()-m_curFilesInfo.m_fileRect.left());
QString length= QString::number((int)((m_curFilesInfo.m_fileRect.right()-m_curFilesInfo.m_fileRect.left())/MMPIXELY));
StartSetDialog startSetDlg;
if(startSetDlg.exec(fileName,startPoint,length) == 1)
{
@ -1004,10 +989,10 @@ void MainWindow::slotLoadAutoPrintFiles()
if(g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[i].m_creatDataFlag == 1)
{
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_FILENAME),g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[i].m_fileName);
QRect rect = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[i].m_fileRect;
QString length = QString::number((rect.right() - rect.left())/(int)M_IDPMM)+"mm";
QRectF rect = g_machineList[m_curMcIdx]->m_mcPrintInfo.m_filesList[i].m_fileRect;
QString length = QString::number((int)((rect.right() - rect.left())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_LENGTH),length);
QString width = QString::number((rect.bottom() - rect.top())/(int)M_IDPMM)+"mm";
QString width = QString::number((int)((rect.bottom() - rect.top())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_WIDTH),width);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_START),start);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_PRINTEDLENGTH),"0mm");
@ -1024,10 +1009,10 @@ void MainWindow::slotLoadAutoPrintFiles()
creatMarkerDat(curFilesInfo,m_printPath,filePath,-1,m_rotateAngle);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_FILENAME),curFilesInfo.m_fileName);
QRect rect = curFilesInfo.m_fileRect;
QString length = QString::number((rect.right() - rect.left())/(int)M_IDPMM)+"mm";
QRectF rect = curFilesInfo.m_fileRect;
QString length = QString::number((int)((rect.right() - rect.left())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_LENGTH),length);
QString width = QString::number((rect.bottom() - rect.top())/(int)M_IDPMM)+"mm";
QString width = QString::number((int)((rect.bottom() - rect.top())/MMPIXELY))+"mm";
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_WIDTH),width);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_START),start);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_PRINTEDLENGTH),"0mm");
@ -1036,7 +1021,7 @@ void MainWindow::slotLoadAutoPrintFiles()
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_STATE),state);
m_tabelViewModelFile->setData(m_tabelViewModelFile->index(row, COLUMN_FILEPATH),curFilesInfo.m_filePath);
long long fileTotalLength = (curFilesInfo.m_fileRect.right() - curFilesInfo.m_fileRect.left())/M_IDPMM;
long long fileTotalLength = (curFilesInfo.m_fileRect.right() - curFilesInfo.m_fileRect.left())/MMPIXELY;
g_machineList[m_curMcIdx]->m_mcPrintInfo.m_fileNums = i+1;
g_machineList[m_curMcIdx]->m_mcPrintInfo.m_fileTotalLength += fileTotalLength;
@ -1366,8 +1351,11 @@ void MainWindow::on_actionOpen_File_triggered()
//m_curFilesInfo.m_painterPath = importHPGL.GetPolylinePainterPath();
}
#endif
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();//线宽
m_printViewWi->refreshShow(m_curFilesInfo,penWidth,1);
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();
int paperWidth = m_pSettings->value("DrawSet/paperwidth").toInt();
int butSpace = m_pSettings->value("DrawSet/buttmargin").toInt();
int rightSpace = m_pSettings->value("DrawSet/rightmargin").toInt();
m_printViewWi->refreshShow(m_curFilesInfo,paperWidth,butSpace,rightSpace,penWidth,1);
}
return;
}
@ -1468,12 +1456,15 @@ void MainWindow::on_actionOpen_Image_triggered()
QBitmap pixmap;
pixmap.load(filePath);
QRect rect;
rect.setRect(0,0,pixmap.width()/MMPIXELY*M_IDPMM,pixmap.height()/MMPIXELY*M_IDPMM);
rect.setRect(0,0,pixmap.width()/MMPIXELY*MMPIXELY,pixmap.height()/MMPIXELY*MMPIXELY);
m_curFilesInfo.m_pixmap = pixmap;
m_curFilesInfo.m_fileRect = rect;
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();//线宽
m_printViewWi->refreshShow(m_curFilesInfo,penWidth,1);
int penWidth = m_pSettings->value("DrawSet/linewidth").toInt();
int paperWidth = m_pSettings->value("DrawSet/paperwidth").toInt();
int butSpace = m_pSettings->value("DrawSet/buttmargin").toInt();
int rightSpace = m_pSettings->value("DrawSet/rightmargin").toInt();
m_printViewWi->refreshShow(m_curFilesInfo,paperWidth,butSpace,rightSpace,penWidth,1);
}
}

View File

@ -102,7 +102,7 @@ private:
bool deleteDir(QString path);
void startCreatBmpAndSend(int mcIdx = -1);//开始创建位图并发送
void stopPrint(int mcIdx = -1);//停止打印
QPicture creatFilePicture(McFilesInfo & mcFileInfo, s16 penWidth = 1);
CreatPictureStr creatFilePicture(McFilesInfo & mcFileInfo,int paperWidth,int butSpace,int rightSpace,s16 penWidth = 1);
//刷新连接状态
void refConnectUi();//刷新连接状态(1秒)
void refConnectUi(Machine * pMachine,int & linkSta, int idx);

View File

@ -48,7 +48,7 @@ void PrintInfoDialog::on_listView_blockList_clicked(const QModelIndex &index)
str = QString::number((m_curFilesInfo.m_selectBlockNum-1)*BLOCK_MM)+" - ";
if(row == m_listViewModel->rowCount() - 1)
{
str1 = QString::number((m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/(int)M_IDPMM);
str1 = QString::number((int)((m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/MMPIXELY));
}
else
{
@ -84,8 +84,8 @@ void PrintInfoDialog::reflushFileInfo()
ui->label_fileNameVal->setText(m_curFilesInfo.m_fileName);
int length = (m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/M_IDPMM;
int height = (m_curFilesInfo.m_fileRect.bottom() - m_curFilesInfo.m_fileRect.top())/M_IDPMM;
int length = (m_curFilesInfo.m_fileRect.right() - m_curFilesInfo.m_fileRect.left())/MMPIXELY;
int height = (m_curFilesInfo.m_fileRect.bottom() - m_curFilesInfo.m_fileRect.top())/MMPIXELY;
QString WH = QString::number(length) + "x" + QString::number(height)+ "mm";
ui->label_drawWHVal->setText(WH);
@ -106,14 +106,7 @@ void PrintInfoDialog::setFilesInfo(McFilesInfo info)
m_curFilesInfo = info;
m_preView->cleanView();
if(m_curFilesInfo.m_fileType == TYPE_FILE)
{
m_preView->creatViewPathAndPic(m_curFilesInfo.m_drawPath,m_curFilesInfo.m_pic);//刷新显示
}
else if(m_curFilesInfo.m_fileType == TYPE_IMAGE)
{
m_preView->swithViewByPic(m_curFilesInfo.m_pic);//刷新显示
}
m_preView->swithViewByPic(m_curFilesInfo.m_showPic);//刷新显示
reflushFileInfo();

View File

@ -37,7 +37,7 @@ void PrintViewWindow::refreshLanguage()
ui->retranslateUi(this);
}
void PrintViewWindow::refreshShow(McFilesInfo &mcFilesInfo,int penWidth,int flag)
void PrintViewWindow::refreshShow(McFilesInfo &mcFilesInfo,int paperWidth,int butSpace,int rightSpace,int penWidth,int flag)
{
m_startPoint = 0;
m_printNumber = 1;
@ -54,20 +54,24 @@ void PrintViewWindow::refreshShow(McFilesInfo &mcFilesInfo,int penWidth,int flag
}
m_filePath = mcFilesInfo.m_filePath;
m_length = (mcFilesInfo.m_fileRect.right() - mcFilesInfo.m_fileRect.left())/M_IDPMM;
int width = (mcFilesInfo.m_fileRect.bottom() - mcFilesInfo.m_fileRect.top())/M_IDPMM;
this->setWindowTitle(m_filePath+"("+QString::number(m_length)+"mm"+" * " + QString::number(width) + "mm)");
m_view->cleanView();
CreatPictureStr picStr;
if(mcFilesInfo.m_fileType == TYPE_FILE)
{
mcFilesInfo.m_pic = m_view->getPictureByDat(mcFilesInfo.m_marker,penWidth);
mcFilesInfo.m_drawPath = m_view->getDrawPath();
picStr = m_view->getPictureByDat(mcFilesInfo.m_marker,paperWidth,butSpace,rightSpace,penWidth);
}
else if(mcFilesInfo.m_fileType == TYPE_IMAGE)
{
mcFilesInfo.m_pic = m_view->getPictureByBmp(mcFilesInfo.m_pixmap);
picStr = m_view->getPictureByBmp(mcFilesInfo.m_pixmap,paperWidth,butSpace,rightSpace,penWidth);
}
mcFilesInfo.m_showPic = picStr.showPic;
mcFilesInfo.m_sendPic = picStr.sendPic;
mcFilesInfo.m_fileRect = picStr.sendPic.boundingRect();
m_length = (mcFilesInfo.m_fileRect.right() - mcFilesInfo.m_fileRect.left())/MMPIXELY;
int width = (mcFilesInfo.m_fileRect.bottom() - mcFilesInfo.m_fileRect.top())/MMPIXELY;
this->setWindowTitle(m_filePath+"("+QString::number(m_length)+"mm"+" * " + QString::number(width) + "mm)");
//如果是最大化变为正常大小
if(this->windowState() == Qt::WindowMaximized)

View File

@ -33,7 +33,7 @@ private:
int m_length;
public:
void refreshShow(McFilesInfo &mcFilesInfo,int penWidth,int flag = 0);
void refreshShow(McFilesInfo &mcFilesInfo,int paperWidth,int butSpace,int rightSpace,int penWidth,int flag = 0);
void setStartLineText(QString str);
void setNumberLineText(QString str);
inline int getStartPoint(){return m_startPoint;}