Persistent IDs
Persistent IDs are identifier strings or integers attached to entities. However, not all entities have persistent IDs. This depends on the format. HOOPS Exchange supports the concept of persistent IDs for certain file formats. Persistent IDs are important for developers drawing data from many CAD systems, since IDs assigned to model entities are persistent across different sessions.
Persistent IDs are stored as a field in the A3DRootBaseData
structure as either a string A3DRootBaseData.m_pcPersistentId
or an integer A3DRootBaseData.m_uiPersistentId
.
This attribute could be retrieved from rootbase data, with an additional way for assembly members by using A3DAsmProductOccurrenceGetIdentifier()
.
The persistent ID assigned to an entity will be defined by the CAD format. For HOOPS Exchange, ensure that each time the same file (or any version of the same file) is read so that any entity will have the same identifier previously defined. Typically, this confirms that any entities found with IDs matching between multiple files are in fact the same entity.
It is important to note that these IDs are not guaranteed to be unique. For instance, there are some cases where entities like faces can have the same ID. For example, this could happen when a feature groove is applied to define a body. More specific information on an example like this can be found in the table below. Navigate to any of one of these formats and sections to see these details: Inventor, CATIA, or SLW’s rows regarding the column Splitting a face - Adding a Groove.
Below is a table that provides information on how HOOPS Exchange supports persistent IDs across different formats and several different topological entity modifications. Each tab within each format section describes a different modification of a cube part and how the persistent IDs are effected based off of the changes described. They include image examples of each type of modification occuring to the part.
Formats and their Modification Supports
CATIA
This section describes what happens to the persistent IDs for parts in the CATIA file format with different part modifications.
Adding a loop to a face - Extruding a hole into a cube
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a loop to a face, ie. extruding a hole into the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 2 faces with same persistent ID (CATIA split cylinder) |
4 edges |
Changes | none | none |
Adding a face to the model - A chamfer
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a chamfer to the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face | 8 edges (see modified image above)
|
Changes | none | 1 edge is removed 4 edges are cut, so the persistent ID will change |
Splitting a face - Adding a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a uniform groove into the side of the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 3 faces | 14 edges (see modified image above)
|
Changes | 1 face is cut (split) in two. Both have the same persistent ID (see original picture above) | 1 edge is removed 4 edges are cut, so the persistent ID will change |
Have cylinder srf split - Adding a hole through a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by having a cylinder srf split ie. adding a hole through a groove.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 4 faces, with the same persistent ID | 6 edges |
Changes | none | none |
Unicity of IDs - Hole repitition
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have a unicity of IDs ie. a repitition of holes extruding into the cube in parallel.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the CATIA file format, a hole repitition will create 6 faces with different persistent IDs (2 faces per hole).
Editing a feature
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have an edit to a feature ie. the cube was transformed into a rectangle.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the CATIA file format, editing a feature can change persistent IDs.
Editing a sketch
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, an edit to the sketch of the part was made.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the CATIA file format, editing a sketch will recompute ALL of the persistent IDs.
Creo
Adding a loop to a face - Extruding a hole into a cube
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a loop to a face, ie. extruding a hole into the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face (cylindrical) | 2 edges (see modified image above) |
Changes | none | none |
Adding a face to the model - A chamfer
More information coming soon
Splitting a face - Adding a groove
More information coming soon
Have cylinder srf split - Adding a hole through a groove
More information coming soon
Unicity of IDs - Hole repitition
More information coming soon
Editing a feature
More information coming soon
Inventor
Adding a loop to a face - Extruding a hole into a cube
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a loop to a face, ie. extruding a hole into the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face (cylindrical) | 2 edges (see modified image above) |
Changes | none | none |
Adding a face to the model - A chamfer
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a chamfer to the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face | 8 edges (see modified image above)
|
Changes | none | 1 edge is removed 4 edges are cut, so the persistent ID will change |
Splitting a face - Adding a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a uniform groove into the side of the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 3 faces | 14 edges (see modified image above)
|
Changes | 1 face is cut (split) in two. Both have the same persistent ID (see original picture above) | 1 edge is removed 4 edges are cut, so the persistent ID will change |
Have cylinder srf split - Adding a hole through a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by having a cylinder srf split ie. adding a hole through a groove.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 2 faces, with the same persistent ID (see modified image above) | 4 edges |
Changes | none | none |
Unicity of IDs - Hole repitition
More information coming soon
Editing a feature
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have an edit to a feature ie. the cube was transformed into a rectangle.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the Inventor file format, editing a feature does not change any persistent ID.
Editing a sketch
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, an edit to the sketch of the part was made.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the Inventor file format, editing a sketch will have no effect if the semantic does not change:
- Editing segment length: Does not change any persistent IDs
- Replacing a segment by a curve will change persistent IDs as follows:
Faces | Edges | |
---|---|---|
New | 1 face (see original picture above) | 7 edges |
Changes | 1 face is changed | Only 5 edges are kept (see modified image above)
|
NX
Editing a sketch
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, an edit to the sketch of the part was made.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In NX file format, editing a sketch will have no effect if the semantic does not change:
- Editing a segment length: Does not change any persistent IDs
- Replacing a segment: New faces and ALL associated edges will have new persistent IDs
SLW
Adding a loop to a face - Extruding a hole into a cube
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a loop to a face, ie. extruding a hole into the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face (cylindrical) | 2 edges (see modified image above) |
Changes | none | none |
Adding a face to the model - A chamfer
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a chamfer to the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face | 4 edges for the chamfer face |
Changes | none | 1 edge is removed |
Splitting a face - Adding a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a uniform groove into the side of the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 3 faces | 10 edges, for the new faces |
Changes | 1 face is cut (split) in two. Both have the same persistent ID (see original picture above) | More info coming soon |
Have cylinder srf split - Adding a hole through a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by having a cylinder srf split ie. adding a hole through a groove.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 2 faces, with the same persistent ID (see modified image above) | 4 edges |
Changes | none | none |
Unicity of IDs - Hole repitition
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have a unicity of IDs ie. a repitition of holes extruding into the cube in parallel.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
A hole repitition (with pattern feature) will create 3 faces with different persistent IDs (1 face per hole).
Editing a feature
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have an edit to a feature ie. the cube was transformed into a rectangle.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
Editing a feature does not change any persistent ID.
Editing a sketch
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, an edit to the sketch of the part was made.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In NX file format, editing a sketch will have no effect if the semantic does not change:
- Editing a segment length: Does not change any persistent IDs
- Replacing a segment: New faces and ALL associated edges will have new persistent IDs
UG
Adding a loop to a face - Extruding a hole into a cube
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a loop to a face, ie. extruding a hole into the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face (cylindrical) | 2 edges (see modified image above) |
Changes | none | none |
Adding a face to the model - A chamfer
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a chamfer to the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 1 face | 4 edges for the chamfer face |
Changes | none | 1 edge is removed |
Splitting a face - Adding a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by adding a face to the model, ie. adding a uniform groove into the side of the cube.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 4 faces | 12 edges
|
Changes | 1 face is cut (split) in two. Both have the same persistent ID (see original picture above) | 2 edges are cut in two. Edges on one side will have new persistent ID |
Have cylinder srf split - Adding a hole through a groove
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, the part was modified by having a cylinder srf split ie. adding a hole through a groove.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
See below for what’s new to the part after modification, and any possible changes that may have occurred and altered any persistent IDs to the part file.
Faces | Edges | |
---|---|---|
New | 2 faces, with different persistent IDs | 4 edges |
Changes | none | none |
Note
With the hole feature, if at some point we edit a feature to merge the 2 holes into one face, the resulting face persistent ID / color / properties will be taken from the farthest face from the origin of the hole.
Unicity of IDs - Hole repitition
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have a unicity of IDs ie. a repitition of holes extruding into the cube in parallel.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
In the NX file format, a hole repitition will create 3 faces with different persistent IDs.
Editing a feature
In this model modification, we see the original, unaltered cube on the left and the altered cube on the right. In this instance, we have an edit to a feature ie. the cube was transformed into a rectangle.
Original cube part | Modified cube part |
---|---|
![]() |
![]() |
Editing a feature does not change any persistent ID.
Immutable Persistent ID Instances: Assembly Cases
There are also several instances where the persistent IDs should never change. Read through the tabs below to see example details and images.
Base assembly
Persistent IDs should never change during base assembly. For example, notice in the image that several previously created CAD parts are being assembled to form a completed CAD product. Any manipulation of parts or objects during the assembly should never cause any change to a previously defined identifier.

