在现有的图像处理软件中融合dxf格式输出
dxf格式是autocade的支持格式。如果将现有图像识别的结果导出到dxf格式,就能够使用autocad的强大功能进行后续处理。
dxf的格式比较复杂,开源支持库为libdxf,使用起来也比较复杂。经过一段时间融合,我将其修改为vs2012(mfc)能够直接调用的模式。
包含的类库都保存在一个文件夹下
调用方式
void testWriting() {
DL_Dxf* dxf = new DL_Dxf();
DL_Codes::version exportVersion = DL_Codes::AC1015;
DL_WriterA* dw = dxf->out("myfile.dxf", exportVersion);
if (dw==NULL) {
printf("Cannot open file ‘myfile.dxf‘ \
for writing.");
// abort function e.g. with return
}
dxf->writeHeader(*dw);
// int variable:
dw->dxfString(9, "$INSUNITS");
dw->dxfInt(70, 4);
// real (double, float) variable:
dw->dxfString(9, "$DIMEXE");
dw->dxfReal(40, 1.25);
// string variable:
dw->dxfString(9, "$TEXTSTYLE");
dw->dxfString(7, "Standard");
// vector variable:
dw->dxfString(9, "$LIMMIN");
dw->dxfReal(10, 0.0);
dw->dxfReal(20, 0.0);
dw->sectionEnd();
dw->sectionTables();
dxf->writeVPort(*dw);
//创建线条开始
dw->tableLineTypes(25);
dxf->writeLineType(*dw, DL_LineTypeData("BYBLOCK", 0));
dxf->writeLineType(*dw, DL_LineTypeData("BYLAYER", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("CONTINUOUS", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("ACAD_ISO02W100", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("ACAD_ISO03W100", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("ACAD_ISO04W100", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("ACAD_ISO05W100", 0));
dxf->writeLineType(*dw, DL_LineTypeData("BORDER", 0));
dxf->writeLineType(*dw, DL_LineTypeData("BORDER2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("BORDERX2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("CENTER", 0));
dxf->writeLineType(*dw, DL_LineTypeData("CENTER2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("CENTERX2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DASHDOT", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DASHDOT2", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("DASHDOTX2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DASHED", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DASHED2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DASHEDX2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DIVIDE", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DIVIDE2", 0));
dxf->writeLineType(*dw,
DL_LineTypeData("DIVIDEX2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DOT", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DOT2", 0));
dxf->writeLineType(*dw, DL_LineTypeData("DOTX2", 0));
dw->tableEnd();
//创建线条结束
int numberOfLayers = 3;
dw->tableLayers(numberOfLayers);
dxf->writeLayer(*dw,
DL_LayerData("0", 0),
DL_Attributes(
std::string(""), // leave empty
DL_Codes::white, // default color
100, // default width
"CONTINUOUS")); // default line style
dxf->writeLayer(*dw,
DL_LayerData("mainlayer", 0),
DL_Attributes(
std::string(""),
DL_Codes::red,
100,
"CONTINUOUS"));
dxf->writeLayer(*dw,
DL_LayerData("anotherlayer", 0),
DL_Attributes(
std::string(""),
DL_Codes::black,
100,
"CONTINUOUS"));
dw->tableEnd();
dxf->writeStyle(*dw);
dxf->writeView(*dw);
dxf->writeUcs(*dw);
dw->tableAppid(1);
dw->tableAppidEntry(0x12);
dw->dxfString(2, "ACAD");
dw->dxfInt(70, 0);
dw->tableEnd();
dxf->writeDimStyle(*dw,
1,
1,
1,
1,
1);
dxf->writeBlockRecord(*dw);
dxf->writeBlockRecord(*dw, "myblock1");
dxf->writeBlockRecord(*dw, "myblock2");
dw->tableEnd();
dw->sectionEnd();
dw->sectionBlocks();
dxf->writeBlock(*dw,
DL_BlockData("*Model_Space", 0, 0.0, 0.0, 0.0));
dxf->writeEndBlock(*dw, "*Model_Space");
dxf->writeBlock(*dw,
DL_BlockData("*Paper_Space", 0, 0.0, 0.0, 0.0));
dxf->writeEndBlock(*dw, "*Paper_Space");
dxf->writeBlock(*dw,
DL_BlockData("*Paper_Space0", 0, 0.0, 0.0, 0.0));
dxf->writeEndBlock(*dw, "*Paper_Space0");
dxf->writeBlock(*dw,
DL_BlockData("myblock1", 0, 0.0, 0.0, 0.0));
// ...
// write block entities e.g. with dxf->writeLine(), ..
// ...
dxf->writeEndBlock(*dw, "myblock1");
dxf->writeBlock(*dw,
DL_BlockData("myblock2", 0, 0.0, 0.0, 0.0));
// ...
// write block entities e.g. with dxf->writeLine(), ..
// ...
dxf->writeEndBlock(*dw, "myblock2");
dw->sectionEnd();
dw->sectionEntities();
// write all your entities..
//dxf->writePoint(
// *dw,
// DL_PointData(10.0,
// 45.0,
// 0.0),
// DL_Attributes("mainlayer", 256, -1, "BYLAYER"));
dxf->writeLine(
*dw,
DL_LineData(0.0, // start point
0.0,
0.0,
500.0, // end point
0.0,
0.0),
DL_Attributes("mainlayer", 256, -1, "BYLAYER"));
dxf->writeLine(
*dw,
DL_LineData(500.0, // start point
0.0,
0.0,
500.0, // end point
500.0,
0.0),
DL_Attributes("mainlayer", 256, -1, "BYLAYER"));
dxf->writeLine(
*dw,
DL_LineData(500.0, // start point
500.0,
0.0,
0.0, // end point
500.0,
0.0),
DL_Attributes("mainlayer", 256, -1, "BYLAYER"));
dxf->writeLine(
*dw,
DL_LineData(0.0, // start point
500.0,
0.0,
0.0, // end point
0.0,
0.0),
DL_Attributes("mainlayer", 256, -1, "BYLAYER"));
dw->sectionEnd();
dxf->writeObjects(*dw);
dxf->writeObjectsEnd(*dw);
dw->dxfEOF();
dw->close();
delete dw;
delete dxf;
}
代码下载:链接: http://pan.baidu.com/s/1kVRU3Dt 密码: iect