Hide menu
Product and Manufacturing Information (PMI)

Product and Manufacturing Information (PMI) is used in 3D CAD and/or collaborative product development systems to convey information about the design of a product's components for manufacturing. More specifically, PMI conveys information such as geometric dimensioning and tolerancing (GD&T), 3D annotation (text), surface finish and material specifications.

PMI Table

The PMI related information is stored in the instances of ModelData_PMITable class. An object of this class could be attached to any scene graph element (ModelData_SceneGraphElement subclass) and contains complete PMI information related to the element.

PMI can be expressed via one of two (or both) PMI presentations:

  • graphical - visual presentation of PMI entities;
  • semantic - specific attributes of PMI entity (e.g. length of dimension, tolerance values, etc);

The ModelData_PMITable stores PMI information as the collection of ModelData_PMIData objects and the collection of ModelData_PMISavedView objects. Each ModelData_PMIData object contains a graphical element (ModelData_PMIGraphicalElement) which stores graphical presentation of one PMI entity and corresponding semantic element (ModelData_PMISemanticElement) which stores semantic attributes. The content of ModelData_PMITable could be easily retrieved via iterators as shown below:

ModelData_SceneGraphElement aSGE = ...;
ModelData_PMITable aTable = aSGE.PMI();
// Iterate elements
ModelData_PMITable::PMIDataIterator aDataIt (aTable);
while (aDataIt.HasNext()) {
ModelData_PMIData aPMIData = aDataIt.Next();
ModelData_PMIGraphicalElement aGraphicalElement = aPMIData.GraphicalElement();
ModelData_PMISemanticElement aSemanticElement = aPMIData.SemanticElement();
// Iterate saved views
ModelData_PMITable::SavedViewIterator aViewIt (aTable);
while (aViewIt.HasNext()) {
ModelData_PMISavedView aView = aViewIt.Next();

The following code demonstrates adding of a PMI data and saved view:

ModelData_PMITable aTable ("PMI_of_part");
ModelData_PMIData aPMIData (ModelData_PMI_Dimension);
ModelData_PMIGraphicalElement aGraphicalElement = ...;
aPMIData.SetGraphicalElement (aGraphicalElement);
ModelData_PMISemanticElement aSemanticElement = ...;
aPMIData.SetSemanticElement (aSemanticElement);
aTable.Add (aPMIData);
aTable.AddPlane (anElement.Plane()); // optional, in case if plane is used
ModelData_PMISavedView aView = ...;
aTable.AddView (aView);

Thereby ModelData_PMITable could contain:

It is very important that all PMI entities related to this scene graph element (including referenced) were added into the same ModelData_PMITable, e.g. every ModelData_PMIPlane referenced by ModelData_PMIGraphicalElement should also be added.

The PMI associations between PMI entities and topological entities (e.g. face or edge) are stored in ModelData_BRepRepresentation.

PMI data

An instance of PMI data class corresponds to an elementary PMI entity such as dimension or tolerance measurement. The ModelData_PMIData class stores presentations of PMI entity:


The PMI data object could have properties (ModelData_PropertyTable).

Examples of PMI data

Type Graphical presentation

Graphical element

The ModelData_PMIGraphicalElement class stores a presentation of PMI entity or annotation in graphical form. The information to be presented can be stored in different ways therefore several types of components were introduced to keep each graphical data close to the original.

Component types

Type Dim Description Graphical presentation
ModelData_PMIOutlinedComponent 2D/3D Stores PMI graphical data expressed by outline(s) like unfilled text, lines, frames, arrows, etc. Outline is represented by polyline/polyline2d/curve/curve2d/composite.
ModelData_PMITextComponent 2D Stores PMI graphical data expressed by a string.
ModelData_PMITriangulatedComponent 3D Stores PMI graphical data expressed by triangulation, like filled text or any other triangulated planar shape.

The graphical element can contain one or more components. The components can be of any type.

Please pay attention that 2D components (ModelData_PMIOutlinedComponent in case of 2D content and ModelData_PMITextComponent) are defined by coordinates in the plane (ModelData_PMIPlane) of its parent graphical element. So in order to position them correctly the plane of its parent graphical element should be set.


In order to position 2D PMI data on the screen the reference planes are used. The ModelData_PMIPlane class presents such reference plane and stores a geometric plane. The plane could be shared between multiple graphical elements.

Semantic element

The ModelData_PMISemanticElement class stores a presentation of PMI entity in semantic form. The stored information may be annotations associated with a CAD model's edges and faces such as dimensional/geometric tolerances or datum features. Like graphical element semantic element may consists of several components (ModelData_PMISemanticElementComponent subclasses) each one representing specific semantic notation.

It's expected that all components bear the same type.

Component types

Type Description Examples of corresponding graphical presentation
ModelData_PMIDimensionComponent Stores PMI semantic data related to dimension measurement like nominal value, plus minus bounds, range limits, etc.
ModelData_PMIGeometricToleranceComponent Stores PMI semantic data related to geometric tolerance measurement like magnitude value, modifiers, precedence of datum references, etc.
ModelData_PMIDatumComponent Stores PMI semantic data related to datum, datum feature symbol or datum target like label, index (if the datum is composite), datum target description, etc.

Each component may have several attributes affecting the meaning of stored data.

Attribute types

Type Description Applicable component
ModelData_PMIModifierAttribute Defines the type of modification applied to a dimensional/geometric tolerance or a datum reference (e.g. statistical, free state, maximum material requirement, etc.). DimensionComponent GeometricToleranceComponent DatumComponent
ModelData_PMIModifierWithValueAttribute Defines the type of modification applied to a tolerance with additional value (e.g. minor diameter, etc.). DimensionComponent GeometricToleranceComponent DatumComponent
ModelData_PMIQualifierAttribute Defines the type of qualifier that can limit a tolerance (e.g. max, min, etc.). DimensionComponent
ModelData_PMIPlusMinusBoundsAttribute Defines a plus and minus bounds (deviations) of a tolerance. DimensionComponent
ModelData_PMIRangeAttribute Defines range of value. DimensionComponent
ModelData_PMILimitsAndFitsAttribute Defines a kind of a tolerance class dimension such as form variance, zone variance, grade, etc. (ISO 286) DimensionComponent
ModelData_PMIDatumTargetAttribute Defines a datum target data. Contains a description (e.g. a point, line or limited area of the part surface) and an index (if the datum is composite). DatumComponent
ModelData_PMIDatumRefAttribute Defines a datum reference. Stores a label of the datum and its precedence in a geometric tolerance. GeometricToleranceComponent
ModelData_PMIDatumRefCompartmentAttribute Defines a compartment of datum references or compartments. Stores a collection of datum references or compartments and optionally a collection of modifiers, which is applied to each added compartment. GeometricToleranceComponent
ModelData_PMIMaximumValueAttribute Defines a maximum value. GeometricToleranceComponent
ModelData_PMIDisplacementAttribute Defines a displacement value for an unequally disposed geometric tolerance. GeometricToleranceComponent
ModelData_PMILengthUnitAttribute Defines a length unit. DimensionComponent GeometricToleranceComponent
ModelData_PMIAngleUnitAttribute Defines an angle unit. DimensionComponent GeometricToleranceComponent

PMI associations

The PMI association is a relation between PMI entity and topological entity (e.g. face or edge). This relation is stored in ModelData_BRepRepresentation via the mechanism of subshape properties. This data could be easily retrieved via iterators as shown below:

ModelData_BRepRepresentation aBRep = ...;
// Iterate subshapes
ModelData_BRepRepresentation::SubshapeIterator aShapeIt (aBRep);
while (aShapeIt.HasNext()) {
const ModelData_Shape& aShape = aShapeIt.Next();
// Iterate associated PMI elements
ModelData_BRepRepresentation::PMIDataIterator aDataIt (aShape, aBRep);
while (aDataIt.HasNext()) {
ModelData_PMIData aPMIData = aDataIt.Next();
Currently PMI associations only allow to query the PMI data objects associated with a B-Rep subshape. If you need to find subshapes associated with a given PMI element, you'll need to construct a map from subshapes to PMI elements by traversing the associations like in the example above.

Examples of associations


Saved view

Saved views of a design model may be defined to facilitate presentation of the model and its annotation. The ModelData_PMISavedView class presents such saved view. It stores a customized camera (ModelData_PMICamera) and a selected set of graphical elements. The camera sets position and direction of the view point relative to the model.

The following code demonstrates adding of a graphical element (which should be displayed from this view):

ModelData_PMICamera aCamera = ...;
ModelData_PMISavedView aView ("View1", aCamera);
ModelData_PMIGraphicalElement anElement = ...;
aView.AddGraphicalElement (anElement);

Different CAD software and technical documents use different terms for the "saved view" concept. The following list of equivalent terms might help in technical discussions:

  • ISO 16792, ASME Y14.41-2003 - saved view
  • CATIA V5/V6 - capture
  • NX - model view
  • Creo (Pro/Engineer) - combined state

Examples of saved views


Supported formats

The PMI data could be extracted from the following formats:

  • STEP (AP214e3, AP203e2, AP242)
  • JT (version 8.1 and higher)