解析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:扩展数据(XDATA)标记(固定)

-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        DIMVAR符号表条目对象句柄。

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、层表(LYER)

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段(实体段)这是我们要详细说明的段,该段包含了所有实体的POLYLINE点的坐标和组成面的点序。

0后接POLYLINE    

 

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

0

VERTEX

8

OBJECT01

10

0

20

0

30

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

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

-4

0

VERTEX

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

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

SEQEND

8

OBJECT01

0

POLYLINE0后接POLYLINE表明以下又是一个新的实体

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

0

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

0

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~CVertex();

 

//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);

}

 

区域

 

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

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

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

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

0    SECTION

2    HEADER区域的开始

9    $<variable>

<groupcode>

<value>    对每个表头变量重复

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<a"格式

$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点显示尺寸

$PELEVATION        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    徒手画记录增量

$SKPOLY        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)以如下实数格式输出:

<Juliandate>.<Fraction>

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

<numberofdays>.<Fraction>

区域

   

本节描述的组码既出现在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    <tabletype>

5    <handle>

70    <max.entries>相同的表组码,

对每一个条目重复

 

0    <tabletype>

5    <handle>

.

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

 

0    表结束

0    TABLES区域的结束

 

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

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

 

符号表组码

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

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

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

0    对象类型(TABLE)

2    表名称

5    句柄

100    子类标记(AcDbSymbolTable)

70    表中的最大条目数。

 

符号表条目的公用组码

下表显示了适用于所有符号表的组码,可选的组码以灰色显示。当用户通过图元类型引用组码表时,应注意表中不仅包括与特定图元关联的组码,也会包括下表列出的组码。

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

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

0    图元类型(表名称)

5    句柄(除DIMSTYLE外的所有表)

105    句柄(只用于DIMSTYLE表)

102    应用程序定义的组码的开始"{application_name"。

例如,"{ACAD_REACTORS"    //表示AutoCADPersistentreactors组的开始

//application-defined codes组102中的组码和组值由

//应用程序定义

//102组结束

"}"

100子类标记(AcDbSymbolTableRecord)

 

下表列出了当Persistentreactors被附着到对象上时输出的组码:

 

ACAD_REACTORS记录    组码说明

102        "{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始

330        指向所有者词典的软键指针标识符/句柄

102        组结束"}"

 

下表列出了当扩展词典被附着到对象上时输出的组码:

 

ACAD_XDICTIONARY记录        组码说明

102        "{ACAD_XDICTIONARY"表示扩展词典组码的开始

360        指向所有者词典的硬键指针标识符/句柄

102        组结束"}"

 

公用组码70标志-位编码值的说明如下表。其他适用于LAYER、STYLE和VIEW表条目的组码70值则在另外的相关表中说明。

适用于所有表条目的组码70的位编码值

位编码值说明

16如果设置该位,表示表条目依赖于外部参照

32如果此位和位16都被设置,则表示所依赖的外部参照已被成功融入。

64如果设置该位,表示在上一次图形编辑时图形中至少有一个图元引用了该表条目。(此标志一般用于AutoCAD命令。大部分读取DXF

文件的程序将其忽略,对于写DXF文件的程序也无须设置它。)

 

APPID

下列组码适用于APPID符号表条目:

APPID组码    组码说明

100            子类标记(AcDbRegAppTableRecord)

2            用户提供的应用程序名(用于扩展数据)。此表条目维护所有已注册的应用程序名。

70            标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。):

1=如果设置,在执行SAVEASR12时不写入APPID所关联的外部数据。

            注意因为在R13和R14的AutoCAD中ASE数据格式相同,

所以ASE应用程序名(ACADASER13)也相同。

   

BLOCK_RECORD

下列组码适用于BLOCK_RECORD符号表条目。

BLOCK_RECORD组码    组码说明

100                        子类标记(AcDbBlockTableRecord)

2                        块名称

 

DIMSTYLE

下列组码适用于DIMSTYLE符号表条目。关于DIMSTYLE符号表条目的详细信息,请参见AutoCAD命令参考中的附录B"系统变量"。

DIMSTYLE组码

组码说明

100子类标记(AcDbDimStyleTableRecord)

2标注样式名

70标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)

3DIMPOST

4DIMAPOST

5DIMBLK

6DIMBLK1

7DIMBLK2

40DIMSCALE

41DIMASZ

42DIMEXO

43DIMDLI

44DIMEXE

45DIMRND

46DIMDLE

47DIMTP

48DIMTM

140DIMTXT

141DIMCEN

142DIMTSZ

143DIMALTF

144DIMLFAC

145DIMTVP

146DIMTFAC

147DIMGAP

71DIMTOL

72DIMLIM

73DIMTIH

74DIMTOH

75DIMSE1

76DIMSE2

77DIMTAD

78DIMZIN

170DIMALT

171DIMALTD

172DIMTOFL

173DIMSAH

174DIMTIX

175DIMSOXD

176DIMDLRD

177DIMCLRE

178DIMCLRT

270DIMUNIT

271DIMDEC

272DIMTDEC

273DIMALTU

274DIMALTTD

340被引用的STYLE对象的句柄(用于代替储存DIMTXSTY值)

275DIMAUNIT

280DIMJUST

281DIMSD1

282DIMSD2

283DIMTOLJ

284DIMTZIN

285DIMALTZ

286DIMALTTZ

287DIMFIT

288DIMUPT

 

LAYER

下列组码适用于LAYER符号表条目。

LAYER组码    组码说明

100        子类标记(AcDbSymbolTableRecord)

2        图层名

70        标准标志。(清参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)

除标准标志外,以下(位编码)值也适用于图层:

1=冻结图层,否则图层解冻;

2=在新视口中缺省设置为冻结图层;

4=锁定图层;

62        颜色数(如果为负则图层被关闭)

6        线型名

 

在执行DXFOUT时输出依赖于外部参照的图层。对于这些图层,DXF文件中的相关线型名始终为CONTINUOUS。

   

LTYPE

下列组码适用于LTYPE符号表条目。

LTYPE组码    组码说明

100            子类标记(AcDbLinetypeTableRecord)

2            线型名称。

70            标准标志(位编码值)。(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)

3            线型的描述文字。

72            对齐方式码;始终为65(A的ASCII码)。

73            线型元素数目。

40            图案总长度。

49            虚线、点或空间的长度(每个元素一个条目)。

74            复杂线型元素类型(每个元素一个条目):0=简单的;2=内嵌文字字符串;4=内嵌形;

75            复杂形的组码(如果组码74>0,每个元素一个条目)如果组码74=2,则值为1。

340            STYLE对象指针(如果组码74>0,每个元素一个条目)。

46            S=比例值(可选),可存在多个这样的条目。

50            R=旋转值(可选),可存在多个这样的条目。

44            X=x偏移值(可选),可存在多个这样的条目。

45            Y=y偏移值(可选),可存在多个这样的条目。

9            文字字符串(如果组码74=2,每个元素一个条目)。

 

执行函数tblsearch或tblnext时,并不返回组码74、75、340、46、50、44、45和9的值,因此用户需要使用函数tblobjname来获取这些组码的值。

   

   

   

STYLE

下列组码适用于STYLE符号表条目。

STYLE组码        组码说明

100                子类标记(AcDbTextStyleTableRecord)

2                样式名称

70                标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。):

1=如果设置,此条目描述一个形;4=垂直文本;

40                固定文字高度;如果高度不固定则值为0。

41                宽度因子

50                倾斜角

71                文字生成标志:2=文字反向(X轴方向镜像)4=文字倒置(Y轴方向镜像)

42                最后使用的高度

3                主字体文件名

4                大字体文件名;如果没有则为空

 

STYLE表条目也可用于记录命令LOAD所需要的形文件。此时组码70的第一位(1)被设置且只有组码3(形文件名)有意义(但仍输出所有其他组码)。

   

   

   

UCS

下列组码适用于UCS符号表条目。

UCS组码

组码说明

100子类标记(AcDbUCSTableRecord)

2UCS名称

70标准标志值

10原点(用WCS表示)。DXF:X值;APP:三维点

20,30DXF:原点坐标的Y和Z值(用WCS表示)

11X轴方向(用WCS表示)。DXF:X值;APP:三维矢量

21,31DXF:X轴方向的Y和Z值(用WCS表示)

12Y轴方向(用WCS表示)。DXF:Y值;APP:三维矢量

22,32DXF:Y轴方向的Y和Z值(用WCS表示)

 

VIEW

下列组码适用于VIEW符号表条目。

VIEW组码

组码说明

100子类标记(AcDbViewTableRecord)

2视图名

70标准标志值(位编码值)

1=如果设置,则为图纸空间视图。

40视图高度(用DCS表示)

10视图中点(用DCS表示)。DXF:X值;APP:二维点

20DXF:视图中点的Y值(用DCS表示)

41视图宽度(用DCS表示)

11以目标为起点的视图方向(用WCS表示):X值;APP:三维矢量

21,31DXF:以目标为起点的视图方向的Y和Z值(用WCS表示)

12目标点(用WCS表示)。DXF:X值;APP:三维点

22,32DXF:目标点坐标的Y和Z值(用WCS表示)

42镜头长度

43前剪裁平面(与目标点的偏移)

44后剪裁平面(与目标点的偏移)

50扭曲角

71视图模式(请参见VIEWMODE系统变量)

   

   

VPORT

下列组码适用于VPORT符号表条目。

VPORT组码

组码说明

100子类标记(AcDbViewportTableRecord)

2视口名

70标准标记值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)

10视口左下角点。:X值;APP:二维点

20DXF:视口左下角点坐标的Y值

11视口右上角点。:X值;APP:二维点

21DXF:视口右上角点坐标的Y值

12视图中点(用DCS表示)。DXF:X值;APP:二维点

22DXF:视图中点坐标的Y值(用DCS表示)

13捕捉基点。DXF:X值;APP:二维点

23DXF:捕捉基点坐标的Y值

14捕捉间距的X和Y值。DXF:X值;APP:二维点

24DXF:捕捉间距X和Y值中的Y值。

15栅格间距的X和Y值。DXF:X值;APP:二维点

25DXF:栅格间距X和Y值中的Y值

16以目标点为起点的视图方向(用WCS表示):X值;APP:三维点

26,36DXF:以目标点为起点的视图方向的Y和Z值(用WCS表示)

17视图目标点(用WCS表示)。DXF:X值;APP:三维点

27,37DXF:视图目标点坐标的Y和Z值(用WCS表示)

40视图高度

41视口宽高比

42镜头长度

43前剪裁平面(与目标点的偏移)

44后剪裁平面(与目标点的偏移)

50捕捉旋转角

51视图扭曲角

68APP:状态字段(不保存在DXF中)

69APP:ID(不保存在DXF中)

71视图模式(请参见VIEWMODE系统变量)

72圆缩放百分比

73快速缩放设置

74UCSICON设置

75捕捉状态:开/关

76栅格状态:开/关

77捕捉样式

78捕捉ISOPAIR

 

VPORT表和其他表不同的是,它可以包含多个同名条目(表示一个多视口配置)。所有对应于活动视口配置的条目都具有*ACTIVE名称,其中第一个描述了当前视口。

区域

 

本节描述的组码只出现在DXF文件中。

CLASSES区域存储了应用程序定义的类的信息,这些类的实例将会出现在数据库的BLOCKS、ENTITIES和OBJECTS

区域中。假定类定义在类的层次结构中是固定不变的。区域中的所有字段都是必需的。

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

0    SECTION

2    CLASSES区域的开始

 

0

1

<classdxfrecord>

2

<classname>

3

<appname>

90

<flag>

<flag>

<flag>对每个条目重复

 

 

 

 

0CLASSES区域的结束

 

