#######################
HOOPS Exchange 2024.7.0
#######################

Technology Update
=================

Format Updates
--------------

================== =================================
*Format*           *Updated Version*
================== =================================
STEP               AP 242 Ed2 (beta) and Ed3 (beta)
Parasolid          37.0
Revit              2025
================== =================================

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

Beginning with 2024.7.0 release of HOOPS Exchange, STEP AP 242 Edition 2 & 3 is supported in beta state. Although we have not explicitly added any new classes, HOOPS Exchange STEP reader is able to read Edition 2 and Edition 3 files.
Thanks to this improvement, the HOOPS Exchange STEP reader is now ready for further evolutions of the STEP standards.

Third-Party Libraries Updates
-----------------------------

Below third-party libraries have been updated:

================== ====================
*Library*          *New Version*
================== ====================
ODA                25.8
================== ====================

Within the context of supporting Revit 2025, we have updated the binary dependencies to *ODA (Open Design Alliance)* to *25.8*.
This update fixes few bugs related to our Revit support as well as some third party versions are updated adressing reported CVEs.
Windows and Linux packages are updated for this version.

For more information about package content, see :doc:`/distributing`.

.. rubric:: See also

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

New Features
============

.. rubric:: Export wireframe tessellation in JT

The wireframe tessellation stored in :cpp:struct:`A3DRiPolyWireData` can now be exported in JT 8.1, 9.5 and 10.0 using the option :cpp:member:`~A3DRWParamsExportJTData::m_bWriteWireframe` from :cpp:struct:`A3DRWParamsExportJTData` (this option is set to false by default).

.. rubric:: T-Junctions Detection and Removal

A T-junction occurs when two adjacent triangles subdivide the edge of a third triangle, hence forming T-shaped edge junction.
T-junctions can cause issues in rendering, such as visible seams and cracks, or problems in simulations and mesh deformations due to the lack of proper vertex connections, leading to geometric inconsistencies.

We now provide :ref:`a way to repair mesh geometry <t_junction_removal>` by removing T-junctions.

.. image:: /guide/advanced_t_junction_before_after.svg
   :align: center

This new feature is provided as experimental (see :ref:`rn_2024_7_0_experimental` below).
It extends the HOOPS Exchange API with a new function and structure:

* :cpp:func:`A3DMeshRepair_experimental`
* :cpp:struct:`A3DMeshRepairParametersData`

For more information, see :ref:`t_junction_removal`.

.. _rn_2024_7_0_experimental:

.. rubric:: Experimental Features

A new API mechanism is provided to enable experimental API functions.
For more information, see :doc:`/extension`.

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

.. _rn_api_202470_license:

Deprecation: Removal of ``HOOPS_LICENSE``
-----------------------------------------

As of this release, the automatic inclusion of the *hoops_license.h* header file from HOOPS Exchange headers is deprecated.
**This change will take effect in the upcoming release, HOOPS Exchange 2024.8.0.**

The *hoops_license.h* file contains the macro definition ``HOOPS_LICENSE`` used to pass the license key when initializing HOOPS Exchange via the function :cpp:func:`A3DLicPutUnifiedLicense`.
This change removes the automatic definition of ``HOOPS_LICENSE`` when including HOOPS Exchange header files.

As a reminder, license initialization is currently handled as follows:

.. code-block:: c

   A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE);

While no code changes are required until the 2024.8.0 release, it is possible to prepare for this change by migrating now.
The following migration guide is valid starting with the 2024.7.0 release.

To initialize HOOPS Exchange correctly, you now have **three** options:

.. rubric:: 1. Explicitly Include *hoops_license.h*

You can still explicitly include *hoops_license.h* in your source code:

.. code-block:: c

   #include <hoops_license.h>

   // ...

   A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE);

.. rubric:: 2. Manually Define ``HOOPS_LICENSE``

Alternatively, you can manually define the ``HOOPS_LICENSE`` macro in your source code before calling :cpp:func:`A3DLicPutUnifiedLicense`:

.. code-block:: c

   #define HOOPS_LICENSE "Enter the license key"

   // ...

   A3DStatus result = A3DLicPutUnifiedLicense(HOOPS_LICENSE);

This approach eliminates the need to include *hoops_license.h* entirely.

.. rubric:: 3. Pass the License Key Directly

Finally, you can pass the license key directly as a string when calling :cpp:func:`A3DLicPutUnifiedLicense`:

.. code-block:: c

   A3DStatus result = A3DLicPutUnifiedLicense("Enter the license key");

This method eliminates the need for both the macro definition and the inclusion of *hoops_license.h*.

For more information, please refer to our :doc:`/guide/basic_operations/initialize-hoops-exchange` guide and our :doc:`/tutorials/c/environment-setup` tutorial.

Documentation Update
====================

HOOPSY
------

We are excited to introduce **HOOPSY** our new Documentation AI assistant, now available for HOOPS Exchange and HOOPS Publish users. This tool leverages advanced AI capabilities to help you find relevant information quickly and efficiently, providing on-demand, multilingual support for your documentation needs.

.. rubric:: Key Features

- **Natural Language Processing (NLP):**  
  The assistant understands your queries in everyday language, delivering precise and contextually relevant answers.

- **Comprehensive Documentation Search:**  
  Searches across the HOOPS Exchange and HOOPS Publish documentation to retrieve the most relevant pages, ensuring you get accurate information for your queries.

