长串excel文本中提取数字提取特定数字后面excel文本中提取数字(从37后面提取)

下次自动登录
现在的位置:
& 综合 & 正文
Linux—文本处理(正则表达式,grep,awk,sed)
文本处理(一)
本文主要讲述正则表达式,grep,awk,sed命令。
3个命令都是针对行进行处理的。
grep: 主要用来进行字符串在文件中的搜索。
示例: grep -l "hello"
awk : 主要用来进行格式化的文件中的域分割及处理。
示例:awk -F : ' { print $1,$6} ' /etc/passwd
sed : 主要用来对文件中的字符串修改,比如替换字符串。
示例:在整行范围内把字符 22 替换为 kokotest,如果没有g标记,则只有每行
第一个匹配的 22 被替换成 kokotest,-i选项指定对输入文件处理。
sed -i 's/22/kokotest/g' /root/soft/iptables
第7章 正则表达式
当从一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(RE:Regular Expression),
正则表达式是一些特殊或不很特殊的字符串模式的集合。
本章设计的基本元字符使用在grep和sed命令中,同时结合{ \ \ }(以字符出现情况进行匹配
的元字符)使用在awk语言中。
基本元字符集及其含义
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1-5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
pattern \ { n \ } 只用来匹配前面pattern出现次数。n为次数
pattern \ { n,\ } m 只含义同上,但次数最少为n
pattern \ { n,m \ } 只含义同上,但pattern出现次数在n与m之间
7.1 使用句点匹配单字符
句点“.”可以匹配任意单字符。例如,如果要匹配一个字符串,以beg开头,中间夹一个
任意字符,那么可以表示为beg.n,“.”可以匹配字符串头,也可以是中间任意字符。
注意:此处是"."号。与文件搜索所使用的单字符?不同,这个"."是用在正则表达式中,
是在grep,sed,awk等命令的模式匹配的地方使用的。
在ls -l命令中,可以匹配一定权限:
. . . x . . x . . x
也就是属主用户,属主用户组,其他用户均具有执行权限。所以:
drwxrwxrw-
-rwxr-xr-x
7.2 在行首以^匹配字符串或字符序列
注意,我们之前使用的ls -l | grep ^d示例中使用了^符号,文件搜索及查看
章节是没有直接使用这个符号的,这个符号只用在正则表达式匹配中。
可以将各种模式结合使用,例如:
^ . . . 4XC . . . .
将匹配所有第4-6个字符为4XC,长度为10个字符的字符串,所以:
假定重新定义匹配模式,行首前4个字符为comp,后面紧跟两个任意字符,并以ing结尾,
一种方法为:
^ comp . .ing
7.3 在行尾以$匹配字符串或字符
假定要匹配以单词trouble结尾的所有行,操作为:
如果要匹配所有空行,执行以下操作:
具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。
7.4 使用*匹配字符串中的单字符或其重复序列
使用此特殊字符匹配任意字符或字符串的重复多次表达式。例如:
将匹配字符u一次或多次:
也就是说u*,等同于0个或多个字符u。所以compt也是其匹配。
7.5 使用\屏蔽一个特殊字符的含义
有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。什么
是特殊字符?一般意义上讲,下列字符可以认为是特殊字符:
$ . ' " * [ ] ^ | () \ + ?
假定要匹配包含字符“ .”的各行而“,”代表匹配任意单字符的特殊字符,因此需要屏蔽
其含义。操作如下:
上述模式不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点。
假定要匹配包含^的各行,将反斜杠放在它前面就可以屏蔽其特殊含义。如下:
如果要在正则表达式中匹配以*.pas结尾的所有文件,可做如下操作:
即可屏蔽字符*的特定含义。
7.6 使用[]匹配一个范围或集合
如果熟知一个字符串匹配操作,应经常使用[ ]模式。
假定要匹配任意一个数字,可以使用:
然而,通过使用“-”符号可以简化操作:
或任意小写字母
要匹配任意字母,则使用:
表明从A-Z、a-z的字母范围。
如要匹配任意字母或数字,模式如下:
[ A-Za-z0-9]
注意,以上都是匹配某个范围内的一个字符。
当前目录下有很多文件(普通文件和目录文件),为了找到当前目录下以大写字母开头的目录文件,
我们可以使用find命令或者ls,grep命令的组合。由于find命令会去当前目录及其子目录搜索,
当子目录中的文件较多时,将会有很多结果输出,很多也是子目录的内容,不符合当前的要求。
所以,我们在这里使用ls,grep命令的组合。
通过 ls -l | grep ^d 获取当前目录下的目录文件列表,如下:
$ ls -l | grep ^d
drwxr-xr-x 2 user007 guest 4096 Dec 4 19:10 source
drwxr-xr-x 4 user007 guest 4096 Jan 9 21:03 obj
drwxr-xr-x 4 user007 guest 4096 Jan 5 11:08 Doc
注意,ls -l命令的输出是文件属性相关信息,不是文件,那么就不能对ls的结果使用find命令。
$ ls -l | grep ^d | grep [A-Z]
drwxr-xr-x 2 user007 guest 4096 Dec 4 19:10 source
drwxr-xr-x 4 user007 guest 4096 Jan 9 21:03 obj
drwxr-xr-x 4 user007 guest 4096 Jan 5 11:08 Doc
为什么没有得到预想的结果?因为grep处理的是一行字符串,而每行字符串的“月份”信息都是以
大写字母开始的,如上面的Jan,Dec。为了得到最终的结果Doc,我们必须分离出最后一列,于是:
$ ls -l | grep ^d | awk '{print $9}' | grep [A-Z]
drwxr-xr-x 4 user007 guest 4096 Jan 5 11:08 Doc
经常使用的正则表达式举例
以字母t,h,e之一开头的行
[Ss]igna[lL]\.
匹配单词signal,signaL,Signal,SignaL之一,但加一句点 (注意此处有转义符)
包含m,a,y大写或小写字母的行
只包含USER的行 (以USER开头,也以USER结尾,中间又无其他字符)
以tty结尾的行
带句点的行
^d..x..x..x
对用户、用户组及其他用户组成员有可执行权限的目录
排除关联目录的目录列表(列表开头不是以字母"l"开头)
大写或小写i或n
匹配行中任意字符串
包括6个字符的行
任意单字符
[a-z][a-z]*
至少一个小写字母
非数字或美元标识
[^0-9A-Za-z]
非数字或字母
1到3中一个数字
第8章 Grep
相信grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许
对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。grep支持
基本正则表达式,也支持其扩展集。grep有三种变形,即:
Grep:标准grep命令,本章大部分篇幅集中讨论此格式。
Egrep:扩展grep,支持基本及扩展的正则表达式,但不支持\q模式范围的应用,与之相
对应的一些更加规范的模式,这里也不予讨论。
Fgrep:快速grep。允许查找字符串而不是一个模式。不要误解单词fast,实际上它与grep
速度相当。
grep一般格式为:
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。
8.1.1 双引号引用
在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。这样做
有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,例如:
“jet plane”,如果不用双引号将其括起来,那么单词plane将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。
在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将
没有返回结果。
在调用模式匹配时,应使用单引号。
8.1.2 grep常用选项
常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
在所有文件中查询单词“ sort it”
$ grep "sort it" *
$ grep -c "48"data.f
grep返回数字4 ,意义是有4行包含字符串“48”。
现在显示包含“48”字符串的4行文本:
$ grep "48" data.f
显示满足匹配模式的所有行行数:
$ grep -n "48" data.f
行数在输出第一列,后跟包含4 8的每一匹配行。
显示所有不包含48的各行:
$ grep -v "48" data.f
当要匹配tab符号时,一种使用方式是\&。示例如下:
test文件的内容为:
所以,当我们需要“筛选”出abc所在的行时,可以按如下示例来:
$ grep "abc\&"
想对应的,如果是使用grep "abc“,结果如下:
$ grep "abc"
缺省情况下,grep是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i选项。
$ grep -i "abc" test
8.2 grep和正则表达式
使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用
正则表达式时最好用单引号括起来,这样可以防止grep中使用的专有模式与一些shell命令的
特殊方式相混淆。
8.2.1 模式范围
示例:(抽取包含483或484的行)
$ grep '48[34]' data.f
8.2.2 不匹配行首
如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始。
$ grep '^[^48]' data.f
8.2.3 设置大小写
使用- i开关可以屏蔽月份Sept的大小写敏感,也可以用[ ]模式。
8.2.4 匹配任意字符
匹配头两个是大写字母,并以C结尾的行。
$ grep '[A-Z] [A-Z]C$' test_file
8.2.5 模式出现几率
抽取包含数字4至少重复出现两次的所有行,方法如下:
$ grep '4\{2,\}' data.f
如果要查询重复出现次数一定的所有行,语法如下,数字9重复出现两次:
$ grep '9\{2\}' data.f
有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数
字8重复出现2到6次,并以3结尾:
$ grep '8\{2,6}3$' myfile
-- not match
-- not match
8.2.6 使用grep匹配“与”,“或”模式
grep 命令加-E 参数,这一扩展允许使用扩展模式匹配。例如,要抽取城市代码为219或
216,方法如下:
$ grep -E '219|216' data.f
8.2.7 匹配空行
结合使用^和$可查询空行。使用- n参数显示实际行数:
$ grep '^$' myfile
8.2.8 匹配特殊字符
查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。假设要查询包含“.”
的所有行,脚本如下:
如要查询文件名conftroll.conf(这是一个配置文件),脚本如下:
$ grep 'conftroll\.conf' myfile
grep允许使用国际字符模式匹配或匹配模式的类名形式。
表8-1 类名及其等价的正则表达式
等价的正则表达式
等价的正则表达式
[[:upper:]]
[[:alnum:]]
[0-9a-zA-Z]
[[:lower:]]
[[:space:]]
空格或tab键
[[:digit:]]
[[:alpha:]]
现举例说明其使用方式。要抽取产品代码,该代码以5开头,后跟至少两个大写字母。使
用的脚本如下:
$ grep '5[[:uppper:]][[:upper:]]' data.f
之前说过,[字符]* 这个组合匹配的结果是包含此字符0个或多个的集合。
举例:testfile文件的内容如下:
那么,我们输入以下命令后的结果分别如下:
$ grep 'l.*s' testfile
是指包含l,s,且l,s之间可有0个,1个,或多个字符。
$ grep 'l.*k.' testfile
是指包含l,k,且l,k之间可有0个,1个,或多个字符。k之后至少要有一个字符。
$ grep 'ooo*' testfile
*与其之前的o一起,那么搜索的匹配是包含2个或更多个连续的字符o的字符串。
如果想屏蔽终端上的错误提示,可以将标准输出和标准错误都重定向到/dev/null。
如: grep "louise" /etc/password & /dev/null 2&&1
egrep代表expression 或extended
grep,适情况而定。egrep接受所有的正则表达式,egrep
的一个显著特性是可以以一个文件作为保存的字符串,然后将之传给egrep作为参数,为此使
用-f开关。如果创建一个名为grepstrings的文件,并输入484和47:
$ cat grepstrings
$ egrep -f grepstrings data.f
上述脚本匹配data.f中包含484或47的所有记录。当匹配大量模式时, - f开关很有用,而在
一个命令行中敲入这些模式显然极为繁琐。
如果要格式化报文或从一个大的文本文件中抽取数据包,那么awk可以完成这些任务。它
在文本浏览和数据的熟练使用上性能优异。
为获得所需信息,文本必须格式化,即用域分隔符划分抽取域。
9.1 调用awk
awk [-F field-seperator]
'commands'
input-file(s)
commands是真正的awk命令
如果设置了- F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域,但
如果未设置- F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现
时,awk命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件
尾或文件不再存在。
执行awk脚本:awk -f awk-script-file
input-files
其中,-f选项指明在文件awk-script-file中的awk脚本。input-file(s)是要使用脚本处理的文件。
使用$1 , $3表示参照第1和第3域,$0表示所有域。举例如下:
为加入tab键,使用tab键速记引用符\t,后面将对速记引用加以详细讨论。也可
以为输出文本加入信息头。本例中加入name和belt及下划线。下划线使用\n,强迫启动新行,
并在\n下一行启动打印文本操作。打印信息头放置在BEGIN模式部分,因为打印信息头被界
定为一个动作,必须用大括号括起来。
$ awk 'BEGIN { print "Name
Belt\n-------------------------------------"}
{ print $1"\t"$4}
END {"----------------------------------\nend-of-report\n"}'
------------------------------
M.ZTansley
------------------------------
end-of-report
当第一次使用awk时,可能被错误信息搅得不知所措,但通过长时间和不断的学习,可总
结出以下规则。在碰到a w k错误时,可相应查找:
? 确保整个awk命令用单引号括起来。
? 确保命令内所有引号成对出现。
? 确保用花括号括起动作语句,用圆括号括起条件语句。
? 可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法。
9.2 元字符
\ ^ $ . [] | () * + ?
其中, + 和 ? 只适用于awk。
+ 使用+ 匹配一个或多个字符。
?匹配模式出现频率。例如使用/XY?Z/匹配XYZ或YZ。
9.2.1 条件操作符
匹配正则表达式
不匹配正则表达式
~ 匹配正则表达式
!~ 不匹配正则表达式
为使一域号匹配正则表达式,使用符号'~’后紧跟正则表达式,也可以用i f语句。a w k
中if后面的条件用()括起来。
观察文件grade.txt,如果只要打印brown腰带级别可知其所在域为field-4,这样可以写出
表达式{if($4~/brown/) print }意即如果field-4包含brown,打印它。如果条件满足,则打印匹
配记录行。可以编写下面脚本,因为这是一个动作,必须用花括号{}括起来。
$ awk '{ if($4~/Brown/) print $0}'
J.Troll 07/99 4842
匹配记录找到时,如果不特别声明, awk缺省打印整条记录。
(2)精确匹配
~得到的结果是包含指定匹配串的行。但如果要精确匹配,需要使用== 。示例如下:
$ awk '$3=="48" {print $0}' grade.txt
(3)不匹配
在~之前加入!即可。下面的例子是找出field-4不包含<span style="font-
【上篇】【下篇】sponsored links
解析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组值类型为整型。 代码表示解释行。 (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文件和应用程序都适用,那么没有提示符;否则将显示适当的提示符。
组码将与组码关联的值(组值)定义为整型、浮点数型或字符串型。具体说明如下表:
组码范围组值类型
字符串(最多255个字符,对于UNICODE字符串则更少)
双精度三维点
16位整数值
32位整数值
字符串(最多255个字符,对于UNICODE字符串则更少)
字符串(最多255个字符,对于UNICODE字符串则更少)
表示十六进制句柄值的字符串
双精度标量浮点值
16位整数值
任意文字字符串
表示二进制数据组的十六进制值的字符串
表示十六进制句柄值的字符串
表示十六进制对象标识符的字符串
注释(字符串)
字符串(最多255个字符;对于UNICODE字符串则更少)
16位整数值
32位整数值
按数字次序排列的组码
下表给出了组码(或组码范围)及其说明。在表中,"固定"表示该组码的用途固定不变,非固定组码的用途将随上下文变化。
按数字次序排列的图元组码
-5APP:persistentreactor链表
-4APP:条件运算符(仅用于ssget)
-3APP:扩展数据(XDATA)标记(固定)
-2APP:图元名引用(固定)
-1APP:图元名。每次打开图形时它都改变,且不被保存。(固定)
表示图元类型的文字字符串(固定)
图元的主要文字值
名称(属性标记、块名称等)
其他的文字值或名称值
图元句柄。最多16位十六进制数字的文字字符串(固定)
线型名(固定)
文字样式名(固定)
图层名(固定)
DXF:变量名标识符(仅用于DXF文件的HEADER区域)。
主要点。此点为直线或文字图元的起点,圆的圆心等等。
DXF:主要点的X值(其后为Y和Z值的组码20和30)
APP:三维点(三个实数构成的表)
DXF:其他点的X值(其后为Y和Z值的组码21-28和31-38)
APP:三维点(三个实数构成的表)
DXF:主要点的Y和Z值
DXF:其他点的Y和Z值
DXF:如果非零,则为图元的标高。只在R11以前的AutoCAD输出的DXF文件中存在
如果非零,则为图元的厚度(固定)
浮点值(文字高度、比例因子等)
线型比例。浮点标量值。缺省值适用于所有图元类型。
可重复的浮点值。一个图元中的可变长度表(例如LTYPE表中的虚线长度)中可出现多个组码49。组码7x总是在第一个组码49前出现,用于指定表的长度。
角度(在DXF文件中单位为度,在AutoLISP和ARX应用程序中单位为弧度)。
表示图元可见性的整数值。不赋值或值为0时表示可见;为1时表示不可见。
颜色代码(固定)
"图元跟随"标志(固定)
空间,即模型空间或图纸空间(固定)
APP:表示视口打开但不可见、未激活或者关闭。
APP:视口标识数字。
整数值,如重复部分的计数器、标志位或模式等。
32位整数值
子类数据标记(把继承下来的类名当作字符串)。由具体类继承下来的所有对象和图元类都必须有此项。此标记用于分离某个对象中由不同的类定义的数据。它也满足从ARX继承下来的每个独立的具体类的DXF命名需要(请参见子类标记!AL(`XREF_11832_al_u05_c',1))。
控制字符串,其后为"{&任意名称&"或"}"。除了字符串必须以"{"开始外,它与外部数据组码1002类似。其后可跟任意字符串,且此字符串的解释取决于应用程序。另一个可用的控制字符串为"}",它标识组的结束。如上所述,除了在执行图形核查操作期间外AutoCAD一般不解释这些字符串;它们仅用于应用程序。
DIMVAR符号表条目对象句柄。
拉伸方向(固定)。
DXF:拉伸方向的X值
APP:三维拉伸方向矢量
DXF:拉伸方向的Y和Z值
任意的文字字符串
任意二进制数据组,与组码1004具有相同表示法和限制:最长为254个字符的十六进制字符串表示最长为127个字节的数据数据组。
任意对象句柄。句柄值保留原样,在执行INSERT和XREF操作时它们不被转化。
软键指针句柄。任意指向同一DXF文件或图形中的其他对象的软键指针,在执行INSERT和XREF操作时被转化。
硬键指针句柄。任意指向同一DXF文件或图形中的其他对象的硬键指针,在执行INSERT和XREF操作时被转化。
软键从属句柄。链接到同一DXF文件或图形中其他对象的任意软键从属链接,在执行INSERT和XREF操作时被转化。
硬键从属句柄。链接到同一DXF文件或图形中其他对象的任意硬键从属链接,在执行INSERT和XREF操作时被转化。
DXF:组码表示其后为注释字符串行。DXFOUT不在DXF输出文件中包括此组;DXFIN能识别词组码,但忽略其后的注释。通过组码,用户可以在所编辑的DXF文件中包括注释。
扩展数据中的ASCII字符串(最长255个字节)。
扩展数据的已注册应用程序名(ASCII字符串,最长31个字节)。
扩展数据控制字符串("{"或"}")。
扩展数据图层名。
扩展数据中的字节数据组(最长127字节)。
扩展数据中的图元句柄。文字字符串,最多16位十六进制数字。
扩展数据中的点
DXF:X值(其后跟组码)
APP:三维点
DXF:点的Y和Z值
扩展数据中的三维世界空间位置:X值(其后跟组码):三维点
DXF:世界空间位置的Y和Z值。
扩展数据中的三维世界空间位移:X值(其后跟组码):三维矢量
DXF:世界空间位移的Y和Z值
扩展数据中的三维世界空间方向
DXF:X值(其后跟组码)
APP:三维矢量
DXF:世界空间方向的Y和Z值
扩展数据浮点值。
扩展数据距离值。
扩展数据比例因子。
扩展数据16位符号整数。
扩展数据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文件的这一节找到,每一个参数具有一个变量名和一个相关值。
这一段包含的指定项的定义,它包括:
a、线形表(LTYPE)
b、层表(LYER)
c、字体表(STYLE)
d、视图表(VIEW)
e、用户坐标系统表(UCS)
f、视窗配置表(VPORT)
g、标注字体表(DIMSTYLE)
h、申请符号表(APPID)
3.块段(BLOCKS)
这一段含有块定义实体,这些实体描述了图形种组成每个块的实体。
4.实体段(ENTITIES)
这一段含有实体,包括任何块的调用。
5.ENDOFFILE(文件结束)
下面是对DXF的基本结构举一实例进行说明:
0后接SECTION
SECTION表明这是一个段的开始
2后接的是段名
HEADER说明该段是HEADER段(标题段)
$ACADVER文件是由AUTOCAD产生的
9后接$UCSORG
$UCSORG用户坐标系原点在世界坐标系中的坐标
$UCSXDIR这是一段不太相关的部分,略去
9后接$EXTMIN
$EXTMIN说明三维实体模型在世界坐标系中的最小值
-163.925293X的值
78.350945Z的值
9后接$EXTMAN
$EXTMAX说明三维实体模型在世界坐标系中的最大值
202.492279X的值
112.634300Y的值
169.945602Z的值
0后接ENDSEC
ENDSEC说明这一段结束了
0后接SECTION
SECTION表明这是一个段的开始
2后接的是段名
TABLES说明该段是TABLES段(表段)
............该段对我们不太相关,此处略去不进行说明
0后接ENDSEC
ENDSEC说明这一段结束了
0后接SECTION
SECTION表明这是一个段的开始
2后接的是段名
ENTITIES说明该段是ENTITIES段(实体段)这是我们要详细说明的段,该段包含了所有实体的POLYLINE点的坐标和组成面的点序。
0后接POLYLINE
表明以下数据是对于一个新的实体;
OBJECT018后接的字符串是这个实体的名称
70从66 1到70 64
64说明该实体是由许多小平面组成的
38 71 38说明该实体共有38个点
72 72 72说明该实体由72个三角形构成
VERTEX表明后面紧跟着的是实体的数据
10对应X坐标
-163.925293X的值
20对应Y坐标
-17.772665Y的值
30对应Z坐标
128.929947Z的值
192表明上面的数据信息是点的坐标
0每一个从0VERTEX到70 192之间VERTEX的一小段是点的坐标
当70后跟128时,表明该实体的每个点的坐标数据已经记录70完了,下面紧跟着的是记录这些点是以什么样的方式组合成各128个三角形。
71、72、73后面跟着的值表明某一个三角形是第二个、第2一个、第四个点构成的,点的顺序是按照记入DXF文件的顺72序。当某一值为负数时,则表明该点到下一点的线不要画出,1如果要画三维实体的线型图,就必须使用这一特性,否则线条73将会出现紊乱。
............
0后接SEQEND表明该实体的数据已经全部记录完了
POLYLINE0后接POLYLINE表明以下又是一个新的实体
............
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用来存储点的坐标
typedefstruct{
}SEQUENCE;
//结构SEQUENCE用来存储实体的面的组成
typedefstruct{
charobName[20];
/*定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArrayV其中,点的坐标和面的组成是由聚合类CObArray定义的对象来CObArrayS在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到这两个对象中保存*/
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_存入CObArray对象中。
classCSequence:publicCObject{这也是一个由CObject类派生的类,作用和刚才CVertex类一样,protected:只不过Csequence类是用来存储实体中面的组成(点序)的。
CSequence();
DECLARE_DYNCREATE(CSequence)
virtual~CSequence();
public:CSequence(SEQUENCE&sequ);
SEQUENCEm_
声明好结构与类后,我们还需要建立一个.CPP文件,来定义几个函数。
IMPLEMENT_DYNCREATE(CVertex,CObject)
CVertex::CVertex()
CVertex::~CVertex()构造函数和销毁函数都是空的
CVertex::CVertex(VERTEX&ver)
{这个函数的作用是:把一个VERTEX结构的数据存入变量m_vertex中m_vertex=它是这个类中最重要的一环。
IMPLEMENT_DYNCREATE(CSequence,CObject)
CSequence::CSequence()
}Csequence类的定义与CVertex类的定义差不多,只是其中的参数m_sequence的类型和CVertex类中的参数my_vertex的类型不一样
CSequence::~CSequence()
CSequence::CSequence(SEQUENCE&sequ)
m_sequence=
然后用结构myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。
定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。
intCJupiterView::getObjectNumber()
charstr1[10],str2[10];
charname[]="theFirst";
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);
fclose(fp);
以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。
voidCJupiterView::OnFileInput()
//TODO:Addyourcommandhandlercodehere
FILE*fp,*fp2;
floattempX,tempY,tempZ;
floatxMin,yMin,zMin,xMax,yMax,zMax,M
charstr1[20],str2[20],str[20],HT;
charmyName[20];
VERTEXtempV
SEQUENCEtempS
typedefstruct{
floatx,y,z,
objectNumber=getObjectNumber();
myData=newmyVertex[objectNumber];
fp=fopen(FileName,"r");
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.
tempVertex.y=tempY/max.
tempVertex.z=tempZ/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区域的样例:
HEADER区域的开始
$&variable&
&groupcode&
对每个表头变量重复
HEADER区域的结束
======================================================================
下表列出了保存在DXF文件中的变量。
======================================================================
DXF系统变量
变量组码说明
AutoCAD图形数据库版本号:
AC1006=R10,AC1009=R11和R12,
AC1012=R13,AC1014=R14,AC1018=?
$ACADMAINTVER
角度的方向
1=角为顺时针方向,0=逆时针方向
属性条目对话框:1=开,0=关
属性可见性:0=无,1=普通,2=全部
INSERT期间的属性提示:1=开,0=关
角的单位格式
角的单位精度
如果非零,则"点标记"模式打开
当前图元颜色代码:0=BYBLOCK,256=BYLAYER
$CELTSCALE
当前图元线型比例
图元线型名称,也可为BYBLOCK或BYLAYER
第一个倒角距离
第二个倒角距离
当前图层名
当前多线对正模式:0=顶端,1=中间,2=底端
当前多线比例
当前多线样式名
坐标显示方式:0=静态的,1=持续更新,2="d&a"格式
控制是否删除对象:0=删除,1=保留
如果非零,则标注中执行换算单位
换算单位小数位数
换算单位比例因子
换算单位标注的公差值的十进制小数位数
控制替换公差值的消零:
0=清除零英尺并精确到零英寸
1=包括零英尺并精确到零英寸
2=包括零英尺并清除零英寸
3=包括零英寸并清除零英尺
所有标注样式族成员(不包括角度)换算单位的单位格式:
1=科学;2=十进制;3=工程;4=建筑(堆叠);5=分数(堆叠);6=建筑;7=分数
控制换算单位标注值的消零:
0=清除零英尺并精确到零英寸
1=包括零英尺并精确到零英寸
2=包括零英尺并清除零英寸
3=包括零英寸并清除零英尺
替换标注后缀
1=创建关联标注,0=绘制独立图元
标注箭头的尺寸
角度标注的单位格式:0=十进制度数;1=度/分/秒;2=百分度;3=弧度;4=勘测
第一箭头块名
第二箭头块名
中心标记/中心线的尺寸
尺寸线颜色:范围为0=BYBLOCK,256=BYLAYER
尺寸界线颜色:范围为0=BYBLOCK,256=BYLAYER
标注文字颜色:范围为0=BYBLOCK,256=BYLAYER
主单位标注公差值的小数位数
尺寸线范围
尺寸线增量
尺寸界线范围
尺寸界线偏移
文本和箭头的放置;可能值:0到3
尺寸线的间距
水平标注文字位置:
0=在尺寸线上方且与尺寸界线间中心对正;
1=在尺寸线上方且与第一尺寸界线相邻;
2=在尺寸线上方且与第二尺寸界线相邻;
3=在第一尺寸界线上方且与之中心对正;
4=在第二尺寸界线上方且与之中心对正;
线型测量比例因子
如果非零,则生成标注图形界限
基本标注后缀
标注距离的舍入值
如果非零,则使用单独的箭头块
全局标注比例因子
控制是否清除第一尺寸线:0=不清除;1=清除
控制是否清除第二尺寸线:0=不清除;1=清除
如果非零,则清除第一尺寸界线
如果非零,则清除第二尺寸界线
1=拖动后重新计算标注;0=拖动原图像
如果非零,则清除外部尺寸尺寸线
标注样式名称
如果非零,则文字在尺寸线上方
公差值的十进制数位数
标注公差显示比例因子
如果非零,则文字在水平方向内
如果非零,则强制文字在尺寸线之间
如果非零,则当文字在范围外时,强制直线范围在尺寸界线之间
如果非零,则文字在水平方向之外
如果非零,则生成标注公差
公差值的垂直对正模式:0=顶端;1=中间;2=底端
标注标记尺寸:0=无标记
文字垂直位置
标注文字样式
标注文字高度
控制公差值的消零:
0=清除零英尺并精确到零英寸
1=包括零英尺并精确到零英寸
2=包括零英尺并清除零英寸
3=包括零英寸并清除零英尺
所有的标注样式族成员(角度除外)的单位格式:
1=科学;2=十进制;3=工程;
4=建筑(堆叠);5=分数(堆叠);
6=建筑;7=分数
用户放置文字的光标功能:0=只控制尺寸线位置:1=同时控制尺寸线和文字位置
控制主单位值的消零:
0=清除零英尺并精确到零英寸
1=包括零英尺并精确到零英寸
2=包括零英尺并清除零英寸
3=包括零英寸并清除零英尺
控制线框图模式中体对象轮廓曲线的显示:0=关;1=开
0=关;1=开;2=自动
$DWGCODEPAGE
3图形代码页;
当新图形创建时,设置为系统代码页,但AutoCAD不作另外的维护。
$ELEVATION
命令ELEV设置的当前标高
10,20,30图形的X、Y和Z延伸到(在WCS中)
10,20,30图形的X、Y和Z延伸到(在WCS中)
$FILLETRAD
如果非零,则"填充"模式打开
下一个可用句柄
下一个可用句柄
10,20,30命令BASE设置的插入基点(在WCS中)
70当检查图形界限时非零
10,20XY图形界限延伸至(在WCS中)
10,20XY图形界限延伸至(在WCS中)
40全局线型比例
70坐标和距离的单位格式
70坐标和距离的单位精度
70设置要生成的视口数目的最大值
$MEASUREMENT
70设置图形单位:0=英制;1=公制
1菜单文件名
70如果非零,则镜像文字
$ORTHOMODE
70如果非零,则打开"正交"模式
70运行对象捕捉模式
70点显示模式
40点显示尺寸
$PELEVATION
40当前图纸空间标高
10,20,30图纸空间的X、Y和Z延伸的最大值
10,20,30图纸空间的X、Y和Z延伸的最小值
$PICKSTYLE
70控制编组选择集和关联填充选择集:
0=无编组选择集和关联填充选择集;
1=有编组选择集;
2=有关联填充选择集;
3=有编组选择集和关联填充选择集
10,20,30图纸空间插入基点
$PLIMCHECK
70如果非零,则在图纸空间中检查图形界限
10,20图纸空间中最大的X和Y图形界限
10,20图纸空间中最小的X和Y图形界限
70管理二维多段线顶点周围的线型图案的生成:
0=在多段线周围以连续图案生成线型;
1=每段多段线都以虚线开始和结束
40缺省的多段线宽度
$PROXYGRAPHICS
70控制代理对象图像的保存
$PSLTSCALE
70控制图纸空间线型比例:
0=无指定的线型比例;
1=由视口比例控制线型比例
2当前图纸空间的UCS名
10,20,30当前图纸空间的UCS原点
10,20,30当前图纸空间的UCSX轴
10,20,30当前图纸空间的UCSY轴
$QTEXTMODE
70如果非零,则打开快速文字模式
$REGENMODE
70如果非零,则打开REGENAUTO模式
700=面着色,边不突出显示;
1=面着色,边以黑色突出显示;
2=面不填充,边为图元颜色;
3=面为图元颜色,边为黑色
环境/漫射光百分数,取值范围为1-100,缺省值为70
$SKETCHINC
徒手画记录增量
0=徒手画线条;1=徒手画多段线
样条曲线控制多边形显示:1=开;0=关
$SPLINESEGS
每个样条曲线片的线段数
$SPLINETYPE
PEDIT样条曲线的曲线类型
在第一方向上的网格列表数目
在第二方向上的网格列表数目
PEDIT平滑着色的表面类型
在M方向上的(PEDIT平滑着色的)表面密度
在N方向上的(PEDIT平滑着色的)表面密度
图形创建的日期/时间
图形的累计编辑时间
图形最近一次更新的日期/时间
$TDUSRTIMER
用户流逝计时器
缺省文本高度
$TEXTSTYLE
当前文字样式名
$THICKNESS
命令ELEV设置的当前厚度
1与早期版本兼容;0不兼容
缺省宽线宽度
$TREEDEPTH
指定空间索引的最大深度
10,20,30当前UCS原点(在WCS中)
10,20,30当前UCSX轴的方向(在WCS中)
10,20,30当前UCSY轴的方向(在WCS中)
70低位设置=显示分数、英尺和英寸,以及输入格式中的检测角
1-570供第三方开发者使用的五个整型变量
1-540供第三方开发者使用的五个实型变量
700=计时器关;1=计时器开
$VISRETAIN
700=不保留外部参照依赖可见性设置;
1=保留外部参照依赖可见性设置;
$WORLDVIEW
701=在DVIEW/VPOINT期间设置UCS为WCS;
0=不修改UCS
下列表头变量出现在R11前的AutoCAD中,但现在对每个活动的视口都有单独的设置。当DXFIN从DXF文件中读取这些变量时,能识别它们。但如果带有*ACTIVE条目的VPORT符号表存在(任何由R11或更高版本的AutoCAD生成的DXF文件中都存在),VPORT符号表条目中的值将替代这些表头变量。
修正的VPORT表头变量
变量组码说明
70如果非零,则启用快速缩放
70如果非零,则打开"栅格"模式
10,20栅格的X和Y间距
50捕捉栅格旋转角
10,20捕捉/栅格基点(在UCS中)
$SNAPISOPAIR
70等轴测平面:0=左边,1=上端,2=右边
70如果非零,则打开"捕捉"模式
$SNAPSTYLE
70捕捉样式:0=标准;1=等轴测
10,20捕捉栅格的X和Y间距
10,20屏幕上当前视图的XY中心
10,20,30视图方向(来自WCS中目标的方向)
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区域的样例:
区域的开始
&tabletype&
&max.entries&相同的表组码,
对每一个条目重复
&tabletype&
.&data&.表条目数据,对每一个表记录重复
TABLES区域的结束
符号表记录和符号表都是数据库对象。至少,在AutoCAD的所有主要用法中,这意味着符号表记录对象和符号表对象的组码2后都存在一个句柄。
DIMSTYLE表是系统中唯一使用句柄组码105的记录类型(以前它也使用组码5)。除非在DIMSTYLE表区域中,程序员一般不必留心此例外情况,因为只有在DIMSTYLE表区域中才会发生此例外情况。
符号表组码
下表列出了适用于所有符号表的组码:
适用于所有符号表的组码
APP:图元名(每次打开图形时改变)
对象类型(TABLE)
子类标记(AcDbSymbolTable)
表中的最大条目数。
符号表条目的公用组码
下表显示了适用于所有符号表的组码,可选的组码以灰色显示。当用户通过图元类型引用组码表时,应注意表中不仅包括与特定图元关联的组码,也会包括下表列出的组码。
适用于所有符号表条目的组码
APP:图元名(每次打开图形时改变)
图元类型(表名称)
句柄(除DIMSTYLE外的所有表)
句柄(只用于DIMSTYLE表)
应用程序定义的组码的开始"{application_name"。
例如,"{ACAD_REACTORS"
//表示AutoCADPersistentreactors组的开始
//application-defined codes组102中的组码和组值由
//应用程序定义
//102组结束
100子类标记(AcDbSymbolTableRecord)
下表列出了当Persistentreactors被附着到对象上时输出的组码:
ACAD_REACTORS记录
"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始
指向所有者词典的软键指针标识符/句柄
下表列出了当扩展词典被附着到对象上时输出的组码:
ACAD_XDICTIONARY记录
"{ACAD_XDICTIONARY"表示扩展词典组码的开始
指向所有者词典的硬键指针标识符/句柄
公用组码70标志-位编码值的说明如下表。其他适用于LAYER、STYLE和VIEW表条目的组码70值则在另外的相关表中说明。
适用于所有表条目的组码70的位编码值
位编码值说明
16如果设置该位,表示表条目依赖于外部参照
32如果此位和位16都被设置,则表示所依赖的外部参照已被成功融入。
64如果设置该位,表示在上一次图形编辑时图形中至少有一个图元引用了该表条目。(此标志一般用于AutoCAD命令。大部分读取DXF
文件的程序将其忽略,对于写DXF文件的程序也无须设置它。)
下列组码适用于APPID符号表条目:
子类标记(AcDbRegAppTableRecord)
用户提供的应用程序名(用于扩展数据)。此表条目维护所有已注册的应用程序名。
标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。):
1=如果设置,在执行SAVEASR12时不写入APPID所关联的外部数据。
注意因为在R13和R14的AutoCAD中ASE数据格式相同,
所以ASE应用程序名(ACADASER13)也相同。
BLOCK_RECORD
下列组码适用于BLOCK_RECORD符号表条目。
BLOCK_RECORD组码
子类标记(AcDbBlockTableRecord)
下列组码适用于DIMSTYLE符号表条目。关于DIMSTYLE符号表条目的详细信息,请参见AutoCAD命令参考中的附录B"系统变量"。
DIMSTYLE组码
100子类标记(AcDbDimStyleTableRecord)
2标注样式名
70标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)
40DIMSCALE
143DIMALTF
144DIMLFAC
146DIMTFAC
171DIMALTD
172DIMTOFL
175DIMSOXD
176DIMDLRD
177DIMCLRE
178DIMCLRT
270DIMUNIT
272DIMTDEC
273DIMALTU
274DIMALTTD
340被引用的STYLE对象的句柄(用于代替储存DIMTXSTY值)
275DIMAUNIT
280DIMJUST
283DIMTOLJ
284DIMTZIN
285DIMALTZ
286DIMALTTZ
下列组码适用于LAYER符号表条目。
子类标记(AcDbSymbolTableRecord)
标准标志。(清参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)
除标准标志外,以下(位编码)值也适用于图层:
1=冻结图层,否则图层解冻;
2=在新视口中缺省设置为冻结图层;
4=锁定图层;
颜色数(如果为负则图层被关闭)
在执行DXFOUT时输出依赖于外部参照的图层。对于这些图层,DXF文件中的相关线型名始终为CONTINUOUS。
下列组码适用于LTYPE符号表条目。
子类标记(AcDbLinetypeTableRecord)
线型名称。
标准标志(位编码值)。(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。)
线型的描述文字。
对齐方式码;始终为65(A的ASCII码)。
线型元素数目。
图案总长度。
虚线、点或空间的长度(每个元素一个条目)。
复杂线型元素类型(每个元素一个条目):0=简单的;2=内嵌文字字符串;4=内嵌形;
复杂形的组码(如果组码74&0,每个元素一个条目)如果组码74=2,则值为1。
STYLE对象指针(如果组码74&0,每个元素一个条目)。
S=比例值(可选),可存在多个这样的条目。
R=旋转值(可选),可存在多个这样的条目。
X=x偏移值(可选),可存在多个这样的条目。
Y=y偏移值(可选),可存在多个这样的条目。
文字字符串(如果组码74=2,每个元素一个条目)。
执行函数tblsearch或tblnext时,并不返回组码74、75、340、46、50、44、45和9的值,因此用户需要使用函数tblobjname来获取这些组码的值。
下列组码适用于STYLE符号表条目。
子类标记(AcDbTextStyleTableRecord)
标准标志值(请参见符号表条目的公用组码!AL(`XREF_30203_al_u05_c',1)。):
1=如果设置,此条目描述一个形;4=垂直文本;
固定文字高度;如果高度不固定则值为0。
文字生成标志:2=文字反向(X轴方向镜像)4=文字倒置(Y轴方向镜像)
最后使用的高度
主字体文件名
大字体文件名;如果没有则为空
STYLE表条目也可用于记录命令LOAD所需要的形文件。此时组码70的第一位(1)被设置且只有组码3(形文件名)有意义(但仍输出所有其他组码)。
下列组码适用于UCS符号表条目。
100子类标记(AcDbUCSTableRecord)
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符号表条目。
100子类标记(AcDbViewTableRecord)
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后剪裁平面(与目标点的偏移)
71视图模式(请参见VIEWMODE系统变量)
下列组码适用于VPORT符号表条目。
100子类标记(AcDbViewportTableRecord)
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区域的样例:
CLASSES区域的开始
&classdxfrecord&
&classname&
&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区域的例子:
2BLOCKS区域的开始
&blockname&
&blockname&
&xrefpath&开始每个块条目
(一个块图元定义)
&entitytype&
..&data&.块中每个图元定义均对应一个条目
每个块条目的结束
(ENDBLK图元定义)
0BLOCKS区域的结束
下列组码适用于块图元。
0图元类型(BLOCK)
102应用程序定义的组的开始"{application_name",
例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors组的开始application-definedcodes组102中的组码和组值由应用程序定义102组结束"}"
100子类标记(AcDbEntity)
100子类标记(AcDbBlockBegin)
70"块类型"标志(位编码值,可被组合):
1=这是一个由图案填充、关联标注、其他内部操作或应用程序生成的无名块;
2=此块具有属性定义;
4=此块是一个外部参照(xref);
8=此块是一个外部参照覆盖;
16=此块依赖于外部参照;
32=是一个融入的外部参照或依赖于外部参照(输入时忽略之);
64=此定义被外部参照引用(输入时忽略之);
10基点。DXF:X值;APP:三维点
20,30DXF:基点坐标的Y和Z值
1外部参照路径名(可选,只有在块是一个外部参照时存在)
创建块定义后,原先有效的UCS变为适合于块定义中所有图元的WCS。将移动这些图元的新原点以匹配块定义的基点,也将平移所有图元数据以适合新的WCS。
*MODEL_SPACE和*PAPER_SPACE块定义
现在,在BLOCKS区域中始终有两个额外的空定义,它们的标题分别为*MODEL_SPACE和*PAPER_SPACE。这样实际上是将模型空间和图纸空间视为内部块定义。考虑到兼容性,这些定义包含的图元也会出现在ENTITIES区域中。
模型空间和图纸空间图元分离
由于改进了内部组织机构,模型空间和图纸空间之间的交错将不再发生,而是先输出图纸空间图元,再输出模型空间图元。区分这些图元的标志为组码67。
下列组码适用于ENDBLK对象
Endblk组码
0图元类型(ENDBLK)
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文件的对象区域的例子:
2OBJECTS区域的开始
命名对象词典的开始(根词典对象)
&dictionaryname&
&handleofchild&为每个条目重复
&objecttype&
.对象数据组
0OBJECTS区域的结束
公用对象组码
下表显示的组码适用于所有实际的非图形图元(对象)。当用户通过图元类型引用组码表时,应注意表中不仅列出与特定图元关联的组码,也会列出下表所显示的组码。只当图元具有特性的非缺省值时,一些公用对象组码才被包括到图元中。当组码被忽略时,它的缺省值将出现在输入文件(当使用
DXFIN时)的第三列上,如果组码值等于缺省值,在输出(使用DXFOUT)时它将被忽略。
公用对象组码
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)
102persistentreactors组的开始;始终为"{ACAD_REACTORS"
330所有者词典的软键指针标识符/句柄(ACDBVARIABLEDICTIONARY)。
102persistentreactors组的结束;始终为"}"
100子类标记(词典变量)
280对象概要数(通常设置为0)
在不需要向DXFHEADER区域中添加条目时,DICTIONARYVAR对象被AutoCAD用来作为在数据库中存储命名值的方法以达到
setvar/getvar的目的。通常作为DICTIONARYVAR
对象存储的系统变量有:DIMADEC、DIMDSEP、INDEXCTL、PROJECTNAME和XCLIPFRAME。
下列组码由GROUP对象使用。
0对象名称(GROUP)
102persistentreactors组的开始,始终为"{ACAD_REACTORS"(persistentreactors
组出现在除主词典之外的所有词典中)
330所有者词典的软键指针标识符/句柄。对于GROUP对象,始终是命名对象词典的ACAD_GROUP条目。
102persistentreactors组的结束,始终为"}"。
100子类标记(AcDbGroup)
300(对象)组说明
70"未命名"标志:1=未命名的;0=命名的;
71可选择性标志:1=可选择的;0=不可选择;
340(对象)组中图元的句柄(适用于每个对象的条目)
下列组码由IDBUFFER对象使用。
IDBUFFER组码
0对象名称(IDBUFFER)
102persistentreactors组的开始,始终为"{ACAD_REACTORS"。
330所有者词典的软键指针标识符/句柄。
102persistentreactors组的结束,始终为"}"。
100子类标记(AcDbIdBuffer)
330参照图元的软键指针(可以存在多条目)。
IDBUFFER对象是对象参照的表的使用使用工具对象。
下列组码有IMAGEDEF对象使用。
IMAGEDEF组码
0对象名称(IMAGEDEF)
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)
100子类标记(AcDbRasterImageDefReactor)
90类版本号。2=R14版本
330适于关联图像对象的对象ID。
LAYER_INDEX
下列组码由LAYER_INDEX对象使用。
LAYER_INDEX组码
0对象名称(LAYER_INDEX)
102persistentreactors组的开始,始终为"{ACAD_REACTORS"。
330所有者词典的软键指针的标识符/句柄。
102persistentreactors组的结束,始终为"}"。
100子类标记(AcDbIndex)
40时间标志(Julian日期)
100子类标记(AcDbLayerIndex)
8图层名称(可以存在多条目)。
360IDBUFFER的硬键从属参照(可以存在多条目)
90在IDBUFFER中的条目数(可以存在多条目)
MLINESTYLE
下列组码由MLINESTYLE对象使用。
MLINESTYLE组码
0对象名称(MLINESTYLE)
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)
102persistentreactors组的开始,始终为"{ACAD_REACTORS"。
330所有者词典的软键指针的标识符/句柄。
102persistentreactors组的结束,始终为"}"。
1001开始ASE外部数据(ACADASER13)
RASTERVARIABLES
下列组码由RASTERVARIABLES对象使用。
RASTERVARIABLES组码
0对象名称(RASTERVARIABLES)
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)
102persistentreactors组的开始,始终为"{ACAD_REACTORS"。
330所有者词典的软键指针标识符/句柄。
102persistentreactors组的结束,始终为"}"。
100子类标记(AcDbIndex)
40时间标志(Julian日期)
100子类标记(AcDbSpatialIndex)
在写入DXF文件时,SPATIAL_INDEX始终为空,所以此对象可被忽略。
SPATIAL_FILTER
下列组码由SPATIAL_FILTER对象使用。
SPATIAL_FILTER组码
0对象名称(SPATIAL_FILTER)
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)
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对象通过各自的图元关联一个不同的句柄,这个句柄重新定义了图元的重生成次序。
下列组码是所有外部记录公用的组码。
外部记录组码
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
中,可能会改变这种顺序。可以利用分支或表机制来处理控制图元的组码,这样即使组码次序不定,也能正确地处理每组组码。
下列组码适用于三维面图元。
三维面组码
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=第四边不可见;
下列组码适用于三维实体图元。
三维实体组码
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类结束)
下列组码适用于圆弧图元。
100子类标记(AcDbCircle)
39厚度(可选,缺省值=0)
10圆心(用OCS表示)。DXF:X值;APP:三维点
20,30DXF:圆心坐标的Y和Z值(用OCS表示)
100子类标记(AcDbArc)
210延伸方向(可选,缺省值=0,0,1)
DXF:X值;APP:三维矢量
220,230DXF:延伸方向的Y和Z值
下列组码适用于属性定义图元。
属性定义组码
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的值或其值为零,则第二对齐点无意义。
下列组码适用于属性图元。
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
根据文本对齐点

我要回帖

更多关于 如何提取文本中的数字 的文章

 

随机推荐