在Surfer中输出矢量汉字的方法
/
在sur中输出矢量汉菡蘑曩Il
(f2脯舡系
;l
鋈.柳
utsteplessoo*/~Suffer/AbstractTpaperprovidethemethodtooutputsteplesszoomcharacte rto关键词矢量汉字HGL绘图仪P/^一^卅册一1fhis
对于地质类的应用软件来说,内存永远也不会
"过剩".大的内存可以保证装人地质上的海量数
据,并且运算速度快,所以在各个油田生产单位仍
然继续推出基于DOS的软件包.DOS下的Suffer
绘图包由于支持多达84种的绘图仪和打印机…,占
用内存少.绘图方便,以及国内许多技术人员二次
开发做的函数库,使得现在仍在油田,院校中广泛
应用,但是目前图形和汉字不能很好地混合输出,
大多采用先输出图,再打印汉字粘贴的方法,效率
较低.
矢量汉字显示速度快,任意无级缩放字体边缘
光滑不失真.这正是工程图输出所需要的,但是矢
量汉字库很大,而我们只在显示图名,图例中用到
少量汉字,采用完整的字库会带来额外的负担,浪
费计算机中的内存
本文采用小字库技术,同时兼顾了节约内存和
快速向绘图仪输出高质量的汉字,简单实用,实现
了图文的统一自动处理,同以前的点阵汉字矢量化
法相比,直接解码,速度快,任意级别放大缩小时不失真.可以同时向打印机和屏幕输出
Surfer的PLT文件
su_T的PLT文件类似于HPGL(惠普图形语
言),是笔式绘图仪的命令语言,由于HP绘图仪的
广泛使用,HPGL已经成为事实上的标准绘图语言, 在绘图仪和打印机上广泛使用,它们的独特优点是完全由可读的ASCII字符构成,使之易于产生和
调试,受到广大科学技术工程人员的欢迎.
graph
表1HPGL命令与PLT命令对比
,\文件格式
毋争\HPGLPL_T
落笔画线到点x1,Y1PD;PAxl,ylPAxlyl
选笔SPnn
定义坐标原点IPx1,y1,,y2mY
旋转R0eP-Oangle
设置比例SC,xl,y0,ylSCY
抬笔移动到点x1.v1PU;PAxl,v1M^xv
写出一申字符LBstringPSYhi
anglestring
由上表可以看出,两者的命令格式基本一样,
所以本文的方法同样适用于HPGL文件.Surfer软件包也提供了PLT格式自动转换到HPGL的功能. 同Suffer的PLT文件接口.也就是将以上命令写到扩展名为PLT的文本文件中.
矢量汉字和矢量汉字库
矢量汉字是将汉字的笔划边缘用直线段或曲
线段描述成封闭的曲线,前者的代表有Ucdos3.x
的矢量字库,后者有Microsoft的TrueType字库, 使用二次Brzier曲线描述字符】.矢量汉字信息中以特殊的字节表示落笔和抬笔,它是以图形方式建库的.每个汉字的图形信息因此也是不固定的.
矢量汉字库采用索引的方法.矢量汉字由两部
分组成,前一部分是索引信息,包括每个汉字的在字库种的地址和长度,按内码顺序存放,后一部分石油工业计算机应用3/1999
是汉字的数据,包括控制信息和各点坐标信息.
汉字索引信息首址=((汉字机内码高位字节一
0Xa1)+(汉字机内码地位字节-0Xa1))?6
显示汉字方法是:从索引信息读出汉字的地址
和长度=)到相应位置读出字型数据=)解码得到轮廓多边形的各点坐标=)画出多边形=)矢量汉字. 要建立小汉字库.因为汉字顺序无规律,所以在
小汉字库前加入区位码信息.这样矢量汉字的索引信息表结构是:
~edefstnlct{
unsignedlongaddres;/-k字型数据地址4
个字节★/
矢量图是什么意思unsigned_mtsize;/★字型数据长度2
个字节★/
)
小汉字库的索引信息表结构
typedefStlXICC{
unsignedimqwrn;/★汉字的区位码2
个字节-k/
unsignedlongaddres;/★字型数据地址4
个字节★/
umigned_mtsize;/★字型数据长度2
个字节★/
关键程序
矸为汉字轮廓的数据
pl0屯oly画汉字轮廓的
多边形.plodine画线.
vo/dptotV o~(fiatnut/1,
intxy[256J.imsc)
fimi,x2,y2,x0,yo,
moveup;
intm/n=1000000,
m=一1000000;
for(i=0;iQ?num;i+
+)
{ff(mkn>xy[iJ]ndn
xyi;
;
if(max<xy[iJ】rnax=xy[i】;
)
moveup=max+mfia;
moveup650;
x0=xy【O]:yo:一xy[1l+moveup;
riot((float)x0/sc,(float)y0/so,3);
t'or(i1:i<nurn;i++)
{
=xy[2-ki】;y2=一xyl2★i+1】+moveup; v|ot((float)x2/sc.(float)y2/sc.2):
}
plot((float)x0/sc,(float)'~O/sc,2):
}
voidploflfiae(hum,datax,dauy)
imnum;
floatdatax[256】,dauy[256】;
plot(datax[i】,datay[i】,3);
for(i=0;i<num,i++)
ploddaax【iJ_datayⅢi,2)
}
其中Plot函数的作用是画线,plodx,Y,3)为抬
笔到x,y点,pl0t(x,y,2)为落笔到x,y点【1】.
形式为审血审,"PA%8.3f%8.3f\n",
XC,YC):
实例
本文提供了三个实例,左图是采油累积曲线示
意图,中图是一个沉积扇顶面等值线图,右图是中图
的立体图,主要用于演示矢量图中插入矢量汉字的
说明和图例.
B等值线
BContoul
圈1实倒演示
C立体罔
CSuffer
●考文t
f1】孙j蔓曩,揖金蛊荨计算机蛰圉理论及其应用.成都:电子科拄大学出版社,1995
I2】DavidCKaymdIof.nR.Lu-w~c.柑东等译.20种位圈矢量图文件格式与实践.北京:学苑出版社.1994
I3】董有积利用C语盲缩程实现小型矢量设字库的剖建及调用

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。