Need help working from home with your Bentley software? We're here to help - click here
This is a collection of information related to fonts in MicroStation.
Below are some common reasons why you may not see your fonts in the font pickers and/or see font substitution warning messages in the message center.
Summary: RSC fonts hide SHX fonts, and both RSC and SHX fonts hide TrueType fonts (by-name).
What to do: Disable font hiding completely, or manually hide the undesired fonts so that the desired fonts are visible. See the 'Font Configuration File' section in the MicroStation help topic: ‘Composing Drawings' > ‘Annotations' > ‘Using Fonts'.
MicroStation V8i introduces the ability to hide fonts with duplicate names; this is the default behavior. This can occur if you have fonts of different types (RSC - MicroStation resource fonts, SHX - AutoCAD fonts, and TrueType fonts), but with the same name (e.g. "Arial").RSC hides SHX because MicroStation can generate SHX fonts for the shear purpose of exporting to DWG; this means you will still generally want to use the appropriate RSC font, and ignore the SHX variants unless you need to work directly with the DWG file. SHX (and RSC) hide TrueType because over the years, many RSC and SHX fonts may have been converted to TrueType equivalents for various reasons. Preferring TrueType fonts could potentially prevent the use of many SHX and/or RSC fonts.
Font hiding can be disabled completely (find the HideDuplicateNames element in your configuration file, and change its value from ‘true' to ‘false'), or for specific fonts. See the MicroStation Font Configuration File Wiki page. Hiding specific fonts may be the best option as it preserves the intended behavior above, but allows the picking of the intended font in specific scenarios
As a side note, it may also be preferable to remove the offending lower level font(s). Fonts like "Arial" (normally TrueType) are sometimes hidden due to legacy RSC equivalents; TrueType fonts have many advantages, and the TrueType versions, when they exist, are recommended for use instead of RSC (or SHX) versions.
Summary: MicroStation's message center says it is substituting fonts because they can't be found, or you believe that the font should be available but is not hidden as per above.
What to do: Ensure that the fonts are in places that MicroStation can find them; these locations can vary based on font type (see below). MS_FONTPATH can be used as a search path for all font types.
TrueType fonts: These are normally installed at the system level, and are found in your Windows fonts directory (%SYSTEMROOT%\Fonts, e.g. C:\Windows\Fonts). You must be an administrator on your computer to install TrueType fonts at this level. V8i also allows you to append search paths via the MS_FONTPATH configuration variable. V8i will also search the same directory as the design file if the font is not otherwise found (TrueType and SHX only).
RSC fonts: These fonts cannot be installed at the system level, and must be in a location found by configuration variables. RSC fonts are collected into RSC font libraries (*.RSC files), and are typically deployed with a workspace, or in the ‘system' directory of your local workspace. MicroStation will search all resource files in locations found via the following configuration variables: MS_SYMBRSRC and MS_FONTPATH. It builds a file list of first MS_SYMBRSRC, then of MS_FONTPATH. As it reads the RSC fonts, if there are font number conflicts, then the one added to the file list last wins. If there are multiple font libraries in the same directory, the order is alphabetical.
SHX fonts: These fonts cannot be installed at the system level, and must be in a location found by configuration variables or AutoCAD registry entries, or in the same directory as the DGN or DWG file in which it is referenced. MicroStation will search the AutoCAD font directory (as dictated by AutoCAD registry entries describing the most recently run version of AutoCAD), as well as all locations identified by the MS_FONTPATH and MS_DWGFONTPATH configuration variables.
Most of the following information comes from the FontManager.h header file in the Public API, which also contains additional information.
Fonts are identified by their name and type. However, it would be inefficient to store a copy of the font name every time it is referenced inside a design file. For this reason MicroStation stores a "Font Table" in the non-model storage area of design files. The font table stores a mapping between a "Font Number" and a font name. So, for a given design file, all elements that refer to a given font number refer to the same font. However, it should be obvious that elements from a different design file may refer to same font through a different font number. Also, note that there is only one font table for the entire design file, so that all elements from all models use the same font table. To find a Font object from the font number in an element, the procedure is:
There is a convenience method on FontManager to return a FontNumMap from a DgnModelRef, since that is frequently the most convenient value from which to find a DgnFile. Note that this is merely a convenience method and it does not imply that there is a FontNumMap associated with DgnModelRef's. DgnModelRef's are associated with DgnFiles and DgnFiles have FontNumMaps. Therefore, all calls to GetFontMap through DgnModelRefs from the same DgnFile will return the same value.
There can be some confusion about font numbers related to legacy APIs. For example:
Q: Given a Font, how do I get its font number?A: The question makes no sense. The same font may be referenced by many different font numbers from different design file. Now, if the question is "How can I determine if a Font exists in the Font Table for a design file, and if so, by what number?", then the answer is to get the FontNumMap for that file and call GetFontNumber.
Q: Given a font number, how do I get a Font?A: The question makes no sense unless you qualify the font number with a DgnFile. In that case, get the FontNumMap for the file and call either GetFont or ResolveFont.