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:

aSGE = ... # mtk.ModelData_ModelElement
aPMIData = aSGE.PMI()
...
# Iterate over elements
if aPMIData:
if aPMIData.NumberOfElements() == 0:
return
anElements = aPMIData.Elements()
for anElement in anElements:
aSemanticRepresentation = anElement.SemanticRepresentation()
...
aGraphicalRepresentation = anElement.GraphicalRepresentation()
...
...
# Iterate over saved views
aSavedViews = aPMIData.aSavedViews()
for aView in aSavedViews:
aGraphicalRepresentation = aView.GraphicalRepresentation()
...
...

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

aPMIData = mtk.PMI_Data(mtk.UTF16String("PMI"))
...
anElement = mtk.PMI_Element(mtk.PMI_ElementType_Dimension)
aGraphicalRepresentation = ... # mtk.PMI_GraphicalRepresentation
anElement.SetGraphicalRepresentation(aGraphicalRepresentation)
aSemanticRepresentation = ... # mtk.PMI_SemanticRepresentation
anElement.SetSemanticRepresentation(aSemanticRepresentation)
aPMIData.Add(anElement)
...
aView = ... # mtk.PMI_SavedView
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:

aShape = ... # ModelData_Shape
anElement = aShape.AssociatedPMI()
for anElement in anElements:
aSemanticRepresentation = anElement.SemanticRepresentation()
...
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):

aCamera = ... # mtk.PMI_Camera
aView = mtk.PMI_SavedView(mtk.UTF16String("View1"), aCamera)
...
aGraphicalRepresentation = ... # mtk.PMI_GraphicalRepresentation
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