搜档网
当前位置:搜档网 › DXF图形文件格式

DXF图形文件格式

DXF图形文件格式
DXF图形文件格式

解析DXF图形文件格式

一、DXF文件格式分析

DXF文件由标题段、表段、块段、实体段和文件结束段5部分组成,其内容如下。

☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层

层名及线型、颜色等。

☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在文件中出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。

☆块段(BLOCK)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH

命令生成的剖面线和用DIM命令所完成的尺寸标准。

☆实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。

☆文件结束段(EOF OF FILE)DXF文件的结束标志。

一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,它由CAD图形系统所规定,而组值为具体的数值,二者结合起来表示一个数据的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。

(1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决

定。例如:

代码0~9组值类型为字符型。

代码10~59组值类型为实型。

代码60~79组值类型为整型。

代码999表示解释行。

(2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。另外,一些代码是备用的,目前版本尚未用到,

现将他们的含义举例介绍如下。

0:表示一个事物的开始,如一个块、表、图层、实体等。

1:字符型数据的值,如TEXT的字符串、文件名、属性值等。

2:一个事物的名字,如段、表、块、线型、视图等的名字。

3~5:字符型数据的值,如文件名、线型说明等。

6:线型名(固定类型)。

8:图层名(固定类型)。

关于实体的坐标与相应的组代码10~18、20~28、30~38的用法应根据实体所用到点的数量,按组代码个位的0、1、2、……的顺序使用。例如LINE的起点组代码为10、20、30,

而11、21、31为其终点。其他类似。

DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体

段,就可以完成相应几何图形的描述。在层表中说明每一层的颜色、线型,在块段中说明块所在的层、属性及其在图形中的位置,在实体段中说明直线的起点、终点及圆的圆心、半径等几何信息和各实体所在的层。根据实体所在的层,在层表中搜索每一层的颜色、线型并将其添加到实体对象中。在利用CAD进行绘图时,需将变量参数DIMASO设为ON,以保证块段中定义的尺寸块为一个整体,并可被正确无误地获取。根据尺寸类型名、尺寸定义的起点、终点坐标与实体类型名、实体空间坐标是否匹配,对实体对象进行尺寸附加。在绘图时,如对自定义的粗糙度、形位公差等块不进行“EXPLODE”炸开操作,也可通过增加相应读取函

数提取其属性。

下面举例说明实体段在DXF文件中的格式。

圆弧(ARC)

0(开始)ARC(圆弧)

8(层的组码)

W1(层名为“W1”)

10(圆弧圆心的X坐标组码)

7.0(圆弧圆心的X坐标组值)

20(圆弧圆心的Y坐标组码)

9.0(圆弧圆心的Y坐标组值)

30(圆弧圆心的Z坐标组码)

0.0(圆弧圆心的Z坐标组值)

40(圆弧的半径组码)

25.0(圆弧的半径值)

50(圆弧的起始角度组码)

90.0(圆弧的起始角度值)

51(圆弧的终止角度组码)

180.0(圆弧的终止角度组值)

若实体的线型用BYLAYER,颜色为256(即BYLAYER),基面高度和厚度为零,其格式可简

化。

对于其他图形实体的格式描述(LINE、CIRCLE、TEXT等),这里就不再一一详述了。二、几何图形实体信息的提取

生成DXF文件必须首先进入图形编辑环境,在命令(Command)提示下键入DXFOUT,回

答所需的一个文件名后,即把内部压缩格式的图形数据转换为ASCⅡ的数据并写入相应DXF文件(以DXF为扩展名)中,供应用程序提取并处理实体数据。

三、几何图形描述的数据结构

通过对CAD系统的DXF图形交换文件进行分析,可以得到描述零件的全部几何图形元素。为简化问题,设定组成零件内外轮廓的图形元素只包括点、直线和圆弧,并分别用下列数据结构表示。

点:class POINT { float x;float y;float z;}虚基类:class SHAPE{ //由虚基类派生出直线、圆弧,便于链表操作public:

[replyview]

virtual void showEntity()=0;//表示此函数在派生类中必须定义……//在此定义其他虚函数} 直线:class LINE:public SHAPE,public POINT{ public://直线类由两个基类SHAPE和POINT 派生而来POINT start_point;//直线起点POINT end_point;//直线终点……//在此定义其他内部变量和函数}圆弧:class ARC:public SHAPE,public POINT{ public://圆弧类由两个基类SHAPE和POINT派生而来POINT center_point;//圆弧圆心POINT start_point;//圆弧起点POINT end_point;//圆弧终点float radius;//圆弧半径……//在此定义其他内部变量和函数}结点:struct Node //定义结点,便于链表内部删除,增加和修改{SHAPE *Item;//内容域Node *llink;//左指针Node *rlink;//右指针} 链表:class LIST { //链表类private:

Node *head;//结点头指针public:

LIST();//构造函数,进行变量初始化void~LIST();//析构函数,释放内存void addEntity(SHAPE *);//定义增加图形元素的函数……//在此定义其他函数}由此,回转体零件的几何图形元素不难用上述数据结构以线性链表进行存储。完整的特征识别系统不仅仅包含几何信息,还要包括加工工艺信息,而常用的几何造型CAD系统并不提供后者。为此,我们在AutoCAD系统中定义了一套工艺信息块,其全部以图形文件块的形式存储,这些信息包括:形状公差(直线度、平面度、圆度、圆柱度、线轮廓度和面轮廓度)、位置公差(平行度、垂直度、倾斜度、同轴度、对称度、位置度、圆跳动和全跳动)、表面粗糙度和基准等。[/replyview]

介绍了DXF文件的结构,分析组值和组代码的含义,然后说明读取DXF文件的方法,最后简

单介绍了实现此功能模块的数据结构

这个对dxf初学者有用,支持一下哦.

DXF文档详解

DXF的基本惯例

DXF格式是特定版本AutoCAD图形文件中所包含的全部信息的标记数据的一种表示方法。

标记数据的意思是指在每个数据元素前都带一个称为组码的整数。组码的值表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意。实际上,图形文件中所有用户指定的信息都能够以DXF文件格式表示。在AutoLISP和ARX应用程序中使用的DXF格式与上述格式基本相同,只是在某些数据组上存在着细微的差别。

如不作特殊说明,本节中所出现的组码都可以应用于DXF文件、AutoLISP应用程序和

ARX应用程序。当组码说明对于应用程序和DXF文件有所不同时(或只适用于其中之一),在组码的说明前有如下提示符:

APP只用于应用程序的说明

DXF只用于DXF文件的说明

如果组码说明对DXF文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。

组码范围

组码将与组码关联的值(组值)定义为整型、浮点数型或字符串型。具体说明如下表:组码范围组码范围组值类型

0-9 字符串(最多255个字符,对于UNICODE字符串则更少)

10-59 双精度三维点

60-79 16位整数值

90-99 32位整数值

100 字符串(最多255个字符,对于UNICODE字符串则更少)

102 字符串(最多255个字符,对于UNICODE字符串则更少)

105 表示十六进制句柄值的字符串

140-147 双精度标量浮点值

170-175 16位整数值

280-289 8位整数值

300-309 任意文字字符串

310-319 表示二进制数据组的十六进制值的字符串

320-329 表示十六进制句柄值的字符串

330-369 表示十六进制对象标识符的字符串

999 注释(字符串)

1000-1009 字符串(最多255个字符;对于UNICODE字符串则更少)

1010-1059 浮点值

1060-1070 16位整数值

1071 32位整数值

按数字次序排列的组码

下表给出了组码(或组码范围)及其说明。在表中,“固定”表示该组码的用途固定不变,非固定组码的用途将随上下文变化。

按数字次序排列的图元组码

组码说明

-5APP:persistentreactor链表

-4APP:条件运算符(仅用于ssget)

-3APP:扩展数据(XDA TA)标记(固定)

-2APP:图元名引用(固定)

-1APP:图元名。每次打开图形时它都改变,且不被保存。(固定)

0 表示图元类型的文字字符串(固定)

1 图元的主要文字值

2 名称(属性标记、块名称等)

3-4 其他的文字值或名称值

5 图元句柄。最多16位十六进制数字的文字字符串(固定)

6 线型名(固定)

7 文字样式名(固定)

8 图层名(固定)

9 DXF:变量名标识符(仅用于DXF文件的HEADER区域)。

10 主要点。此点为直线或文字图元的起点,圆的圆心等等。

DXF:主要点的X值(其后为Y和Z值的组码20和30)

APP:三维点(三个实数构成的表)

11-18 其他点。

DXF:其他点的X值(其后为Y和Z值的组码21-28和31-38)

APP:三维点(三个实数构成的表)

20,30 DXF:主要点的Y和Z值

21-28,

31-37 DXF:其他点的Y和Z值

38 DXF:如果非零,则为图元的标高。只在R11以前的AutoCAD输出的DXF 文件中存在

39 如果非零,则为图元的厚度(固定)

40-48 浮点值(文字高度、比例因子等)

48 线型比例。浮点标量值。缺省值适用于所有图元类型。

49 可重复的浮点值。一个图元中的可变长度表(例如LTYPE表中的虚线长度)中可出现多个组码49。组码7x总是在第一个组码49前出现,用于指定表的长度。

50-58 角度(在DXF文件中单位为度,在AutoLISP和ARX应用程序中单位为弧度)。

60 表示图元可见性的整数值。不赋值或值为0时表示可见;为1时表示不可见。

62 颜色代码(固定)

66 “图元跟随”标志(固定)

67 空间,即模型空间或图纸空间(固定)

68 APP:表示视口打开但不可见、未激活或者关闭。

69 APP:视口标识数字。

70-78 整数值,如重复部分的计数器、标志位或模式等。

90-99 32位整数值

100 子类数据标记(把继承下来的类名当作字符串)。由具体类继承下来的所有对象和图元类都必须有此项。此标记用于分离某个对象中由不同的类定义的数据。它也满足从ARX继承下来的每个独立的具体类的DXF命名需要(请参见子类标

记!AL(`XREF_11832_al_u05_c',1))。

102 控制字符串,其后为“{<任意名称>”或"}"。除了字符串必须以"{"开始外,它与外部数据组码1002类似。其后可跟任意字符串,且此字符串的解释取决于应用程序。另一个可用的控制字符串为"}",它标识组的结束。如上所述,除了在执行图形核查操作期间外AutoCAD一般不解释这些字符串;它们仅用于应用程序。

105 DIMV AR符号表条目对象句柄。

210 拉伸方向(固定)。

DXF:拉伸方向的X值

APP:三维拉伸方向矢量

220,230 DXF:拉伸方向的Y和Z值

280-289 8位整数值

300-309 任意的文字字符串

310-319 任意二进制数据组,与组码1004具有相同表示法和限制:最长为254个字符的十六进制字符串表示最长为127个字节的数据数据组。

320-329 任意对象句柄。句柄值保留原样,在执行INSERT和XREF操作时它们不被转化。

330-339 软键指针句柄。任意指向同一DXF文件或图形中的其他对象的软键指针,在执行INSERT和XREF操作时被转化。

340-349 硬键指针句柄。任意指向同一DXF文件或图形中的其他对象的硬键指针,在执行INSERT和XREF操作时被转化。

350-359 软键从属句柄。链接到同一DXF文件或图形中其他对象的任意软键从属链接,在执行INSERT和XREF操作时被转化。

360-369 硬键从属句柄。链接到同一DXF文件或图形中其他对象的任意硬键从属链接,在执行INSERT和XREF操作时被转化。

999 DXF:999组码表示其后为注释字符串行。DXFOUT不在DXF输出文件中包括此组;DXFIN能识别词组码,但忽略其后的注释。通过999组码,用户可以在所编辑的DXF文件中包括注释。

1000 扩展数据中的ASCII字符串(最长255个字节)。

1001 扩展数据的已注册应用程序名(ASCII字符串,最长31个字节)。

1002 扩展数据控制字符串("{"或"}")。

1003 扩展数据图层名。

1004 扩展数据中的字节数据组(最长127字节)。

1005 扩展数据中的图元句柄。文字字符串,最多16位十六进制数字。

1010 扩展数据中的点

DXF:X值(其后跟组码1020和1030)

APP:三维点

1020,1030 DXF:点的Y和Z值

1011 扩展数据中的三维世界空间位置:X值(其后跟组码1021和1031):三维点1021,1031 DXF:世界空间位置的Y和Z值。

1012 扩展数据中的三维世界空间位移:X值(其后跟组码1022和1032):三维矢量

1022,1032 DXF:世界空间位移的Y和Z值

1013 扩展数据中的三维世界空间方向

DXF:X值(其后跟组码1022和1032)

APP:三维矢量

1023,1033 DXF:世界空间方向的Y和Z值

1040 扩展数据浮点值。

1041 扩展数据距离值。

1042 扩展数据比例因子。

1070 扩展数据16位符号整数。

1071 扩展数据32位符号整数。

对象和图元的组码

在DXF格式中,对象的定义与图元的定义不同:图元有图形表示,而对象则没有图形表示。例如,词典是对象而不是图元。对象通常作为非图形对象来使用,图元则作为图形对象来使用。

在DXF文件中,图元可以出现在BLOCK和ENTITIESE区域中。两个区域中图元的用法一样。某些定义图元的组码始终会出现,而其他的组码仅在它们的值与缺省值不同时才出现。

读取DXF文件的程序不应该假定说明图元的组码是按照给定次序出现的。与说明图元的组码相连的0组码表示此图元已结束。0组码将开始新图元或表示此区域已结束。

注意如果用户以表驱动方式(即忽略未定义的组码,且对图元中的组码次序不做任何假定)编写DXF处理程序,那么该程序将比较容易针对AutoCAD的后续版本做调整。因为AutoCAD的性能将不断得到增强,所以图元中将添加一些新的组码以提供更多的功能。

读取DXF格式文件

OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF格式,我们就能很容易地实现资源共享,而不需要重复建模。

DXF文件的结构很清楚,具体如下:

1.标题段(HEADER)

有关图形的一般信息都可以DXF文件的这一节找到,每一个参数具有一个变量名和一个相关值。

2.表段

这一段包含的指定项的定义,它包括:

a、线形表(LTYPE)

b、层表(L YER)

c、字体表(STYLE)

d、视图表(VIEW)

e、用户坐标系统表(UCS)

f、视窗配置表(VPORT)

g、标注字体表(DIMSTYLE)

h、申请符号表(APPID)

3.块段(BLOCKS)

这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。

4.实体段(ENTITIES)

这一段含有实体,包括任何块的调用。

5.ENDOFFILE(文件结束)

下面是对DXF的基本结构举一实例进行说明:

0 0后接SECTION SECTION表明这是一个段的开始

2 2后接的是段名HEADER说明该段是HEADER段(标题段)

9

$ACADVER文件是由AUTOCAD产生的

1

AC1008

9 9后接$UCSORG $UCSORG用户坐标系原点在世界坐标系中的坐标

10 10对应X 0.0X的值

20 20对应Y 0.0Y的值

30 30对应Z 0.0Z的值

9 $UCSXDIR这是一段不太相关的部分,略去

10

1.0

.......

9 9后接$EXTMIN $EXTMIN说明三维实体模型在世界坐标系中的最小值

10 10对应X -163.925293X的值

20 20对应Y -18.5415860.0Y的值

30 30对应Z 78.350945Z的值

9 9后接$EXTMAN $EXTMAX说明三维实体模型在世界坐标系中的最大值

10 10对应X 202.492279X的值

20 20对应Y 112.634300Y的值

30 30对应Z 169.945602Z的值

0 0后接ENDSEC ENDSEC说明这一段结束了

0 0后接SECTION SECTION表明这是一个段的开始

2 2后接的是段名TABLES说明该段是TABLES段(表段)

............该段对我们不太相关,此处略去不进行说明

0 0后接ENDSEC ENDSEC说明这一段结束了

0 0后接SECTION SECTION表明这是一个段的开始

2 2后接的是段名ENTITIES说明该段是ENTITIES段(实体段)这是我们要详细说明的段,该段包含了所有实体的POL YLINE点的坐标和组成面的点序。

0后接POL YLINE

8 表明以下数据是对于一个新的实体;

OBJECT018后接的字符串是这个实体的名称

66

1

70从66 1到70 64

64说明该实体是由许多小平面组成的

71

38 71 38说明该实体共有38个点

72

72 72 72说明该实体由72个三角形构成

00VERTEX

VERTEX表明后面紧跟着的是实体的数据

8

OBJECT01

10对应X坐标-163.925293X的值

20对应Y坐标-17.772665Y的值

30对应Z坐标128.929947Z的值

70 70 192

192表明上面的数据信息是点的坐标

0每一个从0VERTEX到70 192之间VERTEX的一小段是点的坐标

.........

70

192

VERTEX

8

OBJECT01

10

20

30

0 当70后跟128时,表明该实体的每个点的坐标数据已经记录70完了,下面紧跟着的是记录这些点是以什么样的方式组合成各128个三角形。

71 71、72、73后面跟着的值表明某一个三角形是第二个、第2一个、第四个点构成的,点的顺序是按照记入DXF文件的顺72序。当某一值为负数时,则表明该点到下一点的线不要画出,1如果要画三维实体的线型图,就必须使用这一特性,否则线条73将会出现

紊乱。

-4

VERTEX

............

0 0后接SEQEND表明该实体的数据已经全部记录完了

SEQEND

8

OBJECT01

POL YLINE0后接POL YLINE表明以下又是一个新的实体

............

ENDSEC0后接ENDSEC表明这是该段的结尾

EOF0后接EOF表明这个DXF文件结束了

在DXF文件中,我们最关心的是如何得到模型上各个点的坐标,并且用这些点连成许多个三用形,构成面,进而绘制出整个模型。在DXF文件的结构中,我们已经看到,DXF 文件先叙述实体上各个点的坐标,然后叙述实体上有多少个面,每个面由哪些点构成。这样,我们至少需要2个数组来存储一个实体的信息,一个用于存储点的坐标,一个用于存储点序,我们可以把这2个数组放到一个结构中,如果模型中实体的数目不止一个是,我们就用这个结构来定义一个数组。在本文中,我们使用

VisualC++6.0来写一个读取DXF文件的小程序。

在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象vertex, sequence来存储和管理实体的点坐标和点序。

CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。

三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。通过读取$EXTMAX,$EXTMIN可以获知三维实体在世界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的DXF文件基本结构读出。现在我们开始写这个程序。

先建立一个头文件HEAD.H定义如下的结构:VERTEX,SEQUENCE和类

CVertex,Csequence。

typedefstruct{

floatx,y,z;

}VERTEX;

//结构VERTEX用来存储点的坐标

typedefstruct{

inta,b,c;

}SEQUENCE;

//结构SEQUENCE用来存储实体的面的组成

typedefstruct{

charobName[20];

/*定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArrayVertex;

其中,点的坐标和面的组成是由聚合类CObArray定义的对象来CObArraySequence;在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到这两个对象中保存*/

}myVertex;

classCVertex:publicCObject

{因为CObArray类的对象中只能加入由CObject派生的对象,所以protected:我们还需要建立一个由CObject类派生的CVertex类。在CVertex类CVertex();中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这

DECLARE_DYNCREATE(CVertex)个变量中的。

virtual~CV ertex();

//Attributes

public:我们还需要建立一个由CObject类派生的CVertex类。在CVertex类

CVertex(VERTEX&ver);中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这个变量中的,函数CVertex(VERTEX&ver)把VERTEX结构的变量VERTEXm_vertex;存入CObArray对象中。

};

classCSequence:publicCObject{这也是一个由CObject类派生的类,作用和刚才CVertex 类一样,protected:只不过Csequence类是用来存储实体中面的组成(点序)的。

CSequence();

DECLARE_DYNCREATE(CSequence)

virtual~CSequence();

public:CSequence(SEQUENCE&sequ);

SEQUENCEm_sequence;

};

声明好结构与类后,我们还需要建立一个.CPP文件,来定义几个函数。

IMPLEMENT_DYNCREATE(CVertex,CObject)

CVertex::CVertex()

{

}

CVertex::~CVertex()构造函数和销毁函数都是空的

{

}

CVertex::CVertex(VERTEX&ver)

{这个函数的作用是:把一个VERTEX结构的数据存入变量m_vertex中m_vertex=ver;它是这个类中最重要的一环。

}

IMPLEMENT_DYNCREATE(CSequence,CObject)

CSequence::CSequence()

{

}Csequence类的定义与CVertex类的定义差不多,只是其中的参数m_sequence的类型和CVertex类中的参数my_vertex的类型不一样

CSequence::~CSequence()

{

}

CSequence::CSequence(SEQUENCE&sequ)

{

m_sequence=sequ;

}

然后用结构myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。

定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。

intCJupiterView::getObjectNumber()

{

charstr1[10],str2[10];

charname[]="theFirst";

intnum;

num=0;

FILE*fp;

fp=fopen("data.dxf","r");打开DXF文件,data.dxf

while(!feof(fp)&&!ferror(fp))这个函数是根据实体的名字来判断实体的个数的

{所以函数只读取实体的名字,一旦出现新的实体名字,fscanf(fp,"%s\n",str1);实体数就加一。

if(strcmp(str1,"VERTEX")==0)

{

fscanf(fp,"%s\n",str2);打开DXF文件,data.dxf

fscanf(fp,"%s\n",str2);这个函数是根据实体的名字来判断实体的个数的

if(strcmp(name,str2)!=0)所以函数只读取实体的名字,一旦出现新的实体名字,{实体数就加一。

strcpy(name,str2);

num++;

}

}

}

fclose(fp);

returnnum;

}

以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。

voidCJupiterView::OnFileInput()

{

//TODO:Addyourcommandhandlercodehere

FILE*fp,*fp2;

inti,k,j;

floattempX,tempY,tempZ;

floatxMin,yMin,zMin,xMax,yMax,zMax,Max;

intlab;

charstr1[20],str2[20],str[20],HT;

charmyName[20];

intmyNumber;

VERTEXtempVertex;

SEQUENCEtempSequence;

typedefstruct{

floatx,y,z,max;

}MAX;

MAXmax;

HT=9;

objectNumber=getObjectNumber(); myData=newmyVertex[objectNumber]; fp=fopen(FileName,"r");

i=0;

j=0;

k=0;

myNumber=-1;

strcpy(myName,"ObjectName"); while(!feof(fp)&&!ferror(fp))

{

fscanf(fp,"%s\n",str);

if(strcmp(str,"$EXTMIN")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&xMin);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&yMin);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&zMin);

}

if(strcmp(str,"$EXTMAX")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&xMax);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&yMax);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&zMax);

max.x=max(abs(xMax),abs(xMin)); max.y=max(abs(yMax),abs(yMin)); max.z=max(abs(zMax),abs(zMin)); max.max=max(max.x,max.y);

max.max=max(max.max,max.z);

}

if(strcmp(str,"VERTEX")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%s\n",str1);

if(strcmp(myName,str1)!=0)

{

myNumber++;

strcpy(myName,str1);

strcpy((myData+myNumber)->obName,myName);

}

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempX);

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempY);

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempZ);

fscanf(fp,"%d\n",&lab);

fscanf(fp,"%d\n",&lab);

if(lab==192)

{

tempVertex.x=tempX/max.max;

tempVertex.y=tempY/max.max;

tempVertex.z=tempZ/max.max;

(myData+myNumber)->Vertex.Add(newCVertex(tempVertex));

}

if(lab==128)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempX);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempY);

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempZ);

tempSequence.a=abs(tempX);

tempSequence.b=abs(tempY);

tempSequence.c=abs(tempZ);

(myData+myNumber)->Sequence.Add(newCSequence(tempSequence)); }

}

}

fclose(fp);

}

HEADER区域

本节中描述的组码仅适用于DXF文件。

DXF文件的HEADER区域包括与图形相关联的变量的设置。其中的每一个变量都通过组码9给出变量名,并由其后的组码提供变量值。注意:AutoCAD命令参考中的附录B“系统变量”中的一些变量不出现在DXF文件中。

通过执行函数getvar,应用程序可以检索这些变量的值。

下面是DXF文件的HEADER区域的样例:

0 SECTION

2 HEADER区域的开始

9 $

对每个表头变量重复

0 HEADER区域的结束

================================================================== ====

下表列出了保存在DXF文件中的变量。

================================================================== ====

DXF系统变量变量组码说明

$ACADVER 1

AutoCAD图形数据库版本号:AC1006=R10,AC1009=R11和R12,

AC1012=R13,AC1014=R14,

AC1018=?

$ACADMAINTVER 70 76

$ANGBASE 500 角度的方向

$ANGDIR 70 1=角为顺时针方向,0=逆时针方向

$ATTDIA 70 属性条目对话框:1=开,0=关

$ATTMODE 70 属性可见性:0=无,1=普通,2=全部

$ATTREQ 70 INSERT期间的属性提示:1=开,0=关

$AUNITS 70 角的单位格式

$AUPREC 70 角的单位精度

$BLIPMODE 70 如果非零,则“点标记”模式打开

$CECOLOR 62 当前图元颜色代码:0=BYBLOCK,256=BYLAYER

$CELTSCALE 40 当前图元线型比例

$CELTYPE 6 图元线型名称,也可为BYBLOCK或BYLAYER

$CHAMFERA 40 第一个倒角距离

$CHAMFERB 40 第二个倒角距离

$CHAMFERC 40 倒角长度

$CHAMFERD 40 倒角角度

$CLAYER 8 当前图层名

$CMLJUST 70 当前多线对正模式:0=顶端,1=中间,2=底端

$CMLSCALE 40 当前多线比例

$CMLSTYLE 2 当前多线样式名

$COORDS 70 坐标显示方式:0=静态的,1=持续更新,2="d

$DELOBJ 70 控制是否删除对象:0=删除,1=保留

$DIMALT 70 如果非零,则标注中执行换算单位

$DIMALTD 70 换算单位小数位数

$DIMALTF 40 换算单位比例因子

$DIMALTTD 70 换算单位标注的公差值的十进制小数位数

$DIMALTTZ 70 控制替换公差值的消零:0=清除零英尺并精确到零英寸

1=包括零英尺并精确到零英寸

2=包括零英尺并清除零英寸

3=包括零英寸并清除零英尺$DIMALTU 70 所有标注样式族成员(不包括角度)换算单位的单位格式:

1=科学;2=十进制;3=工程;4=建筑(堆叠);5=分数(堆叠);6=建筑;7=分数

$DIMALTZ 70 控制换算单位标注值的消零:0=清除零英尺并精确到零英寸

1=包括零英尺并精确到零英寸

2=包括零英尺并清除零英寸

3=包括零英寸并清除零英尺$DIMAPOST 1 替换标注后缀

$DIMASO 70 1=创建关联标注,0=绘制独立图元

$DIMASZ 40 标注箭头的尺寸

$DIMAUNIT 70 角度标注的单位格式:0=十进制度数;1=度/分/秒;2=百分度;3=弧度;4=勘测

$DIMBLK 1 箭头块名

$DIMBLK 11 第一箭头块名

$DIMBLK 21 第二箭头块名

$DIMCEN 40 中心标记/中心线的尺寸

$DIMCLRD 70 尺寸线颜色:范围为0=BYBLOCK,256=BYLAYER

$DIMCLRE 70 尺寸界线颜色:范围为0=BYBLOCK,256=BYLAYER

$DIMCLRT 70 标注文字颜色:范围为0=BYBLOCK,256=BYLAYER

$DIMDEC 70 主单位标注公差值的小数位数

$DIMDLE 40 尺寸线范围

$DIMDLI 40 尺寸线增量

$DIMEXE 40 尺寸界线范围

$DIMEXO 40 尺寸界线偏移

$DIMFIT 70 文本和箭头的放置;可能值:0到3

$DIMGAP 40 尺寸线的间距

$DIMJUST 70 水平标注文字位置:0=在尺寸线上方且与尺寸界线间中心对正;

1=在尺寸线上方且与第一尺寸界线相邻;

2=在尺寸线上方且与第二尺寸界线相邻;

3=在第一尺寸界线上方且与之中心对正;

4=在第二尺寸界线上方且与之中心对正;

$DIMLFAC 40 线型测量比例因子

$DIMLIM 70 如果非零,则生成标注图形界限

$DIMPOST 1 基本标注后缀

$DIMRND 40 标注距离的舍入值

$DIMSAH 70 如果非零,则使用单独的箭头块

$DIMSCALE 40 全局标注比例因子

$DIMSD 170 控制是否清除第一尺寸线:0=不清除;1=清除

$DIMSD 270 控制是否清除第二尺寸线:0=不清除;1=清除

$DIMSE 170 如果非零,则清除第一尺寸界线

$DIMSE 270 如果非零,则清除第二尺寸界线

$DIMSHO 70 1=拖动后重新计算标注;0=拖动原图像

$DIMSOXD 70 如果非零,则清除外部尺寸尺寸线

$DIMSTYLE 2 标注样式名称

$DIMTAD 70 如果非零,则文字在尺寸线上方

$DIMTDEC 70 公差值的十进制数位数

$DIMTFAC 40 标注公差显示比例因子

$DIMTIH 70 如果非零,则文字在水平方向内

$DIMTIX 70 如果非零,则强制文字在尺寸线之间

$DIMTM 40 负公差

$DIMTOFL 70 如果非零,则当文字在范围外时,强制直线范围在尺寸界线之间$DIMTOH 70 如果非零,则文字在水平方向之外

$DIMTOL 70 如果非零,则生成标注公差

$DIMTOLJ 70 公差值的垂直对正模式:0=顶端;1=中间;2=底端

$DIMTP 40 正公差

$DIMTSZ 40 标注标记尺寸:0=无标记

$DIMTVP 40 文字垂直位置

$DIMTXSTY 7 标注文字样式

$DIMTXT 40 标注文字高度

$DIMTZIN 70 控制公差值的消零:0=清除零英尺并精确到零英寸

1=包括零英尺并精确到零英寸

2=包括零英尺并清除零英寸

3=包括零英寸并清除零英尺$DIMUNIT 70 所有的标注样式族成员(角度除外)的单位格式:

1=科学;2=十进制;3=工程;

4=建筑(堆叠);5=分数(堆叠);

6=建筑;7=分数

$DIMUPT 70 用户放置文字的光标功能:0=只控制尺寸线位置:1=同时控制尺寸线和文字位置

$DIMZIN 70 控制主单位值的消零:0=清除零英尺并精确到零英寸

1=包括零英尺并精确到零英寸

2=包括零英尺并清除零英寸

3=包括零英寸并清除零英尺$DISPSILH 70 控制线框图模式中体对象轮廓曲线的显示:0=关;1=开

$DRAGMODE 70 0=关;1=开;2=自动

$DWGCODEPAGE 3图形代码页;

当新图形创建时,设置为系统代码页,但AutoCAD不作另外的

维护。

$ELEVATION 40 命令ELEV设置的当前标高

$EXTMIN 10,20,30图形的X、Y和Z延伸到左下角(在WCS中)

$EXTMAX 10,20,30图形的X、Y和Z延伸到右上角(在WCS中)

$FILLETRAD 40 圆角半径

$FILLMODE 70 如果非零,则“填充”模式打开

$HANDLING 70 下一个可用句柄

$HANDSEED 5 下一个可用句柄

$INSBASE 10,20,30命令BASE设置的插入基点(在WCS中)

$LIMCHECK 70当检查图形界限时非零

$LIMMAX 10,20XY图形界限延伸至右上角(在WCS中)

$LIMMIN 10,20XY图形界限延伸至左下角(在WCS中)

$LTSCALE 40全局线型比例

$LUNITS 70坐标和距离的单位格式

$LUPREC 70坐标和距离的单位精度

$MAXACTVP 70设置要生成的视口数目的最大值

$MEASUREMENT 70设置图形单位:0=英制;1=公制

$MENU 1菜单文件名

$MIRRTEXT 70如果非零,则镜像文字

$ORTHOMODE 70如果非零,则打开“正交”模式

$OSMODE 70运行对象捕捉模式

$PDMODE 70点显示模式

$PDSIZE 40点显示尺寸

$PELEV ATION 40当前图纸空间标高

$PEXTMAX 10,20,30图纸空间的X、Y和Z延伸的最大值$PEXTMIN 10,20,30图纸空间的X、Y和Z延伸的最小值$PICKSTYLE 70控制编组选择集和关联填充选择集:0=无编组选择集和关联填充选择集;

1=有编组选择集;

2=有关联填充选择集;

3=有编组选择集和关联填充选择集

$PINSBASE 10,20,30图纸空间插入基点

$PLIMCHECK 70如果非零,则在图纸空间中检查图形界限$PLIMMAX 10,20图纸空间中最大的X和Y图形界限

$PLIMMIN 10,20图纸空间中最小的X和Y图形界限

$PLINEGEN 70管理二维多段线顶点周围的线型图案的生成:0=在多段线周围以连续图案生成线型;

1=每段多段线都以虚线开始和结束

$PLINEWID 40缺省的多段线宽度

$PROXYGRAPHICS 70控制代理对象图像的保存

$PSLTSCALE 70控制图纸空间线型比例:

0=无指定的线型比例;

1=由视口比例控制线型比例

$PUCSNAME 2当前图纸空间的UCS名

$PUCSORG 10,20,30当前图纸空间的UCS原点

$PUCSXDIR 10,20,30当前图纸空间的UCSX轴

$PUCSYDIR 10,20,30当前图纸空间的UCSY轴

$QTEXTMODE 70如果非零,则打开快速文字模式

$REGENMODE 70如果非零,则打开REGENAUTO模式$SHADEDGE 700=面着色,边不突出显示;

1=面着色,边以黑色突出显示;

2=面不填充,边为图元颜色;

3=面为图元颜色,边为黑色

$SHADEDIF 70 环境/漫射光百分数,取值范围为1-100,缺省值为70 $SKETCHINC 40 徒手画记录增量

$SKPOL Y 70 0=徒手画线条;1=徒手画多段线

$SPLFRAME 70 样条曲线控制多边形显示:1=开;0=关$SPLINESEGS 70 每个样条曲线片的线段数

$SPLINETYPE 70 PEDIT样条曲线的曲线类型

$SURFTAB 170 在第一方向上的网格列表数目

$SURFTAB 270 在第二方向上的网格列表数目

$SURFTYPE 70 PEDIT平滑着色的表面类型

$SURFU 70 在M方向上的(PEDIT平滑着色的)表面密度$SURFV 70 在N方向上的(PEDIT平滑着色的)表面密度$TDCREATE 40 图形创建的日期/时间

$TDINDWG 40 图形的累计编辑时间

$TDUPDATE 40 图形最近一次更新的日期/时间

$TDUSRTIMER 40 用户流逝计时器

$TEXTSIZE 40 缺省文本高度

$TEXTSTYLE 7 当前文字样式名

$THICKNESS 40 命令ELEV设置的当前厚度

$TILEMODE 70 1与早期版本兼容;0不兼容

$TRACEWID 40 缺省宽线宽度

$TREEDEPTH 70 指定空间索引的最大深度

$UCSNAME 2 当前UCS名

$UCSORG 10,20,30当前UCS原点(在WCS中)

$UCSXDIR 10,20,30当前UCSX轴的方向(在WCS中)

$UCSYDIR 10,20,30当前UCSY轴的方向(在WCS中)

$UNITMODE 70低位设置=显示分数、英尺和英寸,以及输入格式中的检测角

$USERI 1-570供第三方开发者使用的五个整型变量

$USERR 1-540供第三方开发者使用的五个实型变量

$USRTIMER 700=计时器关;1=计时器开

$VISRETAIN 700=不保留外部参照依赖可见性设置;

1=保留外部参照依赖可见性设置;

$WORLDVIEW 701=在DVIEW/VPOINT期间设置UCS为WCS;

0=不修改UCS

下列表头变量出现在R11前的AutoCAD中,但现在对每个活动的视口都有单独的设置。当DXFIN从DXF文件中读取这些变量时,能识别它们。但如果带有*ACTIVE条目的VPORT 符号表存在(任何由R11或更高版本的AutoCAD生成的DXF文件中都存在),VPORT符号表条目中的值将替代这些表头变量。

修正的VPORT表头变量

变量组码说明

$FASTZOOM 70如果非零,则启用快速缩放

$GRIDMODE 70如果非零,则打开“栅格”模式

$GRIDUNIT 10,20栅格的X和Y间距

$SNAPANG 50捕捉栅格旋转角

$SNAPBASE 10,20捕捉/栅格基点(在UCS中)

$SNAPISOPAIR 70等轴测平面:0=左边,1=上端,2=右边

$SNAPMODE 70如果非零,则打开“捕捉”模式

$SNAPSTYLE 70捕捉样式:0=标准;1=等轴测

$SNAPUNIT 10,20捕捉栅格的X和Y间距

$VIEWCTR 10,20屏幕上当前视图的XY中心

$VIEWDIR 10,20,30视图方向(来自WCS中目标的方向)

$VIEWSIZE 40视图高度

日期/时间变量($TDCREATE和$TDUPDATE)以如下实数格式输出:

.

流逝计时器变量($TDINDWG和$TDUSRTIMER)具有相似的格式:

.

TABLES区域

本节描述的组码既出现在DXF文件中又被应用程序使用。TABLES区域中包括多个表,每个表中条目数目可变。AutoLISP和ARX应用程序在图元定义表中也使用这些组码。

如不作特殊说明,本节中所出现的组码都可以应用于DXF文件、AutoLISP应用程序和ARX应用程序。当组码说明对于应用程序和DXF文件有所不同时(或只适用于其中之一),在组码的说明前会有如下提示符:

APP用于应用程序的说明

DXF用于DXF文件的说明

如果组码说明对DXF文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。

DXF文件中的符号表

表的次序可以改变,但LTYPE表一般放在LAYER之前。每个表都由带有标签TABLE 的组码0引入。其后是标识具体表(APPID、DIMSTYLE、LAYER、LTYPE、STYLE、UCS、VIEW、VPORT或BLOCK_RECORD)的组码2、组码5(句柄)、组码100(AcDbSymbolTable 子类标记)和组码70(此组码用于指定其后表的最大条目数)。表名以大写字符形式输出。DIMSTYLE句柄使用组码105而不是组码5。

图形中的表可以包含已删除的条目,但这些条目不写入DXF文件,因此表头后的表条目数可能少于组码70所指定的数目。所以不要用组码70中的数字作为读取表的索引。读取DXF文件的程序会根据组码70中的数字分配一个足够大的数组来存储其后所有的表条目。

在每个表的表头后跟随着表条目。每个表条目包括指定条目类型的组码0(与表名称相同,如LTYPE或LAYER)、给出表条目名称的组码2、指定与表条目相关的标志的组码70和其他给出表条目值的组码组成。每个表条目的结尾都由带有组值ENDTAB的组码0标记。

下面是一个DXF文件中的TABLES区域的样例:

0 SECTION

2 TABLES 区域的开始

0 TABLE

2

5

70 相同的表组码,

对每一个条目重复

0

5

.

..表条目数据,对每一个表记录重复

0 表结束

0 TABLES区域的结束

符号表记录和符号表都是数据库对象。至少,在AutoCAD的所有主要用法中,这意味着符号表记录对象和符号表对象的组码2后都存在一个句柄。

DIMSTYLE表是系统中唯一使用句柄组码105的记录类型(以前它也使用组码5)。除非在DIMSTYLE表区域中,程序员一般不必留心此例外情况,因为只有在DIMSTYLE表区域中才会发生此例外情况。

符号表组码

下表列出了适用于所有符号表的组码:

适用于所有符号表的组码组码说明

-1 APP:图元名(每次打开图形时改变)

0 对象类型(TABLE)

DXF文件实际上是ASCII编码文件讲解

DXF文件实际上是ASCII编码文件,可以用记事本打开。 DXF 文件本质上由代码及关联值对组成。代码(通常称为组码)表明其后的值的类型。使用这些组码和值对,可以将DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在DXF 文件中,每个组码和值都各占一行。 DXF 文件由多个段组成,每段都以一个0和后跟字符串SECTION 的组码开始,其后是组码2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个0和后跟字符串ENDSEC 的组码结束。 完整的结构如下: HEADER 段。包含图形的基本信息。它由AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。 CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的BLOCKS、ENTITIES 和OBJECTS 段中。类定义在类的层次结构中是固定不变的。 TABLES 段。包含以下符号表的定义: APPID(应用程序标识表) BLOCK_RECORD(块参照表) DIMSTYLE(标注样式表) LAYER(图层表) LTYPE(线型表) STYLE(文字样式表) UCS(用户坐标系表) VIEW(视图表) VPORT(视口配置表) BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。 ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。一般屏幕上显示的图形对像如直线,圆,弧等都在ENTITIES 段 OBJECTS 段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。 THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选 你所问的是立体(3DSOLID),它的编码比较复杂,建议你先把平面图元的DXF格式搞明白,再研究三维图

如何读取DXF格式文件

如何读取DXF格式文件? -------------------------------------------------------------------------------- OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF格式,我们就能很容易地实现资源共享,而不需要重复建模。 DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。 2. 表段 这一段包含的指定项的定义,它包括: a、 线形表(LTYPE) b、 层表(LYER) c、 字体表(STYLE) d、 视图表(VIEW) e、 用户坐标系统表(UCS) f、 视窗配置表(VPORT)

g、 标注字体表(DIMSTYLE) h、 申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。 4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。 5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的 1 AC1008 9 9 后接$UCSORG $UCSORG 用户坐标系原点在世界坐标系中的坐标 10 10 对应X 0.0 X 的值

DXF数据文件格式及接口

每个CAD系统都有自己的数据文件,数据文件分图形数据文件、几何模型文件和产品模型文件几种。数据文件的格式与每个CAD系统自己的内部数据模式密切相关,而每个CAD系统自己内部的数据模式一般是不公开的,也是各不相同的。由于用户使用的需要,就有数据交换文件概念的出现。 DXF为AutoCAD系统的图形数据文件,DXF虽然不是标准,但由于AutoCAD系统的普遍应用,使得DXF成为事实上的数据交换标准。DXF是具有专门格式的ASCII 码文本文件,它易于被其它程序处理,主要用于实现高级语言编写的程序与AutoCAD系统的连接,或其它CAD系统与AutoCAD系统交换图形文件。 1 、DXF文件结构 一个完整的DXF文件是由四个段和一个文件结尾组成的。其顺序如下: (1)标题段,记录AutoCAD系统的所有标题变量的当前值或当前状态。这些标题变量记录了AutoCAD系统的当前工作环境。例如,AutoCAD版本号、插入基点、绘图界限、SNAP捕捉的当前状态、珊格间距、式样、当前图层名、当前线型和当前颜色等; (2)表段,包含了四个表,每个表又包含可变数目的表项。按照这些表在文件中出现的顺序,它们依次为线型表、图层表、字样表和视图表; (3)块段,记录定义每一块时的块名、当前图层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH命令生成的剖面线和用DIM命令完成的尺寸标注; (4)元素段,记录了每个几何元素的名称、所在图层的名称、线型名、颜色号、基面高度、厚度以及有关几何数据; (5)文件结束,标识文件结束。 DXF文件每个段由若干个组构成,每个组在DXF文件中占有两行。组的第一行为组代码,它是一个非零的正整数,相当于数据类型代码,每个组代码的含义是由AutoCAD系统约定好的,以FORTRAN “I3”格式(即向右对齐并且用三字符字段填满空格的输出格式)输出。组的第二行为组值,相当于数据的值,采用的格式取决于组代码指定的组的类型。组代码和组值合起来表示一个数据的含义和它的值。组代码范围见下表。需要注意的是,在AutoCAD系统中组代码既用于指出如下表所示的组值的类型,又用来指出组的一般应用。组代码的具体含义取决于实际变量、表项或元素描述,但“固定”的组代码总具有相同的含义,如组代码“8”总表示图层名。 组代码范围跟随值的类型 0-9 串 10-59 浮点 60-79 整数 210-239 浮点 999 注释 1000-1009 串 1010-1059 浮点 1060-1079 整数 表6.3 组代码范围 一个DXF文件的框架如下:

DXF格式文件解析

dxf文件是AutoCad的交换文件,可以直接用AutoCad打开。dxf文件是明码文件,在vb环境下按顺序文件读取就可以了。 例如:在C盘根目录下有一个文件“1.dxf” 启动vb后,建立一个按钮:Command1 并双击此按钮,对其输入以下代码: Private Sub Command1_Click() Dim a As String '读取文件一行的内容 Dim i As Long '用于记录行数 Dim j As Long '用于记录用户如何响应提示 Open "c:\1.dxf" For Input As #1 i = 0 While Not EOF(1) Line Input #1, a i = i + 1 j = MsgBox("第 " & i & " 行内容为:" & a, vb OKCancel + vbInformation) '运行到此步时,如果用户输入“确定”则继续,如果用户输入“取消”则结束本程序 '用户可以在此输入处理代码,对读入的字串进行处理 If j = vbCancel Then End End If W end close #1 End Sub 读取DXF格式文件 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF 格式,我们就能很容易地实现资源共享,而不需要重复建模。

在AutoCAD中正确应用DXF图形文件格式

在AutoCAD中正确应用DXF图形文件格式 一、DXF文件格式分析 DXF文件由标题段、表段、块段、实体段和文件结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在文件中出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。 ☆块段(BLOCK)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH 命令生成的剖面线和用DIM命令所完成的尺寸标准。 ☆实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。☆文件结束段(EOF OF FILE)DXF文件的结束标志。 一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,它由CAD图形系统所规定,而组值为具体的数值,二者结合起来表示一个数据的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。 (1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决定。例如: 代码0~9组值类型为字符型。 代码10~59组值类型为实型。 代码60~79组值类型为整型。 代码999表示解释行。 (2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。另外,一些代码是备用的,目前版本尚未用到,现将他们的含义举例介绍如下。 0:表示一个事物的开始,如一个块、表、图层、实体等。 1:字符型数据的值,如TEXT的字符串、文件名、属性值等。 2:一个事物的名字,如段、表、块、线型、视图等的名字。 3~5:字符型数据的值,如文件名、线型说明等。 6:线型名(固定类型)。 8:图层名(固定类型)。 关于实体的坐标与相应的组代码10~18、20~28、30~38的用法应根据实体所用到点的数量,按组代码个位的0、1、2、……的顺序使用。例如LINE的起点组代码为10、20、30,而11、21、31为其终点。其他类似。 DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体段,就可以完成相应几何图形的描述。在层表中说明每一层的颜色、线型,在块段中说明块所在的层、属性及其在图形中的位置,在实体段中说明直线的起点、终点及圆的圆心、半径等几何信息和各实体所在的层。根据实体所在的层,在层表中搜索每一层的颜色、线型并将其添加到实体对象中。在利用CAD进行绘图时,需将变量参数DIMASO设为ON,以保证块段中定义的尺寸块为一个整体,并可被正确无误地获取。根据尺寸类型名、尺寸定义的起点、终点坐标与实体类型名、实体空间坐标是否匹配,对实体对象进行尺寸附加。在绘图时,如对自定义的粗糙度、形位公差等块不进行“EXPLODE”炸开操作,也可通过增加相应读取函数提取其属性。 下面举例说明实体段在DXF文件中的格式。 圆弧(ARC)

dxf文件格式

dxf格式解析 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF 格式,我们就能很容易地实现资源共享,而不需要重复建模。 DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。 2. 表段 这一段包含的指定项的定义,它包括: a、 线形表(LTYPE) b、 层表(LYER) c、 字体表(STYLE) d、 视图表(VIEW) e、 用户坐标系统表(UCS) f、 视窗配置表(VPORT) g、 标注字体表(DIMSTYLE) h、 申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。 4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。 5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的 1

DXF文件分析

DXF文件分析 一、DXF文件数据总览 DXF是AutoCAD的一种绘图交换文件,可以与其他软件进行数据较换的一种文件格式。 DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好的特点,但占有空间较大;二进制格式则占有空间小、读取速度快。 DXF文件是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。 DXF文件被组织成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着是组码“2”和表示段名的字符串(如HEADER)。段的中间,可以使用组码和值定义段中的元素。段的结尾使用组码“0”和字符串“ENDSEC”来定义。 二、DXF文件数据格式分析 图1.1为DXF文件数据格式的总体框图 图2.1DXF数据格式框图 由图1.1可知,DXF的数据格式有HEADER(标题段)、CLASSES(类段)、TABLES (表段)、BLOCKS(块段)、ENTITIES(实体段)、OBJECTS(对象段)、EOF(结束)。出了这七个段之外还有一个THUMBNAILIMAGE段。

类/子类,组码,组值的格式如下: 类/子类 组码 组值 比如: AcDbCircle ARC的子类 10 组码,起点的X坐标 2860.382264303673 组值X的坐标为2860.382264303673 组码比起类/子类以及组值有一个空格的缩进。 2.1 HEADER(标题段) DXF 文件的HEADER 段包含与图形关联的变量的设置。它由AutoCAD 数据库版本号和一些系统变量组成。每个变量由给出变量名称的组码9 指定,其后是提供变量值的组。下面给出了HEADER段的一般格式。 0 HEADER 段的开始 SECTION 2 HEADER 9 变量名称标识符(仅在DXF 文件的HEADER 段中使用) 为每个标题变量重复一次 $<变量> <组码> <值> 0 HEADER 段的结束 ENDSEC 2.2 CLASSES(类段) CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的BLOCKS、ENTITIES 和OBJECTS 段中。类定义在类的层次结构中是固定不变的。

解析DXF图形文件格式

解析DXF图形文件格式 一、DXF文件格式分析 DXF文件由标题段、表段、块段、实体段和文件结束段5部分组成,其内容如下。 ☆标题段(HEADER)标题段记录AutoCAD系统的所有标题变量的当前值或当前状态。标题变量记录了AutoCAD系统的当前工作环境,如SNAP捕捉当前状态、栅格间距式样、当前图层 层名及线型、颜色等。 ☆表段(TABLES)表段共包含4个表,每个表又包含可变数目的表项。这些表在文件中出现的顺序是线型表(LTYPE)、图层表(LAYER)、字样表(STYLE)、视图表(VIEW)。 ☆块段(BLOCK)块段记录了所用块的块名,当前图层层名、块的种类、块的插入基点及组成该块的所有成员。块的种类分为图形块、带有属性的块和无名块三种。无名块包括用HATCH

命令生成的剖面线和用DIM命令所完成的尺寸标准。 ☆实体段(ENTITIES)实体段记录了每个实体的名称、所在图层及其名字、线型、颜色等。 ☆文件结束段(EOF OF FILE)DXF文件的结束标志。 一个DXF文件由若干个组构成,每个组占两行,第一行为组的代码,第二行为组值。组代码相当于数据类型的代码,它由CAD图形系统所规定,而组值为具体的数值,二者结合起来表示一个数据的含义和值。例如,代码10代表一个点的X坐标,占一行,而其第二行4.5425则是点X坐标的具体数值,二者结合表示一点,其X坐标值为4.5425。 (1)组代码和组值的类型组代码为一个非负的不超过三位的整数,而组值由组代码的类型决 定。例如: 代码0~9组值类型为字符型。 代码10~59组值类型为实型。 代码60~79组值类型为整型。 代码999表示解释行。 (2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。另外,一些代码是备用的,目前版本尚未用到, 现将他们的含义举例介绍如下。 0:表示一个事物的开始,如一个块、表、图层、实体等。 1:字符型数据的值,如TEXT的字符串、文件名、属性值等。 2:一个事物的名字,如段、表、块、线型、视图等的名字。 3~5:字符型数据的值,如文件名、线型说明等。 6:线型名(固定类型)。 8:图层名(固定类型)。 关于实体的坐标与相应的组代码10~18、20~28、30~38的用法应根据实体所用到点的数量,按组代码个位的0、1、2、……的顺序使用。例如LINE的起点组代码为10、20、30, 而11、21、31为其终点。其他类似。 DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体

DXF文件读取

DXF文件读取 作者:不忍之刃 He_zhiyuan EMAIL:cb2688he2688@https://www.sodocs.net/doc/c95521810.html, 2010-10-14 近来因为要做个项目,涉及到要做个DXF文件的读取。网上搜索DXF文件的文件结构,还搜索到一篇讲读取DXF文件的文章,相信来搜索读取DXF方面的人,一定会搜索到这篇文章的。但这篇文章里面附的源代码是有问题的。我用AUTOCAD可以导出3种版本的DXF 文件。我先用AUTOCAD画个简单的长方体, 然后用记事本打开导出来的三种版本的文件,发现很不一样,跟那篇文章里面描述的也不一样,用那篇文章里面源代码的方法是没办法读取的。然后我又用3DMAX导出DXF文件,才有正常的实体的“顶点”系列,实体的面系列,“面”里面记录的面上各个顶点在顶点系列中的位置。但我用3DMAX导出来的DXF文件里面,面是有4个顶点组成的四边形,而不是三角面片,所以这也跟那篇文章讲的不一样。 鉴于这么多,我自己写了个类来实现DXF文件的读取。且使用了OPENGL来做显示模型。列出如下: //CLoadDXF.h #include struct VERTEX { float x,y,z; }; //结构VERTEX用来存储点的坐标 struct SEQUENCE { int a,b,c,d; }; //结构SEQUENCE用来存储实体的面的组成,记录的是4个顶点在顶点序列《vertexArray》中的位置 struct ENTITY { int V ertexNumber;//实体顶点在顶点序列中开始开始的位置 int SequenceNumber;//实体在面系列中开始的位置 }; class CLoadDXF { public: void ShowDXF(float x,float y,float z,float size,float R,float G,float B); void OnFileInput(char* filename); CLoadDXF(); virtual ~CLoadDXF(); private: void norm(GLfloat v1[], GLfloat v2[], GLfloat v3[], GLfloat *nor);

C# 读取DXF文件

using System; using System.Collections.Generic; using https://www.sodocs.net/doc/c95521810.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; namespace DXF { public partial class Form1 : Form { 精选范本

private FileStream fs; private StreamReader sr; private ArrayList LayerList = new ArrayList(); private ArrayList LineList = new ArrayList(); private ArrayList ArcList=new ArrayList(); private ArrayList EllipseList = new ArrayList(); private ArrayList LwopolylineList = new ArrayList(); private ArrayList SplineList=new ArrayList(); private string[] str = new string[2]; private int count; private double leftx; private double lefty; private double rightx; 精选范本

用C语言程序读取CAD的dxf文件里的实体语言

wold line-dxf(FILE *fp,char layer[2],float x1,floal y1, float x2,float y2) fprintf(fp,"0\nLINE\n 8\n%s\n",1ayer); fprintf(fp,"10\n%f\n 20\n%f\n",x1,y1); fprintf(fp,"l1\n%f\n 2l\n%f\n",x2,y2); } #include ; #include < stdio.h>; #include "acad -dxf.c" main() {float r1,r2,11,12,13 x[100],y[37].Z[37]; float beta.beta1,fq,dz,w; int i; float xl,x1,y1,z1,x2,z2,x3,z3 ,x4 ,z4,xs,zs,Xe, ze; FILE*fp 摘要:本文简要介绍了一下DXF文件的组成。重点讲述了怎样使用C语言来读取DXF文件中的实体信息。 关键字:C、DXF

Abstract: The paper present the basic parts of DXF file. And focus on how to use C read the entity’s information from DXF file. Key Words: C, DXF DXF是Drawing eXchange File的缩写,意思为图形交换文件,在工程制图中有广泛的应用,掌握了DXF文件的读写对编写CAD软件时的图形信息的交换有重要意义。它有两种格式:一种是ASCII DXF 格式;一种是二进制DXF格式。ASCII DXF文件格式是ASCII 文字格式的AutoCAD图形的完整表示,这种文件格式易于被其它程序处理。二进制格式的DXF文件与ASCII格式的DXF文件包含的信息相同,但格式上二进制格式比ASCII格式更精简,能够节省百分之二十五的文件空间。AutoCAD能够更快地对其执行读写操作(通常能快五倍)。这可能是对ASCII格式的DXF文件操作时有ASCII与二进制形式的转换,因而花费时间较多。本文主要讨论ASCII格式的DXF 文件,因为它可读性强。 一、ASCII格式的DXF文件的组成

DXF文件格式分析

DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一个相关值。 2. 表段 这一段包含的指定项的定义,它包括: a、线形表(LTYPE) b、层表(LYER) c、字体表(STYLE) d、视图表(VIEW) e、用户坐标系统表(UCS) f、视窗配置表(VPORT) g、标注字体表(DIMSTYLE) h、申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。 4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。 5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的 1 AC1008 9 9 后接$UCSORG $UCSORG 用户坐标系原点在世界坐标系中的坐标 10 10 对应X 0.0 X 的值 20 20 对应Y 0.0 Y 的值 30 0 对应Z 0.0 Z 的值 9 $UCSXDIR 这是一段不太相关的部分,略去 10 1.0 ... .... 9 9 后接$EXTMIN $EXTMIN 说明三维实体模型在世界坐标系中的最小值

10 10 对应X -163.925293 X 的值 20 20 对应Y -18.5415860.0 Y 的值 30 30 对应Z 78.350945 Z 的值 9 9 后接$EXTMAN $EXTMAX 说明三维实体模型在世界坐标系中的最大值 10 10 对应X 202.492279 X 的值 20 20 对应Y 112.634300 Y 的值 30 30 对应Z 169.945602 Z 的值 0 0 后接ENDSEC ENDSEC 说明这一段结束了 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 TABLES 说明该段是TABLES 段(表段) ... ... ... ... 该段对我们不太相关,此处略去不进行说明0 0 后接ENDSEC ENDSEC 说明这一段结束了 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2后接的是段名 ENTITIES 说明该段是ENTITIES 段(实体段)这是我 0 们要详细说明的段,该段包含了所有实体的 POLYLINE 点的坐标和组成面的点序。0后接POLYLINE 8 表明以下数据是对于一个新的实体; OBJECT01 8后接的字符串是这个实体的名称 66 1 70 从66 1 到70 64 64 说明该实体是由许多小平面组成的 71 38 71 38说明该实体共有38 个点 72 72 72 72 说明该实体由72 个三角形构成 0 0 VERTEX VERTEX 表明后面紧跟着的是实体的数据 8 OBJECT01 10 对应X 坐标

DXF文档详解

DXF文档详解 DXF的基本惯例 DXF格式是特定版本AutoCAD图形文件中所包含的全部信息的标记数据的一种表示方法。 标记数据的意思是指在每个数据元素前都带一个称为组码的整数。组码的值表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意。实际上,图形文件中所有用户指定的信息都能够以DXF文件格式表示。在AutoLISP和ARX应用程序中使用的DXF格式与上述格式基本相同,只是在某些数据组上存在着细微的差别。 如不作特殊说明,本节中所出现的组码都可以应用于DXF文件、AutoLISP应用程序和ARX应用程序。当组码说明对于应用程序和DXF文件有所不同时(或只适用于其中之一),在组码的说明前有如下提示符: APP只用于应用程序的说明 DXF只用于DXF文件的说明 如果组码说明对DXF文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。 组码范围 组码将与组码关联的值(组值)定义为整型、浮点数型或字符串型。具体说明如下表: 组码范围组码范围组值类型 0-9 字符串(最多255个字符,对于UNICODE字符串则更少) 10-59 双精度三维点 60-79 16位整数值 90-99 32位整数值 100 字符串(最多255个字符,对于UNICODE字符串则更少) 102 字符串(最多255个字符,对于UNICODE字符串则更少) 105 表示十六进制句柄值的字符串 140-147 双精度标量浮点值 170-175 16位整数值 280-289 8位整数值 300-309 任意文字字符串 310-319 表示二进制数据组的十六进制值的字符串 320-329 表示十六进制句柄值的字符串 330-369 表示十六进制对象标识符的字符串 999 注释(字符串) 1000-1009 字符串(最多255个字符;对于UNICODE字符串则更少) 1010-1059 浮点值 1060-1070 16位整数值 1071 32位整数值 按数字次序排列的组码 下表给出了组码(或组码范围)及其说明。在表中,“固定”表示该组码的用途固定不变,非固定组码的用途将随上下文变化。 按数字次序排列的图元组码 组码说明 -5APP:persistentreactor链表 -4APP:条件运算符(仅用于ssget) -3APP:扩展数据(XDA TA)标记(固定) -2APP:图元名引用(固定) -1APP:图元名。每次打开图形时它都改变,且不被保存。(固定) 0 表示图元类型的文字字符串(固定) 1 图元的主要文字值 2 名称(属性标记、块名称等) 3-4 其他的文字值或名称值

用VC++读取DXF文件格式的源代码和相关资料

我刚找到的:大家先看看做好了 告诉我一声 我也正准备做这个!! 我们使用 Visual C++ 6.0 来写一个读取DXF文件的小程序。 在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为 了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象 vertex, sequence来存储和管理实体的点坐标和点序。 CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或 结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们 对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。 三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变 量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用 户坐标系原点的三维坐标。通过读取$EXTMAX,$EXTMIN可以获知三维实体在世 界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算 确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的 DXF文件基本结构读出。现在我们开始写这个程序。 先建立一个头文件HEAD.H定义如下的结构:VERTEX, SEQUENCE和类CVertex, Csequence。 typedef struct { float x,y,z; }VERTEX; 结构VERTEX用来存储点的坐标 typedef struct { int a,b,c; }SEQUENCE; 结构SEQUENCE用来存储实体的面的组成

typedef struct { char obName[20]; 定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArray Vertex; 其中,点的坐标和面的组成是由聚合类CObArray定义的对象来 CObArray Sequence; 在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到}myVertex; 这两个对象中保存 class CVertex : public CObject { 因为CObArray类的对象中只能加入由CObject派生的对象,所以 protected: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类 CVertex(); 中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这 DECLARE_DYNCREATE(CVertex) 个变量中的。 virtual ~CVertex(); // Attributes public: 我们还需要建立一个由CObject类派生的CVertex类。在CVertex类 CVertex(VERTEX& ver); 中有一个VERTEX结构的变量:m_vertex,信息实际 上是存储在这个变量中的,函数CVertex(VERTEX& ver)把VERTEX结构的变量VERTEX m_vertex; 存入CObArray对象中。

dxf格式说明

建议你看DXF底格式介绍 读取DXF格式文件 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高性能的三维图形功能。OpenGL本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用AutoCAD 和3DS及3Dmax等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,避免重复劳动呢?利用CAD图形标准数据交换格式—DXF格式,我们就能很容易地实现资源共享,而不需要重复建模。 DXF文件的结构很清楚,具体如下: 1. 标题段(HEADER ) 有关图形的一般信息都可以DXF 文件的这一节找到,每一个参数具有一个变量名和一

个相关值。 2. 表段 这一段包含的指定项的定义,它包括:a、 线形表(LTYPE) b、 层表(LYER) c、 字体表(STYLE) d、 视图表(VIEW) e、 用户坐标系统表(UCS) f、 视窗配置表(VPORT) g、 标注字体表(DIMSTYLE) h、 申请符号表(APPID) 3. 块段(BLOCKS) 这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。

4. 实体段(ENTITIES ) 这一段含有实体,包括任何块的调用。5. END OF FILE(文件结束) 下面是对DXF的基本结构举一实例进行说明: 0 0 后接SECTION SECTION 表明这是一个段的开始 2 2 后接的是段名 HEADER 说明该段是HEADER 段(标题段) 9 $ACADVER 文件是由AUTOCAD 产生的1 AC1008 9 9 后接$UCSORG $UCSORG 用户坐标系原点在世界坐标系中的坐标 10 10 对应X 0.0 X 的值 20 20 对应Y 0.0 Y 的值

相关主题