#######################
HOOPS Exchange 2018 SP2
#######################

.. rubric:: Format Updates

====== ===============
Format Updated Version
====== ===============
Creo   5
====== ===============

.. rubric:: New Format Support (Summary)

+-----------------------------------------------+---------------+-------------------------+
| Format                                        | Import/Export | Platforms               |
+===============================================+===============+=========================+
| :doc:`/start/format/autodesk_3ds_reader`      | Import Only   | Windows Only            |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/dwg_reader`               | Import Only   | Windows/Linux/Android   |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/collada_reader`           | Import Only   | Windows Only            |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/autodesk_dwf_reader`      | Import Only   | Windows/Linux           |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/gltf_reader`              | Import Only   | Windows/Linux/Mac       |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/revit_reader`             | Import Only   | Windows 64 bits only    |
+-----------------------------------------------+---------------+-------------------------+
| :doc:`/start/format/obj_reader`               | Import Only   | Windows Only            |
+-----------------------------------------------+---------------+-------------------------+

******************
New Format Details
******************

The import of :doc:`OBJ </start/format/obj_reader>`, :doc:`COLLADA </start/format/collada_reader>` and :doc:`3DS </start/format/autodesk_3ds_reader>` files is now officially supported, having moved from the vault to the main HOOPS Exchange product release.
We encourage you to try these file formats and give us your feedback.

glTF
====

The glTF format (version 2.0 only) is now supported for import. It
includes the support for Texture Mapping.

* kA3DTextureMappingMetallness
* kA3DTextureMappingNormal
* kA3DTextureMappingOcclusion
* kA3DTextureMappingRoughness
* Plus combinations of above. See :struct:`A3DGraphMaterialData` Documentation for details.

Autodesk Revit
==============

:doc:`Autodesk Revit </start/format/revit_reader>` import is now supported (Revit 2015 to 2018 inclusive, Windows 64bits Only).
This is a first pre-release version for testing and feedback, released complete with some caveats and known issues.
The main purpose of this first release is to allow the access and viewing of the contents of Revit files and understanding of structure. (Levels, categories and views).

The functionality for this first pre-release and is as follows:

* Import .rvt files and .rfa files
* Import tessellated objects only, no B-Rep.
* Ability to sort and display objects by level then by categories inside each level (This is similar to the method available in IFC
   files). Each level has a metadata TYPE = IFCBUILDINGSTOREY, again
   this is similar to IFC.
* Read the basic material (color, transparency) for tessellation
   objects.
* Read and import the 3D views (change visibility + set camera)
* The handling of visibility/graphics overridden by views (graphics
   override per view is not handled)
* Using layers to set category for each item.

Currently known issues:

* Visibilities overrides sometimes do not handle some sub-categories
   correctly.
* Wire coloring is disabled.
* Drawing sheets are not supported.
* Some items may be located at the structure root instead of the
   correct level.

Please send us your feedback and feature requests for Revit support in future releases.

AutoCAD DWF
===========

The import of :doc:`.DWF </start/format/autodesk_dwf_reader>` and :doc:`.DWFx </start/format/autodesk_dwf_reader>` files is now available for Windows and Linux.
It is currently limited to the reading of 3D objects only.

AutoCAD DWG DXF
===============

The ability to import :doc:`.dwg </start/format/dwg_reader>` and  :doc:`.dxf </start/format/dwg_reader>` files on the Android mobile platform is new for this release.

Enhancements (New Functionality)
================================

.. rubric:: Identifying Rigidly Connected Parts

HOOPS Exchange has added new functionality to identify components
within a CAD assembly that are rigidly fixed to each other. This is
valuable for helping to understand and reduce the complexity of
assemblies when doing motion and kinematic analysis, reducing the
number of possible moving components. This is achieved by looking for
and reading the appropriate associated attribute stored in the CAD
file. This attribute flags and identifies this condition, locking
together certain parts.

There are 3 new functions:

* :func:`A3DAsmGetFixedComponents` – This gives a list of components with a locked position at a specific assembly level.
* :func:`A3DAsmGetFixedTogetherComponents` – This gives a list of the components rigidly connected to each other.
* :func:`A3DAsmGetFlexibleComponents` – Identifies which components are considered flexible.

Please note that this functionality is supported for CATIA, NX and SolidWorks files only at this release.

.. rubric:: "Deep Copy" of a Product Occurrence

When editing the properties of an individual instance of a component in
an assembly that has multiple instances of that component, the property
will be changed for all instances of the product. The Deep Copy function
will allow the associativity of a single instance to be removed
(exploded) from its related instances, so that it can be treated and
edited separately as if it were an individual and independent component.

:func:`A3DAsmProductOccurrenceDeepCopy` is available to duplicate and
copy a selected product occurrence and all its associated data. (For
more details please see the :func:`A3DAsmProductOccurrenceDeepCopy` "API
Reference".)

Enhancements to Existing Functionality
======================================

.. rubric:: Mass Property Calculation Improvements

Physical properties can now be computed on B-rep when it is available
using the geometry of an `A3DRiBrepModel`. Additional properties
(center of surface and inertia) are now calculated and available.

To accommodate this, the physical properties structure has been expanded
with additional parameters. The surfacic gravity center and
surfacic/volumic inertia matrix (relative to their respective center of
gravity) are new additional return values available.

A new precision parameter is added as part of the control input
determining how accurate (precise) the user wants the computation to be,
and the 'use geometry' parameter allows the user to control whether
tessellation or geometry should be used for the computation, when both
are available.

This affects all three physical properties-related functions  `A3DComputePhysicalProperties`,  `A3DComputeModelFilePhysicalProperties` and  `A3DComputePolyBrepPhysicalProperties`).
When using default input parameters, their behavior remains consistent with the previous release, the only difference being the extra computed values.

.. rubric:: SolidWorks

Datum entity visibility can be controlled by option :member:`A3DRWParamsSolidworksData.m_usDisplayVisibleDatum`.

.. rubric:: Rhino

You can switch between colors or material with :member:`A3DRWParamsRhinoData.m_bForceRenderedModeColors`.
The default parameter sets to use materials.

.. rubric:: JT

.. rubric:: PMIs support has been improved with respect to the links in JT PMIs and

* Geometry highlight, selecting PMI in an assembly
* Element visibility in views
* Exploded views

There has also been improvement of the PMI tessellation for some symbols/custom fonts.

.. rubric:: Accurate Tessellation Improvements

When using the more accurate (water-tight) tessellation, on curved
surfaces, many triangles are created of a similar size. Sometimes this
is not desirable if the application requires the shape of the triangles
to better match the shape of these curved faces and produce better
visualization.

For accurate tessellation, there is a new option: :member:`A3DRWParamsTessellationData.m_bAccurateSurfaceCurvatures`

This results in the face curvature controlling and making the triangle
length and direction better match the shape of the faces, yielding
better visual results and also reducing the number of triangles. 

Improved Debugging
==================

We've introduced a way to generate the list of calls to the API (See :func:`A3DCallbackAPITrace`)

.. rubric:: New Sample for Collision Detection

In the 2018 SP1 Release, we added support for collision detection.
This release now provides a new example project for Collision
Detection.

The sample reads an input CAD file and outputs collision status
between representation items. The user may select which items are
tested using their UUIDs and the output is available as a report file.
Please see the :doc:`example section </sample_codes>` or the
:doc:`Programming Guide </guide/advanced>` for more details.

C API Changes
=============

A number of changes have been made to the C Interface in order to make
it compliant to C Language specifications. Though some of these changes
may break code compatibility, they provide a safer version of the API:

* A3DSDKConvert.hxx and A3DSDKInternalConvert.hxx which define
   A3DSDKHOOPSExchangeLoader, A3DImport and A3DExport are now only
   available when compiling C++.
* A3DSDK.h now defines two constants, A3D_TRUE (1), and A3D_FALSE (0)
   which can be used to compare values of type `A3DBool`
* Calling :func:`A3DSDKLoadLibrary` was ambiguous when compiling with
   Microsoft Visual Studio. The function name is now a C Macro
   definitions which expands to:

   *  A3DSDKLoadLibraryW if compiling with MSVC and UNICODE is set
   *  A3DSDKLoadLibraryA otherwise

The table below lists more specific changes made for the same purpose:

+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| FILE                  | API                                       | CHANGE                                                         |
+=======================+===========================================+================================================================+
| A3DCommonReadWrite.h  | A3DRWParamsExportXMLData                  | m_bExportMetadata, m_bExportTransformations,                   |
|                       |                                           | m_bExportColorMaterial and m_bExportProductInformationByFormat |
|                       |                                           | now are of type A3DBool                                        |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DPDFPublishSDK.h    | A3DPDFCheckPDFLibInitialization           | Changed reference type to pointer                              |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DSDKAdvancedTools.h | A3DHLRCurveData                           | m_bFirstFaceIsSection and m_bSecondFaceIsSection               |
|                       |                                           | now are of type A3DBool                                        |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DHLROptionsData                         | Declare the structure as a typedef                             |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DSDKLoader.h        | A3DSDKLoadLibrary                         | Remove default parameters                                      |
|                       |                                           +----------------------------------------------------------------+
|                       |                                           | All uses of bool are replaced with A3DBool and true/false      |
|                       |                                           | are replaced with A3D_TRUE/A3D_FALSE respectively.             |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DSDKMarkup.h        | A3DMkpViewFlagsGet                        | Output parameter is a new struct of type A3DMkpViewFlagsData   |
|                       |                                           +----------------------------------------------------------------+
|                       |                                           | Function has been renamed to A3DMkpViewGetFlags                |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DMkpRTFInit                             | pRTFData is now set as A3DVoid**                               |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DMkpLinkForMarkupReferenceGet           | puiLinkedItemsSize and ppLinkedItems are now                   |
|                       |                                           | set as pointers instead of references                          |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DMkpLinkForAdditionalMarkupReferenceGet | puiLinkedItemsSize and pppLinkedItems are now                  |
|                       |                                           | set as pointers instead of references                          |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DGlobalFontTextBoxGet                   | pdLength and pdHeight                                          |
|                       |                                           | are now set as A3DDouble*                                      |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DGlobalFontTextBoxAndScaleGet           | pdLength, pdHeight and pdScale                                 |
|                       |                                           | are now set as A3DDouble*                                      |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DGlobalFontTextTessellationGet          | pdCharWidth is now set as A3DDouble*                           |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DSDKReadWrite.h     | A3DChainedBuffer                          | Declare the structure as a typedef                             |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DCheckFileFormat                        | rCadTypeWanted is now set as A3DEModellerType                  |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DAsmModelFileExportToPrcStream          | pcStream is now set as A3DUTF8Char**                           |
|                       |                                           +----------------------------------------------------------------+
|                       |                                           | uLength is now set as A3DUns32*                                |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+
| A3DSDKRepItems.h      | A3DRiCurveSupportGet                      | ppLinkedItem is now set as A3DMiscMarkupLinkedItem**           |
|                       +-------------------------------------------+----------------------------------------------------------------+
|                       | A3DRiPlaneSupportGet                      | ppLinkedItem is now set as A3DMiscMarkupLinkedItem**           |
+-----------------------+-------------------------------------------+----------------------------------------------------------------+

Typo fixes
==========

Two identifiers have been renamed:

* m_pSingleAttributesData => m_asSingleAttributesData
* EA3DMDDimensionSymbolSharpe => EA3DMDDimensionSymbolShape

You may change your code accordingly or run the script located at tools/he_2018_2_api_update.py to do it automatically.

Customer Issues Addressed
=========================

For this service pack release we have fixed over 75 issues.

Special Notes
=============

The upcoming release will include changes to the compilation tools for
Linux. For HOOPS Exchange 2019, the binaries will be compiled using
**CentOS 6** with **devtoolset 6** (GCC 6: using the new ABI for
libstdc++).
