[求助]AutoCAD的.shx文件资料
各位高手:<br/> 谁有关于AutoCAD的.shx文件的资料? <p class="body">下面是ACAD帮助中的内容</p><p class="body">每个形或字符的形说明语法都不考虑形说明的最后用法(用作形或字体)。如果形定义文件被用作字体文件,则文件中的第一个条目必须描述字体本身,而不是该文件中的形;如果第一个条目描述一个形,则该文件被用作形文件。 </p><p class="body">能够创建自己的形定义是非常有价值的。但是,要知道,这是一个非常复杂的学习课题,而且需要有耐心。 </p><p class="body">形定义文件的每一行最多可包含 128 个字符。超过此长度的行不能编译。由于 AutoCAD 忽略空行和分号右边的文字,所以可以在形定义文件中嵌入注释。 </p><p class="body">每个形说明都有一个标题行(格式如下),以及一行或多行定义字节。这些定义字节之间以逗号分隔,最后以 0 结束。 </p><pre class="prog_in_0">*shapenumber,defbytes,shapename</pre><pre class="prog_in_end_0">specbyte1,specbyte2,specbyte3,...,0 </pre><p class="body">下表描述了形说明的各个字段: </p><p class="define_head">shapenumber </p><p class="define_text">文件中唯一的一个 1 到 258(对于 Unicode 字体,最多为 32768)之间的数字,带前缀星号 (*)。对于非 Unicode 字体文件,用 256、257 和 258 分别作为符号标识符 Degree_Sign、Plus_Or_Minus_Sign 和 Diameter_Symbol 的形编号。对 Unicode 字体,这些字形以 U+00B0、U+00B1 和 U+2205 作为形编号并且是“Latin Extended-A”子集的一部分。 </p><p class="define_text">字体(包含每个字符的形定义的文件)的编号要与每个字符的 ASCII 码对应;其他形可指定任意数字。 </p><p class="define_head">defbytes </p><p class="define_text">用于描述形的数据字节 (specbytes) 的数目,包括末尾的零。每个形最多可有 2,000 个字节。 </p><p class="define_head">shapename </p><p class="define_text">形的名称。形的名称必须大写,以便于区分。包含小写字符的名称被忽略,并且通常用作字体形定义的标签。 </p><p class="define_head">specbyte </p><p class="define_text">形定义字节。每个定义字节都是一个代码,或者定义矢量长度和方向,或者是特殊代码的对应值之一。在形定义文件中,定义字节可以用十进制或十六进制值表示。与许多形定义文件一样,本节样例中同时使用了十进制和十六进制定义字节值。如果形定义字节的第一个字符为 0(零),则后面的两个字符解释为十六进制值。</p><p class="body">简单的形定义字节在一个定义字节(一个 specbyte 字段)中包含矢量长度和方向的编码。每个矢量的长度和方向代码是一个三字符的字符串。第一个字符必须为 0,用于指示 AutoCAD 将后面的两个字符解释为十六进制值。第二个字符指定矢量的长度。有效的十六进制值的范围是从 1(1 个单位长度)到 F(15 个单位长度)。第三个字符指定矢量的方向。下图展示了方向代码。 </p><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0301u.gif" align="absBottom" alt=""/>
</p><p class="body">上图中的所有矢量都按同样的长度定义绘制。对角矢量长度延长,以匹配最接近的正交矢量的 X 或 Y 位移。这与 AutoCAD 中的捕捉栅格操作相似。 </p><p class="body">下例构造名为 DBOX 的形,指定形的编号为 230。 </p><pre class="prog_in_0">*230,6,DBOX </pre><pre class="prog_in_end_0">014,010,01C,018,012,0 </pre><p class="body">上述定义字节序列定义了一个单位长度、一个单位宽度的方框,以及从左下角到右上角的对角线。将文件保存为 dbox.shp 后,使用 <object id="alink_COMPILE_CMD_388408" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param value="106" name="Width"/><param value="53" name="Height"/><param value="ALink" name="Command"/><param value="acad_acr.chm" name="Item1"/><param value="COMPILE_CMD" name="Item2"/></object>COMPILE 命令生成 dbox.shx 文件。使用 <object id="alink_LOAD_CMD_388408" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param value="106" name="Width"/><param value="53" name="Height"/><param value="ALink" name="Command"/><param value="acad_acr.chm" name="Item1"/><param value="LOAD_CMD" name="Item2"/></object>LOAD 命令加载包含此定义的形文件,然后按照如下方式使用 <object id="alink_SHAPE_CMD_388408" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param value="106" name="Width"/><param value="53" name="Height"/><param value="ALink" name="Command"/><param value="acad_acr.chm" name="Item1"/><param value="SHAPE_CMD" name="Item2"/></object>SHAPE 命令: </p><p class="prompt">命令:<!--Element not supported - Type: 8 Name: #comment--> shape
</p><p class="prompt">输入形名称(或 ?):<!--Element not supported - Type: 8 Name: #comment--> dbox
</p><p class="prompt">指定插入点:<!--Element not supported - Type: 8 Name: #comment--> 1,1
</p><p class="prompt">指定高度<当前值>:<!--Element not supported - Type: 8 Name: #comment--> 2
</p><p class="prompt_end">指定旋转角度<当前值>:<!--Element not supported - Type: 8 Name: #comment--> 0
</p><p class="body">结果形如下图所示: </p><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0302u.gif" align="absBottom" alt=""/>
</p><p class="body">代码 0 标识形定义结束。 </p><p class="body">代码 1 和 2 控制绘制模式。绘图模式在绘制每个形的开始时激活。当绘图模式打开(代码 1)时,一个矢量说明将绘制一条直线;当绘图模式关闭(代码 2)时,矢量说明只移到新位置,而不绘制直线。</p><p class="body">代码 3 和 4 控制每个矢量的相对尺寸。 <object id="alink_SHAPE_CMD_388503" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><param value="106" name="Width"/><param value="53" name="Height"/><param value="ALink" name="Command"/><param value="acad_acr.chm" name="Item1"/><param value="SHAPE_CMD" name="Item2"/></object>SHAPE 命令指定的高度最初被当作单个正交矢量(方向为 0、4、8 或 C)的长度。代码 3 将矢量长度除以下一个字节。代码 4 将矢量长度乘以下一个字节。代码 3 和 4 后跟一个定义字节,该字节包含一个整数缩放比例(1 到 255)。如果要用形高度来指定整个形的尺寸,并要用矢量长度 10 绘制,则可用 3,10 缩放高度定义。缩放比例在同一形中是累计的,即,乘以 2 后再乘以 6,结果缩放比例为 12。通常用户需要在形的结尾恢复原缩放比例,尤其是对子形和字体形。AutoCAD 不会为用户自动重置缩放比例。</p><p class="body">代码 5 和 6 在绘制形时压入(保存)和弹出(恢复)当前坐标位置,这样就可从后面的点返回该点。可以弹出所压入的任何值。位置堆栈只能保存四个位置值。如果由于过多的压入操作或弹出丢失而造成堆栈溢出,则在绘制形时将显示如下信息: </p><p class="prompt_end">位置堆栈上溢,位于形 nnn 中 </p><p class="body">与此类似,如果试图从堆栈中弹出过多的位置值,则在绘制形时将显示如下信息: </p><p class="prompt_end">位置堆栈下溢,位于形 nnn 中</p><p class="prompt_end">代码 7 绘制编号由下一个字节指定的子形。对于非 Unicode 字体,代码 7 后面的定义字节是 1 到 255 之间的形数字编号。对于 Unicode 字体,代码 7 后面的定义字节是 1 到 65535 之间的形数字编号。Unicode 形数字编号以两个字节计数(关于 Unicode 字体与非 Unicode 字体之间的差别的详细信息,请参见<a title="Unicode 字体说明" href="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/acg_ab_acad73.html#768551"> Unicode 字体说明</a>)。此编号的形(在同一形文件中)在此时绘制。绘图模式不会为新形重置。当子形绘制结束后,继续绘制当前形。</p><p class="body">法向矢量定义字节只能在十六个预定义的方向上绘制,并且最大长度为 15。这些限制使形定义更为有效,但有时会变得过于局限。通过代码 8 和 9 可用 XY 位移绘制非标准矢量。代码 8 指定由下两个字节指定的 X-Y 位移。代码 8 后必须跟两个定义字节: </p><pre class="prog_in_end_0">8,X-displacement,Y-displacement
</pre><p class="body">XY 位移范围为 -128 到 +127。前面的 + 可选,并且可用括号增强可读性。下例中的矢量向左绘制(或移动)10 个单位,再向上绘制(或移动)3 个单位。 </p><pre class="prog_in_end_0">8,(-10,3) </pre><p class="body">在两个位移定义字节之后,形返回法向矢量模式。 </p><p class="body">用代码 9 可绘制一系列非标准矢量。代码 9 可指定任意数量的 XY 位移对。由 (0,0) 对终止。下例绘制三个非标准矢量后返回法向矢量模式。 </p><pre class="prog_in_end_0">9,(3,1),(3,2),(2,-3),(0,0) </pre><p class="body">必须用 (0,0) 对终止 XY 位移对序列,使 AutoCAD 能识别后面的法向矢量或特殊代码。</p><p class="body">特殊代码 00A(或 10)用下两个定义字节定义一个圆弧。此圆弧称为八分圆弧,因为它跨越一个或多个 45 度的八分圆,起点和终点都在八分圆边界上。八分圆从三点的位置逆时针编号,如下图所示: </p><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0303u.gif" align="absBottom" alt=""/>
</p><p class="body">圆弧定义为: </p><pre class="prog_in_end_0">10,radius,(-)0SC
</pre><p class="body">半径可以是 1 到 255 之间的任意值。第二个定义字节指定圆弧的方向(如果为正,则为逆时针;如果为负,则为顺时针)、开始八分圆(s,0 到 7 之间的任意值)和跨越的八分圆数(c,0 到 7 之间的任意值。其中,0 指八个八分圆或整个圆)。可用括号增强可读性。例如,考虑如下形定义片段: </p><pre class="prog_in_end_0">...012,10,(1,-032),01E,...</pre><p class="body">此代码依次分别绘制:向右上的一个单位矢量、从八分圆 3 开始的顺时针圆弧(半径为一个单位,跨越两个八分圆)和向右下的一个单位矢量,如下图所示: </p><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0304u.gif" align="absBottom" alt=""/>
</p><p class="body">特殊代码 00B (11) 绘制的圆弧,其起点和终点不一定在八分圆边界上。其定义使用五个定义字节: </p><pre class="prog_in_end_0">11,start_offset,end_offset,high_radius,radius,(-)0SC
</pre><p class="body">start_offset 和 end_offset 表示与圆弧起点和终点所在的八分圆边界的距离。high_radius 表示半径的高八位有效数字,当 radius 不大于 255 时其值为 0。将 high_radius 值与 256 相乘并加上 radius 值,可生成大于 255 的圆弧半径。radius 和最后的定义字节与八分圆弧的定义(代码 00A,如前所述)一样。 </p><p class="body">计算起点八分圆边界(45 度的倍数)与圆弧起点之间所差的度数,再将其乘以 256,除以 45,即得到 start
offset。如果圆弧从八分圆边界开始,则其 start offset 为 0。 </p><p class="body">end offset 的计算方式是相似的,但必须用最后一个八分圆边界与圆弧终点之间所差的度数进行计算。如果圆弧在八分圆边界终止,则其 end offset 为 0。 </p><p class="body">例如,从 55 度到 95 度,半径为 3 个单位的特殊圆弧编码如下: </p><pre class="prog_in_end_0">11,(56,28,0,3,012)</pre><p class="body">解释如下: </p><pre class="prog_in_0">start_offset = 56 因为 ((55 - 45) * 256 / 45) = 56 </pre><pre class="prog_in_0">end_offset = 28 因为 ((95 - 90) * 256 / 45) = 28</pre><pre class="prog_in_0">high_radius = 0因为 (radius < 255)</pre><pre class="prog_in_0">radius = 3</pre><pre class="prog_in_0">starting octant= 1因为圆弧起点在 45 度八分圆中
</pre><pre class="prog_in_end_0">ending octant = 2因为圆弧终点在 90 度八分圆中</pre><pre class="prog_in_end_0"><p class="body">特殊代码 00C 和 00D(12 和 13)提供另一种在形说明中包括圆弧的机制。它们与代码 8 和 9 相似,在代码 8 和 9 中通过指定 <span class="italic">XY 位移来绘制圆弧,而在代码 00C 和 00D 中通过将凸度因子应用到位移矢量来绘制圆弧。代码 00C 绘制一段圆弧,而代码 00D 绘制多段圆弧 (polyarcs),直到该圆弧被 (0,0) 位移终止为止。 </p><p class="body">代码 00C 后必须跟上三个描述圆弧的字节: </p><pre class="prog_in_end_0">0C,X-displacement,Y-displacement,Bulge
</pre><p class="body">X、Y 位移和凸度(指定圆弧的曲率)的取值范围为 -127 到 +127。如果位移指定的线段长度为 D,垂直于该线段中点的距离为 H,则凸度的幅值为 ((2 * H / D) * 127)。如果圆弧从当前位置到新位置是顺时针走向的,则符号为负。 </p><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0305u.gif" align="absBottom" alt=""/>
</p><p class="body">半圆的凸度为 127(或 -127),是用这种编码所能表示的最大的单段圆弧(用两个连续的圆弧段表示更大的圆弧)。凸度定义可以为 0,表示直线段。请注意,用代码 8 表示直线段在形说明中只占用一个字节。 </p><p class="body">多段圆弧代码(00D 或 13)后面可跟 0 或多个圆弧段定义,最后被 (0,0) 位移终止。请注意,最后一个位移之后不能再指定凸度。例如,字母 S 可以如下定义: </p><pre class="prog_in_end_0">13,(0,5,127),(0,5,-127),(0,0)</pre><p class="body">零凸度线段用于在多段圆弧中表示直线段,它们相当有用。与终止多段圆弧、插入直线段后再开始另一多段圆弧这种方法相比,其效率要高得多。 </p><p class="body">在单段圆弧和多段圆弧定义中不能使用数字 -128。</p><p class="body">特殊代码 00E (14) 仅用于双向字体说明中。双向字体说明中的字体在水平和垂直两个方向上使用。在字符定义中遇到此特殊代码时,下一代码是否进行处理由该字符的方向决定。如果方向为垂直的,则下一代码被处理;如果方向为水平的,则下一代码被忽略。 </p><p class="body">在水平文字中,每个字符的起点是基线的左端;在垂直文字中,起点为字符上方正中。在每个字符的结尾,通常需要用提笔线段绘至下个字符的起点。对水平文字,该线段是向右绘制的;而对垂直文字,该线段是向下绘制的。特殊代码 00E (14) 主要用于调整不同的起点和终点,使同一字符形定义可用于水平文字,也可用于垂直文字。例如,如下对大写 D 的定义可用于水平文字,也可用于垂直文字。 </p><pre class="prog_in_0">*68,22,ucd </pre><pre class="prog_in_0">2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,</pre><pre class="prog_in_end_0">14,8,(-4,-3),0</pre><p class="figure_anchor_0"><img src="mk:@MSITStore:D:\ACAD2004\Help\acad_acg.chm::/online_art/al_0306u.gif" align="absBottom" alt=""/></p><p class="figure_anchor_0"></p></span></pre> 看一下帮助文档好了.
页:
[1]