HOOPS Exchange 2019

Format updates


Updated Version



Solid Edge






JT Import


JT Export


New Format Support (Summary)


Support for Import/Export


FBX .fbx


Windows macOS Linux

Platform changes

  • Added 3DS import for macOS and Linux.

  • Added COLLADA for macOS and Linux.

  • Added OBJ export for Windows, macOS and Linux.

  • Added OBJ import for macOS and Linux.

  • Added Revit for Linux

See also

Compilation Toolchain Changes

  • Linux

    • As mentioned in the previous release, Linux binaries are now compiled using CentOS 6 and built with devtoolset 6.

    • g++/gcc 6.5 (new ABI)

  • macOS

    • We now support macOS 10.10 Yosemite and Xcode 8.3.

  • Android

    • Android NDK 11c - Clang with gnustl_static

See also

New format support: FBX

This is the first release of FBX. FBX (originally a successor to FilmBoX) is an Autodesk owned proprietary format (.fbx). It is widely used to exchange 3D assets between 3DS Max, Maya and Unity as well as other proprietary and third-party software.

FBX can be either binary or ASCII data and HOOPS Exchange will support the reading (Import) and writing (Export) of both binary and ASCII.

Support for FBX contains:

  • Import and export tessellated model (triangles only), position, color and material/texture. (The texture information is exported as external files, they are not embedded in the FBX files.)

  • No animation data or information will be imported or exported. Polylines (PMI etc.), point clouds and meta data will be ignored, both for import and export.

  • B-rep and 3D curves are not supported.

  • Assembly files are exported to a unique FBX file which contains the assembly, any sub-assemblies and the part files.

See also

New format support: Autodesk Revit

Supported versions and platforms:

  • Revit 2015 to 2019 inclusive

  • Windows and Linux

  • 64 bits only.

Support for Revit contains:

  • Import .rvt files and .rfa files

  • Import tessellated objects

  • Support for color and transparency

  • Ability to sort, gather and display objects by level (storey/floor), and then on each level categories are collected together. Each level has a metadata TYPE = IFCBUILDINGSTOREY

  • Import 3d views (change visibility + set camera)

Not supported:

  • Link to external Revit files.

  • Views only handle the ability to change visibilities. You cannot change the LOD (level of detail), the color or rendering mode.

  • Revit metadata.

  • Floor plans or drawing sheets.

  • “Crop Region” from views.

  • Textures.

  • Instance: In case of identical .rfa files imported multiple times, the tessellation will simply be duplicated.

See also

JT structure improvements

The structures obtained from JT files are now simpler and closer to the original JT structure.

If you have any questions or concerns regarding these changes, please contact our support team.

See also

SolidWorks PMIs support

We support most PMIs in SolidWorks. Please see the limitations in the PMI section in the SolidWorks reader page.

See also

SolidWorks features support

Feature tree reading is supported with SolidWorks, with access to detailed information for holes, patterns and threads. Pitch, handedness and tip angle data are not retrieved for threads contained in holes.

When available the feature geometry association (faces) is supported.

See also

Identifying Rigidly Connected Parts for PTC Creo

In HOOPS Exchange 2018 SP2, we added new functionality to identify components within a CAD assembly that are rigidly fixed to each other, valuable in motion and kinematic analysis.

The three new functions are:

  • A3DAsmGetFixedComponents()

  • A3DAsmGetFixedTogetherComponents()

  • A3DAsmGetFlexibleComponents()

In HOOPS Exchange 2018 SP2 these new functions were supported for CATIA, NX and SolidWorks files only. In HOOPS Exchange 2019, we have also added support for Creo Reader.

See also

Collision detection improvements

We’ve refactored our collision detection to improve speed and precision.

Grid-aligned tessellation

HOOPS Exchange now provides a new way to perform accurate tessellation upon loading. The grid-aligned tessellation allows accurate tessellation to obtain more regular triangles, where point insertion is based on a grid layout.

To enable this feature, set A3DRWParamsTessellationData.m_bAccurateTessellationWithGrid to A3D_TRUE. If set, accurate tessellation using grid-based point placement will be used no matter what the value of A3DRWParamsTessellationData.m_bAccurateTessellation is.

See also

Restricting tessellation grid size

When performing grid-based tessellation, the maximum grid stitch length may be defined. This can lead to a more regular grid. This maximum value may be set using A3DRWParamsTessellationData.m_dAccurateTessellationWithGridMaximumStitchLength. This field is a double floating point value used as a reference for the grid. Setting the value to 0.0 will disable the constraint, which is the default behavior.

A very small value may lead to a huge number of points, thus a very long tessellation process.

Side effects with curved surface

As of 2018 SP2, HOOPS Exchange provided a new parameter for accurate tessellation: A3DRWParamsTessellationData.m_bAccurateSurfaceCurvatures. With this option the tessellation tends to create more adapted triangles along curvatures. Now when using both this option and A3DRWParamsTessellationData.m_dAccurateTessellationWithGridMaximumStitchLength with a small value the generated triangles may not meet expectations.

Reader feedback improvement

While File Formats, HOOPS Exchange identifies the format and version. If the version is not supported by our reader, the associated error code is returned:

  • A3D_LOAD_FILE_TOO_OLD if the input format is too old for HOOPS Exchange.

  • A3D_LOAD_FILE_TOO_RECENT if the input format is too recent for HOOPS Exchange.