下表列出了CLASSES区域中每个条目所包含的组码:

   

   

CLASSES区域组码

组码说明

0DXF记录类名。此名称必须唯一。指明BLOCKS、ENTITIES和OBJECTS区域的开始,如果两个对象类型声明了同名的DXF

类名,AutoCAD会给它们加上不同的数字后缀,以使图形中的DXF类名唯一。

1C++类名。用于绑定定义对象类行为的软件,此名称唯一。值得注意的是,同一个C++类在不同的图形中的DXF名可能稍有不同。

2应用程序名。如果当前未加载本区域中列出的类定义,则此名称将显示在"警告"框中。

90类版本号。设置为最后一次存储该类实例时所加载类的版本号。

280"是代理"标志。如果此DXF文件创建时没有加载类,设置为1;否则设置为0。

281"是图元"标志。如果此类是从AcDbEntity类继承下来的且其实例可出现在BLOCKS或ENTITIES区域中,它设置为

1;如果为0,则其实例只能出现在OBJECTS区域中。

区域

 

本节描述的组码既出现在DXF文件中又被应用程序使用。对图形中每个块引用,在块区域中都有一个条目与之对应。

如不作特殊说明,本节中所出现的组码都可以同时应用于DXF文件、AutoLISP应用程序和ARX应用程序。当应用程序中的组码描述与DXF

文件中的组码描述不同(或只适用于其中之一)时,则在说明前有如下提示:

APP应用程序特定说明

   

DXF文件特定说明

如果组码描述对DXF文件和应用程序都适用,那么没有提示;否则将存在适当的提示。可选的组码以灰色显示。

   

DXF文件中的块

DXF文件中的BLOCKS区域包括所有的块定义,其中包含组成(图形中使用的)块(包括命令HATCH和关联标注生成的无名块)的图元。BLOCKS

区域中的图元格式与ENTITIES区域中的一样,且此区域中的所有图元都出现在BLOCK和ENDBLK图元之间。BLOCK和ENDBLK

图元只出现在BLOCKS区域中。虽然块定义可以包含插入图元,但块定义不允许被嵌套(即BLOCK和ENDBLK图元之间不允许出现另一对BLOCK和

ENDBLK图元)。

通常外部参照将作为块定义写入DXF文件中,除非文件中已经包含了指定该外部参照的路径和文件名的字符串(组码1)。

在每个块定义中,紧接着BLOCK记录出现的是块句柄和其他外部数据及persistentreactors,此句柄包含了该BLOCK

记录所储存的特定信息。因此每个块定义有如下记录次序:

下面是一个DXF文件中的BLOCKS区域的例子:

0

2BLOCKS区域的开始

 

0

5

<handle>

8

<layer>

2

<blockname>

70

<flag>

10

<Xvalue>

20

<Yvalue>

30

<Zvalue>

3

<blockname>

1

<xrefpath>开始每个块条目

(一个块图元定义)

 

0

<entitytype>

..<data>.块中每个图元定义均对应一个条目

 

0

5

<handle>

每个块条目的结束

(ENDBLK图元定义)

0BLOCKS区域的结束

 

BLOCK

下列组码适用于块图元。

Block组码

组码说明

0图元类型(BLOCK)

5句柄

102应用程序定义的组的开始"{application_name",

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始application-definedcodes组102中的组码和组值由应用程序定义102组结束"}"

100子类标记(AcDbEntity)

8图层名

100子类标记(AcDbBlockBegin)

2块名称

70"块类型"标志(位编码值,可被组合):

1=这是一个由图案填充、关联标注、其他内部操作或应用程序生成的无名块;

2=此块具有属性定义;

4=此块是一个外部参照(xref);

8=此块是一个外部参照覆盖;

16=此块依赖于外部参照;

32=是一个融入的外部参照或依赖于外部参照(输入时忽略之);

64=此定义被外部参照引用(输入时忽略之);

10基点。DXF:X值;APP:三维点

20,30DXF:基点坐标的Y和Z值

3块名称

1外部参照路径名(可选,只有在块是一个外部参照时存在)

 

创建块定义后,原先有效的UCS变为适合于块定义中所有图元的WCS。将移动这些图元的新原点以匹配块定义的基点,也将平移所有图元数据以适合新的WCS。

*MODEL_SPACE和*PAPER_SPACE块定义

现在,在BLOCKS区域中始终有两个额外的空定义,它们的标题分别为*MODEL_SPACE和*PAPER_SPACE。这样实际上是将模型空间和图纸空间视为内部块定义。考虑到兼容性,这些定义包含的图元也会出现在ENTITIES区域中。

模型空间和图纸空间图元分离

由于改进了内部组织机构,模型空间和图纸空间之间的交错将不再发生,而是先输出图纸空间图元,再输出模型空间图元。区分这些图元的标志为组码67。

   

ENDBLK

下列组码适用于ENDBLK对象

Endblk组码

组码说明

0图元类型(ENDBLK)

5句柄

102应用程序定义的组的开始"{application_name"。

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始

application-definedcodes组102中的组码和组值由应用程序定义

102组结束,"}"

100子类标记(AcDbBlockEnd)

区域

 

此节中的组码适用于非图形对象。这些出现在DXF文件的OBJECTS区域中的组码被图元定义表中的AutoLISP和ARX应用程序使用。

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

文件中的组码描述不同(或只适用于其中之一)时,则在说明前有如下提示:

APP应用程序特定说明

DXFDXF文件特定说明

如果DXF文件中的组码描述与应用程序中的相同,那么没有提示,否则将存在适当的提示。可选的组码以灰色显示。

除了没有图形的或几何的意义外,对象与图元基本类似。所有那些非图元的,符号表记录的或符号表的对象都存储在此区域中。此区域通过所有关系描绘了一个具有对象的拓扑次序的同类堆,根据此关系,所有者始终出现在它们的所有对象的前面。

   

对象所有关系

出现在OBJECTS

区域中的大多数对象的根所有者被称为对象词典,所以始终只有第一对象出现在此区域中。不被对象词典所有的对象归其他图元、对象或符号表条目所有。此区域中的对象可以被

AutoCAD或被有权使用ARXAPI的应用对象定义。应用程序定义对象类型的DXF名称始终与一个DXF文件的CLASS

区域中的类名称联合在一起,否则对象记录不能被加进将要解释它的应用程序中。

当使用其他词典时,命名对象词典记录由条目名称对和参照关联对象的硬键所有关系指针独立组成。

为避免对象间的名称冲突,开发者应始终使用已注册的这些图元的开发前缀。

   

DXF文件中的对象组码

下面是DXF文件的对象区域的例子:

0

2OBJECTS区域的开始

0

5

<handle>

命名对象词典的开始(根词典对象)

3

<dictionaryname>

 

<handleofchild>为每个条目重复

0

<objecttype>

.

.<data>

.对象数据组

 

 

 

0OBJECTS区域的结束

 

 

公用对象组码

下表显示的组码适用于所有实际的非图形图元(对象)。当用户通过图元类型引用组码表时,应注意表中不仅列出与特定图元关联的组码,也会列出下表所显示的组码。只当图元具有特性的非缺省值时,一些公用对象组码才被包括到图元中。当组码被忽略时,它的缺省值将出现在输入文件(当使用

DXFIN时)的第三列上,如果组码值等于缺省值,在输出(使用DXFOUT)时它将被忽略。

公用对象组码

组码说明

0对象类型

5句柄

102应用程序定义组码的开始"{application_name"。例如,"{ACAD_REACTORS"表示AutoCAD

Persistentreactors组的开始

application-definedcodes应用程序定义的组102中的组码和组值

102组的结束,"}"

 

如果persistentreactors已被附着到对象上,则下表显示的组码将被输出。

   

ACAD_REACTORS记录

组码说明

102"{ACAD_REACTORS"表示AutoCADPpersistentreactors组的开始

330所有着词典的软键指针标识符/句柄

102组的结束,"}"

 

如果扩展词典已被附着到对象上,则下表显示的组码将被输出。

   

ACAD_XDICTIONARY记录

组码说明

102"{ACAD_XDICTIONARY"表示扩展词典组的开始

360所有着词典的硬键指针标识符/句柄

102组的结束,"}"

 

   

ACAD_PROXY_OBJECT

下列组码适用于ACAD_PROXY_OBJECT对象。

Acad_proxy_object组码

组码说明

100DXF:子类标记(AcDbProxyObject)

90DXF:代理对象类ID(始终为499)

91DXF:应用程序对象类ID。类ID由CLASSES区域中的类的次序决定。第一个类的ID为500,下一个为501,依此类推。

93DXF:以位表示的对象数据的大小

310DXF:二进制对象数据(可在多个条目中出现)

330or340or350or360DXF:对象ID(可在多个条目中出现)

94DXF:0(表示对象ID区域的结束)

 

字段92不用于AcDbProxyObject。此类的对象没有图形。

   

DICTIONARY

下列组码由词典对象使用。

词典组码

组码说明

100子类标记(AcDbDictionary)

3条目名称(适用于每个条目)

350条目对象的句柄(适用于每个条目)

 

在词典中AutoCAD将诸如多线样式和组定义之类的条目作为对象来维护。下节描述在词典中被维护的AutoCAD

对象组码。但如果合适,其他应用程序可自由地创建和使用它们自己的词典。注意:在AutoCAD应用程序使用时,应保留前缀"ACAD_"。

   

   

DICTIONARYVAR

下列组码由DICTIONARYVAR对象使用。

DICTIONARYVAR组码

组码说明

0对象名称(DICTIONARYVAR)

5句柄

102persistentreactors组的开始;始终为"{ACAD_REACTORS"

330所有者词典的软键指针标识符/句柄(ACDBVARIABLEDICTIONARY)。

102persistentreactors组的结束;始终为"}"

100子类标记(词典变量)

280对象概要数(通常设置为0)

1变量值

 

在不需要向DXFHEADER区域中添加条目时,DICTIONARYVAR对象被AutoCAD用来作为在数据库中存储命名值的方法以达到

setvar/getvar的目的。通常作为DICTIONARYVAR

对象存储的系统变量有:DIMADEC、DIMDSEP、INDEXCTL、PROJECTNAME和XCLIPFRAME。

   

   

GROUP

下列组码由GROUP对象使用。

GROUP组码

组码说明

0对象名称(GROUP)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"(persistentreactors

组出现在除主词典之外的所有词典中)

330所有者词典的软键指针标识符/句柄。对于GROUP对象,此码始终是命名对象词典的ACAD_GROUP条目。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbGroup)

300(对象)组说明

70"未命名"标志:1=未命名的;0=命名的;

71可选择性标志:1=可选择的;0=不可选择;

340(对象)组中图元的句柄(适用于每个对象的条目)

 

   

   

IDBUFFER

下列组码由IDBUFFER对象使用。

IDBUFFER组码

组码说明

0对象名称(IDBUFFER)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针标识符/句柄。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbIdBuffer)

330参照图元的软键指针(可以存在多条目)。

 

IDBUFFER对象是对象参照的表的使用使用工具对象。

   

   

IMAGEDEF

下列组码有IMAGEDEF对象使用。

IMAGEDEF组码

组码说明

0对象名称(IMAGEDEF)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330ACAD_IMAGE_DICT词典的软键指针的标识符/句柄。

330IMAGEDEF_REACTOR对象的软键指针的标识符/句柄(多条目;适合于每个实例的条目)。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbRasterImageDef)

90类版本。0=R14版本

1图像的文件名称

10以像素点表示的图像大小。DXF:U值;APP:二维点(U和V值)

20DXF:以像素点表示的图像大小的V值

11AutoCAD中一个像素的缺省大小。:U值;APP:二维点(U和V值)。

12DXF:像素大小的V值。

