Hide menu
Loading...
Searching...
No Matches
Product and Manufacturing Information (PMI)
NIST CTC 01 ASME1

Product and Manufacturing Information (PMI) is used in 3D CAD and collaborative product development systems to convey information about the design of a product's components for manufacturing. Specifically, PMI includes information such as geometric dimensioning and tolerancing (GD&T), 3D annotations (text), and material specifications.

PMI Data

The PMI-related information is stored in the instances of PMI::Data class. An object of this class could be attached to any ModelData::ModelElement and contains complete PMI information related to the element.

PMI can be expressed using the following representations:

  • "Graphical" – a visual representation of PMI entity.
  • "Semantic" – specific attributes of a PMI entity (e.g., dimension lengths, tolerance values, etc.).

The PMI::Data stores PMI information as a vector of PMI::Element and a vector of PMI::SavedView . Each PMI::Element contains a graphical representation (PMI::GraphicalRepresentation ), which stores graphical components (PMI::GraphicalComponent ) of one PMI entity and a corresponding semantic representation (PMI::SemanticRepresentation ), which stores semantic components (PMI::SemanticComponent ).

The content of PMI::Data could be easily retrieved as shown below:

ModelData::ModelElement aSGE = ...;
PMI::Data aPMIData = theSGE.PMI();
// Iterate over elements
if (aPMIData) {
for (const auto& anElement : aPMIData.Elements()) {
PMI::SemanticRepresentation aSemanticRepresentation = anElement.SemanticRepresentation();
...
PMI::GraphicalRepresentation aGraphicalRepresentation = anElement.GraphicalRepresentation();
...
}
...
// Iterate over saved views
for (const auto& aView : aPMIData.SavedViews()) {
PMI::GraphicalRepresentation aGraphicalRepresentation = aView.GraphicalRepresentation();
...
}
}
...

The following code demonstrates the addition of PMI data and saved views:

PMI::Data aPMIData ("PMI");
...
PMI::Element anElement (PMI::ElementType::Dimension);
PMI::GraphicalRepresentation aGraphicalRepresentation = ...;
anElement.SetGraphicalRepresentation (aGraphicalRepresentation);
PMI::SemanticRepresentation aSemanticRepresentation = ...;
anElement.SetSemanticRepresentation (aSemanticRepresentation);
aPMIData.Add (anElement);
...
PMI::SavedView aView = ...;
aPMIData.AddView (aView);
...

An empty PMI::Data contains zero PMI::Element and PMI::SavedView objects.

Associations between PMI entities and topological entities (e.g., faces or edges) are stored as a vector of PMI::Element in ModelData::Shape .

PMI Element

The PMI::Element class stores the representation of a PMI entity:

Examples of PMI data

Type Graphical representation
PMI::DimensionComponent
PMI::GeometricToleranceComponent
PMI::DatumComponent

Graphical Representation

The PMI::GraphicalRepresentation class stores a representation of a PMI entity or an annotation in a graphical form.

Graphical Component types

Type Dim Description Graphical representation
PMI::OutlinedComponent 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.
PMI::TextComponent 2D Stores PMI graphical data expressed by a string.
PMI::TriangulatedComponent 3D Stores PMI graphical data expressed by triangulation, like filled text or any other triangulated planar shape.

A graphical representation may contain one or more graphical components.

Semantic Representation

The PMI::SemanticRepresentation class stores a representation of a PMI entity in the semantic form. The stored information may represent 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 (PMI::SemanticComponent subclasses) each one representing specific semantic notation.

The PMI::SemanticRepresentation class stores a PMI entity in the semantic form. This includes annotations associated with a CAD model's edges and faces, such as dimensional or geometric tolerances and datum features. Similar to a graphical element, a semantic element may consist of several components (PMI::SemanticComponent ) – each representing a specific semantic notation.

Semantic Component types

