第七章矢量文本的生成及使用.ppt
文本预览下载声明
计算机图形学;第7章 矢量文本的生成及使用 ;7.1 矢量文本概述 ;7.1 矢量文本概述 ;7.2 矢量文本的生成 ;7.2.1 矢量化原理 ;7.2.2 单点划线的点阵文本生成;7.2.3 由线段代替相邻点的搜索原则;7.2.4 矢量笔划的归并处理 ;7.3 矢量文本库的存储结构 ;7.3 矢量文本库的存储结构 ;7.3 矢量文本库的存储结构 ;7.4 矢量文本库的调用 ; void xshz(char *str, char *style, float x0, float y0, float width, float height, float dist, float direct, float rotate, int color)
{
int i, j, k=0; int PenDn, PenDnBefore; long int u;
unsigned char qm, wm; float x1, y1, x, y, x11, X1, Y1, X2, Y2; FILE *fpidx, *fplib;
struct hz_idx_table *idx; /* 声明一个库索引结构指针变量 */
struct hz_lib_table *lib; /* 声明一个库文件结构指针变量 */
idx = (struct hz_idx_table *)malloc(sizeof(struct hz_idx_table));
lib = (struct hz_lib_table *)malloc(sizeof(struct hz_lib_table));
fpidx= fopen(slhz.idx, rb); fplib= fopen(slhz.lib, rb);
direct = direct * PI / 180; rotate = rotate * PI / 180;
for (i=0; ik; i=i+2) {
PenDnBefore=0;
qm = hz[i] - 160; /* 计算汉字区码*/
wm = hz[i+1] - 160; /* 计算汉字位码*/
u = ((long)(qm-16)*94 + wm-1)*6; /* 计算汉字在索引文件中的位置*/
fsetpos(fpidx, u); /* 索引文件定位*/
fread(idx, 6, 1, fpidx); /* 读索引文件中读取6个字节*/
fsetpos(fplib, idx-address); /* 矢量文本库定位*/
x = x0 + i * dist * cos(direct); /* 单个汉字在屏幕上显示的首位置*/
y = y0 + i * dist * sin(direct);
; for (j=0; jidx-line_num; j++) { /* 按汉字笔划矢量数循环*/
fread(lib, 2, 1, fplib); /* 读取一对坐标*/
if (lib-x 0x80) { /* 判断本点是抬笔还是落笔*/
lib-x = lib-x -128; /* 为落笔时滤去落笔信息*/
PenDn = 1;
} else {
PenDn = 0;
}
x11 = (float)lib-x / 72 * width ; /* 计算该点相对于汉字左上角*/
y1 = (float)lib-y / 72 * height ; /* 的相对坐标 */
x1 = x11 * cos(rotate) - y1 * sin(rotate) + x; /* 计算该点的 */
y1 = x11 * sin(rotate) + y1 * cos(rotate) + y; /* 实际坐标 */
if (PenDnBefore)
line(X2, Y2, X1, Y1); /* 若前一点为落笔,则与本点相连 */
显示全部