Skip to content

Extracting GD&T Callouts From a Mechanical Drawing

10 min read · updated August 11, 2026

Geometric dimensioning and tolerancing is a notation, not a set of labels. Its callouts are ordered, its symbols live in a font that carries no Unicode mapping, and each frame is a statement about one specific feature — which means extracting the text alone throws away most of the meaning.

The grammar of a feature control frame

A feature control frame is a rectangle divided into compartments, read left to right, and the order is fixed by ASME Y14.5. The compartments are:

  • The geometric characteristic symbol — one glyph naming what is being controlled: position, flatness, perpendicularity and so on.
  • The tolerance zone — a value, optionally preceded by a diameter symbol meaning the zone is cylindrical rather than a pair of parallel planes, and optionally followed by a material condition modifier.
  • Datum references — up to three compartments, primary, secondary and tertiary, each optionally carrying its own material boundary modifier.

The order of the datum references is the whole point of them and it is the thing most easily lost. A then B then C is a different constraint from B then A then C: the primary datum establishes the most degrees of freedom, and reordering them describes a different part. So the datum compartment sequence must be extracted as an ordered list, never as a set and never as a comma-joined string that a downstream consumer might sort.

Modifiers are single letters inside circles and they change the arithmetic. Maximum material condition and least material condition are the common two, and a tolerance taken at maximum material condition grows as the feature departs from that condition — the bonus tolerance — so the modifier is not an annotation, it is part of the number. Regardless of feature size is the default in current ASME practice and is not marked, which means its absence is information rather than a missing field. Others in use include a projected tolerance zone, free state and tangent plane.

Two more grammatical facts save a great deal of downstream confusion. Form tolerances — straightness, flatness, circularity, cylindricity — take no datum reference at all, so a frame with datums in it is not a form tolerance and a form tolerance with datums extracted is a parse error. And a composite frame is two rows sharing one leading symbol compartment; extracted as two independent frames it becomes two requirements where the drawing states one relationship.

The symbol set, and the two that left

Grouped by what they control: form (straightness, flatness, circularity, cylindricity), profile (profile of a line, profile of a surface), orientation (angularity, perpendicularity, parallelism), location (position), and runout (circular runout, total runout).

The count is a revision-dependent fact and it is a good example of why these pages carry a refresh flag. Earlier editions of ASME Y14.5 defined fourteen geometric characteristic symbols, two of which were concentricity and symmetry. The 2018 edition removed both — term, symbol and concept — on the grounds that position, profile and runout give more direct control and that the removed characteristics did not yield reliable, repeatable measurements.

For extraction that means the vocabulary depends on the drawing, not on the current standard. Drawings released under the earlier edition remain in service for decades and legitimately carry concentricity and symmetry callouts. A validator built from the 2018 symbol list will reject them. Keep both symbols in the recognised set, tag them as withdrawn, and record which edition the drawing cites — most drawings state it in or near the title block.

The withdrawal of concentricity and symmetry described here is a change in ASME Y14.5-2018 relative to the 2009 edition. ASME publishes Y14.5 and any subsequent revision, and ISO’s geometrical product specification standards are a separate system with their own symbol set and their own defaults.

Why the symbols come out as letters

This is the failure that makes GD&T different from every other table on a drawing. CAD systems draw geometric characteristic symbols from a dedicated symbol font — historically a shape file, in modern exports an embedded subset font — in which the glyph for perpendicularity is mapped to some arbitrary code point. When the PDF is exported without a ToUnicode mapping for that font, there is nothing in the file that says which character the glyph represents.

So a text extractor returns whatever code point the font happened to use. A frame that reads as position, diameter, 0.25, maximum material condition, A, B, C comes out as a short string of unrelated Latin letters and punctuation that looks like corruption but is entirely deterministic. It is also worse than corruption, because it is plausible: a downstream system will happily store it.

There are three routes out, and they are not equivalent. You can recover the mapping from the embedded font itself by comparing glyph outlines against known symbol shapes, which is exact but is real work. You can render the region and read it as an image, which is what most people do and which puts the burden on a vision model that has to distinguish a perpendicularity symbol from a parallelism symbol at small scale. Or you can detect the failure and route the drawing to a human, which is the ordinary handling for an illegible field and the honest answer for a low volume of high-consequence drawings. What you must not do is accept the letters. Assert that every extracted characteristic is a member of the known symbol set; anything else is a hard failure, not a low-confidence result. The general reading-order and text-layer problems behind this are covered on the page on reading order in a PDF.

A callout detached from its feature is noise

A feature control frame states a requirement about one feature: a specific hole, a specific surface, a specific pattern. The link is geometric — a leader line ending in an arrow on the feature, an extension line, or placement directly beneath a dimension. Nothing in the text says which feature is meant.

Extract a page of frames without their attachments and you have a list of tolerances belonging to nothing. Worse, a position tolerance is normally applied to a feature of size whose location is fixed by basic dimensions — the boxed, untoleranced numbers on the drawing — so the frame, the basic dimensions and the size dimension are three parts of one statement, printed in three places.

If your extraction is going to be used for anything other than search, the unit of extraction has to be the feature: an identifier for the feature, its size dimension with tolerance, its basic location dimensions, and the frames that apply to it. That is harder than listing frames, and it is the difference between a result an engineer can use and a result that only demonstrates the model can see.

Specific failure modes

  • Datum identifiers exclude I, O and Q. The same legibility reasoning that shapes revision letters applies here. Reading a datum letter as O means the character was a zero or a D.
  • Datum feature symbols are not datum references. The boxed letter attached to a surface declares that surface to be datum A; the letter inside a frame refers to it. Same character, opposite direction of meaning.
  • The diameter symbol is positional. Before the tolerance value it describes the zone shape; before a dimension elsewhere on the sheet it describes the feature. Losing which side of the value it sat on loses which one it was.
  • Decimal places are a specification. On an inch drawing the number of decimal places carries tolerance meaning. Normalising 0.250 to 0.25 discards it.
  • Frames are rotated. A callout on a vertical dimension is rotated ninety degrees, and both text extractors and vision models degrade on rotated content. Detect orientation and rectify the crop before reading it.