1、.DXF 文档详解DXF 的基本惯例DXF 格式是特定版本 AutoCAD 图形文件中所包含的全部信息的标记数据的一种表示方法。标记数据的意思是指在每个数据元素前都带一个称为组码的整数。组码的值表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意。实际上,图形文件中所有用户指定的信息都能够以 DXF 文件格式表示。在 AutoLISP 和 ARX 应用程序中使用的 DXF 格式与上述格式基本相同,只是在某些数据组上存在着细微的差别。如不作特殊说明,本节中所出现的组码都可以应用于 DXF 文件、AutoLISP 应用程序和 ARX 应用程序。当组码说明对于应用程序和 DXF
2、 文件有所不同时(或只适用于其中之一) ,在组码的说明前有如下提示符:APP 只用于应用程序的说明DXF 只用于 DXF 文件的说明如果组码说明对 DXF 文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。组码范围组码将与组码关联的值(组值)定义为整型、浮点数型或字符串型。具体说明如下表:组码范围 组码范围组值类型0-9 字符串(最多 255 个字符,对于 UNICODE 字符串则更少)10-59 双精度三维点60-79 16 位整数值90-99 32 位整数值100 字符串(最多 255 个字符,对于 UNICODE 字符串则更少)102 字符串(最多 255 个字符,对于 UN
3、ICODE 字符串则更少)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 位整数值按数字次序排列的组码下表给出了组码(或组码范围)及其说明。在表中, “固定”表示该组码的
4、用途固定不变,非固定组码的用途将随上下文变化。按数字次序排列的图元组码组码说明-5APP: persistentreactor 链表-4APP:条件运算符(仅用于 ssget)-3APP:扩展数据(XDATA)标记(固定)-2APP:图元名引用(固定)-1APP:图元名。每次打开图形时它都改变,且不被保存。 (固定)0 表示图元类型的文字字符串(固定)1 图元的主要文字值2 名称(属性标记、块名称等)3-4 其他的文字值或名称值.5 图元句柄。最多 16 位十六进制数字的文字字符串(固定)6 线型名(固定)7 文字样式名(固定)8 图层名(固定)9 DXF:变量名标识符(仅用于 DXF 文件的
5、 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 浮点值(文字高度、比
6、例因子等)48 线型比例。浮点标量值。缺省值适用于所有图元类型。49 可重复的浮点值。一个图元中的可变长度表(例如 LTYPE 表中的虚线长度)中可出现多个组码 49。组码 7x 总是在第一个组码 49 前出现,用于指定表的长度。50-58 角度(在 DXF 文件中单位为度,在 AutoLISP 和 ARX 应用程序中单位为弧度) 。60 表示图元可见性的整数值。不赋值或值为 0 时表示可见;为 1 时表示不可见。62 颜色代码(固定)66 “图元跟随” 标志(固定)67 空间,即模型空间或图纸空间(固定)68 APP:表示视口打开但不可见、未激活或者关闭。69 APP:视口标识数字。70-7
7、8 整数值,如重复部分的计数器、标志位或模式等。90-99 32 位整数值100 子类数据标记(把继承下来的类名当作字符串) 。由具体类继承下来的所有对象和图元类都必须有此项。此标记用于分离某个对象中由不同的类定义的数据。它也满足从 ARX 继承下来的每个独立的具体类的 DXF 命名需要(请参见子类标记!AL(XREF_11832_al_u05_c,1)) 。102 控制字符串,其后为“”或“。除了字符串必须以 “开始外,它与外部数据组码 1002 类似。其后可跟任意字符串,且此字符串的解释取决于应用程序。另一个可用的控制字符串为“,它标识组的结束。如上所述,除了在执行图形核查操作期间外 Au
8、toCAD 一般不解释这些字符串;它们仅用于应用程序。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 文件或图形
9、中的其他对象的软键指针,在执行 INSERT和 XREF 操作时被转化。340-349 硬键指针句柄。任意指向同一 DXF 文件或图形中的其他对象的硬键指针,在执行 INSERT和 XREF 操作时被转化。350-359 软键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意软键从属链接,在执行INSERT 和 XREF 操作时被转化。360-369 硬键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意硬键从属链接,在执行.INSERT 和 XREF 操作时被转化。999 DXF: 999 组码表示其后为注释字符串行。DXFOUT 不在 DXF 输出文件中包括此组;DXFIN 能
10、识别词组码,但忽略其后的注释。通过 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 扩展数据
11、中的三维世界空间位置: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 位符号
12、整数。对象和图元的组码在 DXF 格式中,对象的定义与图元的定义不同:图元有图形表示,而对象则没有图形表示。例如,词典是对象而不是图元。对象通常作为非图形对象来使用,图元则作为图形对象来使用。在 DXF 文件中,图元可以出现在 BLOCK 和 ENTITIESE 区域中。两个区域中图元的用法一样。某些定义图元的组码始终会出现,而其他的组码仅在它们的值与缺省值不同时才出现。读取 DXF 文件的程序不应该假定说明图元的组码是按照给定次序出现的。与说明图元的组码相连的0 组码表示此图元已结束。0 组码将开始新图元或表示此区域已结束。注意如果用户以表驱动方式(即忽略未定义的组码,且对图元中的组码次序不
13、做任何假定)编写DXF 处理程序,那么该程序将比较容易针对 AutoCAD 的后续版本做调整。因为 AutoCAD 的性能将不断得到增强,所以图元中将添加一些新的组码以提供更多的功能。.读取 DXF 格式文件OpenGL 是美国 SGI 公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL 都能实现高性能的三维图形功能。OpenGL 本身不仅提供对简单图元的操作和控制,还提供了许多函数用于复杂物体的建模。但是,我们通常喜欢使用 AutoCAD 和 3DS 及3Dmax 等工具来建立模型,并且我们已经有了很多这样的模型,那么我们如何才能资源共享,
14、避免重复劳动呢?利用 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 )这一段含有块定义实体,这些实体描述了图形种组成每个
15、块的实体。4.实体段(ENTITIES)这一段含有实体,包括任何块的调用。5.ENDOFFILE(文件结束)下面是对 DXF 的基本结构举一实例进行说明:0 0 后接 SECTION SECTION 表明这是一个段的开始2 2 后接的是段名 HEADER 说明该段是 HEADER 段(标题段)9$ACADVER 文件是由 AUTOCAD 产生的1AC10089 9 后接$UCSORG $UCSORG 用户坐标系原点在世界坐标系中的坐标10 10 对应 X 0.0X 的值20 20 对应 Y 0.0Y 的值30 30 对应 Z 0.0Z 的值9 $UCSXDIR 这是一段不太相关的部分,略去10
16、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 表明这是一个段的
17、开始2 2 后接的是段名 TABLES 说明该段是 TABLES 段(表段)该段对我们不太相关,此处略去不进行说明0 0 后接 ENDSEC ENDSEC 说明这一段结束了0 0 后接 SECTION SECTION 表明这是一个段的开始2 2 后接的是段名 ENTITIES 说明该段是 ENTITIES 段(实体段)这是我们要详细说明的段,该段包含了所有实体的 POLYLINE 点的坐标和组成面的点序。0 后接 POLYLINE8 表明以下数据是对于一个新的实体;OBJECT018 后接的字符串是这个实体的名称66170 从 66 1 到 70 6464 说明该实体是由许多小平面组成的713
18、8 71 38 说明该实体共有 38 个点7272 72 72 说明该实体由 72 个三角形构成00VERTEXVERTEX 表明后面紧跟着的是实体的数据8OBJECT0110 对应 X 坐标 -163.925293X 的值20 对应 Y 坐标 -17.772665Y 的值30 对应 Z 坐标 128.929947Z 的值70 70 192192 表明上面的数据信息是点的坐标0 每一个从 0VERTEX 到 70 192 之间 VERTEX 的一小段是点的坐标.701920VERTEX8OBJECT01100200300 当 70 后跟 128 时,表明该实体的每个点的坐标数据已经记录 70
19、完了,下面紧跟着的是记录这些点是以什么样的方式组合成各 128 个三角形。71 71、72、73 后面跟着的值表明某一个三角形是第二个、第 2 一个、第四个点构成的,点的顺序是按照记入 DXF 文件的顺 72 序。当某一值为负数时,则表明该点到下一点的线不要画出,1 如果要画三维实体的线型图,就必须使用这一特性,否则线条 73 将会出现紊乱。-40VERTEX0 0 后接 SEQEND 表明该实体的数据已经全部记录完了SEQEND.8OBJECT010POLYLINE0 后接 POLYLINE 表明以下又是一个新的实体0ENDSEC0 后接 ENDSEC 表明这是该段的结尾0EOF0 后接 E
20、OF 表明这个 DXF 文件结束了在 DXF 文件中,我们最关心的是如何得到模型上各个点的坐标,并且用这些点连成许多个三用形,构成面,进而绘制出整个模型。在 DXF 文件的结构中,我们已经看到,DXF 文件先叙述实体上各个点的坐标,然后叙述实体上有多少个面,每个面由哪些点构成。这样,我们至少需要 2 个数组来存储一个实体的信息,一个用于存储点的坐标,一个用于存储点序,我们可以把这 2 个数组放到一个结构中,如果模型中实体的数目不止一个是,我们就用这个结构来定义一个数组。在本文中,我们使用VisualC+6.0 来写一个读取 DXF 文件的小程序。在实际应用中,模型中实体的数目以及实体中点和面的
21、数目都是不定的,为了有效地利用内存,我们选择 MFC 类库中的聚合类 CobArray 类所创建的对象 vertex,sequence 来存储和管理实体的点坐标和点序。CObArray 类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为UCSORG 的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。通过读取EXTMAX, EXTMIN 可以获知三维实体在世界坐标
22、系中的范围,而其它部分的信息只有读完了全部DXF 文件后才可以通过计算确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的 DXF 文件基本结构读出。现在我们开始写这个程序。先建立一个头文件 HEAD.H 定义如下的结构:VERTEX,SEQUENCE 和类 CVertex,Csequence。typedefstructfloatx,y,z;VERTEX;/结构 VERTEX 用来存储点的坐标typedefstructinta,b,c;SEQUENCE;/结构 SEQUENCE 用来存储实体的面的组成typedefstructcharobName20;/*定义结构 myVer
23、tex 来存储实体的名字,点的坐标以及面的组成,CObArrayVertex;其中,点的坐标和面的组成是由聚合类 CObArray 定义的对象来 CObArraySequence;在存储的,我们可以把VERTEX 结构和 SEQUENCE 结构加入到这两个对象中保存 */myVertex;classCVertex:publicCObject因为 CObArray 类的对象中只能加入由 CObject 派生的对象,所以 protected:我们还需要建立一个由 CObject 类派生的 CVertex 类。在 CVertex 类 CVertex();中有一个 VERTEX 结构的变量:m_ver
24、tex,信息实际上是存储在这 DECLARE_DYNCREATE(CVertex)个变量中的。virtualCVertex();/Attributespublic:我们还需要建立一个由 CObject 类派生的 CVertex 类。在 CVertex 类 CVertex(VERTEX中有一个 VERTEX 结构的变量:m_vertex ,信息实际上是存储在这个变量中的,函数CVertex(VERTEX存入 CObArray 对象中。.;classCSequence:publicCObject这也是一个由 CObject 类派生的类,作用和刚才 CVertex 类一样,protected:只不过
25、 Csequence 类是用来存储实体中面的组成(点序)的。CSequence();DECLARE_DYNCREATE(CSequence)virtualCSequence();public:CSequence(SEQUENCESEQUENCEm_sequence;声明好结构与类后,我们还需要建立一个.CPP 文件,来定义几个函数。IMPLEMENT_DYNCREATE(CVertex,CObject)CVertex:CVertex()CVertex:CVertex()构造函数和销毁函数都是空的CVertex:CVertex(VERTEX它是这个类中最重要的一环。IMPLEMENT_DYNCR
26、EATE(CSequence,CObject)CSequence:CSequence()Csequence 类的定义与 CVertex 类的定义差不多,只是其中的参数 m_sequence 的类型和 CVertex 类中的参数 my_vertex 的类型不一样CSequence:CSequence()CSequence:CSequence(SEQUENCE然后用结构 myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。intCJupiterView:
27、getObjectNumber()charstr110,str210;charname=“theFirst“;intnum;num=0;FILE*fp;fp=fopen(“data.dxf“,“r“);打开 DXF 文件,data.dxfwhile(!feof(fp)实体数就加一。if(strcmp(str1,“VERTEX“)=0).fscanf(fp,“%sn“,str2);打开 DXF 文件,data.dxffscanf(fp,“%sn“,str2);这个函数是根据实体的名字来判断实体的个数的if(strcmp(name,str2)!=0)所以函数只读取实体的名字,一旦出现新的实体名字,
28、实体数就加一。strcpy(name,str2);num+;fclose(fp);returnnum;以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。voidCJupiterView:OnFileInput()/TODO:AddyourcommandhandlercodehereFILE*fp,*fp2;inti,k,j;floattempX,tempY,tempZ;floatxMin,yMin,zMin,xMax,yMax,zMax,Max;intlab;charstr120,str220,str20,HT;cha
29、rmyName20;intmyNumber;VERTEXtempVertex;SEQUENCEtempSequence;typedefstructfloatx,y,z,max;MAX;MAXmax;HT=9;objectNumber=getObjectNumber();myData=newmyVertexobjectNumber;fp=fopen(FileName,“r“);i=0;j=0;k=0;myNumber=-1;strcpy(myName,“ObjectName“);while(!feof(fp)if(strcmp(str,“$EXTMIN“)=0)fscanf(fp,“%sn“,s
30、tr1);fscanf(fp,“%fn“,fscanf(fp,“%sn“,str1);.fscanf(fp,“%fn“,fscanf(fp,“%sn“,str1);fscanf(fp,“%fn“,if(strcmp(str,“$EXTMAX“)=0)fscanf(fp,“%sn“,str1);fscanf(fp,“%fn“,fscanf(fp,“%sn“,str1);fscanf(fp,“%fn“,fscanf(fp,“%sn“,str1);fscanf(fp,“%fn“,max.x=max(abs(xMax),abs(xMin);max.y=max(abs(yMax),abs(yMin);m
31、ax.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,“%sn“,str1);fscanf(fp,“%sn“,str1);if(strcmp(myName,str1)!=0)myNumber+;strcpy(myName,str1);strcpy(myData+myNumber)-obName,myName);fscanf(fp,“%sn“,str2);fscanf(fp,“%fn“,fscanf(fp,“%sn“,
32、str2);fscanf(fp,“%fn“,fscanf(fp,“%sn“,str2);fscanf(fp,“%fn“,fscanf(fp,“%dn“,fscanf(fp,“%dn“,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,“%sn“,str1);fscanf(fp,“%fn“,fscanf(fp,“%sn
33、“,str1);fscanf(fp,“%fn“,fscanf(fp,“%sn“,str1);fscanf(fp,“%fn“,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 给出变量名,并由其后的组码
34、提供变量值。注意:AutoCAD 命令参考中的附录 B“系统变量”中的一些变量不出现在 DXF 文件中。通过执行函数 getvar,应用程序可以检索这些变量的值。下面是 DXF 文件的 HEADER 区域的样例:0 SECTION2 HEADER 区域的开始9 $对每个表头变量重复0 HEADER 区域的结束=下表列出了保存在 DXF 文件中的变量。=DXF 系统变量 变量组码说明$ACADVER 1AutoCAD 图形数据库版本号: AC1006=R10,AC1009=R11 和 R12,AC1012=R13,AC1014=R14,AC1018=?$ACADMAINTVER 70 76$AN
35、GBASE 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$
36、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.流逝计时器变量($TDINDWG 和$TDUSRTIMER )具有相似的格式:.TABLES 区域本节描述的组码既出现在 DXF 文件中又被应用程序使用。TABLES 区域中包括多个表,每个表中条目数目可变
37、。AutoLISP 和 ARX 应用程序在图元定义表中也使用这些组码。如不作特殊说明,本节中所出现的组码都可以应用于 DXF 文件、AutoLISP 应用程序和 ARX 应用程序。当组码说明对于应用程序和 DXF 文件有所不同时(或只适用于其中之一) ,在组码的说明前会有如下提示符:APP 用于应用程序的说明DXF 用于 DXF 文件的说明如果组码说明对 DXF 文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。DXF 文件中的符号表表的次序可以改变,但 LTYPE 表一般放在 LAYER 之前。每个表都由带有标签 TABLE 的组码 0 引入。其后是标识具体表(APPID、DIM
38、STYLE、LAYER 、 LTYPE、STYLE、UCS、VIEW 、VPORT 或BLOCK_RECORD)的组码 2、组码 5(句柄) 、组码 100(AcDbSymbolTable 子类标记)和组码 70(此组码用于指定其后表的最大条目数) 。表名以大写字符形式输出。DIMSTYLE 句柄使用组码 105 而不是组码 5。图形中的表可以包含已删除的条目,但这些条目不写入 DXF 文件,因此表头后的表条目数可能少于组码 70 所指定的数目。所以不要用组码 70 中的数字作为读取表的索引。读取 DXF 文件的程序会根据组码 70 中的数字分配一个足够大的数组来存储其后所有的表条目。在每个表
39、的表头后跟随着表条目。每个表条目包括指定条目类型的组码 0(与表名称相同,如LTYPE 或 LAYER) 、给出表条目名称的组码 2、指定与表条目相关的标志的组码 70 和其他给出表条目值的组码组成。每个表条目的结尾都由带有组值 ENDTAB 的组码 0 标记。下面是一个 DXF 文件中的 TABLES 区域的样例:0 SECTION2 TABLES 区域的开始0 TABLE2 5 70 相同的表组码,对每一个条目重复0 5 .表条目数据,对每一个表记录重复0 表结束0 TABLES 区域的结束符号表记录和符号表都是数据库对象。至少,在 AutoCAD 的所有主要用法中,这意味着符号表记录对象
40、和符号表对象的组码 2 后都存在一个句柄。DIMSTYLE 表是系统中唯一使用句柄组码 105 的记录类型(以前它也使用组码 5) 。除非在DIMSTYLE 表区域中,程序员一般不必留心此例外情况,因为只有在 DIMSTYLE 表区域中才会发生此例外情况。符号表组码下表列出了适用于所有符号表的组码:适用于所有符号表的组码 组码说明-1 APP:图元名(每次打开图形时改变)0 对象类型(TABLE)2 表名称5 句柄100 子类标记(AcDbSymbolTable).70 表中的最大条目数。符号表条目的公用组码下表显示了适用于所有符号表的组码,可选的组码以灰色显示。当用户通过图元类型引用组码表时
41、,应注意表中不仅包括与特定图元关联的组码,也会包括下表列出的组码。适用于所有符号表条目的组码 组码说明-1 APP:图元名(每次打开图形时改变)0 图元类型(表名称)5 句柄(除 DIMSTYLE 外的所有表)105 句柄(只用于 DIMSTYLE 表)102 应用程序定义的组码的开始“application_name“。例如,“ACAD_REACTORS“ /表示 AutoCADPersistentreactors 组的开始/application-defined codes 组 102 中的组码和组值由/应用程序定义/102 组结束“100 子类标记(AcDbSymbolTableReco
42、rd)下表列出了当 Persistentreactors 被附着到对象上时输出的组码:ACAD_REACTORS 记录 组码说明102 “ACAD_REACTORS“表示 AutoCADPersistentreactors 组的开始330 指向所有者词典的软键指针标识符/句柄102 组结束“下表列出了当扩展词典被附着到对象上时输出的组码:ACAD_XDICTIONARY 记录 组码说明102 “ACAD_XDICTIONARY“表示扩展词典组码的开始360 指向所有者词典的硬键指针标识符/句柄102 组结束“公用组码 70 标志-位编码值的说明如下表。其他适用于 LAYER、STYLE 和 V
43、IEW 表条目的组码 70值则在另外的相关表中说明。适用于所有表条目的组码 70 的位编码值位编码值说明16 如果设置该位,表示表条目依赖于外部参照32 如果此位和位 16 都被设置,则表示所依赖的外部参照已被成功融入。64 如果设置该位,表示在上一次图形编辑时图形中至少有一个图元引用了该表条目。 (此标志一般用于 AutoCAD 命令。大部分读取 DXF文件的程序将其忽略,对于写 DXF 文件的程序也无须设置它。 )APPID下列组码适用于 APPID 符号表条目:APPID 组码 组码说明100 子类标记(AcDbRegAppTableRecord)2 用户提供的应用程序名(用于扩展数据)
44、 。此表条目维护所有已注册的应用程序名。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
45、符号表条目。关于 DIMSTYLE 符号表条目的详细信息,请参见AutoCAD 命令参考中的附录 B“系统变量”。DIMSTYLE 组码组码说明100 子类标记(AcDbDimStyleTableRecord)2 标注样式名70 标准标志值(请参见符号表条目的公用组码!AL(XREF_30203_al_u05_c,1)。 )3DIMPOST4DIMAPOST5DIMBLK6DIMBLK17DIMBLK240DIMSCALE41DIMASZ42DIMEXO43DIMDLI44DIMEXE45DIMRND46DIMDLE47DIMTP48DIMTM140DIMTXT141DIMCEN142DIMT
46、SZ143DIMALTF144DIMLFAC145DIMTVP146DIMTFAC147DIMGAP71DIMTOL72DIMLIM73DIMTIH74DIMTOH75DIMSE176DIMSE277DIMTAD78DIMZIN170DIMALT171DIMALTD172DIMTOFL173DIMSAH174DIMTIX175DIMSOXD176DIMDLRD177DIMCLRE178DIMCLRT270DIMUNIT271DIMDEC272DIMTDEC273DIMALTU274DIMALTTD340 被引用的 STYLE 对象的句柄(用于代替储存 DIMTXSTY 值)275DIMAUNI
47、T.280DIMJUST281DIMSD1282DIMSD2283DIMTOLJ284DIMTZIN285DIMALTZ286DIMALTTZ287DIMFIT288DIMUPTLAYER下列组码适用于 LAYER 符号表条目。LAYER 组码 组码说明100 子类标记(AcDbSymbolTableRecord)2 图层名70 标准标志。 (清参见符号表条目的公用组码!AL(XREF_30203_al_u05_c,1)。 )除标准标志外,以下(位编码)值也适用于图层:1=冻结图层,否则图层解冻;2=在新视口中缺省设置为冻结图层;4=锁定图层;62 颜色数(如果为负则图层被关闭)6 线型名在执
48、行 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 复杂形的组码(如果组码 740,每个元素一个条目)如果组码 74=2,则值为 1。340 STYLE 对象指针(如果组码 740,每个元素一个条目) 。46 S=比例值(可选) ,可存在多个这样的条目。50 R=旋转值(可选) ,可存在多个这样的条目。44 X=x 偏移值(可选) ,可存在多个这样的条目。45 Y=y 偏移值(可选) ,可存在多个这样的条目。9 文字字符串(如果组码 74=2,每个元素一个条目) 。执行函数 tblsearch 或 tblnext 时,并不返回组码 74、75、340、46、50