GIS系统中的矢量字体显示优化

在构建地理信息系统(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字符的映射

原始的Hershey字体字符代码与ASCII字符并不匹配得很好。因此,构建了一个转换表,将ASCII字符和字体映射到Hershey字符。包括的字体有:

  • SMALL_SIMPLEX
  • SMALL_DUPLEX
  • SIMPLEX
  • DUPLEX
  • TRIPLEX
  • MODERN
  • SCRIPT_SIMPLEX
  • SCRIPT_DUPLEX
  • ITALLIC_DUPLEX
  • ITALLIC_TRIPLEX
  • FANCY
  • GOTHIC

还包含了一个简单的字体编辑器,允许编辑顶点和转换表。要编辑一个字符,只需在任何视图中右键单击它。要为ASCII字体系列分配Hershey字体,选择数字视图中的字符,然后从菜单中选择"index save"。切换到Xlated视图,选择目标单元格,然后选择"Assign Index"。

字体数据存储

字体数据存储在两个文件中:矢量数据和转换表。提供了运行时版本和人类可读的CSV格式版本,供那些希望使用它们的人使用。SMFontUtils类提供了一个方法,将CSV格式转换为运行时格式。请注意,为了本文的目的,字体定义数据FontData.zip必须解压到C:\HersheyFonts目录下。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485