为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

AutoCAD+DXF文件格式与二次开发图形软件编程__+

2011-12-07 4页 pdf 190KB 151阅读

用户头像

is_414878

暂无简介

举报
AutoCAD+DXF文件格式与二次开发图形软件编程__+ 收稿日期 :2003 - 12 - 16 作者简介 :刘传亮 (1975 —) ,男 ,江苏徐州人 ,硕士研究生 ,研究方向 为计算机应用、计算机网络。 AutoCAD DXF文件格式与二次开发图形软件编程 刘传亮 ,陆建德 (苏州大学 计算机学院 ,江苏 苏州 215006) 摘 要 :DXF 格式文件是传统图形开发中最常用的图形交换格式之一 ,众多第三方开发的图形软件均加入了对DXF 文件 的支持。针对 DXF 格式文件的二次开发问题 ,简要介绍了 DXF 格式交换文件的结构 ,详细分析了各代码段与组码的含义 及其...
AutoCAD+DXF文件格式与二次开发图形软件编程__+
收稿日期 :2003 - 12 - 16 作者简介 :刘传亮 (1975 —) ,男 ,江苏徐州人 ,硕士研究生 ,研究方向 为计算机应用、计算机网络。 AutoCAD DXF文件格式与二次开发图形软件编程 刘传亮 ,陆建德 (苏州大学 计算机学院 ,江苏 苏州 215006) 摘 要 :DXF 格式文件是传统图形开发中最常用的图形交换格式之一 ,众多第三方开发的图形软件均加入了对DXF 文件 的支持。针对 DXF 格式文件的二次开发问题 ,简要介绍了 DXF 格式交换文件的结构 ,详细了各代码段与组码的含义 及其关系。以及在 DXF 二次开发图形软件中针对DXF 文件格式的编程方法。在此基础上对DXF 文件格式的版本演进与 不同版本间格式进行了细致的分析与比较 ,通过在一个具体项目中的应用 ,给出了一个通用的、具有版本兼容性的DXF 文 件编程方法 ,为类似图形软件的二次开发提供了一个解决。 关键词 :AutoCAD ;DXF 文件 ;版本 ;图形软件 中图分类号 : TP311. 1       文献标识码 :A       文章编号 :1005 - 3751 (2004) 09 - 0101 - 04 Analysis on AutoCAD DXF File Format and the 2nd Development Graphics Soft ware Programming L IU Chuan2liang ,L U Jian2de (School of Computer Science and Technology ,Suzhou Univ. ,Suzhou 215006 ,China) Abstract :The DXF format is one of the widely used graphics exchange formats in the traditional graphics application development . The lots of 3rd party - developed graphics software have supported DXF format . To resolve the DXF format’s 2nd development problem ,this paper has introduced the structure of the DXF format exchangeable file in brief and has compared the contents and evolution between the differ2 ent versions of DXF file format . The paper has discussed and analyzed in detail the programming methods to DXF file format in the 2nd de2 velopment . Finally , with an application in a specific project ,the paper gives a common and version - compatible solution for the same kinds of application development . Key words :AutoCAD ;DXF file ;version ;graphics software 0  引  言 DXF(Drawing Interchange Format ,图形交换格式) 是 AutoCAD 图形文件中所包含的全部信息的标记数据的一 种示方法 ,是 AutoCAD 图形文件的 ASCII 或二进制文 件格式[ 1 ] ,可用于在 AutoCAD 和其他图形应用程序之间 输入、输出与交换图形文件。AutoCAD 很早就开始在中 国广泛使用 ,有大量的 DXF 格式的交换文件保存下来。 随着 AutoCAD 的发展 , 其 DXF 文件格式从 AutoCAD R12 , R13 , R14 , 到 AutoCAD2000 , 2000i , 再 到 Auto2 CAD2002 也有了较大变化。考虑到它被使用的普遍性 , 为了使其产生的图形数据文件具有更多的兼容性 ,一些其 它开发的图形软件加进了读写 DXF 文件的功能 ,这里把 这些图形软件叫做 DXF 文件的二次开发软件。在具 有 DXF 文件读写功能的二次开发图形软件时需要深入分 析 DXF 格式交换文件的结构 ,也一定要考虑产生 DXF 文 件的各 AutoCAD 版本的差异。笔者参加了开发 YH 线切 割自动编程控制系统 ,该系统的软件部分本身已包含图形 的生成、编辑功能。考虑到 AutoCAD 有众多的用户 ,为了 方便使用者 ,使 AutoCAD 生成的图形文件也能读入 YH 自动编程系统中使用 ,在该二次开发图形软件中即加进了 读取 DXF 文件的功能。也考虑了要能够读取 AutoCAD 各版本生成的 DXF 文件。文中将在分析 DXF 文件格式 的版本演进与不同版本间格式比较的基础上 ,对在二次开 发图形软件中针对不同版本的 DXF 文件格式的读入编程 方法进行探讨。 1  基本的 DXF文件格式结构 AutoCAD 生成的 DXF 文件既可以是 ASCII 格式也 可以是二进制文件格式 , ASCII 格式比二进制文件格式 更常见 ,文中使用术语“DXF 文件”表示 ASCII DXF 文件。 DXF 文件本质上是由成对的代码和与代码关联的值 组成的。这些代码(即组码)不仅指出了其后组值的类型 , 第 14 卷  第 9 期 2004 年 9 月               微  机  发  展 Microcomputer Development                Vol. 14  No. 9 Sep . 2004 而且与此组值配对。通过使用这些配对的组码和组值 , DXF 文件被组织成段 ,这些段由记录组成 ,而记录又由依 次排列的组码和数据条目组成。在 DXF 文件中 ,每个组 码和每个数据条目都各占一行。 DXF 文件就这样包含了所有用户指定的信息 ,每个 数据以一个组码及一个数据元素(组值)组成 ,组码的值表 明了其后数据元素的类型 ,也指出了数据元素对于给定对 象 (或记录)类型的含意。文件总是以一行组码跟一行组 值组成 ,因此规定组值的最大长度不能超过 255 个字节 (AutoCAD2000 以后组码 0~9 及 1000~1009 已经去除了 255 个字符的限制 ,但通常小于 2049 个字节) ,这种规律 使得编程设计更加方便。 完整的 DXF 文件由七个段 ( SECTION) 组成。每个 段由一行组码 0 及一行字符串 SECTION 开始 ,紧接着是 组码 2 及一行表示段名称的字符串 (例如 HEADER) 。段 的结束由一行组码 0 及一行表示该段结束的字符串 ENDSEC。这些段中的内容由对象或图元组成 ,而这些对 象或图元由标志它们属性的组码和组值组成。整个文件 以一行组码 0 及一行 EOF 结束。以下列出的是各个段的 段名及段中包含的信息 :3 HEADER 段。该段包含与本图形文件有关的基 本信息 ,它由一个 AutoCAD 数据库版本号、存盘时的各种 设置和许多系统变量组成。每个参数包括一个变量名及 其组值。3 CLASSES 段。该段包含有关应用程序定义类的 信息 ,这些类的实例包含在 BLOCKS 段、EN TITIES 段和 OBJ ECTS 段的数据中。类定义在类的层次结构中是固定 不变的。3 TABL ES 段。该段包含如下符号表的定义 ,每个 表的表项数目可变 : APPID(应用程序标识表) BLOCK - RECORD(块引用表) DIMSTYL E(标注样式表) LA YER(图层表) L TYPE(线型表) STYL E(文本样式表) UCS(用户坐标系表) VIEW(视图表) VPORT(视口配置表)3 BLOCKS 段。该段包含有在 AutoCAD 中定义的 块。包括块定义和组成图形中每个块引用的图形图元。3 EN TITIES 段。包含图形中出现的所有图形对象 (图元) ,包括对块的引用 (插入图元) 。3 OBJ ECTS 段。该段包含那些没有图形显示的非 图形对象 ,如包含多线和组的字典、图层等信息。所有那 些非符号表记录的、符号表的和非图元的对象都储存在此 段中。3 THUMBNAIL IMAGE 段。该段为可选 ,如果存盘 时有预览图像则需要该段。 组码和组值定义了对象或图元的特定样子。组值的 数据类型可以是字符串型、整型或浮点数型 ,例如点的 X 坐标。 如果图形 DXF 文件的最大字符串长度超过 256 个字 符 ,在 SAVE ,SAVEAS 和 WBLOCK时这些字符串将被删 除 ,在 OPEN 和 INSERT 时它们会导致操作失败。 一个 DXF 文件的结构可以不必都有这七个段 ,如果 没有设置 HEADER 段中的变量 ,整个 HEADER 段将被忽 略 ;若不需要建立条目 , TABL ES 段中的表可以被忽略 ,若 不需要整个 TABL ES 段中的内容 ,可以将其全部忽略。 若用户在 L TYPE 表中定义了任一线型 ,则此表必须出现 在 LA YER 表前。若图形中没有使用任何块定义 ,则也可 以忽略整个 BLOCKS 段。但若图形中使用了块定义 ,则 BLOCKS 段必须出现在 EN TITIES 段前。在 EN TITIES 段中 ,用户可以引用未在 LA YER 表中定义的图层名 ,这 些图层将被自动创建 ,并且使用颜色 7 和 CON TINUOUS 线型。最后 ,在文件的尾部必须出现 EOF 项。 下面以 DXF 文件中最主要的几个段的组码为例说明 各个段的结构(注 :以‘;’开始的为本文注解) ,详细的组码 与组值定义可参见 Autodesk 公司的有关文档和手册。 (1) HEADER 段组码 : ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 ; HEADER 段的开始 SECTION 2 HEADER ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 9 ;描述的每一个头部变量 $< 变量 > ; < 组码 > ; < 值 > ;每一个头部变量都按此四行重复 ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 ; HEADER 区域的结束 ENDSEC (2) EN TITIES 段的图元组码 : ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 ; EN TITIES 段的开始 SECTION 2 EN TITIES ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 ;每一图元定义为一个条目 < 图元类型 > 5 < 句柄 > 330 < 指向所有者 >  100 ·201·                       微 机 发 展                     第 14 卷 AcDbEntity  8 < layer >  100 AcDb < 类名 >  .  . < 数据 >  . ; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 ; EN TITIES 段的结束 ENDSEC 2  不同版本 DXF 文件格式的比较与分析 (1) DXF 文件格式的发展与版本比较、判别。 美国 Autodesk 公司于 1982 年推出 AutoCAD 的第一 个版本。AutoCAD R12 于 1992 年 7 月正式推出 ,这是一 个主要基于 DOS 系统的版本。当时正值中国微机普及的 快速发展时期 , R12 在中国的使用曾相当普遍。R12 的 DXF 文件只有 HEADER , TABL ES , BLOCKS 和 EN TI2 TIES四个段。由于 R12 不是面向对象的 , 所以没有 CLASSES 和 OBJ ECTS 段。 分别于 1994 年和 1997 年推出的 R13 和 R14 版本是 第一代以 Windows 为平台的 AutoCAD 版本 ,再加上硬件 水平的处理能力的提高 ,使得 AutoCAD 的功能大大增强。 同时还支持了面向对象 ,使得这些版本的 DXF 格式有了 相当大的变化 :加入了 CLASSES 和 OBJ ECTS 段 ,并增加 了 ELL IPSE (椭圆) 、L WPOL YL INE (多义线) 、SPL INE (样条曲线)等大量实用图元类型。 其后推出的AutoCAD2000 ,2000i 及 2002 版本分别在 设计环境、人机界面和 Internet 等功能上做了改进。这些 版本 DXF 文件格式改进不大 ,只做了局部的修改 ,另外增 加了一个可选的 THUMBNAIL IMAGE 段。 DXF 文件版本信息存储在 HEADER 段的开头 ,其中 的第一个组码 9 组值为 $ACADVER ,标志版本变量开 始 ,第二个组码 1 组值为标志版本号的字符串。表 1 列出 版本号字符串与 AutoCAD 对应版本的对照列表 ,在设计 DXF 文件的二次开发图形软件时可以据此进行版本号的 判别。各版本$ACADVER 组码对照如表 1 所示。 表 1  AutoCAD 各版本的 DXF 版本号 $ACADVER值 AutoCAD版本 AC1006 AutoCAD R10 AC1009 AutoCAD R11、R12 AC1012 AutoCAD R13 AC1014 AutoCAD R14 AC1015 AutoCAD R15、2000 AC1015. 05 AutoCAD 2000i   (2) DXF 文件格式主要变化的分析比较。 R12 与 R14 版本间的 DXF 文件格式变化较大 , R12 与 R14 版本的 AutoCAD 都是曾经广泛使用的版本 ,下面 仅就 R12 与 R14 的 DXF 文件格式的主要变化加以分析。 AutoCAD 从 R13 开始支持面向对象 ,这时的图形信 息除了可以显示的图元外 ,还增加了其他代表各种参数信 息的对象。在 DXF 文件格式中新出现的段 CLASSES 和 OBJ ECTS 分别存储了用户和程序定义的类和对象。 另一个较大的变化是在图元类型上 ,以前 R12 的 DXF 文件只支持一些简单的图元类型 ,对于圆锥曲线等 复杂曲线都是用 POL YL INE (多段线) 来表示 ,记录的内 容为曲线上采样的各个点。由于需要取得较多的点以使 曲线平滑 ,所以导致了最后的 DXF 存盘文件尺寸变大。 以一个简单的椭圆为例 ,在缺省精度下要记录 129 个顶点 (VERTEX) ,每个顶点在文件里占 14 行 ,共需 1806 行。 从 R13 开始补充了大量的新图元类型 ,图元的表示 上也有了简化和改进。以前的 VERTEX , POL YL INE 等 图元类型予以保留 ,增加的图元在数据表示上更加灵活高 效。多数复杂曲线图元只记录对象的属性值 ,而不象 R12 以前版本那样采用多段线表示。以椭圆为例 ,R13 以后版 本只需记录圆心坐标、长轴端点坐标、长短轴比例即可 ,每 个椭圆在文件里只占 36 行 ,比 R12 少占用大量空间。 3  具有版本兼容性的 DXF二次开发图形软件的编 程方法 根据以上分析 ,在 DXF 文件的二次开发图形软件设 计中 ,如果用户以表驱动方式 (忽略未定义即老版本不能 识别的组码 ,且对图元中的组码次序不做任何假定) 编写 DXF 处理程序 ,那么该程序将比较容易针对 AutoCAD 的 后续版本做调整[ 2 ] 。这是因为 AutoCAD 以后版本的性能 将不断得到增强 ,图元中将添加一些新组码以提供更多功 能 ,二次开发图形软件中可以随之进行相应灵活的调整 , 而在这之前 ,对未定义的组码仅是忽略而已 ,不影响其对 老版本图元组码的识别和处理。 在 YH 线切割自动编程控制系统的设计中 ,即采用了 以上方法完成 DXF 文件读取功能。下面是用 VC6. 0 编 写的读取 DXF 文件模块的部分 ,如图 1 所示。 下面是用 VC6. 0 编写的读取圆弧图元的部分程序。 R12 与 R14 版本的 DXF 文件中圆弧的组码顺序不同 ,但 是采用以下程序后都能将圆弧的各个参数正确读出[ 3 ] 。 void CDxf : :ReadArc ( FIL E 3 fp ,CDC 3 pDC) {  int gCode ;     / / 组码  float x1 ,y1 ,r ,start ,end ,pi = 3. 1415926 ;   / / 弧心、半径、起 始角度等本地变量  char str[ 80 ] ;  fscanf (fp ,“%s \ n”,str) ;  do {   gCode = atoi (str) ;   switch (gCode) { ·301·第 9 期           刘传亮等 :AutoCAD DXF文件格式与二次开发图形软件编程 图 1  读取 DXF 文件流程图   case 10 :    / / 读到组码“10”,下一行为圆弧 x 坐标    fscanf (fp ,“%f \ n”, &x1) ;   / / 读取圆弧 x 坐标    break ;   case 20 :    fscanf (fp ,“%f \ n”, &y1) ;   / / 读取圆弧 y 坐标    break ;   ⋯⋯     / / 读取其他参数   default :    fscanf (fp ,“%s \ n”, str) ;    break ;   }   fscanf (fp ,“%s \ n”, str) ;   / / 此处总是读到组码  } while (strcmp (str ,“0”) ! = 0) ;   / / 组码“0”,退出循环  ⋯⋯  DrawArc (pDC ,x1 ,y1 ,r ,start ,end) ; } 4  结束语 笔者对二次开发图形软件 YH 系统的 DXF 读入编程 进行了详细的分析 ,并经反复比较各版的 DXF 文件格式 读入测试 ,使 YH 系统的设计取得了成功 ,获得了很好的 效果。 参考文献 : [ 1 ]  罗卓书. AutoCAD 2000 中文版基础培训教程[ M] . 北京 :电 子工业出版社 ,2000. [ 2 ]  清宏计算机工作室. AutoCAD 工程二次开发[ M] . 北京 :机 械工业出版社 ,2000. [ 3 ]  方 铁. AutoCAD C 语言高级编程[ M] . 北京 :清华大学出 版社 ,1995. (上接第 100 页) 表 1  可重用构件的信息表结构 可重用构件名 功能描述 地址 权限 说明 属性 详细内容 ⋯⋯ ⋯⋯ ⋯⋯ ⋯⋯ ⋯⋯ ⋯⋯ ⋯⋯   可重用构件名 :是用户区别可重用构件的惟一标识 ; 功能描述 :简要描述可重用构件的功能 ; 地址 :描述可重用构件在库中的地址 ,用于方便地检 索构件 ; 权限 :描述构件是只读 ,还是可读写 ,及组内外用户其 进行读写操作的权限 ; 说明 :存放构件的功能 ,如何使用该构件等详细内容 ; 属性 :构件中面向用户的信息 ,如构件的作者、建立日 期、算法出处等信息 ; 详细内容 :包括相应的文档、动态连结库、ODD 图、以 PAL 描述的 PAD 等信息。 在这个文件中 ,用户可以方便地对构件进行插入、查 找和使用 ,此过程具有对用户透明的特点。 5  结束语 文中在基于构件的 PDM 系统框架的开发基础上 ,提 出了框架中工程数据的管理实现的方法和技术以及 PDM 系统中构件的管理 ,从而使得基于构件开发的 PDM 系统 是个能够实现“即插即用”的支撑平台 ,此系统能有效地支 持在分布、异构多用户环境中的信息、功能和过程的集成 , 又能对应用领域工具产生的各种异构数据进行管理和传 递 ,保证数据的共享。 参考文献 : [ 1 ]  杜晓明 ,张本生 ,甘茂治. 并行环境下基于组件的 CAD 框 架模型研究[J ] 1 计算机工程与应用 ,2002 ,39 ( 4) : 215 - 2161 [ 2 ]  韩 鑫. 产品数据管理系统的构造框架和实现方法[J ] . 软 件学报 ,1998 ,9 (12) :881 - 8831 [3 ]  李 炜 ,张 利 ,张建军. 并行设计环境的柔性 PDM 系统 框架研究[J ]1 合肥工业大学学报 ,2004 ,26 (4) :392 - 3951 [4 ]  陆 薇. 基于组件的开放式 CAD 系统模型[J ] . 软件学报 , 1998 ,9 (9) :651 - 6551 [ 5 ]  贾宏宇. 基于构件/ 构架复用技术的工控软件设计研究[J ]1 计算机工程与应用 ,2002 , (1) :130 - 1321 [ 6 ]  Kuokka R. Communication infrastructure for Concurrent En gi2 neering [ J ] . Artificial Intelligence for Engineering Design , 1995 , (9) :283 - 2971 ·401·                       微 机 发 展                     第 14 卷
/
本文档为【AutoCAD+DXF文件格式与二次开发图形软件编程__+】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索