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


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

    dxf格式是autocade的支持格式。如果将现有图像识别的结果导出到dxf格式,就能够使用autocad的强大功能进行后续处理。
    dxf的格式比较复杂,开源支持库为libdxf,使用起来也比较复杂。经过一段时间融合,我将其修改为vs2012(mfc)能够直接调用的模式。
    包含的类库都保存在一个文件夹下
    调用方式
    void testWriting() {
        DL_Dxfdxf = new DL_Dxf();
        DL_Codes::version exportVersion = DL_Codes::AC1015;
        DL_WriterAdw = 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(*dwDL_LineTypeData("BYBLOCK", 0));
        dxf->writeLineType(*dwDL_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(*dwDL_LineTypeData("BORDER", 0));
        dxf->writeLineType(*dwDL_LineTypeData("BORDER2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("BORDERX2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("CENTER", 0));
        dxf->writeLineType(*dwDL_LineTypeData("CENTER2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("CENTERX2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DASHDOT", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DASHDOT2", 0));
        dxf->writeLineType(*dw,
            DL_LineTypeData("DASHDOTX2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DASHED", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DASHED2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DASHEDX2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DIVIDE", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DIVIDE2", 0));
        dxf->writeLineType(*dw,
            DL_LineTypeData("DIVIDEX2", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DOT", 0));
        dxf->writeLineType(*dwDL_LineTypeData("DOT2", 0));
        dxf->writeLineType(*dwDL_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





  • 相关阅读:
    第二阶段个人总结7
    第二阶段个人总结6
    第十七周进度报告
    个人总结
    十六周进度报告
    人月神话阅读笔记3
    十五周进度报告
    十四周进度报告
    人月神话阅读笔记2
    购买图书
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/6113162.html
Copyright © 2020-2023  润新知