DXF接口方法研究与实现.doc_第1页
DXF接口方法研究与实现.doc_第2页
DXF接口方法研究与实现.doc_第3页
DXF接口方法研究与实现.doc_第4页
DXF接口方法研究与实现.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2011-07-05 DXF接口方法研究与实现摘 要 研究了AutoCAD的DXF文件接口格式,分析DXF文件的组成,用C语言对接口程序的编写以及对接口子程序的编写。关键字 DXF、计算机辅助设计、接口文件一、引言每个CAD系统都有自己的数据文件,数据文件分图形数据文件、几何模型文件和产品模型文件几种。数据文件的格式与每个CAD系统自己的内部数据模式密切相关,而每个CAD系统自己内部的数据模式一般是不公开的,也是各不相同的。由于用户使用的需要,就有数据交换文件概念的出现。2、 DXF接口文件的格式、组成文件格式由五个部分组成,它们是: (l)HEADER SECTION(头部区)记录Auto CAD作图时所用到的系统变量,这些变量可由 Auto CAD中的STATUS在屏幕上显示的各种命令来设置。 (2)TABLE SECTION(列表区)包含了八个表,具体如下:APIDP图名; DIMSTYLE尺寸标注的种类; LTYPE型名及其间隔; LAYER层名及其设定状态;STYLlE文字的种类及其应用名;UCS用户设定的局部坐标系;VlEW观察对象的视点、视线;VPORT显示区上每个视区的表示方法。 (3)ENTTIES SECTION(实体区)用于定义Auto CAD所支持的图形元素,如表21所示。 (4)BLOCKS SECTION(复合图形区)用于定义所有的复合图形及其所构成的实体,此实体的含义与上述实体区中所列出的图形元素相同。用BLOCK表示复合图形的开始和ENDBLK表示复合图形的终止。 (5)END OF File(文件结束)DXF文件每个段由若干个组组成,每个组在DXF文件中占有两行。组的第一行为组代码,它是一个非零的正整数,相当于数据类型代码,每个组代码的含义是由AutoCAD系统约定好的,以FORTRAN “I3”格式(即向右对齐并且用三字符字段填满空格的输出格式)输出。组的第二行为组值,相当于数据的值,采用的格式取决于组代码指定的组的类型。组代码和组值合起来表示一个数据的含义和它的值。图形元素图形元素LINE 直线POINT 点CIRCLE 圆ARC 圆弧TRACE 粗实线SOLID 实体TEXT 文字SHAPE 形体PLINE 折线DIMENSION 尺寸标注INSERT 插入图形VIEWPORT 视区ATIDEF 属性定义ATIRIB 属性值VERTEX 顶点SEQEND 折线终止3DFACE 三维面表2.1 DXF文件定义的图形元素3、 接口程序以及接口子程序的编写有了以上知识就可读懂DXF文件并从中提取我们所需要的信息了,而我们所需要的信息大多在ENTITIES段中。先讲一下大概的处理方法:输入DXF文件名,打开DXF文件,读取一个记录,HEADER,TABLES,ENTITIES,BLOCKS,EOF,处理HEADER,处理TABLES,处理ENTITIES,处理BLOCKS,结束。可以从DXF文件中检索,当检索到与某个段时就转到那个段的处理程序去处理。如检索到HEADER段就转入HEADER段的处理程序去处理。图形的大部分信息都在实体ENTITIES段中,因此读取实体段的内容很重要。读取实体段的数据首先要考虑读取数据的存储方式,然后再进行后一步的处理或存入数据文件中。此处用链表结构来存储。各个实体的数据分成两块:公共数据块和特殊数据块。公共数据块存储每个实体都具有特征参数,如所在图层,实体标识,线型名特殊数据块存储每个实体特有的数据,如实体LINE,它里面有两个端点的坐标值;实体CIRCLE中有圆心坐标值和半径值等。单个实体的数据处理方法:读取一个实体的数据首先根据组码“0”后的实体标识字符串来确定其为哪一种实体,然后再根据这个实体的具体情况来读取数据。1.下面是用C来读取HEADER段中的部分程序。#include #include #include #define STRLEN 30int main(int argc, char *argv)int code; /*存储组码*/char codevalueSTRLEN; /*存储组码对应的值*/FILE *dxf; /*文件指针*/char filenameSTRLEN; /*文件名*/char suffix6 = .dxf; /*只输入文件名打开DXF文件,不用输后缀.*/printf(请输入文件名:);gets(filename);strcat(filename,suffix);dxf = fopen(filename,r); /*打开文件进行读操作*/if(!dxf) printf(打开文件出错!n按任意键退出.);getchar();exit(0);else printf(文件已经打开.n正在读取.n);上述代码为打开一个DXF文件后就顺序读取只到文件结束,当遇到组码为2且组码对应的组值为字符串“HEADER”时就对HEADER段进行处理。在HEADER段中,若遇到组值“$ACADVER”时,则下一个组码对应的值就为AutoCAD的版本信息。具体版本信息可参考AutoCAD帮助文件DXF参考中的HEADER段-HEADER段组码部分。2.下面是用C来读取ENTITIES段中的部分程序。#include #include #include #include #define STRLEN 60#define DATASIZE sizeof(EntityData)/*-每个实体的结构-*/你可在在此添加其它的实体typedef struct tagLine float x1,y1,z1; float x2,y2,z2;LINE;typedef struct tagCircle float x,y,z; float radius;CIRCLE;/*-*/typedef union specialData LINE line; CIRCLE circle;privateData;typedef struct commonData char idSTRLEN; /*实体标识字符串*/ char layerSTRLEN; /*层名字符串*/ privateData data; /*特有数据块*/ struct commonData *next; /*用于构建链表*/EntityData;/*-函数声明部分-*/void print(EntityData *entity);/*-*/int main(int argc,char *argv)int code;float value;char codevalueSTRLEN;FILE *dxf;char filenameSTRLEN;char suffix6 = .dxf;EntityData *entity,*entity1,*entity2;printf(请输入DXF文件名:);gets(filename);strcat(filename,suffix);dxf = fopen(filename,r);if(!dxf) printf(打开文件出错!n可能不存在此文件.n); printf(按任意键退出.); getch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论