000
|
形定义结束
|
绘图模式在绘制每个形的开始时激活。当绘图模式打开(代码 1)时,一个矢量说明将绘制一条直线;当绘图模式关闭(代码 2)时,矢量说明只移到新位置,而不绘制直线。
|
001
|
激活绘图模式(落笔)
|
002
|
取消激活绘图模式(提笔)
|
003
|
矢量长度除以下一个字节
|
SHAPE 命令指定的高度最初作为单个正交矢量(方向为 0、4、8 或 C)的长度。代码 3 将矢量长度除以下一个字节。代码 4 将矢量长度乘以下一个字节。代码 3 和 4 后跟一个定义字节,该字节包含一个整数缩放比例(1 到 255)。
如果要用形高度来指定整个形的尺寸,并要用矢量长度 10 绘制,则可用 3,10 缩放高度定义。缩放比例在同一形中是累计的,即,乘以 2 后再乘以 6,结果缩放比例为 12。通常用户需要在形的结尾恢复原缩放比例,尤其是对子形和字体形。程序不会为用户重置比例因子。
|
004
|
矢量长度乘以下一个字节
|
005
|
将当前位置入栈
|
可以弹出所压入的任何值。位置堆栈只能保存四个位置值。如果由于过多的压入操作或弹出丢失而造成堆栈溢出,则在绘制形时将显示如下消息:
位置堆栈上溢,位于形 nnn 中
与此类似,如果试图从堆栈中弹出过多的位置值,则在绘制形时将显示如下消息:
位置堆栈下溢,位于形 nnn 中
|
006
|
将当前位置出栈
|
007
|
绘制编号由下一个字节指定的子形
|
对于非 Unicode 字体,代码 7 后面的定义字节是 1 到 255 之间的形数字编号。对于 Unicode 字体,代码 7 后面的定义字节是 1 到 65535 之间的形数字编号。应当将 Unicode 形编号计作两个字节。
此编号的形(在同一形文件中)在此时绘制。绘图模式不会为新形重置。当子形绘制结束后,继续绘制当前形。
|
008
|
由下两个字节指定的 X-Y 位移
|
法向矢量定义字节只能在十六个预定义的方向上绘制,并且最大长度为 15。这些限制使形定义更为有效,但有时会变得过于局限。代码 8 指定由下两个字节指定的 X-Y 位移。代码 8 后必须跟两个定义字节:
8,X-displacement,Y-displacement
X-Y 位移的范围为从 -128 到 +127。前面的 + 可选,并且可用括号增强可读性。下例中的矢量向左绘制(或移动)10 个单位,再向上绘制(或移动)3 个单位。
8,(-10,3)
在两个位移定义字节之后,形返回法向矢量模式。
用代码 9 可绘制一系列非标准矢量。代码 9 可以指定任意数量的 X-Y 位移对。由 (0,0) 对终止。下例绘制三个非标准矢量后返回法向矢量模式。
9,(3,1),(3,2),(2,-3),(0,0)
必须用 (0,0) 对作为 X-Y 位移对序列的结尾,以便程序识别后面的法向矢量或特殊代码。
|
009
|
乘以 X-Y 位移,以 (0,0) 结尾
|
00A
|
由下两个字节定义的八分圆弧
|
此圆弧称为八分圆弧,因为它跨越一个或多个 45 度的八分圆,起点和端点都在八分圆边界上。八分圆从时钟的 3 点的位置逆时针编号,如下图所示:
圆弧定义为:
10,radius,(-)0SC
半径可以是 1 到 255 之间的任意值。第二个定义字节指定圆弧的方向(如果为正,则为逆时针;如果为负,则为顺时针)、开始八分圆(
s
,值为 0 到 7)和跨越的八分圆数(
c
,值为 0 到 7。其中 0 等于八个八分圆或整个圆)。可用括号增强可读性。例如,考虑如下形定义片段:
...012,10,(1,-032),01E,...
此代码依次分别绘制:向右上的一个单位矢量、从八分圆 3 开始的顺时针圆弧(半径为一个单位,跨越两个八分圆)和向右下的一个单位矢量,如下图所示:
|
00B
|
由下两个字节定义的部分圆弧
|
其定义使用五个定义字节:
11,start_offset,end_offset,high_radius,radius,(-)0SC
start_offset
和
end_offset
表示与圆弧起点和端点所在的八分圆边界的距离。
high_radius
表示半径的高八位有效数字,当
radius
不大于 255 时其值为 0。将
high_radius
值与 256 相乘并加上
radius
值,可生成大于 255 的圆弧半径。
radius
和最后的定义字节与八分圆弧的定义(代码 00A,如前所述)一样。
确定起始偏移的方法是先计算起始八分圆的边界(45 度的倍数)与圆弧起点之间所差的度数,然后用这个差值乘以 256 再除以 45。如果圆弧从八分圆边界开始,则其 start offset 为 0。
end offset 的计算方式是相似的,但必须用最后一个八分圆边界与圆弧端点之间所差的度数进行计算。如果圆弧在八分圆边界终止,则其 end offset 为 0。
例如,从 55 度到 95 度,半径为 3 个单位的特殊圆弧编码如下:
11,(56,28,0,3,012)
解释如下:
start_offset = 56 because ((55 - 45) * 256 / 45) = 56
end_offset = 28 because ((95 - 90) * 256 / 45) = 28
high_radius = 0 because (radius < 255)
radius = 3
starting octant = 1 because arc starts in the 45 degree octant
ending octant = 2 because arc ends in the 90 degree octant
|
00C
|
由 X-Y 位移和凸度定义的圆弧
|
它们与代码 8 和 9 相似,在代码 8 和 9 中通过指定 X-Y 位移来绘制圆弧。而在代码 00C 和 00D 中通过将凸度因子应用到位移矢量来绘制圆弧。代码 00C 绘制一段圆弧,而代码 00D 绘制多段圆弧段 (polyarcs),直到该圆弧被 (0,0) 位移终止为止。
代码 00C 后必须跟上三个描述圆弧的字节:
0C,X-displacement,Y-displacement,Bulge
X、Y 位移和凸度(用于指定圆弧的曲率)的取值范围均为 -127 到 +127。如果位移指定的直线段长度为 D,垂直于该线段中点的距离为 H,则凸度的幅值为 ((2 * H / D) * 127)。如果圆弧从当前位置到新位置是顺时针走向的,则符号为负。
半圆的凸度为 127(或 -127),是用这些代码所能表示的最大的单段圆弧(用两个连续的圆弧段表示更大的圆弧)。凸度定义可以为 0,表示直线段。但是,用代码 8 表示直线段在形说明中只占一个字节。
多段圆弧代码(00D 或 13)后面可跟 0 或多个圆弧段定义,最后被 (0,0) 位移终止。请注意,最后一个位移之后不能再指定凸度。例如,字母 S 可以如下定义:
13,(0,5,127),(0,5,-127),(0,0)
零凸度线段用于在多段圆弧中表示直线段,它们相当有用。与终止多段圆弧、插入直线段后再开始另一多段圆弧这种方法相比,其效率要高得多。
在圆弧段和多段圆弧定义中不能使用数字 -128。
|
00D
|
乘指定凸度的圆弧
|
00E
|
只有当文字是垂直的,才会处理下一个命令
|
在字符定义中遇到此特殊代码时,下一代码是否进行处理由该字符的方向决定。如果方向为垂直的,则下一代码被处理;如果方向为水平的,则下一代码被忽略。
在水平文字中,每个字符的起点是基线的左端;在垂直文字中,起点为字符上方正中。在每个字符的结尾,通常需要用提笔线段绘至下个字符的起点。对水平文字,该线段是向右绘制的;而对垂直文字,该线段是向下绘制的。特殊代码 00E (14) 主要用于调整不同的起点和端点,使同一字符形定义可用于水平文字,也可用于垂直文字。例如,如下对大写 D 的定义可用于水平文字,也可用于垂直文字。
*68,22,ucd
2,14,8,(-2, 6),1,030,012,044,016,038,2,010,1,06C,2,050,
14,8,(-4,-3),0
|