在构建地理信息系统(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目录下。