Type Description Examples of corresponding graphical representation
PMI::DimensionComponent Stores PMI semantic data related to dimension measurement like nominal value, plus minus bounds, range limits, etc.
PMI::GeometricToleranceComponent Stores PMI semantic data related to geometric tolerance measurement like magnitude value, modifiers, precedence of datum references, etc.
PMI::DatumComponent 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.
PMI::SurfaceFinishComponent Contains PMI semantic data related to surface texture: surface texture requirements, manufacturing method, surface lay, machining allowance, etc.

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

Semantic Attribute types

Type Description Applicable component
PMI::ModifierAttribute Defines the type of modification applied to a dimensional/geometric tolerance or a datum reference (e.g. statistical, free state, maximum material requirement, etc.). PMI::DimensionComponent PMI::GeometricToleranceComponent PMI::DatumComponent
PMI::ModifierWithValueAttribute Defines the type of modification applied to a tolerance with additional value (e.g. minor diameter, etc.). PMI::DimensionComponent PMI::GeometricToleranceComponent PMI::DatumComponent
PMI::QualifierAttribute Defines the type of qualifier that can limit a tolerance (e.g. max, min, etc.). PMI::DimensionComponent
PMI::PlusMinusBoundsAttribute Defines a plus and minus bounds (deviations) of a tolerance. PMI::DimensionComponent
PMI::RangeAttribute Defines range of value. PMI::DimensionComponent
PMI::LimitsAndFitsAttribute Defines the type of tolerance class dimension such as form variance, zone variance, grade, etc. (ISO 286) PMI::DimensionComponent
PMI::DatumTargetAttribute 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). PMI::DatumComponent
PMI::DatumRefAttribute Defines a datum reference. Stores a label of the datum and its precedence in a geometric tolerance. PMI::GeometricToleranceComponent
PMI::DatumRefCompartmentAttribute 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. PMI::GeometricToleranceComponent
PMI::MaximumValueAttribute Defines a maximum value. PMI::GeometricToleranceComponent
PMI::DisplacementAttribute Defines a displacement value for an unequally disposed geometric tolerance. PMI::GeometricToleranceComponent
PMI::LengthUnitAttribute Defines a length unit. PMI::DimensionComponent PMI::GeometricToleranceComponent PMI::SurfaceFinishComponent
PMI::AngleUnitAttribute Defines an angle unit. PMI::DimensionComponent PMI::GeometricToleranceComponent
PMI::MachiningAllowanceAttribute Defines a machining allowance and its bounds (deviations). PMI::SurfaceFinishComponent
PMI::SurfaceTextureRequirementAttribute Defines a surface texture requirement. Stores various requirements for the surface texture (e.g. specification limit, short and long wave filter values, surface parameter, etc) and its precedence (primary, secondary, etc) in the surface finish component. PMI::SurfaceFinishComponent

PMI associations

The PMI association is a relation between a PMI entity and a topological entity (e.g. face or edge). This relation is stored in ModelData::Shape . This data could be easily retrieved as shown below:

ModelData::Shape aShape = ...;
for (const auto& anElement : aShape.AssociatedPMI()) {
// Iterate over associated PMI elements
PMI::SemanticRepresentation aSemanticRepresentation = anElement.SemanticRepresentation();
...
PMI::GraphicalRepresentation aGraphicalRepresentation = anElement.GraphicalRepresentation();
...
}

Examples of associations

Control_Cabinet_assm.jt
nist_ctc_02_asme1_ct5210_rc.jt

Saved View

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

The following code demonstrates the addition of a graphical representation (which should be displayed from this view):

PMI::Camera aCamera = ...;
PMI::SavedView aView ("View1", aCamera);
...
PMI::GraphicalRepresentation aGraphicalRepresentation = ...;
aView.AddGraphicalRepresentation (aGraphicalRepresentation);
...

Examples of Saved Views

nist_ctc_04_asme1_ap242.stp
nist_ftc_06_asme1_ap242.stp

Supported formats

Both graphical and semantic PMI data can be extracted from the following formats:

  • STEP AP214e3, AP203e2, AP242