Changing order of components
Persistent IDs should never change if and when you change the order of components in an assembly model tree.
In the images provided below, we see a CAD assembly file that consistents of several CAD parts. Originally, the model tree reads the chronological order of cylinder 1, cube 1, and finally cube 2, as seen in the original order of components image on the left. Note in the Modified order of components image the changes to the parts order in the model tree structure. It now instead chronologically lists in the model tree the parts as cube 2, cube 1, and then cylinder 1.
Original order of components | Modified order of components |
---|---|
![]() |
![]() |
Despite these changes in the model tree parts structure, the persistent IDs of any entities in any of the parts should remain the same.
Removing components
Persistent IDs should never change if and when you remove any components from an assembly file.
In the images provided below, we see a CAD assembly file that consistents of several CAD parts. Originally, the model tree reads the chronological order of cylinder 1, cube 1, and finally cube 2, as seen in the original components in assembly image on the left. Note in the Components in assmebly after cube 1 removal image the removal of cube 1 from the assembly file in the model tree structure. It now instead chronologically lists in the model tree the parts of the file to now contain only cylinder 1 and cube 2.
Original components in assembly | Components in assembly after cube 1 removal |
---|---|
![]() |
![]() |
Despite the removal of a part from the assembly file, the persistent IDs of any entities in any of the parts should remain the same.
Editing component parameters
Persistent IDs should never change if and when you edit any component parameters from within an assembly file.
In the images provided below, we see a CAD assembly file that consistents of several CAD parts. Originally, the model tree reads the chronological order of cylinder 1, cube 1, and finally cube 2, as seen in the original components in assembly image on the left. We can see in the image that the cylinder is blue, and the two cubes are green. Note in the Modified component parameters of cube 2 in assembly image that the component parameters of cube 2 has been altered. Rather than green, cube 2 is now yellow.
Original components parameters of assembly parts | Modified component parameters of cube 2 in assembly |
---|---|
![]() |
![]() |
Despite editing the component parameters of cube 2, the persistent IDs of any entities in any of the parts should remain the same.
Other Format Information
File Type | Assembly Nodes | Solids | Faces | Edges | Density |
---|---|---|---|---|---|
CATIA V5 | Persistent ID string (CLSID) | Persistent ID integer (key) | Persistent ID string as attribute (string) | Persistent ID string as attribute | In ProductInformation (for each occurrence corresponding to a file) |
Creo/Pro-E | Persistent ID string (CLSID) | Not applicable | Persistent ID integer (key) - Note: Persistent ID inside a part are different even when there are several solids. | Persistent ID integer (key) - Note: Persistent ID inside a part are different even when there are several solids. | Latest versions of Creo have them. Otherwise, we put the stored filename. |
NX | Persistent ID string (CLSID) | Persistent ID integer (key) | Persistent ID integer (key) | Persistent ID integer (key) | In ProductInformation (for each occurrence corresponding to a file) |
SolidWorks | Persistent ID string (CLSID) | Persistent ID integer (key) | Not applicable | Not implemented | In ProductInformation (for each occurrence corresponding to a file) |
JT | Not applicable | Not applicable | Not applicable | Not applicable | In ProductInformation (for each occurrence corresponding to a file) |
SolidEdge | Persistent ID string (CLSID) | Persistent ID integer (key) | Persistent ID string as an attribute | Not implemented | In ProductInformation (for each occurrence corresponding to a file) |
Inventor | Persistent ID string (CLSID) | Persistent ID integer (key) | Persistent ID string as an attribute | Not implemented | In ProductInformation (for each occurrence corresponding to a file) |