280"图像被加载"标志:0=为加载的;1=加载的;

281分辨率单位:0=无单位;2=厘米;5=英寸;

 

   

   

   

IMAGEDEF_REACTOR

下列组码由IMAGEDEF_REACTOR对象使用。

IMAGEDEF_REACTOR组码

组码说明

0对象名称(IMAGEDEF_REACTOR)

5句柄

100子类标记(AcDbRasterImageDefReactor)

90类版本号。2=R14版本

330适于关联图像对象的对象ID。

 

   

   

LAYER_INDEX

   

下列组码由LAYER_INDEX对象使用。

LAYER_INDEX组码

组码说明

0对象名称(LAYER_INDEX)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针的标识符/句柄。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbIndex)

40时间标志(Julian日期)

100子类标记(AcDbLayerIndex)

8图层名称(可以存在多条目)。

360IDBUFFER的硬键从属参照(可以存在多条目)

90在IDBUFFER中的条目数(可以存在多条目)

 

MLINESTYLE

下列组码由MLINESTYLE对象使用。

MLINESTYLE组码

组码说明

0对象名称(MLINESTYLE)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"(persistentreactors

组出现在除主词典以外的所有词典中)

330所有者词典的软键指针的标识符/句柄。对于MLINESTYLE对象,此组码始终为命名对象词典中的ACAD_MLINESTYLE条目。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbMlineStyle)

2多线样式名称

70标志(位编码):

1=打开填充;

2=显示斜接;

16=开始矩形结束(直线)封口;

32=开始内弧封口;

64=开始圆(外弧)封口;

256=结束矩形(直线)封口;

512=结束内弧封口;

1024=结束圆(外弧)封口;

3样式说明(字符串,最大值为255字符)

62填充颜色(整型,缺省值=256)。可以存在多条目,适于每个元素的一个条目。

51起始角度(实型,缺省值为90度)

52结束角度(实型,缺省值为90度)

71元素的数目

49元素偏移(实型,无缺省值)。可以存在多条目,且为适于每个元素的一个条目。

62元素颜色(整型,缺省值=0)。可以存在多条目,且为适于每个元素的一个条目。

6元素线型(字符串,缺省值=BYLAYER)。可以存在多条目,且为适于每个元素的一个条目。

 

多线图元和多线样式对象中的组码2是多余的字段。虽然可以安全的读取这些组码及其关联值,但这些组码在任何情况下都不能被修改。这些字段修改如下:

多线

在相同对象中的组码340用于指定严格意义上的MLINESTYLE对象。

多线样式

MLINESTYLE词典中的组码3位于具有当前MLINESTYLE的图元名或句柄的组码350之前。

   

   

   

OBJECT_PTR

下列组码由OBJECT_PTR对象使用。

OBJECT_PTR组码

组码说明

0对象名称(OBJECT_PTR)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针的标识符/句柄。

102persistentreactors组的结束,始终为"}"。

1001开始ASE外部数据(ACADASER13)

 

   

RASTERVARIABLES

下列组码由RASTERVARIABLES对象使用。

RASTERVARIABLES组码

组码说明

0对象名称(RASTERVARIABLES)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针标识符/句柄。对于RASTERVARIABLES对象,此组码始终为命名对象词典中的ACAD_IMAGE_VARS

条目。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbRasterVariables)

90类版本。0=R14

70"显示图像边框"标志:0=无边框;1=显示边框;

71图像显示质量(只用于屏幕):0=草图;1=高分辨率;

72插入图像的AutoCAD单位。此AutoCAD单位适用于关联到分辨率的插入和缩放图像操作:

0=无;1=毫米;2=厘米;3=米;4=公里;

5=英寸;6=英尺;7=码;8=英里;

 

   

SPATIAL_INDEX

下列组码由SPATIAL_INDEX使用。

SPATIAL_INDEX组码

组码说明

0对象名称(SPATIAL_INDEX)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针标识符/句柄。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbIndex)

40时间标志(Julian日期)

100子类标记(AcDbSpatialIndex)

 

在写入DXF文件时,SPATIAL_INDEX始终为空,所以此对象可被忽略。

   

   

SPATIAL_FILTER

下列组码由SPATIAL_FILTER对象使用。

SPATIAL_FILTER组码

组码说明

0对象名称(SPATIAL_FILTER)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针标识符/句柄(SPATIAL)。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbFilter)

100子类标记(AcDbSpatialFilter)

70剪裁边界上的点数。2=矩形剪裁边界(左下角和右上角)

大于2=多线剪裁边界

10剪裁边界定义点(在OCS中)(始终为2个或更多),由1的外部参照比例决定。DXF:X值;APP:二维点;

20DXF:剪裁边界定义点的Y值(始终为2个或更多)。

210包含剪裁边界的平面的法向:DXF:X值;APP:三维矢量。

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

11用于定义剪裁边界的局部坐标系统的原点。:X值;APP:三维点;

21,31DXF:用于定义剪裁边界的局部坐标系统的原点的Y和Z值。

71启用剪裁边界显示标志:0=禁用的;1=启用的;

72前剪裁平面标志:0=无;1=有;

40前剪裁平面距离(如果组码72=1)

73后剪裁平面标志:0=无;1=有;

41后剪裁平面距离(如果组码73=1)

40以主列次序写出的4x3变换矩阵。此矩阵是初始块引用(插入图元)变换的转置。当块引用重生成时,初始块引用变换适用于块中的所有图元(始终为12

个条目)。

40以主列次序写出的4x3变换矩阵将点转换成剪裁边界的坐标系统(始终为12个条目)。

 

   

SORTENTSTABLE

下列组码由SORTENTSTABLE对象使用。

SORTENTSTABLE组码

组码说明

0对象名称(SORTENTSTABLE)

5句柄

102persistentreactors组的开始,始终为"{ACAD_REACTORS"。

330所有者词典的软键指针标识符/句柄(ACAD_SORTENTS)。

102persistentreactors组的结束,始终为"}"。

100子类标记(AcDbSortentsTable)

330所有者的软键指针标识符/句柄(通常只是*MODEL_SPACE或*PAPER_SPACE块)

331图元的软键指针标识符/句柄(可以存在零个或更多的条目)。

5排序句柄(可以存在零个或更多的条目)。

 

如果设置SORTENTS重生成标志(位编码值16),AutoCAD将以上升句柄次序重生成图元。当使用命令DRAWORDER时,一个

SORTENTSTABLE对象将以ACAD_SORTENTS的名称被附着到*MODEL_SPACE或*PAPER_SPACE

块的扩展词典中。此词典涉及的SORTENTSTABLE对象通过各自的图元关联一个不同的句柄,这个句柄重新定义了图元的重生成次序。

   

   

   

XRECORD

下列组码是所有外部记录公用的组码。

外部记录组码

组码说明

100子类标记(AcDbXrecord)

1-369(except5and105)这些值可以被应用程序以任何方式使用。

 

外部记录可以用来存储和处理任意的数据。它们由具有"普通对象"组(即"非外部数据"组码)的DXF组码组成,支持范围从1到

369。此对象的概念与外部数据的有些相似,但没有大小或次序的限制。

原则上从版本R13c0到R13c3的AutoCAD都能使用为外部数据设计的工作方式,但如果从R13c4版本前的AutoCAD

文件中读取外部记录对象,此对象会消失。

区域

此节介绍的组码适用于图形对象。这些组码既出现在DXF文件的ENTITIES区域中,又在图元定义表中被AutoLISP和ARX

应用程序使用。

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

文件中的组码描述不同(或只适用于其中之一)时,则在说明前有如下提示:

APP用于应用程序的说明

DXF用于DXF文件的说明

如果组码描述对DXF文件和应用程序都适用,那么没有提示,否则将存在适当的提示。可选的组码以灰色显示。

图形对象的公用组码

下表列出的组码适用于所有图形对象。其中某些组码只有在其对应属性不是缺省值的图元中出现。当用户通过图元类型引用组码表时,应注意表中不仅包括与特定图元相关的组码,还会包括下表所列的组码。

如果忽略了某组码,在(使用DXFIN)输入DXF文件时将使用(出现在第三列的)它的缺省值;如果某组码的值为缺省值,则在(使用

DXFOUT)输出时将忽略它。

适用于所有图形对象的组码

组码说明如果被忽略,

则缺省值为...

-1APP:图元名(在每次打开图形时改变)不能忽略

0图元类型不能忽略

5句柄不能忽略

102应用程序定义的组的开始"{application_name"。

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始无缺省值

application-definedcodes组102中的组码和组值由应用程序定义无缺省值

102组结束,"}"无缺省值

100子类标记(AcDbEntity)不被忽略

67不赋值或值为0时表示图元在模型空间;

1表示图元在图纸空间(可选)0

8图层名不能忽略

6线型名(如果不为BYLAYER则存在)

如果为BYBLOCK表示某不定线型

(可选)BYLAYER

62颜色代码(如果不为BYLAYER则存在)

表示BYBLOCK(不定)颜色;

表示BYLAYER;

如果为负表示图层被关闭(可选);BYLAYER

48线型比例(可选)1.0

60对象可见性(可选):

0=可见;1=不可见。0

 

如果Persistentreactors被附着到对象上,将输出下表所列的组码。

ACAD_REACTORS记录

组码说明

102"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始

330指向所有者词典的软键指针标识符/句柄

102组结束,"}"

 

如果扩展词典被附着到对象上,将输出下表所列的组码。

ACAD_XDICTIONARY记录

组码说明

102"{ACAD_XDICTIONARY"表示扩展词典组码的开始

360指向所有者词典的硬键指针标识符/句柄

102组码的结束,"}"

 

注意尽管组码通常按照这些DXF组码表所列的顺序出现,但请不要使编写的程序依赖于这种顺序,因为在某些条件下或在后续版本的AutoCAD

中,可能会改变这种顺序。可以利用分支或表机制来处理控制图元的组码,这样即使组码次序不定,也能正确地处理每组组码。

3DFACE

下列组码适用于三维面图元。

三维面组码

组码说明

100子类标记(AcDbFace)

10第一角点(用WCS表示)。DXF:X值;APP:三维点

20,30DXF:第一角点坐标的Y和Z值(用WCS表示)

11第二角点(用WCS表示)。DXF:X值;APP:三维点

21,31DXF:第二角点坐标的Y和Z值(用WCS表示)

12第三角点(用WCS表示)。DXF:X值;APP:三维点

22,32DXF:第三角点坐标的Y和Z值(用WCS表示)

13第四角点(用WCS表示)。如果只输入三个角点值,则第四角点与第三角点相同。:X值;APP:三维点

23,33DXF:第四角点坐标的Y和Z值(用WCS表示)

70不可见边标志(可选,缺省=0):

1=第一边不可见;

2=第二边不可见;

4=第三边不可见;

8=第四边不可见;

 

3DSOLID

下列组码适用于三维实体图元。

三维实体组码

组码说明

100子类标记(AcDbModelerGeometry)

70建模格式版本号(当前值=1)

1私有数据(可有多行,每行少于255个字符)

3私有数据的附加行(如果前面组码1的字符串有多于255个字符)

 

ACAD_PROXY_ENTITY

下面的组码适用于代理图元。

Acad_proxy_entity组码

组码说明

100DXF:AcDbProxyEntity

90DXF:代理图元类ID

91DXF:应用程序图元类ID。类ID由CLASSES区域中类的次序决定。第一个类的ID为500,第二个类的ID为

501,依此类推。

92DXF:字节图形数据的大小

310DXF:二进制图形数据(可出现多个条目)

93DXF:位图元数据的大小

310DXF:二进制图元数据(可出现多个条目)

330or340or350or360DXF:一个对象ID(可出现多个条目)

94DXF:0(表示对象ID类结束)

 

