Revert "Output LWPOLYLINE objects instead of LINE for DXF export. Patch submitted by Lars Kruse"

This reverts commit 060a6c654d.
The reason is that the output DXF won't import in a number of applications due to a malformed DXF (AutoCAD, Solidworks). The correct fix is probably to use a DXF library to generate a correct DXF. This is only a case for more recent (R14+) versions of DXF, e.g. to be able to use the LWPOLYLINE entity.
stl_dim
Marius Kintel 2011-06-05 19:41:47 +02:00
parent fef3210b24
commit fe5e199b79
1 changed files with 18 additions and 35 deletions

View File

@ -167,20 +167,6 @@ void export_dxf(CGAL_Nef_polyhedron *root_N, QString filename, QProgressDialog *
}
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
// Some importers (e.g. QCAD) needs a HEADER section specifying AutoCAD 2000 as
// the file format for LWPOLYLINE entities to work
fprintf(f, " 0\n"
"SECTION\n"
" 2\n"
"HEADER\n"
" 9\n"
"$ACADVER\n"
" 1\n"
"AC1015\n"
" 0\n"
"ENDSEC\n");
// Some importers (e.g. Inkscape) needs a BLOCKS section to be present
fprintf(f, " 0\n"
"SECTION\n"
@ -197,29 +183,26 @@ void export_dxf(CGAL_Nef_polyhedron *root_N, QString filename, QProgressDialog *
DxfData dd(*root_N);
for (int i=0; i<dd.paths.size(); i++)
{
if (dd.paths[i].points.size() < 2)
// not a valid polygon
continue;
// Use the LWPOLYLINE class - this makes it easier to handle complete
// objects (as paths) in Inkscape.
fprintf(f, " 0\n");
fprintf(f, "LWPOLYLINE\n");
// Some importers (e.g. Inkscape) need a layer to be specified
fprintf(f, " 8\n");
fprintf(f, "0\n");
// number of vertices
fprintf(f, " 90\n");
fprintf(f, "%d\n", dd.paths[i].points.size());
// polygon flag (closed, ...)
fprintf(f, " 70\n");
fprintf(f, "%d\n", dd.paths[i].is_closed ? 1 : 0);
// add all points
for (int j=0; j<dd.paths[i].points.size(); j++) {
DxfData::Point *p = dd.paths[i].points[j];
for (int j=1; j<dd.paths[i].points.size(); j++) {
DxfData::Point *p1 = dd.paths[i].points[j-1];
DxfData::Point *p2 = dd.paths[i].points[j];
double x1 = p1->x;
double y1 = p1->y;
double x2 = p2->x;
double y2 = p2->y;
fprintf(f, " 0\n");
fprintf(f, "LINE\n");
// Some importers (e.g. Inkscape) needs a layer to be specified
fprintf(f, " 8\n");
fprintf(f, "0\n");
fprintf(f, " 10\n");
fprintf(f, "%f\n", p->x);
fprintf(f, "%f\n", x1);
fprintf(f, " 11\n");
fprintf(f, "%f\n", x2);
fprintf(f, " 20\n");
fprintf(f, "%f\n", p->y);
fprintf(f, "%f\n", y1);
fprintf(f, " 21\n");
fprintf(f, "%f\n", y2);
}
}