免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1618 | 回复: 0
打印 上一主题 下一主题

SHP(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-22 17:48 |只看该作者 |倒序浏览
    控制码是定义特殊的描画动作的,一共有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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP