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

在现有的图像处理软件中融合dxf格式输出的更多相关文章

  1. 【系统安装】如何在VMware软件中安装ghost格式的系统

    一.安装准备 1.系统虚拟环境软件:VMware软件(下载链接) 2.系统镜像制作软件:UltraISO[软碟通是光盘映像文件制作/编辑/转换工具](下载链接) 3.系统安装辅助软件:Win7PE(下 ...

  2. 3D图形图像处理软件HOOPS介绍及下载

    HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了 ...

  3. Adobe Photoshop for Mac(图像处理软件)破解版安装

    1.软件简介    Adobe Photoshop(简称 "PS")是 macOS 系统上一款由 Adobe Systems 开发和发行的图像处理软件.Photoshop 主要处理 ...

  4. CRM/ERP 企业管理软件中常见的七种程序设计模式

    管理软件中的常见代码设计模式,来自于业务上的需要,有不恰当的地方欢迎批评指正. 1  RE-TRY 重试模式 场景:在连接数据库服务器时,如果SQL Server数据库没有启动或正在启动,我们需要有一 ...

  5. 小讲堂:Mobox文档管理软件中的文件外链是什么?

    今天我们来讨论Mobox文档管理软件中的文件外链是什么?熟悉MOBOX的朋友们应该知道,如果有文件需要分享给其他同事,直接可以进行文件共享.对方会在AM的即时通讯客户端有消息提醒,点击消息提醒可以看到 ...

  6. 小讲堂:在线编辑在Mobox文档管理软件中的意义

    今天我们来讨论一下,mobox文档管理软件中的在线编辑的这个功能,相信这个功能是用户在日常的文档维护中非常需要的. 文档管理软件的诸多功能中,在线编辑是一块很重要的功能点,因为在线编辑可以说是提高工作 ...

  7. Atitit.软件中见算法 程序设计五大种类算法

    Atitit.软件中见算法 程序设计五大种类算法 1. 算法的定义1 2. 算法的复杂度1 2.1. Algo cate2 3. 分治法2 4. 动态规划法2 5. 贪心算法3 6. 回溯法3 7. ...

  8. JMP软件中的晶圆图( Wafer Map)分析

    关键词:芯片 良率分析 晶圆图 质量管理 JMP Minitab 半导体芯片的生产,简单来讲,是将电路通过各种复杂的物理化学方法制作到晶圆上,在生产的最后阶段会进行不同电性功能的测试以确保产品的功能性 ...

  9. Illustrator软件中eps和ai格式的区别

    转自Illustrator软件中eps和ai格式的区别 AI是ILL特有的格式,EPS格式是在排版领域经常使用的格式.AI中的位图图像是用链接的方式存储,EPS格式则将位图图像包含于文件中.对于含有相 ...

随机推荐

  1. 一个快速double转int的方法(利用magic number)

    代码: int i = *reinterpret_cast<int*>(&(d += 6755399441055744.0)); 知识点: 1.reinterpret_cast&l ...

  2. 理解AX InventTrans的几种状态

    接触AX一段时间后,发现InventTrans表非常重要.它可以说是物流模块的核心,开发BI报表的话必须依赖此报表.   先来看官方释义: InventTrans表包含了库存交易的信息.当销售/采购订 ...

  3. 由于某IP大频率提交评论导致服务器宕机

    早上突然收到dnspod的宕机通知(好久没收到了,有点手足无措). 服务器在上午10:40时达到85%.uptime显示cpu利用率达到35.不宕才怪. 按照之前的经验,应该是触发一个特别耗CPU的处 ...

  4. drop表后仍占表空间解决办法

    练习oracle时create了很多表,drop表后select * from tab; 网上找了好些方法,但是好多都适用... SQL>purge recyclebin; 回收站已清空.

  5. [原创]-bash: iostat: command not found解决办法

    [root@testhost ~]# iostat-bash: iostat: command not found IOSTAT 命令不可用,首先确认sysstat包是否安装,sysstat包中包括i ...

  6. AVD之PANIC: Could not open

    1 原因一:因为我们采用的是绝对路径定位,也就是说在环境变量里面把路径写死了,所以安装都不同,路径读不出来. 解决办法:①在环境变量中创建变量名:ANDROID_SDK_HOME,变量值:你当时安装S ...

  7. mysql dba系统学习(6)二进制日志binlog之二

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点.MySQL R ...

  8. csuoj 1391: Boiling Vegetables

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1391 1391: Boiling Vegetables Time Limit: 1 Sec  Me ...

  9. 19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]

    状态401代表未被授权,header("Location:www.xxx.php"); 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300 ...

  10. swift基础:第三部分:对第一部分的补充说明

    今天是我学习swift的第二天,虽然我和swift的距离有点远,但我相信,我会慢慢的接近这门语言的.好了,我们聊聊昨天晚上的事吧,昨天晚上下班早,回到家时,真是惊喜哈,宿舍那两做好了饭,等我吃饭,想对 ...