在构建地理信息系统(GIS)显示系统时,经常需要在同一视图中显示不同大小、旋转角度和多种字体的字符。然而,使用Windows系统字体例程进行重绘时,性能往往不尽人意。为了解决这个问题,决定采用历史悠久的"Hershey"矢量字体。
所有的字体管理和显示功能都被封装在名为SMFontUtil
的类中,其使用方式在附带的FontDemo
程序中有所展示。其中最关键的方法是:
void SMFontUtil::DrawString(
CDC * pDC,
CPoint pStart,
double pRotation,
double pCharWidth,
double pCharHeight,
FONT_TYPE pFontType,
CString pString
);
在这个示例中,硬编码了字体定义数据的路径,因此FontData.zip
必须存放在C:\HersheyFonts
目录下。在实际系统中,这些数据存储在服务器上,与GIS数据一起。
原始的Hershey字体字符代码与ASCII字符并不匹配得很好。因此,构建了一个转换表,将ASCII字符和字体映射到Hershey字符。包括的字体有:
还包含了一个简单的字体编辑器,允许编辑顶点和转换表。要编辑一个字符,只需在任何视图中右键单击它。要为ASCII字体系列分配Hershey字体,选择数字视图中的字符,然后从菜单中选择"index save"。切换到Xlated视图,选择目标单元格,然后选择"Assign Index"。
字体数据存储在两个文件中:矢量数据和转换表。提供了运行时版本和人类可读的CSV格式版本,供那些希望使用它们的人使用。SMFontUtils
类提供了一个方法,将CSV格式转换为运行时格式。请注意,为了本文的目的,字体定义数据FontData.zip
必须解压到C:\HersheyFonts
目录下。