###################
HOOPS Exchange 2024
###################

*Version 2024.0*

.. rubric:: Format Updates

================== ==================== 
*Format*           *Updated Version*  
================== ====================
Solid Edge         2024
Parasolid          36.0
================== ====================

See :doc:`/start/supported-formats` for the list of all supported formats.

32-bit support deprecation
==========================

Windows and Linux x86 binaries have been removed from the standard delivered packages.
Please contact the Support team to get them.

They will not be available starting with HOOPS Exchange 2025.

CATIA V5: Publications Support
==============================

Since this version our support for reading **CATIA V5 publications** from CATIA files is no longer in beta state.

For more information look at our :doc:`dedicated section in the Programming Guide </guide/publications>`.

JT: Support for Incremental Loading
===================================

The latest release introduces support for **load struct only** and **incremental load** workflows for the JT format.
This enhancement ensures compatibility with the intended behavior and limitations observed in other formats that support similar features.

Notably, incremental load for JT format is now extended to include **support for JT monolithic files**, providing users with added flexibility in managing and loading their data.

.. rubric:: See also

* :doc:`/start/supported-formats`
* :doc:`/start/format/jt_reader`

New Usability API
=================

Introducing a more intuitive and efficient way to navigate model files, the New Usability API now offers a set of functions designed for **seamless traversal**.
The newly introduced entities, ``A3DTree`` and ``A3DTreeNode``, present an abstract representation of a model file, enhancing usability through a standardized **tree structure**.

Explore the capabilities of these new functions in our dedicated programming guide section: :doc:`/guide/tree_traversal`.

To help you integrate these features seamlessly into your workflow, we have updated the following tutorials to showcase the use of these functions:

- :doc:`/tutorials/c/print-assembly-structure` (sample code: `he_basic_viewer <https://github.com/techsoft3d/he_basic_viewer>`__) 
- :doc:`/tutorials/c/mesh-viewer-sample` (sample code: `he_basic_viewer <https://github.com/techsoft3d/print_assembly_structure>`__)

Documentation Change
====================

We are pleased to announce a **comprehensive update to the Getting Started section** of the HOOPS Exchange Documentation.
This update includes **new tutorials** and aims to provide a more user-friendly experience for developers.

More additional enhancements will be added in upcoming releases.

API Changes
===========

- Android x86 binaries are no longer delivered.
- Support for material physical properties:

  - A new field :cpp:member:`~A3DMiscMaterialIsotropicData::m_dYieldStrength` has been added to `A3DMiscMaterialIsotropicData` and is supported in our CATIA V5 reader. Also, the value of the Shear Modulus in our CATIA V5 reader was actually the value of the Yield Strength: this has been corrected as the Shear Modulus is not available in CATIA V5.
  - Three new fields :cpp:member:`~A3DMiscMaterialIsotropicData::m_dTensileStrength`, :cpp:member:`~A3DMiscMaterialIsotropicData::m_dThermalConductivity` and :cpp:member:`~A3DMiscMaterialIsotropicData::m_dSpecificHeat` have been added to :cpp:struct:`A3DMiscMaterialIsotropicData`. All the fields from :cpp:struct:`A3DMiscMaterialIsotropicData` are now supported in our NX reader. Some properties, such as Yield Strength, are sometimes expressed in a table as a function of temperature: by default, we retrieve the first value, i.e., the first line of the table.

- Removed the unused ``A3DMiscPhysicMaterialData`` structure.
- :cpp:member:`~m_ppuiNormalIndicesPerFace` is removed from :cpp:struct:`A3DMeshData` (point coordinates and normals now share the same indices array: :cpp:member:`~m_puiVertexIndicesPerFace`)
- Renamed members:

  - Renamed the ``m_uiContraintsSize`` member of the :cpp:struct:`A3DAsmProductOccurrenceData` structure to ``m_uiConstraintsSize``.
  - In :cpp:struct:`A3DMeshData` :cpp:member:`~m_ppuiPointIndicesPerFace` is renamed :cpp:member:`~m_puiVertexIndicesPerFace` (indices now are continuous)
  - In :cpp:struct:`A3DMeshData` :cpp:member:`~m_ppuiTextureUVIndicesPerFace` is renamed :cpp:member:`~m_puiTextureUVIndicesPerFace` (indices now are continuous)

- Added new structures and functions:

  - :cpp:struct:`A3DRiComputeMeshDataParameters`
  - :cpp:member:`~A3DRiComputeMeshDataParameters` has been added to the :cpp:func:`A3DRiComputeMesh` function
  - :cpp:struct:`A3DTreeComputeParameters`
  - :cpp:func:`A3DTreeCompute`
  - :cpp:func:`A3DTreeGetRootNode`
  - :cpp:func:`A3DTreeNodeGetChildren`
  - :cpp:func:`A3DTreeNodeGetParent`
  - :cpp:func:`A3DTreeNodeGetEntity`
  - :cpp:func:`A3DTreeNodeGetName`
  - :cpp:func:`A3DTreeNodeGetTransformation`
  - :cpp:func:`A3DTreeNodeGetNetTransformation`
  - :cpp:func:`A3DTreeNodeGetNetVisibility`
  - :cpp:func:`A3DTreeNodeGetNetStyle`
  - :cpp:func:`A3DTreeNodeGetGeometry`