As of version 2019, this functionality is available with the formats below:

  • CATIA V5

  • Creo - Pro/E

  • GL Transmission Format

  • Autodesk Inventor

  • JT

  • NX - Unigraphics

  • Revit

  • Rhino3D

  • Solid Edge

  • SolidWorks

  • U3D

See also

New method for retrieving features from PRC tree

HOOPS Exchange changed the way features are stored and accessed in the PRC tree. Previously, getting an instance of A3DFRMFeatureTree was accomplished using A3DAsmPartDefinitionFeatureTreesGet(). As of this release, feature management has been moved from the part definitions to the product occurrences.

Now, features are directly stored in A3DAsmProductoccurrence as an array where:

  • m_uiFeatureBasedEntitiesSize (A3DUns32) is the size of the array and

  • m_ppFeatureBasedEntities (A3DFRMFeatureTree**) is a pointer to the array.

These fields are filled in using A3DAsmProductOccurrenceGet() and no additional function call is required. A3DAsmPartDefinitionFeatureTreesGet() is now deprecated. Calling it will return A3D_SUCCESS and an empty array.

The PRC2XML example code has been updated to illustrate the changes.

See also

For more information about reading feature trees, see Feature Trees.

IFC 4 support

By the version 2019, IFC reader supports the following B-Rep and Tessellation types:




  • IFCINDEXEDPOLYCURVE (from IFC 4 Addendum 2)

  • IFCPOLYGONALFACE (from IFC 4 Addendum 2)

See also

PMI management

In the A3DMarkupGDTData data structure, we’ve added an array of A3DMDTolerance* entities: ref A3DMarkupGDTData.m_ppsMarkupTolerances. Previously this tolerance was an A3DMDFeatureControlFrameData. Now this tolerance can be either an A3DMDFeatureControlFrameData or an A3DMDToleranceSizeData.

  • A3DMDToleranceSizeData is a concatenation on a line of dimensions for defining an element. For example, for a hole we can have an A3DMDToleranceSizeValueData for the depth and a A3DMDToleranceSizeValueData for the diameter.

  • A3DMDToleranceSizeValueData: Contains a dimension value and EA3DMDDimensionType “an enumerator” specifying type of dimension. And information like the symbol before the value.

  • A3DMDToleranceSizeGet() can be called to fill in an A3DMDToleranceSizeData instance.

  • A3DMDToleranceSizeValueGet() can be called to fill in an A3DMDToleranceSizeValueData instance.

See Also

Reading mode when 3D and 2D are present

Previously, reading either 3D or 2D was specified using ref A3DRWParamsGeneralData::m_bReadDrawings. With this release, the field has been replaced by an enumeration ref A3DRWParamsGeneralData::m_eReadingMode2D3D. ref A3DEReadingMode2D3D can either be:

  • kA3DRead_3D: Read 3D only

  • kA3DRead_Drawings: Read Drawings only

  • kA3DRead_Both: Read 3D and drawings

See Also

Enabling hidden solid and surfaces with A3DComputePhysicalProperties

When computing physical properties from a model file, it is now possible to decide whether hidden solid and surfaces are part of the computation or not.

This option can be toggled on using A3DPhysicalPropertiesData.m_bIncludeHiddenRIs. By default, this field is set to A3D_FALSE.

See Also

Retrieve the unit of a model file

A new function is added: A3DAsmModelFileGetUnit(). This function returns the unit of the model file.

The unit of a model file is the first valid unit in the ModelFile/ProductOccurrence chain. If a valid unit is defined at the model file level, it will apply to all product occurrences.

Once a valid unit is found, the remainder of the data is interpreted with respect to that unit, even for occurrences higher in the product occurrence hierarchy. In other words, if a product occurrence having no valid unit has a son with a valid unit, it is assumed that the entire hierarchy of model file and product occurrence are to be interpreted and used according to this unit.

See also

New option for copy-and-adapt B-Rep model

An new option is added A3DCopyAndAdaptBrepModelData.m_bClampTolerantUVCurvesInsideUVDomain. By default (A3D_FALSE), when using A3DCopyAndAdaptBrepModel() UV curves may stray outside the UV domain as long as the 3D edge tolerance is respected.

When set to A3D_TRUE UV curves will be clamped to the UV domain.

See Also

New option for sewing

A new structure is added which allows to customize sew: A3DSewOptionsData. This implies changes in the signature of following functions:

  • A3DSewBrep()

  • A3DAsmModelFileSew()

With this addition a new option is available: A3DSewOptionsData.m_bComputePreferredOpenShellOrientation. By definition, open shells do not have a proper inward/outward orientation. With this option enabled (A3D_TRUE) an orientation is inferred even if is it an open shell. The default value is A3D_FALSE.

See also

New documentation for incremental load

New documentation is available for performing an Simple Load and Export.

Other C API Changes

  • A3DCollisionParameterData: renamed m_dTesselationTolerance to m_dTessellationTolerance.

  • A3DRWParamsTranslateToPkPartsData: renamed m_bUseUTF8ForNameAttribute to m_bUseUNameAttribute.

  • A3DTopoItemOwnersManagerGet(): function parameters changed.

  • A3DTopoItemOwnersGet(): function parameters changed.