ARC

下列组码适用于圆弧图元。

圆弧组码

组码说明

100子类标记(AcDbCircle)

39厚度(可选,缺省值=0)

10圆心(用OCS表示)。DXF:X值;APP:三维点

20,30DXF:圆心坐标的Y和Z值(用OCS表示)

40半径

100子类标记(AcDbArc)

50起始角

51终止角

210延伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

 

ATTDEF

下列组码适用于属性定义图元。

属性定义组码

组码说明

100子类标记(AcDbText)

39厚度(可选,缺省值=0)

10第一对齐点(用OCS表示)。:X值;APP:三维点

20,30DXF:文本开始点坐标的Y和Z值(用OCS表示)

40文字高度

1缺省值(字符串)

100子类标记(AcDbAttributeDefinition)

50文字旋转(可选,缺省值=0)

41关于X的比例因子(宽度)(可选,缺省值=1)

当文本使用"布满"类型时,将会调整此值

51倾斜角(可选,缺省值=0)

7文字样式名(可选,缺省值=STANDARD)

71文字生成标志(可选,缺省值=0)请参见TEXT

72水平文字对正类型(可选,缺省值=0)请参见TEXT

11第二对齐点(用OCS表示):X值;APP:三维点

只在组码72或74的值非零时才有意义

21,31DXF:第二对齐点坐标的Y和Z值(用OCS表示)

210延伸方向(可选,缺省值=0,0,1):X值;APP:三维矢量

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

100子类标记(AcDbAttributeDefinition)

3提示字符串

2标签字符串

70属性标志:

1=属性不可见(不出现);

2=这是一个常数属性;

4=在输出此属性时需要验证;

8=属性预置(插入时无提示);

73字段长度(可选,缺省值=0)(当前未使用)

74垂直文字对正类型(可选,缺省值=0)请参见TEXT中的组码73

 

如果组码72和(或)74的值非零,则将忽略第一对齐点的值,AutoCAD

根据第二对齐点和文字字符串的长度和高度(在使用了文本样式之后)计算新值;如果没有组码72和74的值或其值为零,则第二对齐点无意义。

ATTRIB

下列组码适用于属性图元。

属性组码

组码说明

100子类标记(AcDbText)

39厚度(可选,缺省值=0)

10文字起点(用OCS表示)。DXF:X值;APP:三维点

20,30DXF:文本起点坐标的Y和Z值(用OCS表示)

40文字高度

1缺省值(字符串)

100子类标记(AcDbAttribute)

2属性标记(字符串)

70属性标志:

1=属性不可见(不出现);

2=这是一个常数属性;

4=在输出此属性时需要验证;

8=属性预置(插入时无提示);

73字段长度(可选,缺省值=0)(当前未使用)

50文字旋转(可选,缺省值=0)

41关于X比例因子(宽度)(可选,缺省值=1)

当文字使用"布满"类型时,将会调整此值

51倾斜角(可选,缺省值=0)

7文字样式名(可选,缺省值=STANDARD)

71文字生成标志(可选,缺省值=0)请参见TEXT

72水平文字对正类型(可选,缺省值=0)请参见TEXT.

74垂直文字对正类型(可选,缺省值=0)请参见TEXT中的组码73

11对齐点(用OCS表示)DXF:X值;APP:三维点

只在组码72或74存在且非零时存在

21,31DXF:对齐点坐标的Y和Z值(用OCS表示)