API Deprecation
===============

As a reminder these functions, structures, members and types are deprecated and will be removed in future versions of HOOPS Exchange, at the latest in HOOPS Exchange 2025:

- :cpp:member:`~A3DRWParamsGeneralData::m_iNbMultiProcess`
- :cpp:member:`~A3DRWParamsTessellationData::m_dMinimalTriangleAngleDeg`
- :cpp:member:`~A3DRWParamsIGESData::m_bSewBrepModels`
- :cpp:member:`~A3DETessellationLevelOfDetail::kA3DTessLODControlledPrecision`
- The whole draw module:

  - `kA3DDraw3D`
  - `kA3DDrawMarkups`
  - `A3DCallbackDrawPushMatrix`
  - `A3DCallbackDrawPopMatrix`
  - `A3DCallbackDrawMultMatrix`
  - `A3DCallbackDrawBegin`
  - `A3DCallbackDrawEnd`
  - `A3DCallbackDrawSetTessellationPoints`
  - `A3DCallbackDrawProject`
  - `A3DCallbackDrawUnProject`
  - `A3DCallbackDrawTriangle`
  - `A3DCallbackDrawTriangleFan`
  - `A3DCallbackDrawTriangleStripe`
  - `A3DCallbackDrawTriangleOneNormal`
  - `A3DCallbackDrawTriangleFanOneNormal`
  - `A3DCallbackDrawTriangleStripeOneNormal`
  - `A3DCallbackDrawTriangleTextured`
  - `A3DCallbackDrawTriangleFanTextured`
  - `A3DCallbackDrawTriangleStripeTextured`
  - `A3DCallbackDrawTriangleOneNormalTextured`
  - `A3DCallbackDrawTriangleFanOneNormalTextured`
  - `A3DCallbackDrawTriangleStripeOneNormalTextured`
  - `A3DCallbackDrawColor`
  - `A3DCallbackDrawMaterial`
  - `A3DCallbackDrawBeginMaterial`
  - `A3DCallbackDrawEndMaterial`
  - `A3DCallbackDrawGetDrawContext`
  - `A3DCallbackDrawMarkupTriangle`
  - `A3DCallbackDrawBeginFrameDraw`
  - `A3DCallbackDrawEndFrameDraw`
  - `A3DCallbackDrawBeginFixedSize`
  - `A3DCallbackDrawEndFixedSize`
  - `A3DCallbackDrawCylinder`
  - `A3DCallbackDrawPolygon`
  - `A3DCallbackDrawBeginLineWidth`
  - `A3DCallbackDrawEndLineWidth`
  - `A3DCallbackDrawPoint`
  - `A3DCallbackDrawFont`
  - `A3DCallbackDrawBeginLineStipple`
  - `A3DCallbackDrawEndLineStipple`
  - `A3DCallbackDrawSymbol`
  - `A3DCallbackDrawPolyLine`
  - `A3DCallbackDrawText`
  - `A3DCallbackDrawPattern`
  - `A3DCallbackDrawPicture`
  - :cpp:struct:`A3DDrawCallbacksData`
  - :cpp:func:`A3DDrawInitCallbacks`
  - :cpp:func:`A3DDraw`
  - :cpp:func:`A3DDrawRepresentationItem`
  - :cpp:func:`A3DDrawMarkup`
  - :cpp:func:`A3DDrawGetBoundingBox`

- :cpp:func:`A3DDisableHandleSIGSEGV`
- :cpp:func:`A3DEnableHandleSIGSEGV`
- :cpp:func:`A3DGetCurveAsAnalytic`
- :cpp:func:`A3DGetCurveAsAnalyticFromCoEdge`
- :cpp:func:`A3DGetSurfaceAsAnalytic`
- :cpp:func:`A3DProjectPointCloud2`
- :cpp:func:`A3DComputeOrthoHLROnModelFile`
- :cpp:func:`A3DComputeOrthoHLROnModelFile2`
- :cpp:func:`A3DAsmPartDefinitionFeatureTreesGet`
- :cpp:func:`A3DSurfBaseGetAsNurbs`
- :cpp:struct:`A3DMkpRTFFieldData`
- :cpp:func:`A3DMkpRTFInit`
- :cpp:func:`A3DMkpRTFGetField`
- :cpp:func:`A3DMkpRTFDelete`
- :cpp:func:`A3DSimplifyModelFileCurveAndSurfaceAsAnalytic`
- :cpp:func:`A3DAsmProductOccurrenceUnload`
- :cpp:member:`~A3DAsmProductOccurrenceDataJT::m_usValidDisplayFields`

Fixed Bugs
==========

The list of fixed bugs can be found on :doc:`the fixed bugs page </fixed_bugs>`.


