- 论坛徽章:
- 0
|
控制码是定义特殊的描画动作的,一共有16个。控制码可以用16进制,也可以用10进制。16进制的表示形式如下:
000,001,002,003,004,005,006,007,008,009,00A,00B,00C,00D,00E
也可以表示成10进制:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
000(0)
定义结束。
001(1)
画笔接触画纸,开始描画。
002(2)
画笔离开画纸,移动画笔位置。
003(3)
其后的数字为尺寸系数(1-255),用该尺寸系数去除其后的矢量码的长度,结果作为该矢量码长度。
004(4)
其后的数字为尺寸系数(1-255),用该尺寸系数去乘其后的矢量码的长度,结果作为该矢量码长度。
005(5)
将当前坐标值压栈中,栈最多能容纳4个坐标。
006(6)
弹出栈中坐标值。
007(7)
其后出现的数字为另一个字型定义的编号。开始描画该字型,结束后再回到当前字型继续。
008(8),009(9)
直线变位码。SHP中矢量码的基本方向只有16个,长度最大值也只能是15个单位长度,这就限制了字型的设计。008(8)和009(9)就是解决画笔任意方向移动问题的控制码。008(8)后面的两个数字指定了从当前位置开始移动的偏移量,第1个数字是X方向偏移量,第2个数字是Y方向的偏移量,这两个数可以用小括号括起来,取值范围-28-127。009(9)后面的数字是每两个一组的连续偏移量,遇到(0,0)结束。
格式:8,X偏移量,Y偏移量 例:8,(-10,3)
格式:9,X偏移量,Y偏移量,X偏移量,Y偏移量... 例:9,(3,1),(3,2),(2,-3),(0,0)
00A(10)
描画八分弧的控制码。先说说八分弧,在平面直角坐标系中,以X正半轴方向为起点,逆时针将平面等分8份,并依次标号0,1,2,...,7。不难理解每一等份都是一个45度弧,这就是所谓八分弧。
格式:10,半径,(-)0SC
半径取值范围1-255。第二个参数是一个三位数字的矢量码。符号表示旋转方向,正则逆时针,负则顺时针;第一位为0;第二位S表示旋转的开始位置,取值为上面说的0-7;第三位C表示所画八分弧数量,取值0-7。
00B(11)
自由弧描画控制码。不难发现,上述的八分弧是有局限的,它不能随意在平面上画弧。而自由弧解决了这个问题。
格式:11,开始位置,结束位置,半径补算系数,半径,(-)0SC 例:
开始位置,结束位置。并不是具体的坐标位置,而是用偏离标准八分线的偏移量来表示。计算公式为
P = (Q - S) * 256 / 45 (P 开始位置,结束位置;Q 偏离X轴正方向的角度)
半径补算系数。因为半径的取值范围最大为255,所以如果要描画弧半径超过255时,要用到该值。计算公式为
弧半径 = 256*半径补算系数 + 半径
半径,(-)0SC。参见00A。
00C(12),00D(13)
弧线变位码。与008和009相似,只不过变位轨迹为弧线。00C是一次变位(008对应),00D是连续变位(009对应)
格式:12,X偏移量,Y偏移量,曲率
以(X,Y)和当前点所连成的直线为该弧线的在描画弧线起点的切线。X,Y取值范围[-127,127]。
曲率 = ( 2 * H / D ) * 127 (D 起点到终点线段长度;H 弧线中点到线段D的距离)。
曲率如果正数,表示逆时针描画;为负表示顺时针描画。
00D(13)表示连续画弧,以(0,0)结束。
00E(14)。该控制码是用来调整当前文字的结束位置和下一个文字起笔位置的。并且只在纵向书写时起作用,如果是横向书写,则该码后面的调整值被忽略。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91477/showart_1807076.html |
|