在现有的图像处理软件中融合dxf格式输出

在现有的图像处理软件中融合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





posted on 2022-12-03 15:32  jsxyhelu  阅读(146)  评论(0编辑  收藏  举报

导航