Click here to Skip to main content
13,357,219 members (75,396 online)
Click here to Skip to main content
Add your own
alternative version


26 bookmarked
Posted 28 Mar 2000

Hershey Font wrapper class

, 28 Mar 2000
Rate this:
Please Sign up or sign in to vote.
Using Hershey vector fonts for faster rendering
  • Download demo project - 51 Kb
  • Sample Image - HersheyFont.gif

  • Download FontEdit sample program - 68 Kb
  • Download Font data files - 156 Kb
  • Recently when building a GIS display system I ran into the problem of displaying characters at many different sizes, rotations (escapments), and in several typefaces all in the same view. Unfortunately the redraw performance I was able to obtain using Windows' font routines was not very good. Reaching back to my past (and definitely showing my age) I decided to use the venerable "Hershey" vector fonts.

    All of the font management and display is wrapped up the class SMFontUtil the use of which it illustrated in the FontDemo program included. The only method of any real consequence is:

    void SMFontUtil::DrawString(
    	CDC * pDC,            //device context to draw to
    	CPoint pStart,        //starting point
    	double pRotation,     //rotation angle clockwise in radians (0 = 12:00)
    	double pCharWidth,    //width of each character
    	double pCharHeight,   //height of each character
    	FONT_TYPE pFontType,  //the font to use
    	CString pString)      //the string

    NOTE: For this article I hard-coded the path so that the font definition data (found in must reside in C:\HersheyFonts. In the real system this is stored on a server with the GIS data.

    The original Hershey font character codes do not match well ASCII. I have built a translation table that maps ASCII character and font to a Hershey character. The included fonts are:

    • DUPLEX
    • MODERN
    • FANCY
    • GOTHIC

    I have also included a crude font editor that lets you edit the vertices and the translation table. To edit a character right click on it in any view. To assign a hershey font to a ASCII font family pairing select the character in the numeric view and select "index save" from the menu. Switch to Xlated view and select the target cell, then select "Assign Index".

    The font data resides in two files. The vector data, and the translation table I have supplied both the runtime version, and a human readable version in CSV format for those who wish to use them. The SMFontUtils class provides a method to convert from the CSV to the runtime. Again, please note that for the purposes of this article the font definition data ( must be extracted into C:\HersheyFonts.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Randy More
    United States United States
    No Biography provided

    You may also be interested in...

    Comments and Discussions

    QuestionHow faster ? Pin
    Alexandre GRANVAUD8-Sep-09 21:19
    memberAlexandre GRANVAUD8-Sep-09 21:19 
    GeneralProblem editing new symbol Pin
    andywolpert19-Sep-05 11:50
    memberandywolpert19-Sep-05 11:50 
    GeneralPermission to use the class Pin
    allanwright1-Mar-03 14:01
    memberallanwright1-Mar-03 14:01 
    GeneralWow! Pin
    Swinefeaster12-Aug-02 1:06
    memberSwinefeaster12-Aug-02 1:06 
    GeneralRe: Wow! Pin
    rakkar13-Nov-02 14:23
    memberrakkar13-Nov-02 14:23 
    GeneralRe: Wow! Pin
    Chris Richardson17-Dec-02 15:04
    memberChris Richardson17-Dec-02 15:04 
    GeneralRe: Wow! Pin
    planetfall6-Jun-04 21:03
    memberplanetfall6-Jun-04 21:03 
    GeneralRe: Wow! Pin
    Paul Selormey18-Jun-04 0:10
    memberPaul Selormey18-Jun-04 0:10 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    Permalink | Advertise | Privacy | Terms of Use | Mobile
    Web01 | 2.8.180111.1 | Last Updated 29 Mar 2000
    Article Copyright 2000 by Randy More
    Everything else Copyright © CodeProject, 1999-2018
    Layout: fixed | fluid