210拉伸方向。只在图元的延伸方向不平行于WCS的Z轴时存在(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

 

如果组码72和(或)74的值非零,将忽略文本插入点的值,AutoCAD

根据文本对齐点和文字字符串长度(在应用了文本样式之后)计算新值;如果没有组码72和74的值或其值为零,则忽略文字对齐点,AutoCAD

根据文字插入点和文字字符串的长度(在申请了文本样式之后)重新计算新值。

BODY

下列组码适用于体图元。

体组码

组码说明

100子类标记(AcDbModelerGeometry)

70建模格式版本号(当前值=1)

1私有数据(可有多行,每行少于255个字符)

3私有数据的附加行(如果前面组码1的字符串多于255个字符)

 

CIRCLE

下列组码适用于圆图元。

圆组码

组码说明

100子类标记(AcDbCircle)

39厚度(可选,缺省值=0)

10圆心(用OCS表示)。DXF:X值;APP:三维点

20,30DXF:圆心坐标的Y和Z值(用OCS表示)

40半径

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

 

DIMENSION

标注图元定义数据包括适用于所有标注类型的组码,以及该类标注所特有的组码。

公用标注组码

下列组码适用于所有标注类型。

公用标注组码

组码说明

100子类标记(AcDbDimension)

2包含组成标注的图元的块名称

10标注点(用WCS表示)。DXF:X值;APP:三维点。

20,30DXF:标注点坐标的Y和Z值(用WCS表示)

11标注文本的中点(用OCS表示)。DXF:X值;APP:三维点。

21,31标注文本的中点坐标的Y和Z值(用OCS表示)

70标注类型:

整数值0-6表示标注类型。

位值32、64和128则添加到整数值后(在R13和更高版本中设置值32)。

0=转角标注、水平标注或垂直标注;1=对齐标注;

2=角度标注;3=直径标注;4=半径标注;

5=角度三点标注;6=坐标标注;

32=表示块引用(组码2)只被此标注引用;

64=坐标标注类型,此位值(位7)只与类型6一起使用,如果设置,坐标类型为X型,否则为Y型;

128=如果标注文本位于用户指定的位置而不是缺省位置,此位值(位7)将添加到其他的组码70的值中。

1用户明确地输入了标注文字(可选,缺省值为测量结果)

如果为空或"<>",以文字方式标注测量结果;

如果为""(一个空格),禁止输出文字,其他情况下将作为文字绘制到图形中。

53组码53可选,表示标注文字方向与其缺省方向之间的旋转角度(尺寸线的方向)。

51所有标注类型都有可选组码

51,此组码为标注图元表示了水平方向。它为水平标注、垂直标注及转角线性标注指定了标注文本和尺寸线的方向。组码值为OCSX轴与

UCSX轴间的角度的负值(始终在OCS的XY面中度量该角度)。

210拉伸方向(可选,缺省值=0,0,1):X值;APP:3D矢量

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

3标注样式名

 

属于应用程序ID"ACAD"

的扩展数据可以跟随在标注图元之后。这说明任何标注都能替代已被图元使用的标注。请参见标注样式替代!AL(`XREF_62386_al_u05_c',1)。

对于所有的标注类型,下列组码表示三维WCS点:(10,20,30)、(13,23,33)、(14,24,34)和(15,25,

35)。对于所有的标注类型,下列组码表示三维WCS点:(11,21,31)、(12,22,32)和(16,26,36)。

对齐、线性和转角标注组码

下列组码适用于对齐、线性和转角标注。

对齐、线性和转角标注组码

组码说明

100子类标记(AcDbAlignedDimension)

12标注复制的插入点-基线和连续标注(在OCS中)。

DXF:X值;APP:三维点

22,32DXF:标注复制的插入点-基线和连续标注的Y和Z值(在OCS中)。

13线性标注和转角标注的定义点(在WCS中)。:X值;APP:三维点

23,33DXF:线性标注和转角标注的定义点的Y和Z值(在WCS中)。

14线性标注和转角标注的定义点(在WCS中)。:X值;APP:三维点。

24,34DXF:线性标注和转角标注的定义点的Y和Z值(在WCS中)。

 

 

点(13,23,33)指定第一尺寸界线的起点,点(14,24,34)指定第二尺寸界线的起点,点(10,20,30)指定尺寸线位置,点

(11,21,31)指定标注文字的中点。

线性标注和转角标注组码

下列组码适用于线性和转角标注。

线性和转角标注组码

组码说明

50转角、水平和垂直标注的角度。

52具有倾斜角度的线性标注类型有可选组码52。当增加线性标注的旋转角(组码50)时,组码52给出延长线的角度。

100子类标记(AcDbRotatedDimension)

 

径标注和直径标注组码

下列组码适用于半径和直径标注。

半径和直径标注组码

组码说明

100子类标记(AcDbRadialDimension或AcDbDiametricDimension)。

15直径、半径和转角标注的定义点(在WCS中)。:X值;APP:三维点

25,35DXF:直径、半径和转角标注的定义点的Y和Z值(在WCS中)。

40半径和直径标注的引线长度。

 

 

点(15,25,35)指定圆/圆弧上的尺寸线的第一点,点(10,20,30)指定尺寸线的第二点,点(11,21,31)指定标注文字的中点。

 

点(15,25,35)指定圆/圆弧上的尺寸线的第一点,点(10,20,30)指定圆/圆弧的圆心,点(11,21,31)指定标注文字的中点。

度标注组码

下列组码适用于角度标注。

角度标注组码

组码说明

100子类标记(AcDb3PointAngularDimension)

13线性和角度标注的定义点(在WCS中)。DXF:X值;APP:三维点。

23,33DXF:线性和角度标注的定义点的Y和Z值(在WCS值)。

14线性和角度标注的定义点(在WCS中)。DXF:X值;APP:三维点。

24,34DXF:线性和角度标注的定义点的Y和Z值(在WCS值)。

15直径、半径和角度标注的定义点(在WCS中)。:X值;APP:三维点

25,35DXF:直径、半径和角度标注的定义点的Y和Z值(在WCS中)。

16角度标注的标注弧的定义点(在OCS中)。DXF:X值;APP:3D点。

26,36DXF:角度标注的标注弧的定义点的Y和Z值(在OCS中)。

 

点(13,23,33)和点(14,24,34)指定第一尺寸界线的端点,点(10,20,30)和点(15,25,35)

指定第二尺寸界线的端点,点(16,26,36)指定标注弧线的位置,点(11,21,31)指定标注文字的中点.

 

点(15,25,35)指定角的顶点,点(13,23,33)和点(14,24,34)指定尺寸界线的端点,点(10,20,30)指定标注弧线的位置,点(11,21,31)指定标注文字的中点。

标标注组码

下列组码适用于坐标标注。

坐标标注组码

组码说明

100子类标记(AcDbOrdinateDimension)

13线性和角度标注的定义点(在WCS中)。DXF:X值;APP:三维点。

23,33DXF:线性和角度标注的定义点的Y和Z值(在WCS中)。

14线性和角度标注的定义点(在WCS中)。DXF:X值;APP:三维点。

24,34DXF:线性和角度标注的定义点的Y和Z值(在WCS中)。

 

 

点(13,23,33)指定特征位置,点(14,24,34)指定引线和点,点(11,21,31)指定标注文字的中点,当创建标注时,点

(10,20,30)放置于当前UCS的原点。

注样式替代

标注样式替代可应用于标注、引线和公差图元。任何用于这些图元的替代都以扩展数据的形式存储在图元中。组码1002中的控制字符串包含了被替代标注的变量组码和关联值。下面的例子显示了标注图元的扩展数据中的被替代的变量DIMTOL和DIMCLRE。

(setqdiment(car(entsel)));选择标注图元

(setqelst(entgetdiment'("ACAD")));得到图元定义表

(assoc-3elst);只获得外部数据

代码返回如下:

(-3("ACAD"扩展数据的ACADAPPID部分开始

(1000."DSTYLE")(1002."{")标注样式子部分的开始

(1070.177)(1070.3)DIMCLRE(组码177)替代及关联值(3)

(1070.71)(1070.1)DIMTOL(组码71)替代及关联值(1)

(1002."}")))标注样式子部分和ACAD部分结束

LLIPSE

下列组码适用于椭圆图元。

椭圆组码

组码说明

100子类标记(AcDbEllipse)

10圆心(在WCS中)。DXF:X值;APP:三维点

20,30DXF:圆心的Y和Z值(在WCS中)

11长轴的端点(相对于圆心的相对值)。DXF:X值;APP:三维点。

21,31DXF:长轴的端点的Y和Z值,它们是相对于圆心的相对值。

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维点

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

40长轴与短轴的比例

41起始参数(对于完整椭圆此值为0.0)

42结束参数(对于完整椭圆此值为2pi)

 

   

组码41和42为下面等式中的u的起始和结束值。组码11,21,31矢量的大小等于长轴值的1/2,即下面等式中的a值。点

10,20,30是下面等式中的c值。知道了上述数值,即可计算出所需的b值,这样,下列方程式就完整了。

ELLIPSE命令中"参数"选项的说明

ELLIPSE命令中"参数"选项使用下面的方程式来定义一个椭圆弧。

p(u)=c+a*cos(u)+b*sin(u)

当用户为第一轴选定端点且为第二轴选定距离后,变量a、b和c值即被决定。a的值为长轴长度1/2的负值,b的值为短轴长度1/2的负值,c为椭圆的圆心(2-D)。

因为此方程式是一个矢量方程且变量c具有X和Y值,所以它应该写成如下形式:

p(u)=(Cx+a*cos(u))*i+(Cy+a*sin(u))*j

此处

Cx是点c的X值

Cy是点c的Y值

a为-(长轴长度的1/2)

b为-(短轴长度的1/2)

i和j表示X和Y方向上的单位矢量

在AutoCAD中,一旦确定了轴的端点和椭圆弧的起点及终点,那么椭圆也就确定了。

当用户选定了"参数"选项中的起始参数和结束参数后,这些参数值将被带入方程式来求得椭圆的实际的起点和终点。椭圆的其他部分将从起点到终点以逆时针方向绘制。输入的

u值被转换成度数以求得cos(u)和sin(u)。

例如:

轴端点1=0,1

轴端点2=4,1

另一个轴距=2,0

起始参数=270

结束参数=0

将生成起点位于(2,2),终点位于(0,1),以逆时针方向填充的椭圆。

HATCH

下列组码适用于图元填充。

填充组码

组码说明

100子类标记(AcDbHatch)

10标高点(在OCS中)。DXF:X值=0;APP:三维点(X和Y值始终为0,Z表示标高)

20,30DXF:标高点的Y和Z值(在OCS中)。

Y值=0,Z表示标高。

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

2填充图案名称

70实体填充标志(实体填充=1;图案填充=0)

71关联填充标志(关联的=1;不关联的=0)

91边界路径(环)的数目

varies边界路径数据。组码91指定重复次数。

75填充样式:

0=填充"奇数"区域("普通"样式);

1=只填充最外面的区域("外部"样式);

2=填充整个区域("忽略"样式);

76填充图案类型

0=用户定义;

1=预定义;

2=自定义

52填充图案角度(只用于图案填充)

41填充图案比例或间距(只用于图案填充)

77填充图案加倍标志(加倍=1,不加倍=0)(只用于图案填充)。

78图案定义线的数目。

varies图案线数据。由组码78指定重复次数。请参见图案数据!AL(`XREF_15719_al_u05_c',1)。

47像素尺寸(可选)

98种子点数目。

10种子点(在OCS中)。DXF:X值;APP:二维点。(多图元)

20DXF:种子点的Y值(在OCS中)。(多图元)

 

边界路径数据

每个填充对象的边界由路径(或环)定义,该路径由一个或多个线段组成。路径段数据因组成路径的图元的类型而异。每个路径段由它自己的组码集定义。

填充边界路径数据组码

组码说明

92边界路径类型标志(位码)

0=缺省设置;

1=外部的;

2=多段线;

4=导出的

8=文本框;

16=最外部的

varies多段线边界类型数据(只当边界是多段线时)

请参见下面的多段线边界数据表。

93边界路径中的边数(只当边界不是多段线时)

72边类型(只当边界不是多段线时):

1=直线;

2=圆弧;

3=椭圆弧;

4=样条曲线;

varies边类型数据(只当边界不是多段线时)。请参见下面的边界数据表。

97源边界对象的数目。

330源边界对象引用(多图元)。

 

多段线边界数据组码

组码说明

72有一个凸度标志

73是关闭的标志

93多段线顶点的数目

10顶点位置(在OCS中)。DXF:X值;APP:二维点(多图元)

20DXF:顶点位置的Y值(在OCS中)。(多图元)

42凸度(可选,缺省值=0)

 

直线边数据组码

组码说明

10起点(在OCS中)。DXF:X值;APP:二维点。

20DXF:起点的Y值(在OCS中)。

11终点(在OCS中)。DXF:X值;APP:二维点。

21DXF:终点的Y值(在OCS中)。

 

   

圆弧边数剧组码

组码说明

10圆心(在OCS中)。DXF:X值;APP:二维点

20DXF:圆心的Y值(在OCS中)。

40半径

50起始角度

51结束角度

73是反时针方向标志

 

   

椭圆边数据组码

组码说明

10圆心(在OCS中)。DXF:X值;APP:二维点。

20DXF:圆心的Y值(在OCS中)。

11相对于圆心坐标的长轴的端点(在OCS中)。:X值;APP:二维点。

21DXF:长轴端点的Y值(在OCS中)。

40短轴的长度(以长轴长度的百分数表示)。

50起始角度

51结束角度

73是反时针方向标志

 

   

样条曲线边数据组码

组码说明

94度数

73有理

74周期性

95结点数

96控制点数

40结点值(多图元)

10中心点(在OCS中)。DXF:X值;APP:二维点

20DXF:中心点的Y值(在OCS中)。

42权值(可选,缺省值=1)

 

案数据

下列图案数据组码在每个图案定义线是重复的。

填充图案数据组码

组码说明

53图案线角度

43图案线基点,X分量

44图案线基点,Y分量

45图案线偏移,X分量

46图案线偏移,Y分量

79点划长度项目数

49点划长度(多图元)

 

MAGE

下列组码适用于图像图元。

图像组码

组码说明

100子类标记(AcDbRasterImage)

90类版本

10插入点(在OCS中)。DXF:X值;APP:三维点

20,30DXF:插入点的Y和Z值(在OCS中)。

11单一像素的U-矢量(从插入点开始的沿着图像的视图底边的点)

(在OCS中)。DXF:X值;APP:三维点

21,31DXF:U-矢量的Y和Z值(在OCS中)

12单一像素的V-矢量(从插入点开始的沿着图像的视图左边的点)

(在OCS中)。DXF:X值;APP:三维点

22,32DXF:V-矢量的Y和Z值(在OCS中)

13以像素点表示的图像尺寸。DXF:U值;APP:二维点(U和V值)

23DXF:以像素点表示的图像尺寸的V值

340图像定义对象的固定引用。

70图像显示特性

1=显示图像;

2=显示非正交图像;

4=显示剪贴图像;

8=打开透明状态;

280剪裁状态:0=关;1=开

281亮度值(0-100;缺省值=50)

282对比度值(0-100;缺省值=50)

283褪色值(0-100;缺省值=0)

360Imagedef_reactor对象的固定引用

71剪裁边界类型:1=矩形的;2=多边形的

91剪裁边界的顶点数

14剪裁边界顶点(在OCS中)。DXF:X值;APP:二维点(多图元)

注意:对于矩形剪裁边界类型,必须指定两个对角点。缺省值为(-0.5,-0.5),(图像尺寸的x-0.5,图像尺寸的

y-0.5)。对于多边形剪裁边界类型,必须指定三个或三个以上的顶点。必须依次列出顶点。

24DXF:剪裁边界顶点的Y值(在OCS中)(多图元)

 

INSERT

下列组码适用于插入(块引用)图元。

插入组码

组码说明

100子类标记(AcDbBlockReference)

66可变的"跟随属性"标志(可选,缺省值=0)。如果跟随属性标志的值为1,其后需要插入一连串的属性图元,到seqend图元终止。

2块名称

10插入点(在OCS中)。DXF:X值;APP:三维点

20,30DXF:插入点的Y和Z值(在OCS中)

41X比例因子(可选,缺省值=1)

42Y比例因子(可选,缺省值=1)

43Z比例因子(可选,缺省值=1)

50旋转角度(可选,缺省值=0)

70列数(可选,缺省值=1)

71行数(可选,缺省值=1)

44列间距(可选,缺省值=0)

45行间距(可选,缺省值=0)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

 

LEADER

下列组码适用于引线图元。

引线组码

组码说明

100子类标记(AcDbLeader)

3标注样式名称

71箭头标志:0=禁用;1=可用

72引线路径类型:0=直线段;1=样条曲线

73引线创建标志(缺省值=3):

0=与文本注释一起创建引线;

1=与公差注释一起创建引线;

2=与块引用注释一起创建引线;

3=创建引线,没有任何注释;

74钩线方向标志:

0=钩线(或样条引线的切线结束)方向与水平矢量方向相反;

1=钩线(或样条引线的切线结束)方向与水平矢量方向相同(请参见组码75);

75钩线标志:0=无钩线;1=有钩线

40文字注释高度

41文字注释宽度

76引线中的顶点数(DXFIN时被忽略)

10顶点坐标(适用于每个顶点的条目)DXF:X值;APP:三维点

20,30DXF:顶点坐标的Y和Z值

77当引线的DIMCLRD=BYBLOCK时使用的颜色

340关联注释的固定引用(多行文字,公差或插入图元)

210法线矢量。DXF:X值;APP:三维矢量

220,230DXF:法线矢量的Y和Z值

211引线的"水平"方向。DXF:X值;APP:三维矢量。

221,231DXF:引线的"水平"方向的Y和Z值

212块引用插入点距最终引线顶点的偏移。:X值;APP:三维矢量

222,232DXF:块引用插入点距最终引线顶点的偏移的Y和Z值。

213注释位置点距最终引线顶点的偏移。DXF:X值;APP:三维矢量

223,233DXF:注释位置点距最终引线顶点的偏移的Y和Z值。

 

   

属于应用程序ID"ACAD"

的扩展数据可以跟随在引线图元之后,这描述了已应用于图元任何标注替代。请参见标注样式替代!AL(`XREF_62386_al_u05_c',1)。

LINE

下列组码适用于直线图元。

直线组码

组码说明

100子类标记(AcDbLine)

39厚度(可选,缺省值=0)

10起点(在WCS中)。DXF:X值;APP:三维点

20,30DXF:起点的Y和Z值(在WCS中)

11终点(在WCS中)。DXF:X值;APP:三维点

21,31DXF:终点的Y和Z值(在WCS中)

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

 

   

LWPOLYLINE

下列组码适用于优化多段线图元。

优化多段线组码

组码说明

100子类标记(AcDbPolyline)

90顶点数

70多段线标志(位码);缺省值为0:

1=关闭的;

128=多段线生成

43常量宽度(可选,缺省值=0);当设置了变化的宽度(组码40和/或41)时,不使用该组码

38标高(可选,缺省值=0)

39厚度(可选,缺省值=0)

10顶点坐标(在WCS中)(多图元),每个顶点都有该条目。:X值;APP:二维点

20DXF:顶点坐标的Y值(在WCS中)(多图元);每个顶点都有该条目。

40起始宽度(多图元,每个顶点都有该条目)(可选,缺省值=0,多条目)。如果设置了常量宽度(组码43),则不使用该组码。

41结束宽度(多图元,每个顶点都有该条目)(可选,缺省值=0,多条目)。如果设置了常量宽度(组码43),则不使用该组码。

42凸度(多图元,每个顶点都有该条目)(可选,缺省值=0)。

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

 

MLINE

下列组码适用于多线图元。

多线组码

组码说明

100子类标记(AcDbMline)

2字符串最长为32个字符,它是多线的样式名称。在MLINESTYLE词典中必须存在该样式的条目。

注意:不要修改该字段。

340MLINESTYLE词典的指针句柄/ID

40比例因子

70对正:0=上;1=零;2=下

71开放/闭合标记:1=开放;3=闭合

72顶点数

73MLINESTYLE词典中的元素数

10起点(在WCS中)。DXF:X值;APP:三维点

20,30DXF:起点的Y和Z值(在WCS中)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

11顶点坐标(多条目;每个顶点都有该条目)。

DXF:X值;APP:三维点

21,31DXF:顶点坐标的Y和Z值

12该顶点线段开始方向矢量(多条目;每个顶点都有该条目)。:X值;APP:三维矢量

22,32DXF:该顶点线段开始方向矢量的Y和Z值

13该顶点的斜接方向矢量(多条目;每个顶点都有该条目)。DXF:X值;APP:三维矢量

23,33DXF:斜接方向矢量的Y和Z值

74该元素的参数数目(线段中的每个元素都重复该组码)

41元素参数(由前面的组码74决定重复次数)

75该元素的区域填充参数的数目(线段中的每个元素都重复该组码)

42区域填充参数(由前面的组码75决定重复次数)

 

参数化组码41是一个实数列表,每个组码41对应一个实数,此列表可以包含零个或更多项。第一个组码41

的组值是从线段顶点到直线元素路径与斜接矢量交点的距离(沿斜接矢量方向),第二个组码41的组值是从第一个组码41

定义的点到直线元素实际起点的距离(沿直线元素路径方向),第三个组码41的组值是从直线元素起点到直线元素中第一个断点的距离。后续的组码41

的组值依次列出了该多线的线段中的起点和终点。线型不影响组码41列表。

参数化组码42也是一个实数列表。与参数化组码41类似,它描述了此多线填充区域的参数化法。它们的组值与组码41

参数的解释相同,且在将所有多线中的直线元素当作一个整体时,它们定义了多线填充区域的边界。

一个使用组码42机制的普通例子是,当未被填充的多线与已填充的多线相交时,使用mledit

使被填充的多线在相交区域显现出来,这将导致相互影响的多段线中每个直线元素的两个组码42发生变化,一个是填充开始的,一个是填充结束的。

在多线图元和多线样式对象中组码2是多余的,尽管可以安全的读取和使用它们的关联值,但这些组码在任何情况下都不能被修改。可以修改的正确字段如下:

多线

在相同对象中的组码340,它指定了正确的MLINESTYLE对象。

多线样式

MLINESTYLE词典中的组码3(位于组码350之前)的值有当前MLINESTYLE的图元名或句柄。

MTEXT

下列组码适用于多行文字图元。

多行文字组码

组码说明

100子类标记(AcDbMText)

10插入点。DXF:X值;APP:三维点

20,30DXF:插入点的Y和Z值

40缺省文字高度

41参考矩形宽度

71附着点:

1=左上;2=中上;3=右上;

4=左中;5=中间;6=右中;

7=左下;8=中下;9=右下;

72绘图方向:

1=由左至右;2=由右至左;

3=由上至下;4=由下至上;

1文字字符串。如果文字字符串少于250个字符,所有的字符存放于组码1中;如果字符串多于250个字符,字符串被分为250

个字符的数据块,这些数据块存放在一个或多个组码3中。如果使用组码3,最后的组码是组码1,其中的数据组少于250个字符。

3附加文字(总是存放于250个字符的数据块中)

7文字样式名称(如果未提供则为STANDARD)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

11X轴方向矢量(在WCS中)

DXF:X值;APP:三维矢量

注意:当组码50(弧度表示的转角)作为DXF的输入被传递时,它将被转化为等价的方向矢量(如果组码50和组码11、21、31

都被传递,方向由最后一个决定)。提供此组码是为了方便从文字对象向多行文字对象的转化。

21,31DXF:X轴方向矢量的Y和Z值(在WCS中)

42组成多行文字的字符的水平宽度。(此值始终小于或等于组码41的值)。

43组成多行文字的字符的垂直高度。

50弧度表示的旋转角度。

 

OLEFRAME

下列组码适用于OLE边框图元。

OLE边框组码

组码说明

100子类标记(AcDbOleFrame)

70OLE版本号

90二进制数据长度

310二进制数据(多直线)

1Ole数据的结尾(字符串"OLE")

 

   

OLE2FRAME

下列组码适用于OLE2边框图元,该信息是只读的。在DXFIN时,这些值被忽略,因为它们是OLE

二进制数据的一部分,且可通过访问函数来获得。

OLE2边框组码

组码说明

100子类标记(AcDbOle2Frame)

70OLE版本号

3二进制数据的长度

10左上角(在WCS中)。DXF:X值;APP:三维点

20,30DXF:左上角的Y和Z值(在WCS中)。

11右下角(在WCS中)。DXF:X值;APP:三维点

21,31DXF:右下角的Y和Z值(在WCS中)

71OLE对象类型:1=链接;2=内嵌;3=静态

72平铺模式描述:

0=对象在一个平铺的模型空间视口中;

1=对象在非平铺的空间视口中(图纸空间或浮动模型空间);

90二进制数据长度

310二进制数据(多直线)

1OLE数据的结尾(字符串"OLE")

 

DXF输出例子:

OLE2FRAME

5

2D

100

AcDbEntity

67

1

8

0

100

AcDbOle2Frame

70

2

3

PaintbrushPicture

10

4.43116

20

5.665992

30

0.0

11

6.4188

21

4.244939

31

0.0

71

2

72

1

90

23680

3100155764BD60082B91140114B08C8F9A916400000000000000000506DC0D0D9AC

310

1940114B08C8F9A916400000000000000000506DC0D0D9AC194002303E5CD1FA

310

10400000000000000000764BD60082B9114002303E5CD1FA1040000000000000

...

...

AutoLISP函数entnext输出的样例:

命令:(setqe(entgete3))

((-1.<图元名:7d50428>)(0."OLE2FRAME")(5."2D")

(100."AcDbEntity")(67.1)(8."0")(100."AcDbOle2Frame")

(70.2)(3"PaintbrushPicture")(104.431165.665990.0)

(116.41884.244940.0)(71.2)(72.1))

POINT

下列组码适用于点图元。

点组码

组码说明

100子类标记(AcDbPoint)

10点位置(在WCS中)。DXF:X值;APP:三维点

20,30DXF:点位置的Y和Z值(在WCS中)

39厚度(可选,缺省值=0)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

50当绘制点时,X轴与起作用的UCS之间的角度(可选,缺省值=0)(当PDMODE非零时使用该组码)

 

POLYLINE

下列组码适用于多段线。

多段线组码

组码说明

100子类标记(AcDb2dPolyline或AcDb3dPolyline)

10DXF:始终为0;:一个"伪"点,X和Y值始终为零,Z值为多段线的标高(二维时在OCS中,三维时在WCS中)

20DXF:始终为零

30DXF:多段线的标高(二维时在OCS中,三维时在WCS中)

39厚度(可选,缺省值=0)

70多段线标志(位编码);缺省值为0:

1=这是一个闭合的多段线(或在M方向闭合的多边形网格);

2=曲线拟合添加了顶点;

4=添加样条曲线拟合添加了顶点;

8=这是一个三维多段线;

16=这是一个三维多边形网格;

32=在N方向闭合的多边形网格;

64=多段线是多面网格;

128=不断在此多段线顶点的周围生成线型图案;

40缺省开始宽度(可选,缺省值=0)

41缺省结尾宽度(可选,缺省值=0)

71多边形网格的M顶点数(可选,缺省值=0)

72多边形网格的N顶点数(可选,缺省值=0)

73平滑表面M向的密度(可选,缺省值=0)

74平滑表面N向的密度(可选,缺省值=0)

75曲线和平滑表面类型(可选,缺省值=0),整型编码,不是位码:

0=无平滑表面拟合:

5=二次B样条曲线表面;

6=三次B样条曲线表面;

8=Bezier表面

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

 

具有"AUTOCAD_POSTSCRIPT_FIGURE"应用程序ID的扩展数据可以跟随在多段线图元后。其中包含的信息与

PostScript图像和PostScript填充的信息有关。

多面网格

在DXF中多面网格是多段线的一个变种。存在多面网格位标识(组码70中的64位)的多段线被识别为多面网格。组码71

指定网格中的顶点数,组码72指定面数。尽管这些数字对于所有由命令PFACE

创建的网格来说都是正确的,但应用程序不必将正确的值放入此字段中。多段线表头后是一个顶点图元序列,用于指定顶点坐标,其后是组成网格的面。

AutoCAD

图元结构为所给出的面图元指定的顶点数强加一个限制。用户可以通过将多边形分解成三角形楔体来表现更复杂的多边形,这些楔体的边应该是不可见的,这样可以防止拆分单元的可见人造边被绘制出来。命令

PFACE可以自动执行拆分,但当应用程序直接生成多面网格时,必须由应用程序亲自执行拆分。在拆分过成中,每个面的顶点数是关键参数。系统变量

PFACEVMAX提供了一个每个面具有顶点数的申请,该变量是只读的,其值为4。

命令PFACE创建多面网格时首先生成所有顶点坐标的图元,然后生成面定义图元。这种次序是根据AutoCAD

中处理多面网格的组码的要求决定的。虽然从DXF中读取多面网格的程序允许顶点和面的次序不固定,但在DXF

中生成多面网格的程序仍应该首先生成所有顶点,再生成所有的面。

RAY

下列组码适用于射线图元。

射线组码

组码说明

100子类标记(AcDbRay)

10起点(在WCS)。DXF:X值;APP:三维点

20,30DXF:起点的Y和Z值(在WCS)

11单位方向矢量(在WCS)。DXF:X值;APP:三维点

21,31DXF:单位方向矢量的Y和Z值(在WCS中)

 

REGION

下列组码适用于面域图元。

面域组码

组码说明

100子类标记(AcDbModelerGeometry)

70建模格式版本号(当前值=1)

1私有数据(有多行,每个少于255个字符)

3私有数据的附加行(如果前面的组码1字符串多于255个字符)

 

   

SEQEND

下列组码适用于seqend图元。

Seqend组码

组码说明

-2APP:序列的开始图元名。此图元标记了多段线的顶点(顶点类型名称)的结束,或插入图元的属性图元(显示属性类型名称)的结束(该插入图元具有由组码

66(存在且非零)指定的属性)。:文件中不保存此组码。

 

   

SHAPE

下列组码适用于形图元。

形组码

组码说明

100子类标记(AcDbShape)

39厚度(可选,缺省值=0)

10插入点(在WCS中)。DXF:X值;APP:三维点

20,30DXF:插入点的Y和Z值(在WCS中)

40尺寸

2形名称

50旋转角度(可选,缺省值=0)

41相对X比例因子(可选,缺省值=1)

51倾斜角(可选,缺省值=0)

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

 

   

SOLID

下列组码适用于实体图元。

实体组码

组码说明

100子类标记(AcDbTrace)

10第一角点。DXF:X值;APP:三维点

20,30DXF:第一角点的Y和Z值

11第二角点。DXF:X值;APP:三维点

21,31DXF:第二角点的Y和Z值

12第三角点。DXF:X值;APP:三维点

22,32DXF:第三角点的Y和Z值

13第四角点。如果只输入三个角点来定义实体,则第四角点的坐标与第三角点相同。DXF:X值;APP:三维点

23,33DXF:第四角点的Y和Z值

39厚度(可选,缺省值=0)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维点

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

 

SPLINE

此组码适用于样条曲线图元。

样条曲线组码

组码说明

100子类标记(AcDbSpline)

210法线矢量(如果样条曲线不是平面图元,则会被忽略):X值;APP:三维点

220,230DXF:法线矢量的Y和Z值

70样条曲线标志(位编码):

1=闭合的样条曲线;

2=周期性样条曲线;

4=有理样条曲线;

8=平面;

16=线性(平面位也被设置)

71样条曲线的阶

72结点数目

73控制点数目

74拟合点数目(如果存在)

42结点公差(缺省值=0.0000001)

43控制点公差(缺省值=0.0000001)

44拟合公差(缺省值=0.0000000001)

12起始正切方向(在WCS中)-可被忽略。:X值;APP:三维点。

22,32DXF:起始正切方向(可被忽略)的Y和Z值(在WCS中)。

13结束正切方向(在WCS中)-可被忽略。:X值;APP:三维点

23,33DXF:结束正切方向(可被忽略)的 Y 和 Z 值(在WCS中)

40结点值(每个结点都有一个该条目)

41权值(如果非1);如果都不是1时,带多个组码对

10控制点(在WCS中)每个控制点都有一个该条目。:X值;APP:三维点

20,30DXF:控制点的Y和Z值(在WCS中)(每个控制点都有一个该条目)

11拟合点(在WCS中)每个拟合点都有一个该条目。:X值;APP:三维点

21,31DXF:拟合点的Y和Z值(在WCS中)(每个拟合点都有一个该条目)

 

TEXT

下列组码适用于文字图元。

文字组码

组码说明

100子类标记(AcDbText)

39厚度(可选,缺省值=0)

10第一对齐点(在OCS中)。DXF:X值;APP:三维点

20,30DXF:第一对齐点的Y和Z值(在OCS中)

40文字高度

1缺省值(字符串本身)

50文字旋转(可选,缺省值=0)

41X向的相对比例因子-宽度(可选,缺省值=1)

当使用调整类型的文字时,需要调整此值。

51倾斜角度(可选,缺省值=0)

7文字样式名称(可选,缺省值=STANDARD)

71文本生成标志(可选,缺省值=0)

2=文本反向(在X方向上产生镜像);

4=文本倒置(在Y方向上产生镜像);

72水平文字对正类型(可选,缺省值=0)(为整型码,不是位码):

0=左;1=中心;2=右;

3=对齐的(如果垂直对齐=0);

4=中央(如果垂直对齐=0);

5=调整(如果垂直对齐=0);

具体信息请参见下表

11第二对齐点(在OCS中)DXF:X值;APP:三维点

只有组码72或73的值非零时,此值才有意义(基线和左对齐除外)

21,31DXF:第二对齐点的Y和Z值(在OCS中)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

100子类标记(AcDbText)

73垂直文字对正类型(可选,缺省值=0)(整型编码,不是位码)

0=基线;1=下;2=中;3=上;

详细信息请参见下表

 

下表更加详细地说明了组码72(水平对齐)和组码73(垂直对齐)。

组码72和73整型编码

组码73组码72     

3(上)左上中上右上   

2(中)72或73的值非零时,此值才有意义(基线和左对齐除外)

21,31DXF:第二对齐点的Y和Z值(在OCS中)

210拉伸方向(可选,缺省值=0,0,1)

DXF:X值;APP:三维矢量

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

100子类标记(AcDbText)

73垂直文字对正类型(可选,缺省值=0)(整型编码,不是位码)

0=基线;1=下;2=中;3=上;

详细信息请参见下表

 

下表更加详细地说明了组码72(水平对齐)和组码73(垂直对齐)。

组码72和73整型编码

组码73组码72     

3(上)左上中上右上   

2(中)左中正中右中   

1(下)左下中下右下   

0(基线)左中心右对齐中央调整

 

如果组码72和/或73的值非零,则忽略第一对齐点,AutoCAD

将根据第二对齐点以及字符串本身的高度和宽度来计算新值(在应用了文字样式之后)。如果组码72和73为零或为空,则第二对齐点无意义。

TOLERANCE

下列组码适用于公差图元。

公差组码

组码说明

100子类标记(AcDbFcf)

3标注样式名称

10插入点(在WCS中)。DXF:X值;APP:三维点

20,30DXF:插入点的Y和Z值(在WCS中)

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

11X轴方向矢量(在WCS中)。DXF:X值;APP:三维矢量

21,31DXF:X轴方向矢量的Y和Z值(在WCS中)

 

TRACE

下列组码适用于宽线图元。

宽线组码

组码说明

100子类标记(AcDbTrace)

10第一角点(在OCS中)。DXF:X值;APP:三维点

20,30DXF:第一角点的Y和Z值(在OCS中)

11第二角点(在OCS中)。DXF:X值;APP:三维点

21,31DXF:第二角点的Y和Z值(在OCS中)

12第三角点(在OCS中)。DXF:X值;APP:三维点

22,32DXF:第三角点的Y和Z值(在OCS中)

13第四角点(在OCS中)。DXF:X值;APP:三维点

23,33DXF:第四角点的Y和Z值(在OCS中)

39厚度(可选,缺省值=0)

210拉伸方向(可选,缺省值=0,0,1)。

DXF:X值;APP:三维矢量

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

 

   

VERTEX

下列组码适用于顶点图元。

顶点组码

组码说明

100子类标记(AcDbVertex)

100子类标记(AcDb2dVertex或AcDb3dPolylineVertex)

10位置点(二维时,在OCS中;三维时,在WCS中)。:X值;APP:三维点

20,30DXF:位置点的Y和Z值(二维时在OCS中,三维时在WCS中)。

40起始宽度(可选,缺省值为0)

41结束宽度(可选,缺省值为0)

42凸度(可选,缺省值为0)。凸度是一段圆弧所包含的角度的1/4的正切,当弧从起点到终点为顺时针时,凸度为负值。0

凸度表示直线段,1凸度表示半圆。

70顶点标志:

1=拟合曲线创建的额外顶点;

2=为此顶点定义的拟合切线方向。DXF输出时0拟合切线方向可被忽略,但设置此位仍有意义;

4=不被使用;

8=样条曲线拟合创建的样条曲线顶点;

16=样条曲线边框控制点;

32=三维多段线顶点

64=三维多边形网格;

128=多面网格顶点;

50曲线拟合切线方向。

71多面网格顶点索引(可选,只在值非零时存在)

72多面网格顶点索引(可选,只在值非零时存在)

73多面网格顶点索引(可选,只在值非零时存在)

74多面网格顶点索引(可选,只在值非零时存在)

 

多面网格中的每个顶点都有它的顶点标志128位设置。如果图元提供了网格顶点的坐标,那么它的64位也被设置,且组码10、20和30

给出顶点坐标。顶点索引由顶点图元出现在多段线中的次序决定,第一个出现的顶点的索引为1。

如果顶点定义了网格的一个面,那么它的顶点标志组码只设置了128位,没有设置64位。此时,平面图元的组码10、20和

30(位置)是不相关的且在DXF中始终记为0。定义网格的顶点索引由组码71、72、73和74

给出,这些组码值指定了先前由索引定义的顶点中的一个。如果索引为负数,则以此索引指定的顶点开始的边不可见。第一个0顶点标记了平面顶点的结束。

VIEWPORT

下列组码适用于视口图元。

视口组码

组码说明

100子类标记(AcDbViewport)

10中心点(在WCS中)。DXF:X值;APP:三维点

20,30DXF:中心点的Y和Z值(在WCS中)

40图纸空间单位中的宽度

41图纸空间单位中的高度

68视口字段:

-1=打开,但完全关闭屏幕,或者由于当前状态时超过$MAXACTVP限制,一个视口被关闭。

0=关闭;

<正值>=打开且激活。此值表示了视口的堆叠次序,此处1为激活的视口,2是下一个视口,依此类推。

69视口ID。在每次打开图形时会发生变化。除了始终为1的图纸空间视口外,其他的都不保存。

 

   

下表列出了可以附加到视口图元的扩展数据。与普通图元数据相比,扩展组码的次序十分重要。组码也可以多次出现。

视口扩展数据组码

组码说明

1001应用程序ID("ACAD")。从此处开始是描述视口的扩展数据部分。

1000开始视口数据,此字段始终为字符串MVIEW,将来可能出现其他数据组。

1002开始窗口描述符数据。此字段始终为字符串。

1070扩展数据版本号,始终为整数16。

1010视图目标点(在WCS中)。DXF:X值;APP:三维点。

1020,1030DXF:视图目标点的Y和Z值(在WCS中)。

1010视图方向矢量(在WCS中)。DXF:X值;APP:三维矢量。

1020,1030DXF:视图方向矢量的Y和Z值(在WCS中)。

1040视图扭曲角。

1040视图高度。

1040视图中心点的X值(在DCS中)。

1040视图中心点的Y值(在DCS中)。

1040透视镜头长度。

1040前剪裁平面的Z值。

1040后剪裁平面的Z值。

1070视图模式。

1070圆缩放。

1070快速缩放设置。

1070UCSICON设置

1070捕捉开/关

1070栅格开/关

1070捕捉样式

1070捕捉ISOPAIR

1040捕捉角度

1040捕捉基点坐标的UCSX值。

1040捕捉基点坐标的UCSY值。

1040捕捉X间距

1040捕捉Y间距

1040栅格X间距

1040栅格Y间距

1070在打印标志中消隐

1002开始冻结图层表(可能为空)。此字段始终为字符串"{"。

1003该视口中冻结图层的名称。此表可以包括依赖外部参照的图层。组码1003的任何数字可以在此出现。

1002结束冻结图层表。此字段始终为字符串"}"。

1002结束视口数据。此字段始终为字符串"}"。

 

注意因子ZOOMXP由下面的公式计算得出:组码41/第二个组码1040(或图纸空间高度/模型空间高度)。

XLINE

下列组码适用于参照线图元。

参照线组码

组码说明

100子类标记(AcDbXline)

10第一点(在WCS中)。DXF:X值;APP:三维点。

20,30DXF:第一点的Y和Z值(在WCS中)。

11单位方向矢量(在WCS中)。DXF:X值;APP:三维矢量。

21,31DXF:单位方向矢量的Y和Z值(在WCS中)。

深入DXF

 

此节讨论了涉及DXF组码的高级概念。

数据库对象

   

   

AutoCAD图形主要由有组织的数据库对象的容器组成。每个数据库对象都有如下条目:

句柄,对于图形/DXF文件其值唯一,且在图形的生命周期中不变(常量)。从AutoCAD版本10起已存在此格式,但从AutoCAD版本10

开始,句柄始终被启用;

可选的外部数据表,与图元一样从AutoCAD版本11起开始出现;

可选的Persistentreactor表;

可选的扩展词典的所有关系指针,此指针依次指向被应用程序放入词典的子对象;

符号表和符号表记录都是数据库对象,因此它们既可以有句柄,也可以在它们的DXF文件中具有外部数据和Persistentreactors。

   

   

PersistentInter-Object引用句柄

组码范围集允许对象直接指定同一图形中其他对象的参照。伴随四种范围有四种关系类型可以被指定:

软键指针句柄

硬键指针句柄

软键从属句柄

硬键从属句柄

这些句柄类型在AutoLISP中作为图元名出现,在ADSRX作为ads_name出现,也可以作为源于ARX的like-named

类出现。当其他对象的参照保持不变时,这些值始终被维护在插入、外部参照和写块操作中,以便更新那些(在被复制的集中的)对象间的参照,使它们指向被复制的对象。

同样,定义的"任意"句柄的组码范围允许方便的存储句柄值,这些句柄值不被转化成图元名,但在插入、外部参照或写块操作中被转换。

注意如果使用外部数据组码1005存储句柄,则这些句柄被视为软键指针句柄,这意味着当对象组被复制或被插入另一个图形中时,有关对象间的参照将被转换。尽管在

AutoLISP和ADSRX中外部数据条目1005始终作为句柄返回,但所有参照句柄组码范围都表示为"图元名"(在AutoLISP中)或

ads_name结构(在ADSRX中)。

   

   

指针和所有关系参照

指针是一种只表示对象的用法但不占有对象或对其负有责任的参照。指针参照表示对象以某些方式使用其他对象,并分配获取其他对象路径。

所有关系参照表示所有者对象对具有所有者句柄的对象负有责任。所有关系参照指定完整的DWG和DXF

文件的常用写入方式(例如少数关键根对象的开始)及所有者句柄的写入方式。

一个对象可以有任意多个指针参照与它相联系,但它只能有一个所有者。

   

   

硬键参照和软键参照

指针或从属的硬键参照都可以避免对象被清理,但软键参照却不行。

在AutoCAD中,块定义和复杂图元是它们的元素的硬键从属,符号表和词典是它们的元素的软键从属。多段线图元是它们的顶点和seqend

图元的硬键从属,插入图元是它们的属性和seqend图元的硬键从属。

当建立另一个对象的参照类型时,应首先考虑此对象是否被保护起来,不受命令PURGE的影响。

任意句柄

任意句柄比较特殊,在AutoCAD内部,它们不被转化成永久任务标识符,在AutoLISP

中,它们不被转化成图元名,诸如此类。它们被存储为句柄,当在图形合并操作过程中句柄值被转换时,任意句柄被忽略。

在所有环境下,任意句柄都能被函数handent转换成当前图形的图元名。在引用外部DXF和DWG文件中的对象时经常用到任意句柄。

   

   

   

组码1005

外部数据组码1005与软键指针具有相同的特性和语义,这意味着无论主对象在何时被合并到另一个的图形中,它们都可以被转换,但在AutoCAD

中不能转换成永久任务标识符,在AutoLISP和ADSRX中不能转换成图元名。此组码被存储为句柄。

   

   

   

   

子类标记

在为组数据流分类过程中的一个主要问题是一个单一对象可能由几个分类成员组成,不同的开发者可能根据不同的继承标准进行分类。因为每个继承标准都可以独立的发展,所以必须使类分类成员彼此隔离。

所有类分类成员都必须出现在它们的实例数据的指定类部分(组码100-"子类"标记,其后为类名称字符串)之前。这并不影响定义对象状态,只是为DXF

文件分析者提供了一种控制组码的方法以适应用软件。

例如,具有源自不同类的数据的对象表述如下:

999

FOOGRANDCHILD,definedbyclassAcDbSonOfSonOfFoo,which

999

isderivedfromAcDbSonOfFoo

0

FOOGRANDCHILD

5

C2

100

AcDbFoo

999

Uses10/20/30groupcodes

10

1.1

20

2.3

30

7.3

100

AcDbSonOfFoo

999

Alsouses10/20/30groupcodes,foradifferentpurpose

10

1.1

20

2.3

30

7.3

100

AcDbSonOfSonOfFoo

999

Alsouses10/20/30groupcodes,foryetanotherpurpose

10

13.2

20

23.1

30

31.2

999

NowfortheXdata

1001

APP_1

1070

45

1001

APP_2

1004

18A5B3EF2C199A

   

   

   

扩展词典和PersistentReactors

扩展词典是一个存储了词典对象句柄的可选序列,词典对象属于可以包含有序条目的当前对象。此功能模块承认任何数据对象的任意数据对象附件。任何图元或对象都可以拥有此区域。

Persistentreactors是一个存储(在当前对象中注册它们自己为reactors的)对象的对象句柄。任何图元或对象都可以拥有此区域。

扩展数据

扩展数据是由AutoLISP或ARX应用程序创建的。如果图元包括扩展数据,则扩展数据将跟在普通定义数据之后。从1000到1071

的组码用来描述扩展数据。下面是一个包含扩展数据的图元的例子,此图元出现在DXF文件格式中。

普通图元定义数据:

0

INSERT

5

F11

100

AcDbEntity

8

TOP

100

AcDbBlockReference

2

BLOCK_A

10

0.0

20

0.0

30

0.0

扩展图元定义数据:

1001

AME_SOL

1002

{

1070

0

1071

1.95059E+06

1070

519

1010

2.54717

1020

2.122642

1030

2.049201

1005

ECD

1005

EE9

1005

0

1040

0.0

1040

1.0

1000

MILD_STEEL

组码1001表示扩展数据的开始。与普通图元组码相比,在扩展数据中相同的组码可以出现多次,而且次序非常重要。

扩展数据按照已注册的应用程序名称编组。每一个注册应用程序的组都从组码1001开始,其组值为表示应用程序名称的字符串。注册应用程序名称符合APPID

符号表条目。

如果需要,应用程序可以使用多个APPID名称。APPID名称是永久性的,尽管那些在图形中非当前使用的APPID名称将被清理。每个APPID

名称可以拥有一个附着到每个对象上的数据组。在应用程序的组码中,扩展数据组的序列及其含意由应用程序定义。

扩展数据组码的说明如下表:

扩展数据组码及其说明

图元名组码说明

字符串1000扩展数据中的字符串最长为255个字节(第256个字符将被保存为空字符)。

应用程序名称1001

也是字符串值字符串名称最长为31个字节(第32个字符将被保存为空字符)。

注意:请不要向您的扩展数据中添加组码1001,因为AutoCAD认为组码1001是新的应用程序扩展数据组的开始。

控制字符串1002一个扩展数据控制字符串即可以是"{"也可以是

"}"。这些大括号可以使应用程序通过把数据细分为表来组织它们的数据。左大括号开始表,右大括号结束最近的表。表可以被嵌套。

当AutoCAD为应用程序读取扩展数据时,它首先检查大括号是否配对。

图层名称1003与扩展数据相联系的图层的名称。

二进制数据1004二进制数据被组织到可变长度的数据组中。每个数据组最长为127个字节。在ASCIIDXF文件中,二进制数据被表示为十六进制数字字符串,每个二进制字节两个字符。

数据库句柄1005图形数据库中的图元句柄。

注意:当使用INSERT、INSERT*、XREF绑定、XBIND或部分DXFIN

将拥有句柄和扩展数据句柄的图形输入另一个图形时,扩展数据句柄将以某种方式转换成它们相对应的图元句柄,以此来维护它们的绑定。在EXPLODE

块操作或其他任何AutoCAD操作中也如此进行。当AUDIT检测到扩展数据句柄与图形文件中的图元句柄不匹配时,它认为这是一个错误。如果

AUDIT修复图元,它将设置句柄为0。

3个实数1010,1020,1030三个实数值的次序为X、Y和Z。它们可被用于表示点或矢量记录。AutoCAD不改变它们的值。

世界空间位置1011,1021,1031与简单的三维点不同,世界空间坐标可被移动、缩放、旋转和连同属于扩展数据的上级图元一起产生镜像。当命令STRETCH被用于上级图元且此点位于所选窗口中时,世界空间位置也可被拉伸。

世界空间位移1012,1022,1032同样三维点也可被缩放,旋转和连同上级图元一起产生镜像(但不能被移动或拉伸)。

世界方向1013,1023,1033同样三维点也可被旋转和连同上级图元一起产生镜像(但不能被移动、缩放或拉伸)。

实数1040一个实数值

距离1041一个可连同上级图元一起被缩放的实数值。

缩放比例1042同样是一个可连同上级图元一起被缩放的实数值。与距离的区别在于此图元为应用程序定义的。

Integer1070一个16位整数(有符号的或无符号的)。

Long1071一个32位符号(长型)整数。

 

   

   

   

   

对象坐标系统(OCS)

要在图形数据库中保存空间(在DXF文件中),与每个图元关联的点将以图元的自己的对象坐标系统(OCS)表示。在早先版本的AutoCAD中OCS被称作ECS。在OCS中,描述三维空间中图元位置所需要的附加信息是描述OCS的Z轴的三维矢量和标高值。

如果给定Z轴(或拉伸)方向,可以通过平移三维空间中的原点和围绕Z轴旋转X和Y轴定义无穷多的坐标系。但对于相同的Z轴方向,只有一个OCS,它具有如下特性:

它的原点与WCS原点一致;

XY平面中的X和Y轴方向以任意方式确定且一旦确定便固定不变。AutoCAD使用任意轴算法来确定此坐标系(请参见任意轴算法!AL(`XREF_24259_al_u05_c',1))。

对于一些图元,OCS等同于WCS且所有点(DXF组10-37)以世界坐标表示,请参见下表:

与图元类型联系的坐标系统

图元说明

三维图元,如:直线、点、三维面、三维多段线、三维顶点、三维网格和三维网格顶点。这些图元不位于某一特别的平面中,所有的点都以世界坐标表示。在这些图元中只有直线和点可被拉伸,它们的拉伸方向可以不同于世界坐标系的Z轴方向。

二维图元图元,如:圆、圆弧、填充、宽线、文字、属性、属性定义、形、插入、二维多段线、二维顶点、优化多段线、图案填充和图像。这些图元本质上是平面的,所有的点都以对象坐标表示。这些图元都能被拉伸,它们的拉伸方向可不同于世界坐标系的Z轴方向。

标注一些标注点可以用WCS表示,一些标注点可以用OCS表示。

视口以世界坐标系表示。

 

一旦AutoCAD为给定的图元确定OCS,此OCS使用如下:

与图元存储在一起的标高值表示XY平面(与包含图元的平面重合)与WCS原点间的位移(沿Z轴方向),用户定义标高的大小并不重要。

任何UCS中二维点都被转换成相应的OCS中的二维点,这些点将依据UCS来平移和旋转。

转换过程中可能出现下列情况:

当用户获得一个图元后,不能可靠地找出究竟是哪一个UCS在起作用;

当用户按给定的UCS输入图元的XY坐标后,进行DXFOUT时,在DXF文件中可能不承认这些坐标,为了使用这些值,您必须知道AutoCAD计算X和Y轴的方法。

(与图元存储在一起的且被输出到DXF文件中的)标高值是UCS的XY面与OCS的XY平面的Z坐标的总差值,此刻此图元的用户指定的标高值则被绘制。

   

   

   

   

任意轴算法

在AutoCAD内部使用任意轴算法为所有使用对象坐标系的对象生成对象坐标系。

利用给定的作为坐标系统Z轴的单位长度矢量,通过任意轴算法可以生成坐标系统的X轴,再根据右手法则确定Y轴。

此方法用来检查给定的Z轴(也被称作法向量),看它是否与世界坐标系的Z轴的正负半轴接近:如果接近,则用给定的Z轴叉积世界坐标系的Y轴来求取任意X轴;如果不接近,则用给定的Z轴叉积世界坐标系的Z轴来求取任意X轴。决定是否接近的边界值根据易于计算和便于在机器间交换数据的原则确定。该边界值现取值1/64,此值正好既能用六个十进制分数数字表示也能用六个二进制分数位表示。

算法描绘如下(假定所有矢量都是用世界坐标系表示的三维矢量):

设给定的法向量为N;

设世界坐标系的Y轴为Wy,其值始终为(0,1,0);

设世界坐标系的Z轴为Wz,其值始终为(0,0,1);

设根据法向量N确定的任意X和Y轴为Ax和Ay,N也可被称为Az(任意Z轴),它们的求取方法如下:

如果(abs(Nx)<1/64)且(abs(Ny)<1/64)则

Ax=WyXN(此处"X"为叉积运算)。

否则,

Ax=WzXN.

调整Ax比例到单位长度。

求取Ay矢量的方法如下:

Ay=NXAx.调整Ay比例到单位长度。

 

posted @ 2015-05-10 23:19  我是一个NLPer哦啦啦  阅读(40251)  评论(5编辑  收藏  举报