- 积分
- 15559
- 明经币
- 个
- 注册时间
- 2004-3-7
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2008-7-23 18:05:00
|
显示全部楼层
本帖最后由 作者 于 2008-7-23 18:11:33 编辑
byghbcx发表于2008-7-23 17:38:00每次对image重画时,先要擦除,图形坐标要重新计算再重新画,支持汉字,要读取汉字形文件(*.shx)后得到汉字的矢量,再通过坐标转换到image坐标中绘制,早期天正中是这样的.
这是个好办法,shx的矢量能读出来?比较困难啊,谁有专门的程序吗,我用ultraedit打开后是乱码,无法分析数据结构啊。找了一篇文章如下:
高俊 书写字符是绘制工程图纸的一个重要内容。无论是手工绘制工程图纸还是计算机绘制工 程图纸,在图样中书写字符都要耗费大量时间。开发计算机绘制工程图纸系统时,字符书写模 块是一个重要而复杂的模块。它需要具有: ·开发字符书写模块的标准与规范; ·定义字符库的功能,特别是定义汉字字库的功能; ·书写字符的功能; ·修改已书写的字符的功能; ·与上述功能相适应的数据结构; ·与上述功能与结构相适应的操作结构; ·与上述功能与结构相适应的管理功能。 若再详细地分析研究上述课题,还可列出与其相关的诸多问题。例如:书写字符时如何实 现书写多种字体?如何根据绘制图样的需要与具体情况,规定字符串书写基点的类型?……等 等。为了便于叙述,下面以大家熟悉的图形软件AutoCAD为例,讨论绘制工程图纸系统中的字 符书写模块。
AutoCAD书写字符的操作结构 AutoCAD书写字符的操作结构包括:字库的定义、字库的调入、字符书写以及已书写字符 的修改。下面分别介绍。
1.定义字符的编码系统 字符的编码系统需定义字符的规定与命令码、一般字符的字库文件、两字节代码字符的 字库文件,如汉字。
2.绘制图形时的字符书写系统 ·字库的调入 用STYLE命令调入。该命令参数有:索引参数、字符参数、变形参数、书 写参数等。 ·字符的书写 用TEXT命令书写。该命令参数有:基点坐标、字高、字符旋转角度、字 符串等,还包括两个子命令:STYLE和JUSTIFT。 ·字符书写的基点类型 AutoCAD字符书写的基点有三种类型,一种类型是按基点位于字 符串书写方向上的位置而分类;另一种是按基点位于字高方向的位置和字符串的书写方向的 位置而分类;第三种是给出确定字符串两端的界点,算出能容纳字符串的长度空间和字符串的 转角,按输入的字符及其个数,计算出字高或者是字宽,将要书写的字符串充满该容纳字符串 的长度空间。 ·已书写字符串的修改 用CHANGE命令完成。可修改内容包括:字体、字高、字宽、基 点坐标、转角及字符串等。字符串的修改比较费事,若其中的一个字符错了或漏了,修改时必 须重新输入整个字符。 修改后的字符串的数据存放在实体数据区,原来的字符串的数据移到另外的实体数据区 ,这样做是为了便于"Undo"等的操作。 ·关于排版 本系统没有排版功能,书写工程图样中文字较多的技术说明或注释时比较 费事。可以用AutoCAD提供的开发工具解决这一问题。例如,可用AutoLISP语言编写一转换书 写程序,将用一般文字编辑软件编排的技术说明文本文件读入AutoCAD,然后按要求将其书写 在指定的范围内。
AutoCAD书写字符的数据结构
1.字库文件的数据结构 字库文件由三部分组成:文件的头部、索引表、字符的编码。
2.字符文件表的数据结构 struct style_table{ unsigned char sty_flag; /*正常书写,坚直书写及其他*/ char sty_name(32); unsigned char eof_name(2)={0XFF,0XFF}; double fix_height; double width_factor; double oblique_angle; unsigned char generation_flaf; /*normal,backward或upside down*/ double last_height; char primary_font_name(64); char big_font_name(64); unsigned char unknown(2); }; /*字符文件表的长度为198个字节。*/
3.字符实体的数据结构 字符实体的数据结构比较复杂,实体头部为8个字节,实体中具体含有哪些数据需看实体 头部的各个标志位是否置为1。字符实体的数据结构如下图。 @@26189000.GIF;图1@@ 从上图可以看出,AutoCAD只存储字符串的字体与字符串的数据、几何参数和属性数据, 不存字符的每个笔画的数据,这些数据从字库文件里读取。这样可以减小存储已书写字符串 数据的空间, 但影响软件的运行速度。 从上图还可以看出,字符实体数据结构的复杂性,其中除了字符的数据外,还有一些属性 数据与其他一些数据的数据结构有关,如实体的扩展数、UCS数据等。 AutoCAD书写字符的管理功能与存在的问题 AutoCAD定义字符与图形符号所用的编码是一样的,字库文件的扩展名与图形符号库文件 的扩展名都是.SHX,为了便于区分字库文件与图形符号库文件,AutoCAD规定字库文件的第一 个编码必须是: *0,4,Style name(字库文件标识与定义字体的名称) 这是字库文件的特有编码,反映该 字库的特点,包括字体的名称、字符的高度参数(上高和下高)与书写方向参数(只能水平书写 ,还是既能水平书写也能竖直书写)。这些信息与字库调入命令STYLE相配。 在AutoCAD里要按Big Font的规定定义汉字库。定义汉字字库文件的第一个记录必须是 *BIGFONT nchars,nranges,b1,e1,b2,e2,... 例如: *BIGFONT 7050,2,0A0,0A3,0B0,F7 *0,4,song 128,0,0,0 ... ... ... ... ...按 上例定义的汉字库,在某些版本的AutoCAD里书写时,汉字是倒的,在另外的版本里书写时,汉 字则是正的。这是因为在某些版本里将128按-128处理了。AutoCAD的字符编码系统规定X、 Y方向的位移量为相对坐标,类型为signed char。如果能在字库文件的特有编码里增加一个 字段,说明位移量是相对坐标还是绝对坐标,若是绝对坐标,则字高与位移量的类型为unsign ed char,这样字符的分辨率便为255了,这对定义汉字十分有利。 笔者曾经做了一个包括半宽英文字符的汉字库,为了便于在工程图纸中书写较多文字的 技术说明,使英汉混写时文字能够上下对齐,在AutoCAD的10.0版中使用没有甚么问题;在12. 0版使用时确出现了这样的问题:只要将该汉字库调入AutoCAD,则用其他字体书写的英文全变 为该字库定义的英文字体,任何英文字体都不能用了。 AutoCAD定义的某些功能键与某些汉字机内码的高位一样,这也会给汉字的输入带来麻烦 。 AutoCAD没有排版功能,但连续使用书写字符命令TEXT书写字符串也还方便。第一次用T EXT命令,需要输入书写字符的基点坐标。输完字符串,按回车键后,该字符串便按要求书写在 指定的地方。再键入TEXT命令或回车,出现提示要求输入基点坐标等提示时,直接按回车键, AutoCAD便要求直接输入要书写的字符串。输完字符串,按回车键后,刚输的字符串便写在上 次所写字符串的下面。AutoCAD之所以能这样完成字符的书写,是因为在字库文件里定义了下 面的编码: *1,2,sot(压栈操作) 5,0 *10,5,lf(换行操作) 2,8,(0,字符的上高 +字符的下高+ 行间距),0 *13,2,cr(回车操作,即弹栈操作) 6,0 第一次键入TEXT时,所输入的书写字符 的基点坐标被压栈,输入完字符串及回车后,AutoCAD将压栈的基点坐标弹出,并执行换行操作 ,第二次要书写字符串的基点便确定了。因此,连续使用TEXT命令,只需要在第一次键入TEXT 命令时输入书写字符的基点坐标。 AutoCAD在字符书写方面提供如下功能: ·在同一张图纸里可书写多种字体。所用字体存于字体表里与字符实体数据里的字体序 号变量。 ·在同一张图纸里可以按正常与竖直两种方式书写字符。书写方式存于字符表里的书写 方式变量:unsigned char sty_flag; /*正常书写,竖直书写及其他*/ ·支持多种字符定 位。定位方式存于字符实体数据里的对齐标志与基线标志变量。 ·提供下列字符变换功能: 剪切变换,要求输入的参数为oblique angle,其值存于字符实体数据里的字体斜角变 量。 反写字符串,由字符实体数据里的反倒书写标志表示。 倒着写字符串,由字符实体数据里的反倒书写标志表示。 AutoCAD软件在这方面存在的唯一问题是:如果某一字体的某些字符串先按正常方式书写 ,该字体的另一字符串要按竖直方式书写,则先要用STYLE命令修改书写方式。一旦该命令结 束,则前面按正常方式书写的那些字符串将都变为竖直方式书写了,反之亦然。其原因在于A utoCAD软件是将书写方式变量存于字体表里,而不是存于字符实体数据里,只要将其移到字符 实体数据中的反倒书写标志里,问题便迎刃而解,程序的修改量也不会大。
|
|
|