- **Reference Links:**  
  Offers direct links to the original documentation, enabling deeper exploration and providing full context to enhance understanding.

- **Conversation Sharing:**  
  Easily share your AI assistant conversations with others for collaborative troubleshooting and knowledge sharing.

- **Multilingual Support:**  
  Supports multiple languages to cater to a global user base, allowing you to interact with the assistant in your preferred language.

- **Continuous Learning:**  
  The AI assistant continuously improves its responses based on user interactions, ensuring it becomes more helpful over time.

Deprecations
============

These symbols are deprecated. They will be moved to a separate namespace and/or header file and made opt-in starting with version 2025.1.0, and then removed completely in 2026.1.0:

* ``A3DAsmPartDefinitionFeatureTreesGet``
* ``A3DAsmProductOccurrenceUnload``
* ``A3DCallbackDrawBegin``
* ``A3DCallbackDrawBeginFixedSize``
* ``A3DCallbackDrawBeginFrameDraw``
* ``A3DCallbackDrawBeginLineStipple``
* ``A3DCallbackDrawBeginLineWidth``
* ``A3DCallbackDrawBeginMaterial``
* ``A3DCallbackDrawColor``
* ``A3DCallbackDrawCylinder``
* ``A3DCallbackDrawEnd``
* ``A3DCallbackDrawEndFixedSize``
* ``A3DCallbackDrawEndFrameDraw``
* ``A3DCallbackDrawEndLineStipple``
* ``A3DCallbackDrawEndLineWidth``
* ``A3DCallbackDrawEndMaterial``
* ``A3DCallbackDrawFont``
* ``A3DCallbackDrawGetDrawContext``
* ``A3DCallbackDrawMarkupTriangle``
* ``A3DCallbackDrawMaterial``
* ``A3DCallbackDrawMultMatrix``
* ``A3DCallbackDrawPattern``
* ``A3DCallbackDrawPicture``
* ``A3DCallbackDrawPoint``
* ``A3DCallbackDrawPolyLine``
* ``A3DCallbackDrawPolygon``
* ``A3DCallbackDrawPopMatrix``
* ``A3DCallbackDrawProject``
* ``A3DCallbackDrawPushMatrix``
* ``A3DCallbackDrawSetTessellationPoints``
* ``A3DCallbackDrawSymbol``
* ``A3DCallbackDrawText``
* ``A3DCallbackDrawTriangle``
* ``A3DCallbackDrawTriangleFan``
* ``A3DCallbackDrawTriangleFanOneNormal``
* ``A3DCallbackDrawTriangleFanOneNormalTextured``
* ``A3DCallbackDrawTriangleFanTextured``
* ``A3DCallbackDrawTriangleOneNormal``
* ``A3DCallbackDrawTriangleOneNormalTextured``
* ``A3DCallbackDrawTriangleStripe``
* ``A3DCallbackDrawTriangleStripeOneNormal``
* ``A3DCallbackDrawTriangleStripeOneNormalTextured``
* ``A3DCallbackDrawTriangleStripeTextured``
* ``A3DCallbackDrawTriangleTextured``
* ``A3DCallbackDrawUnProject``
* ``A3DComputeOrthoHLROnModelFile``
* ``A3DComputeOrthoHLROnModelFile2``
* ``A3DDisableHandleSIGSEGV``
* ``A3DDraw``
* ``A3DDrawGetBoundingBox``
* ``A3DDrawInitCallbacks``
* ``A3DDrawMarkup``
* ``A3DDrawRepresentationItem``
* ``A3DEnableHandleSIGSEGV``
* ``A3DGetCurveAsAnalytic``
* ``A3DGetCurveAsAnalyticFromCoEdge``
* ``A3DGetSurfaceAsAnalytic``
* ``A3DMkpRTFDelete``
* ``A3DMkpRTFGetField``
* ``A3DMkpRTFInit``
* ``A3DProjectPointCloud2``
* ``A3DSimplifyModelFileCurveAndSurfaceAsAnalytic``
* ``A3DSurfBaseGetAsNurbs``
* The *A3DSDKDraw.h* header.

For more information, please see our `Support policies documentation <https://techsoft3d.atlassian.net/wiki/spaces/SPD/pages/2367881259/Platform+Support+Plan+for+HOOPS+and+Ceetron+SDKs>`__.

Messages will be emitted by the compiler for these symbols. They can be silenced by defining the A3DAPI_IGNORE_DEPRECATED macro before including HOOPS Exchange headers.

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

As of |today|

.. csv-table::
   :header: "Issue", "Description"

   "SDHE-21929", "Fixed misplaced geometry in NWD file"
   "SDHE-21888", "Fixed incorrect PMI upon importing from 3DXML"
   "SDHE-21847", "Fixed undefined behavior while reading from SAT"
   "SDHE-21819", "Fixed vulnerability exposed by reading some Parasolid files"
   "SDHE-21802", "Fixed garbled names in Creo on Chinese locale"
   "SDHE-21801", "Fixed error upon importing from Creo"
   "SDHE-21616", "Fixed incorrect behavior in 'Prefer Face' projection option"
   "SDHE-21418", "Upgraded Zlib dependency to 1.3.1"
   "SDHE-20867", "Improved performances of point projection"

