## HOOPS Visualize Release Notes

IMPORTANT:

• The DirectX 9 driver has been removed as of HPS version 2020.
• The OpenGL1 driver has been deprecated. We encourage Visualize users to upgrade to DirectX 11 or OpenGL 2.

## HPS 2020 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2019 SP2 U1
HOOPS Exchange2020 U1     Android simulator support is limited. See this explanation.
HOOPS Publish2020 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid32.0.x     For iOS platforms, support is limited to 64-bit platforms for the Parasolid Sprockets (hps_sprk_parasolid and hps_sprk_exchange_parasolid).
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2019.2     Only x64 Sketchup is supported

### Enhancements

A new function, HPS::Exchange::Capture::Activate has been added.

## HPS 2020

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2019 SP2 U1
HOOPS Exchange2020 U1     Android simulator support is limited. See this explanation.
HOOPS Publish2020 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid32.0.x     For iOS platforms, support is limited to 64-bit platforms for the Parasolid Sprockets (hps_sprk_parasolid and hps_sprk_exchange_parasolid).
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2019.2     Only x64 Sketchup is supported

### Functional Changes

Windows Vista support ended. Windows 7 is now the minimum supported OS.

iOS libary changes. The armv7 and i386 platforms for iOS have been removed.

WX Widgets. Support for WX Widgets has been removed. WX samples and sandbox have been removed.

OpenGL. The OpenGL driver now requires OpenGL 3.2 or higher.

Linux toolset. The Linux toolset has been upgraded to Devtoolset 8.

Mac packaging changes. We are renaming the Mac packages from HOOPS_Visualize_2020_OSX.zip to HOOPS_Visualize_2020_macOS.zip, and this pattern will continue for future releases. The bin subdirectories have been renamed from osx to macos.

macOS window management. The way windows are created and managed has changed for macOS platforms. Please see this note for details.

Parasolid. HPS now works with Parasolid 32.0.

SketchUp. HPS now works with SketchUp 2019.2.

Communicator. HPS now works with HOOPS Communicator 2019 SP2 U1.

Component visibility changes. Several changes have been made related to the way components in the component hierarchy are shown, hidden, and isolated. The HPS::Component::Visibility enum has been removed. See this section for details.

Android platform and compiler updates. See the Supported Platforms page for details on the current requirements.

DX9 driver interface. The DirectX9 driver has been removed. Please use a newer driver, such as DirectX11.

IMPORTANT: If you are using C# with WPF and D3DImageCanvas, you still need to include d3dcompiler_XX.dll with your application (if it doesn't already exist in the execution environment) regardless of which driver interface you are using.

Standalone windows removed from certain platforms. HPS::StandAloneWindowKey and all related StandAlone* classes have been removed from platforms where they are not applicable: Android, iOS, and macOS. The functions HPS::Database::CreateStandAloneWindow() and the standalone variant of HPS::Factory::CreateCanvas() are also removed on those platforms.

Changes to anti-aliasing. VisualEffects(Kit|Control).SetAntiAliasing(bool state) is being deprecated in favor of splitting anti-alias settings into separate text-specific and screen-specific settings. The puropse of this change is to improve text-rendering performance when anti-aliasing of text is not necessary and screen anti-aliasing is. Click here to see new functions related to this change.

• VisualEffects(Kit|Control).SetTextAntiAliasing(bool state) manipulates the state of anti-aliasing applied to text items.
• VisualEffects(Kit|Control).UnsetTextAntiAliasing( ) removes any anti-alias setting to text items.
• (Application|Standalone|Offscreen)WindowOptions(Kit|Control).SetScreenAntiAliasing(bool state) manipulates the state of anti-aliasing applied to screen (non-text) items.
• (Application|Standalone|Offscreen)WindowOptions(Kit|Control).UnsetScreenAntiAliasing( ) removes any anti-alias setting to screen (non-text) items.
• VisualEffects(Kit|Control).SetAntiAliasing(bool state) and VisualEffects(Kit|Control).UnsetAntiAliasing(bool state) current behavior is unchanged, however, these functions are deprecated and will be removed in a future release.

### Enhancements

Bidirectional text support. Visualize supports left-to-right and right-to-left reading-order text, as well as ligature and digraph glyphs, for fonts where these features are supported.

OOC point clouds. Multiple point clouds can now be loaded into a single scene.

New functions in ReferenceKey. The HPS::ReferenceKey class has three new functions:

Spherical texturing. We have improved our algorithm that applies spherical texturing. Spherical textures will now wrap once both laterally and vertically by default, and texture orientation will flip vertically.

DXT support. DXT textures are now supported in software drivers, or in drivers operating in software mode.

ResetVisibility. HPS::ComponentTreeItem::ResetVisibility has been added to the API. This function resets the visibility to what is computed by the associated HPS::CADModel and HPS::View.

### Known Limitations

Qt limitation on Linux with proprietary NVIDIA drivers. There is an incompatibility between the X window that Qt creates and the OpenGL core profile context used by Visualize. This problem only exists on Linux using NVIDIA GPUs with the proprietary NVIDIA drivers. To work around this, create the X window manually and pass that to Qt. See the hps_qt_sandbox for an example.

hps_samples application MacOS. Due to a permissions problem with asset files, the hps_samples application may crash on MacOS.

## HPS 2019 SP2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 SP2 U1
HOOPS Exchange2019 SP2     Android simulator support is limited. See this explanation.
HOOPS Publish2019 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1     For iOS platforms, support is limited to 64-bit platforms for the Parasolid Sprockets (hps_sprk_parasolid and hps_sprk_exchange_parasolid).
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2018     Only x64 Sketchup is supported
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

### Enhancements

StepXML format supported. The StepXML file format can now be read by Visualize using the HOOPS Exchange sprocket.

## HPS 2019 SP1 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 SP2 U1
HOOPS Exchange2019 SP2     Android simulator support is limited. See this explanation.
HOOPS Publish2019 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1     For iOS platforms, support is limited to 64-bit platforms for the Parasolid Sprockets (hps_sprk_parasolid and hps_sprk_exchange_parasolid).
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2018     Only x64 Sketchup is supported
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

HOOPS Visualize 2019 Service Pack 1 Update 1 updates the Exchange and Publish APIs to version 2019 SP2, and also contains a number of bug fixes.

## HPS 2019 SP1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 SP2 U1
HOOPS Exchange2019 SP1 U1     Android simulator support is limited. See this explanation.
HOOPS Publish2019 SP1 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1     For iOS platforms, support is limited to 64-bit platforms for the Parasolid Sprockets (hps_sprk_parasolid and hps_sprk_exchange_parasolid).
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2018     Only x64 Sketchup is supported
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

### Functional Changes

Operator translation. The HandlesOperator translation function now appends transforms instead of applying a new transform after each action.

SketchUp support upgraded. HPS now supports SketchUp 2018, and SketchUp 2015 is no longer supported. The SketchUp 2018 API is only available for x64 Windows, which means 32-bit Visualize applications can no longer use SketchUp.

### Enhancements

Shell merging. Multiple shells can now be automatically merged into a single shell using a HPS::SegmentOptimizationOptionsKit.

New way of copying components. Component entities can now be copied using HPS::Exchange::Component::CopyTo().

New import option. A new option related to configuration of sewing parameters called "Compute Non-Solid Shell Orientation" has been added. Click here to see new functions related to this enhancement.

• HPS::Exchange::ImportOptionsKit::UnsetComputePreferredOpenShellOrientation()
• HPS::Exchange::ImportOptionsKit::ShowComputePreferredOpenShellOrientation()
• HPS::Exchange::ImportOptionsKit::SetComputePreferredOpenShellOrientation()
• HPS::Exchange::ModelFileImportOptionsKit::UnsetComputePreferredOpenShellOrientation()
• HPS::Exchange::ModelFileImportOptionsKit::ShowComputePreferredOpenShellOrientation()
• HPS::Exchange::ModelFileImportOptionsKit::SetComputePreferredOpenShellOrientation()

Override intrinsic color. A new setting is now available which enables developers to override the intrinsic color of geometry.

Physically Based Rendering. Visualize now supports Physically Based Rendering (PBR) materials. HPS::Search::Type::PBRMaterial was added to support PBR material searches.

New NVIDIA Profile Creator sample. A new sample, nvidia_profile_creator, is now available, which demonstrates how to programmatically select a GPU for NVIDIA-based systems.

New Space Mouse Operator. A new operator, HPS::SpaceMouseOperator, is now available, which works with the proprietary 3DConnexion Space Mouse. A sample is also provided, which demonstrates how to use it.

ExternalData flag. The new function HPS::Exchange::Component::IsExternalData() is now available, which can be used to determine if a product occurrence is "external data". This allows you to distinguish the component from a normal product occurrence.

HandlesOperator constraints. The HPS::HandlesOperator can now be constrained to specific rotation and translation axes.

Added ability to set alpha color value for lines. HPS::MaterialMappingKit and HPS::MaterialMappingControl now have [Set|Unset|Show]LineAlpha functions. You can also set the alpha value when you set an RGBA color. Setting an RGB color will default to an opaque alpha value.

New glyph options. Two new glyph options have been added related to disjoint regions and draw order. These are relevant for creating complex custom glyphs. Click here to see new functions related to this enhancement.

• The enum HPS::Glyph::Fill has a new value: NewLoop. Using this on an element says that the element is to be treated as a hole (or disjoint/overlapping region) relative to the previous element(s).
• HPS::GlyphKit has new member functions SetOrdered(bool in_ordered) plus a matching Show and Unset. If in_ordered is set to true, the elements will be drawn in the defined order. The default is to group elements by type and color for batching.

Backgrounds in hardcopy. Your scene's background can now be exported with the rest of your scene during a hardcopy export. See HPS::Hardcopy::File::ExportOptionsKit::SetBackgroundPreference().

Using Unicode characters in 2D PDF. Exporting non-ASCII characters to 2D PDF is now supported. However, non-ASCII characters are exported as shells. The resulting "text" is not selectable and can't be copy-pasted, but otherwise appears normally.

New ambient occlusion option. A new optional parameter for setting the ambient occlusion sharpness value has been added. Please see HPS::PostProcessEffectsControl::SetAmbientOcclusion(). Click here to see new functions related to this enhancement.

• HPS::PostProcessEffectsKit::SetAmbientOcclusion
• HPS::PostProcessEffectsControl::SetAmbientOcclusion
• HPS::PostProcessEffectsKit::ShowAmbientOcclusion
• HPS::PostProcessEffectsControl::ShowAmbientOcclusion

Parasolid on iOS. Parasolid is now supported on 64-bit iOS platforms.

New function for transforming HPS::Component. A new function, AddTransform(), appends a transform to Visualize geometry as well as its underlying PRC data. The function is available in HPS::Component, HPS::Exchange::Component, and HPS::Parasolid::Component.

Handedness for returned normals. The functions returning net vertex normals in HPS::ShellKey and HPS::MeshKey now take an additional parameter that specifies which polygon handedness (left or right) to assume. If no handedness is specified, Visualize will return data based on its implicitly precomputed values.

Images as marker glyphs. Defined images may now be used as glyphs. Rotation is also now supported.

Navigation cube. The navigation cube's faces, highlight, lines, and text can now be customized.

## HPS 2019

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 SP2 U1
HOOPS Exchange2019 U1     Android simulator support is limited. See this explanation.
HOOPS Publish2019 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1
RealDWG2019     RealDWG 2019 works with Visual Studio 2017 Update 2
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015     32-bit Sketchup is deprecated
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

### Functional Changes

Linux Compiler Upgrade. The compiler for Linux binaries has been upgraded to gcc/g++ 6.3. The glibc version is unchanged (still version 2.12). Please see the Supported Platforms page for more information.

ShowSubwindow Functions Removed. These previously deprecated overloads for ShowSubwindow() in SubwindowKit and SubwindowControl have been removed from the API:

• HPS::SubwindowKit::ShowSubwindow(Rectangle, Subwindow::Type) const
• HPS::SubwindowControl::ShowSubwindow (Rectangle, Subwindow::Type) const

RealDWG Functions Removed. These previously deprecated functions have been removed from the API:

• HPS::World::SetRealDWGDirectory()
• HPS::World::UnsetRealDWGDirectory()

Instead, please see the Programming Guide for instructions on how to set the RealDWG directory (as well as the object enablers directory, if used) in your environment's PATH.

Sketchup Deprecated for 32-bit Architectures. The 32-bit Sketchup sprocket will be removed in HPS 2019 SP1.

Operator Callback Changes. Operator::OnViewAttached and Operator::OnViewDetached now require a HPS::View parameter. This change enables the developer to easily know which HPS::View was attached or detached by the operator. Here are the new function signatures:

RealDWG Multiline Text. Visualize now uses RealDWG 2019, and the way multiline text is handled in RealDWG 2019 is not consistent with the previous release. RealDWG breaks long lines of text into multiple lines, and as a result, multiline text is not guaranteed to look the same as AutoCAD.

### Enhancements

GPU Selection. For Visualize applications using DirectX 11 drivers, it is now possible to select a specific GPU or to direct Visualize to select an appropriate GPU. Users can select which GPU to use with the new function SetPreferredGPU(), which is available in the following classes:

In addition, users can query GPUs using Database::ShowAvailableGPUs().

Note: This option is not available for C# users using D3DImage, due to the reliance of D3DImage on the DirectX 9 driver.

KeyPath and ComponentPath Containers. New functions have been added to make it easier and less cumbersome to work with KeyPath and ComponentPath objects. Users can now interact with objects from these two classes as if they were simple data containers. These functions may also help reduce memory usage and simplify code.

As part of this change, all variations of the Append() function in both the KeyPath and ComponentPath classes have been marked as deprecated and will be removed in a future release.

Any KeyPath::Append() functions in your code should be replaced with the new KeyPath::PushBack() functions, which have exactly the same signature and return value as the KeyPath::Append() functions.

As an example of how these changes reduce code, the following code snippets demonstrate how to insert a \ref HPS::Key "Key" into a \ref HPS::KeyPath "KeyPath", before this release and after:

 Before:  KeyPath path; Key newKey; KeyArray keys; path.ShowKeys(keys); keys.insert(keys.begin(), key); path.SetKeys(keys);  After:  KeyPath path; path.PushFront(newKey); 

#### KeyPath

Below are the new functions in the KeyPath class.

 Container functions: Size() Empty() At(size_t in_index) At(size_t in_index) Insert(size_t in_index, Key const & in_item) Remove(Key const & in_item) Remove(size_t in_index) Reverse() Front() Front() Back() Back() PopFront() PopBack() PushFront(Key const & in_key) PushBack(Key const & in_key) PushBack(KeyPath const & in_key_path) PushBack(KeyArray const & in_key_array) Iterator functions (C++ only): using iterator = HPS::KeyArray::iterator iterator begin() iterator end() const_iterator begin() using const_iterator = HPS::KeyArray::const_iterator const_iterator end() const_iterator cbegin() const_iterator cend()

#### ComponentPath

Below are the new functions in the ComponentPath class.

 Container functions: Size() At(size_t in_index) At(size_t in_index) Insert(size_t in_index, Component const & in_item) Remove(size_t in_index) Reverse() Front() Front() Back() Back() PopFront() PopBack() PushFront(Component const & in_component) PushBack(Component const & in_component) PushBack(ComponentPath const & in_path) PushBack(ComponentArray const & in_components) Iterator functions (C++ only): using iterator = HPS::ComponentArray::iterator; iterator begin(); iterator end(); using const_iterator = HPS::ComponentArray::const_iterator; const_iterator begin() const_iterator end() const_iterator cbegin() const_iterator cend()

Distance Culling. It is now possible to cull geometry from a scene using distance culling. Every segment whose bounding is within the distance specified by the user will be drawn, while everything else will be culled.

In addition, it's now possible to search for segments which contain distance culling (similar to searching for any other attribute) using the new enumeration Search::Type::CullingDistance.

Usage information is available in the Programming Guide, and API additions can be viewed by clicking here.

These are the functions which were added as part of this feature.

In the CullingKit class:

In the CullingControl class:

These are the functions which were added in order to let users dictate how selections behave with regards to distance culling.

In the SelectionOptionsKit class:

In the SelectionOptionsControl class:

By default, distance culling is NOT respected during selections.

Volume Culling. A new option for volume culling is now available. Users can specify a volume in world-coordinates. Every segment whose bounding is inside (either completely or at least partially) the defined volume will be drawn, while everything else will be culled.

A typical use case would be for reading in a model of a large building. When the user inspects a room in the building, the volume culling can be set up to be a bit larger than the volume the user is viewing, in which case the rest of the model will not be drawn, thus improving performance.

A simple example of volume culling is demonstrated in the Programming Guide, and the API changes can be reviewed by expanding the section below.

•  Click to see the new APIs related to volume culling and selection of culled objects.

Physically Based Rendering. Visualize has added a new Physically Based Rendering mode. PBR simulates photo-realism by calculating the natural interaction of light and materials. There is a significant change to the underlying data and algorithms to accommodate this. For HPS 2019, PBR is offered as a read-only preview, for GLTF files imported through HOOPS Exchange. API access will be available in a subsequent release.

To try out PBR in Visualize, a sample GLTF file can be downloaded here.

HandlesOperator Available for Parasolid/Exchange Models. The HandlesOperator can now be used on models loaded through the Exchange, Parasolid, or ExchangeParasolid sprockets. Please see the Programming Guide for instructions on associating the HandlesOperator with an Exchange or Parasolid CAD model.

File Format Changes for Exchange Sprocket. This release includes a number of changes to the Exchange Sprocket. Please expand the section below for more details.

•  Click to see Exchange Sprocket changes.

Hardcopy Export Improvements. Support has been added for transparent lines and text in hardcopy export.

Text Anti-Aliasing. Text Anti-Aliasing is now controlled by the VisualEffectsControl::SetAntiAliasing() function. By default, this value is on; therefore, all text will now be anti-aliased. There will be some minor text size and position changes as a result of this new behavior.

New ComponentPath Option. When calling CADModel::GetComponentPath(), there is a new optional PathType parameter which can be used to specify whether only unique, unambiguous components are returned, or whether all components are returned, regardless of ambiguity.

Nav Cube Transition Time. The Nav Cube's Smooth Transition time is now user-configurable. This sets the camera transition time when clicking on the Nav Cube. Here are the new API functions for this feature:

Component Transforms and DeInstancing. It is now possible to use Component::SetTransform() to modify PRC entity transforms. Additionally, Factory::DeInstanceComponent() is a new function which enables you to modify an instance of a component without affecting other instances.

MatrixKit Changes. For the C++ API, MatrixKit members are no longer opaque and you can now directly access the underlying float array via the data member. Due to this change, MatrixKit is no longer a subtype of Kit or Object.

OpenVR Sandbox Application Updated. The hps_openvr_sandbox application has been refactored for ease of use and simplicity, and now supports the OpenGL2 driver (in addition to the DX11 driver). For more information please see these instructions for building the OpenVR Simple application as well as a more in-depth explanation of the OpenVR sandbox in the updated Virtual Reality documentation.

ARKit for iOS. A new sandbox named ios_arkit_sandbox is now available in the samples directory. This sandbox provides a framework for developing augmented reality applications on iOS devices. Please see the Getting Started section for usage instructions.

ARCore for Android. A new sandbox named arcore_sandbox is now available in the samples directory. This sandbox provides a framework for developing augmented reality applications on Android devices. Please see the Getting Started section for usage instructions.

### Miscellaneous

C# Intellisense XML files. XML files containing the C# documentation are now available for Windows C# users in the bin directories. The content of these files will be displayed via Intellisense in Visual Studio for C# users.

Downloadable Assets. New assets for use with the Visualize package can be downloaded from the Dev Zone. There you will find a large point cloud for benchmarking the OOC sprocket as well as a spherical panorama for building a skybox cubemap.

New Documentation. The following sections have been added to the documentation:

## HPS 2018 SP2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 SP1 U1
HOOPS Exchange2018 SP2 U1     Android simulator support is limited. See this explanation.
HOOPS Publish2018 SP2 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

### Enhancements

Shader-Based Face Displacement Redesign. Our face displacement algorithm has been redesigned to handle face displacement in a more robust way, resulting in more accurate z-ordering of geometry situated very close together. This will largely eliminate "bleed through" and stitching of edges that are supposed to be obscured.

As a result of the redesign, the units of face displacement have changed: The new units are linear, camera independent, and represent a much smaller displacement. The new units are 1/224 in the normalized depth range [0,1]. When calibrating your scene with the new units, it's likely that you will need much larger values than previous versions of Visualize. Any uses of face or vertex displacement may need to be re-tuned to render optimally. This affects the following functions:

If you previously set any face displacement values to correct for problematic rendering or artifacts in past versions of Visualize, we recommend trying to remove these adjustments, as it's possible that they may no longer be necessary.

Lastly, the z-order of co-planar geometry may change. Z-order of co-planar geometry is non-deterministic, and this new algorithm may yield different visual results than in previous releases.

These images show sample renderings from before and after this change:

 Before After Before After Before After

Segment-Level Display Lists Redesign. A redesign of segment-level display list handling should result in more accurate rendering. This change will provide a foundation for future enhancements in this area.

Attribute Remapping in Shell Optimization Functions. These functions for optimizing shells will now remap vertex and face attributes to match optimizations, using a heuristic process to determine the resulting attributes in the optimized shells:

Expose Implicit Capping Geometry Color. A new interface has been added to query color on cut geometry when used with the HPS::CuttingSection::MaterialPreference::Implicit setting, which allows HPS::KeyPath::GatherCutGeometry() to copy the implicitly generated face color (i.e., the weighted average of all geometry face colors where cut is applied) onto the gathered copy of the capping shell. The color is set on the faces of each shell gathered. Here are the new functions in the CutGeometryGatheringOptionsKit class:

Adding Parasolid Entities to HOOPS Exchange Models. A new function has been added to the Exchange-Parasolid Sprocket that facilitates adding a Parasolid body to an Exchange CAD Model:

In order to demonstrate various workflows using the Exchange-Parasolid Sprocket, including the simultaneous use of the native Exchange and Parasolid APIs in Visualize, we've added a new section to the Programming Guide for the Exchange-Parasolid Sprocket.

Marker Drawing Preference. The enum Marker::DrawingPreference has been added to the Marker class. This enum is useful when it's necessary to override the maximum size of hardware-based rendering of vertex markers. The value of DrawingPreference can be set or shown in these new functions in the MarkerAttributeControl and MarkerAttributeKit classes:

## HPS 2018 SP1 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 U2
HOOPS Exchange2018 SP2
HOOPS Publish2018 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1.190
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

HOOPS Visualize 2018 Service Pack 1 Update 1 is a bug fix release only.

## HPS 2018 SP1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2018 U2
HOOPS Exchange2018 SP1 U1
HOOPS Publish2018 SP1 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1.190
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

### Enhancements

OBJ Export. Visualize now supports export to the OBJ file format. Geometry-level color set on Shells and Meshes is supported, but please note the following are not currently supported: Line patterns, marker symbols, texture matrices, and face-level, edge-level and vertex-level colors, and shells with holes defined by negative face list values. For more information, please see the API Reference and the Programming Guide.

New Shell Functions. Three new InsertShellFromGeometry() function overloads have been added to the SegmentKey class. These are the same as other InsertShellFromGeometry() functions, only with different parameters:

New Mesh Functions. These new functions always return a normal for a vertex, even if a normal hasn't been explicitly set. If a normal hasn't been set, Visualize computes one and returns it.

Exchange Sprocket: Directory File Search.Three new functions have been added to HPS::Exchange::ImportOptionsKit:

SetSearchRootDirectory() tells Exchange where to look for files related to the files currently being loaded. By default Visualize searches that directory and its subdirectories to find files referenced by the main file. Before this change, if a user wanted to search for files in other directories, these root directory settings (i.e., whether to search the root directory and its subdirectories for sub-parts) would be automatically set to false.

Isolate/Show/Hide Improvements. Specifically for models that use a HPS::ComponentPath (e.g., models loaded via the Exchange or Parasolid sprockets), a new setting is now available to control visibility with more precision. The optional HPS::Component::Visibility enum determines which parts of a subtree in a 3D model remain visible during Isolate/Show/Hide operations. Please see the Programming Guide for more information.

Parasolid: Convergent Modeling. Convergent modeling (i.e., hybrid modeling that combines faceted geometry with solid geometry) has been enabled in the Parasolid sprocket and the Exchange_Parasolid sprocket. Previously, Parasolid files were required to contain B-rep; this requirement has been lifted.

To convert non-Parasolid files containing faceted geometry (e.g., an STL file) to Parasolid, use the Exchange_Parasolid sprocket.

Limitation: When importing tessellated files via Exchange to Parasolid, face colors will not be imported. This limitation will be removed in the next release.

Parasolid Sprocket: Load Multiple Models. It is now possible to load multiple Parasolid files in a single scene. Before calling Parasolid::File::Import() for your second Parasolid file, call SetLocation() with a ComponentPath that indicates the location in the first CAD model where you would like to insert the second CAD model. Here are the new functions for this feature:

AR/VR Beta Release. A Beta release of Augmented Reality and Virtual Reality is now available for C++ users on Windows using the DirectX 11 driver only. Please see the Getting Started section and the Programming Guide for more information. This feature will be significantly modified in the next release, with a simpler interface for easier integration.

Selection Performance Improvements. SelectByRay() is faster in most cases. SelectByPoint() and SelectByArea() are faster for extremely large polyhedrons.

Implicit Capping Geometry Color. HPS::CuttingSection::MaterialPreference::Implicit now supports Segment and SegmentTree capping level.

Multiple Highlights of the Same Overlay Type. The Highlight functions in HighlightControl now include an option to remove existing highlights of the same Overlay type. The default (and previous) behavior is to remove highlights of the the same Overlay type. You can use this option to retain existing highlights and apply multiple highlights to a HighlightControl.

Passive Highlighting. Highlighting is typically active, meaning highlight attributes always override attributes set in the tree. There is now an option for passive highlighting, meaning that attributes that are attribute locked in the tree will not be overriden by the (passive) highlight. To use passive highlighting, use HighlightOptionsKit::SetPassive(true).

### Functional Changes

Important: Kits are no longer thread-safe. (This change was originally communicated in the 2018 release notes – we are simply re-iterating it in this release for visibility.) Previously Kits were internally thread-synchronized. That thread-synchronization has been removed. Therefore, two or more user-defined threads cannot operate simultaneously on the same kit without incurring risk of data corruption. If you need to use Kits in this manner, you will need to protect the Kit access with thread synchronization techniques.

DirectX Driver DLLs Renamed. The DirectX 9 and DirectX11 driver DLLs have been renamed:

• hps_dx9.dll is now hps_directx9.dll
• hps_dx11.dll is now hps_directx11.dll

Exchange Sprocket: Platform Dependent Symbols. Classes and functions that are not supported on a particular platform will not be included in the sprocket library for those platforms. This mostly affects mobile platforms.

Xamarin for Android Update. The Xamarin sandbox for Android has been fixed with a new handle for passing platform data in calls to ApplicationWindowOptionsKit.SetPlatformData(). The new handle pins the platform data in memory to avoid garbage collection. For more information, see the GCHandle object named platformDataHandle in HPSView.cs.

iOS Static Libraries Name Change. The iOS static libraries have been renamed for consistency with other platforms. For example, instead of libhps_core_ios.a, this library is now called libhps_core.a in the iOS package.

HPS::TreeContext Documentation Corrections. The Programming Guide and API Reference have been updated to indicate that HPS::TreeContext is used for SelectByShell() and shell relation computations; it is not used with SelectByRay().

Changes to Multi-Coordinate Lines. (This change was originally communicated in the 2018 Update 1 release – we are re-iterating it for visibility.) For lines with specified coordinate spaces (often referred to as multi-coordinate lines), the following changes were made:

### Upcoming Changes

DevToolSet Upgrade for Linux in 2019 Release. We're currently using DevToolSet 2 for Linux packages. For the 2019 release of Visualize HPS, we'll be upgrading to DevToolSet 6.

## HPS 2018 U2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2017 SP2
HOOPS Exchange2018 U2
HOOPS Publish2018 U2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1.190
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

HOOPS Visualize 2018 Update 2 is a bug fix release only.

### Functional Changes

DirectX Driver DLLs Renamed. The DirectX 9 and DirectX11 driver DLLs have been renamed:

• hps_dx9.dll is now hps_directx9.dll
• hps_dx11.dll is now hps_directx11.dll

## HPS 2018 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2017 SP2
HOOPS Exchange2018 U2
HOOPS Publish2018 U2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid30.1.190
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.1.1     Linux uses wxWidgets 3.0.2
OS X uses wxWidgets 3.0.0

Changes to Multi-Coordinate Lines. For lines with specified coordinate spaces (often referred to as multi-coordinate lines), the following changes were made:

wxWidgets Library Version. wxWidgets library support on Windows has been changed to v3.1.1. Linux binaries for Visualize HPS continue to support wxWidgets v3.0.2, and OSX binaries continue to support wxWidgets v3.0.0.

## HPS 2018

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Communicator2017 SP2
HOOPS Exchange2018
HOOPS Publish2018
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2018     RealDWG 2018 works with Visual Studio 2017
and Visual Studio 2015 Update 3
Qt5.6
SketchUp2015
wxWidgets3.0

### Enhancements

Highlight Querying. New functions are available to query the Highlight state within the scene. The HPS::HighlightControl class has two new functions, ShowHighlightState() and ShowHighlightStates() that query the highlight state of one or more KeyPaths. These functions answer the question, "Is this geometry or segment highlighted?" The WindowKey class has a new function FindHighlights() that returns an iterable list of KeyPaths that are highlighted. This function answers the questions, "Which Objects are highlighted in this Window?"

NavigationCubeOperator with Keypaths. In the NavigationCubeOperator class, the functions for setting and showing Navigation Cube's reference segments now use KeyPaths instead of SegmentKeys. This change allows Visualize to collect transformation information from along the KeyPath, which in turn sets more natural zoom and rotation points in the model for the NavigationCubeOperator.

Leader Line Clipping. To provide better visual appearance of text background shapes, a new class has been added to clip leader lines around a text background, keeping the text visible when a 3D model is rotated. Please see LeaderLineClippingElement in the API Reference.

Vertex Decimation, Randomization, and Displacement. New functions are available in the DrawingAttributeKit and DrawingAttributeControl. These functions are most relevant for applications using the OOC API and can help improve the appearance of point clouds/shells. Please see the API Reference for more information.

Hidden Line Sorting in Hardcopy. There is a new option to turn on Line Sorting for hardcopy export. This will ensure that lines and edges are printed in the proper Z-Order; however, performance will be slower. Use the function HPS::Hardcopy::GDI::ExportOptionsKit::SetHiddenLineSorting or HPS::Hardcopy::File::ExportOptionsKit::SetHiddenLineSorting to enable this option.

Windows C# assemblies. Windows C# assemblies now contain file version information.

### Functional Changes

Changes in Visual Studio support. Visual Studio 2017 is now supported. Visual Studio 2013 is no longer supported.

Changes to debug binaries. Debug binaries in the Visual Studio packages are no longer appended with the 'd' character.

Changes in Linux support. The CentOS and Ubuntu Linux packages have been consolidated into a single package using glibc 2.12.

Important: Kits are no longer thread-safe. Previously Kits were internally thread-synchronized. That thread-synchronization has been removed. Therefore, two or more user-defined threads cannot operate simultaneously on the same kit without incurring risk of data corruption. If you need to use Kits in this manner, you will need to protect the Kit access with thread synchronization techniques.

OpenGL 1 driver discontinued. OpenGL 1 driver functionality was deprecated in the 2016 SP2 release and is no longer supported or available as a high-performance screen driver in Visualize. The driver enum setting of HPS::Window::Driver::OpenGL is now an alias for HPS::Window::Driver::OpenGL2. An enum called HPS::Window::Driver::OpenGL1Deprecated has been added - this enum references the OpenGL driver, which can still be used for headless environments, printing, and offscreen rendering. The HPS::Window::Driver::OpenGL1Deprecated enum is not suitable for high-performance screen rendering.

DX9 driver deprecated. The DX9 driver has been deprecated since the 2016 SP2 release. It will be discontinued in a future release. We strongly encourage partners to use a newer driver, such as DX11.

Selection Sorting behavior modification. Users may now choose how selection results are sorted. The HPS::SelectionOptionsKit and HPS::SelectionOptionsControl added an overload to the HPS::SelectionOptionsKit::SetSorting() function that takes an enumeration parameter that specifies the sorting method. Using the original function signature, SetSorting(true) will use Proximity sorting instead of Z sorting for HPS::SelectionControl::SelectByPoint().

Backface culling behavior modification. In previous versions of Visualize, backface culling was not properly activated with Segment-Level Display Lists due to a bug. The bug caused Visualize to draw backfaces that should have been culled. This bug has been fixed. In the new behavior, backfaces will not be drawn if they have a handedness set and backface culling is on. Some partners may experience an undesired change resulting from this bug fix. If you want backfaces to be drawn in your scene, call HPS::CullingControl::SetBackFace(false).

SetBRepData() replaced with SetBRepMode(). The deprecated function HPS::Exchange::ImportOptionsKit::SetBRepData() has been replaced by HPS::Exchange::ImportOptionsKit::SetBRepMode(). See HPS::Exchange::BRepMode for more information on the available import options.

Changes to Path Returned by CADModel::GetComponentPath(). Previously, if an unambiguous but simplified key path (e.g., an include path) were passed to CADModel::GetComponentPath(), not all components along that path would be returned. As of this release, components associated with keys that are implicitly along the key path will be included in the returned path. Please see the API Reference for more information.

RealDWG loading. The following RealDWG functions have been deprecated: SetRealDWGDirectory(), ShowRealDWGDirectory(), and UnsetRealDWGDirectory(). Please see the DWG section of the programming guide for new instructions on loading RealDWG, in particular Step 3 of the Prerequisites section.

Transparent background export. One overload of Image::File::Export() function signature now includes an optional parameter for setting a transparent background (which can be useful for exporting PNG files):

Surface splitting. In the Exchange Sprocket, the following function names have been changed to match the corresponding functions in the HOOPS Exchange API:

Changes to the hps_dx9.dll and hps_dx11.dll files. The hps_dx9.dll and hps_dx11.dll binaries have a file version number that matches the rest of the Windows binaries. The version number is lower than in previous releases.

### Known Limitations

DWG import. DWG import via the Exchange Sprocket is Beta. The behavior may not be stable. (There are no known problems with the DWG Sprocket.)

Multiprocess Translate to Parasolid. Multiprocess Translation to Parasolid via the Exchange Sprocket does not work on Linux.

Handles Operator Plane Translate. Using the HandlesOperator, if you rotate the model with the rotation handles and then use the plane handles to translate the model, the Plane handles will translate the model along an incorrect plane.

## HPS 2017 SP2 U2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017 SP2
HOOPS Publish2017 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2018     RealDWG 2018 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

HOOPS Visualize 2017 Service Pack 2 Update 2 is a bug fix release only.

## HPS 2017 SP2 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017 SP2
HOOPS Publish2017 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2018     RealDWG 2018 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

HOOPS Visualize 2017 Service Pack 2 Update 1 is a bug fix release only.

## HPS 2017 SP2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017 SP2
HOOPS Publish2017 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2018     RealDWG 2018 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

#### Packaging Changes

• Directory names have changed: HOOPS_Visualize_2017_SP2_Win_vc12 has become HOOPS_Visualize_2017_SP2_Win_v120 and HOOPS_Visualize_2017_SP2_Win_vc14 has become HOOPS_Visualize_2017_SP2_Win_v140.
• A new sandbox for point cloud support is now available in samples->mfc_ooc_sandbox. This sandbox is an MFC-based application for showcasing the OOC feature. OOC is a Preview Release and may change in the 2018 release.

#### Enhancements

• Out-of-core point cloud support is now available as a preview release for 32-bit/64-bit Windows applications. Please see the Programming Guide for more information.
• Export to 3MF is now supported via the Exchange sprocket. This new implementation is largely modeled on HPS::Exchange::File::ExportPRC and similarly allows export of HPS::KeyPath objects. As with the ExportPRC interface, if the user wants to export a CADModel and key paths, the key paths can be specified via the Export3MFOptionsKit::SetAdditionalKeyPaths(). Export3MF variants now return an HPS::Exchange::ExportNotifier as the process of building up the A3DAsmModelFile is cancellable. Please see HPS::Exchange::File::Export3MF and HPS::Exchange::Export3MFOptionsKit.
• HTML Export is now available for 64-bit Windows applications through the HTML sprocket or the Publish sprocket. For more information, please see the following Programming Guide sections:
• HPS::Exchange::MeasurementOperator now handles touch events with new OnTouchDown(), OnTouchUp(), and OnTouchMove() handlers.
• It's now possible to modify anti-aliasing settings on the fly. See this function in the HPS::StandAloneWindowOptionsControl and HPS::StandAloneWindowOptionsKit classes:
• A new image export option has been added for setting a transparent background:
• PRC Export: Geometry References and Conditional Includes are now supported.
• In order to make the static model more flexible, Visualize now avoids complete static model regeneration in favor of patching portions of the static model in some cases. For more details, please see the Performance Considerations section of programming guide.
• Support for sub-geometry attributes has been expanded. For ShellKey, ShellKit, MeshKey, MeshKit, it's now possible to set edge visibilities and edge colors. For CylinderKey and CylinderKit, it's now possible to set vertex colors.
• Memory usage has been reduced for two-point lines; the impact of this change will only be noticeable in scenes that contain large numbers of two-point lines.

• For Windows applications, there is a new API for exporting to an EMF file:

• For Windows applications, there is a new API for exporting to the clipboard:
• In HPS::Exchange::CADModel, a new member function SetAllPMIInFront() forces all of the PMI in the CADModel to be rendered in front of the other geometry.
• Simulator targets are now included in the Android Package.
• In the Exchange Sprocket, metadata now reports units for Product Occurrences (previously only units for the CADModel were available). In the HOOPS Demo Viewer, these units are visible in the Properties pane.

#### Upcoming Changes

Starting with the 2018 release, the following changes will be in effect:

• Support for Visual Studio 2013 will be discontinued, and support for Visual Studio 2017 will be added.
• Ubuntu and CentOS packages will be consolidated into a single Linux package.

## HPS 2017 SP1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017 SP1 U1
HOOPS Publish2017 SP1 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2017     RealDWG 2017 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

#### Enhancements

• PRC, STL, VRML and U3D Import: HOOPS Visualize users now have access to a limited license of HOOPS Exchange that provides the ability to import these popular formats. Once you download and install HOOPS Exchange, you will be able to easily import these formats via the Sprocket Exchange component.
• HTML Export via HOOPS Publish: HOOPS Visualize licensees of HOOPS Publish Advanced now get high-level access to the HTML export capabilities that were added to HOOPS Publish. Direct HTML export without requiring HOOPS Publish will be added in the next release of HOOPS Visualize. This feature is only available on 64-bit versions of Visualize. This functionality is exposed in the File class through the ExportHTML() function.
• Visualize now supports exporting PDFs with the Parts List widget through the Publish Sprocket. This feature requires the TableToPDF Publish add-on and a Publish Advanced license.

•   Click to see more info on the new Parts List feature.
• A new member has been added to the UpdateInfo object that indicates whether a static model has been regenerated during a Window update. Using a static model in Visualize can dramatically improve performance, especially with large models. For more information on how to implement a static model in your application, please see the updated Programming Guide entry on static models and this new tutorial.
• Through our Exchange sprocket, you can now export different versions of JT files with the ExportJTOptionsKit by using the SetVersion() function.
• Back coloring for Point Clouds is now available. New functions have been added to the VisualEffectsKit and VisualEffectsControl classes.
•   Click to see the functions for the Eye Dome Lighting Back Color feature.
• In the HPS::WindowInfoControl object, it's now possible to see the name of the GPU with the HPS::WindowInfoControl::ShowGPUName() function.
• Additional operator modifier keys are now supported in the ModifierKeys class.

#### Miscellaneous

• HMF-to-HSF command line utility program: A simple command line utility program has been created to enable developers to convert HMF files to HSF. HMFs are debugging files that are used by HOOPS Visualize:3DF. This new utility program is provided to enable developers migrating from HOOPS Visualize:3DF to HOOPS Visualize.
• The android_eclipse_sandbox project has been removed. Please note, the android_sandbox project is still included in the package for Android developers using Android Studio. For up-to-date information about building Android applications with Visualize, please see the Getting Started section.

• STL models now use flat shading in all cases.

## HPS 2017 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017 U1
HOOPS Publish2017 U1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2017     RealDWG 2017 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

HOOPS Visualize 2017 Update 1 is a bug-fix release only.

## HPS 2017

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2017
HOOPS Publish2017
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.1
RealDWG2017     RealDWG 2017 works with Visual Studio 2015
There is no support for RealDWG in Visual Studio 2013
Qt5.6
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

#### Enhancements

• Support for code generation to make it easier to create bug reports. A codegen_test project is now included in HPS packages. Please see the troubleshooting page for more information.
• Support for Xamarin on both iOS and Android. Please see the Getting Started section for more information.
• Improvements to anti-aliasing capabilities. Depending on usage, expect 30%–70% performance increase when using depth effects with anti-aliasing (eye dome lighting, ambient occlusion, fast silhouettes, external silhouettes, depth of field). Available with DX11 and OpenGL 2 (desktop) when supported.
• New Camera Walk Operator.
• HOOPS Exchange sprocket enhancements:
• A new function has been added to HPS::Exchange::ImportOptionsKit that allows users to specify how many concurrent processes to use when importing a file. Using more processes speeds up the import of assemblies made up of multiple files.
This new feature only affects the following file formats: CatiaV5, NX (Unigraphics), JT, Solidworks, Creo (Pro/E).
This option has also been exposed in both the HOOPS Demo Viewer and the Parasolid Demo Viewer. When importing a file in the HDV or PDV, choose "Show Import Options". In the "General" tab, you will be able to set the number of processes to be used for that import.
• Support for iOS and Android platforms
• Starting with HOOPS Exchange 2017, users will be able to export data imported from Exchange to the 3MF file format. To do so, use the newly added function HPS::Exchange::File::Export3MF.
• Improvements around the import of screen-anchored markups
• Component deletion performance has been improved
• There is a new Exchange import option, HPS::Exchange::ImportOptionsKit::SetGeometryDefaultColor, which allows a user to specify a default color for geometry that has no color specified. If the option is not specified for an import, it will default to gray.
• HOOPS Exchange-Parasolid sprocket enhancements:
• Improved assembly management for Parasolid users
• Exposed interface to multi-process translation
• The look of the manipulator handles has changed. This includes the default sizes and colors, and new types of handles have been added. Users can still customize the appearance of manipulator handles.

• The iOS package has been optimized, significantly reducing its size.
• New functionality has been added to set a default camera when exporting HSF files using an HPS::Stream::ExportOptionsKit. The function SetDefaultCamera() can be used to set a default camera. This functionality is also available in the HOOPS Demo Viewer; to save the current camera in HDV, select "Save Current Camera" in the Export Options dialog box.
• The default appearance of the axis triad has been updated.

#### Functional Changes

• Support for 32-bit Linux platforms has been discontinued.

• Support for VC11 and Visual Studio 2012 has been discontinued.
• For the Linux and Android platforms, the gcc compiler has been upgraded to 4.8.2.
• The ambient occlusion algorithm was overhauled. As a result, certain function signatures in the PostProcessEffectsControl and PostProcessEffectsKit have changed.

•   Click to see the ambient occlusion functions that have changed.
• Also in the PostProcessEffectsKit and PostProcessEffectsControl classes, a new scaling factor called "World Scale" can be used by our post-process algorithms, such as ambient occlusion.

•   Click to see the new World Scale functions.
• Visualize now checks to see if the specified 3D driver is available each time a WindowKey is created. If the driver isn't available, then an InvalidObjectException is thrown.
• If you are using Visualize on a Linux / Unix platform and directly or indirectly invoking the X11 API outside of Visualize, you will need to make a call to XInitThreads as the first X11 function in your application.
• The behavior for the following functions has changed:

Previously, when a user called one of these functions an HPS::IOException would be thrown if the import operation associated with the caller didn't have a status of "Success". The exception message informed the user that the import results were not available.

Now, when a user calls one of these functions, if the import operation associated with the caller has a status of "InProgress" then the caller calls HPS::IONotifier::Wait(), which waits for the import to finish and then retrieves the results. If the return status of the import isn't "InProgress" or "Success", then an HPS::IOException is thrown. The exception message informs the user that the import failed.

## HPS 2016 SP2 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016 SP2
HOOPS Publish2016 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.0, 28.1     Please see the note below regarding Parasolid support.
RealDWG2017, 2016     RealDWG 2017 works with Visual Studio 2015
RealDWG 2016 works with Visual Studio 2012
There is no support for RealDWG in Visual Studio 2013
Qt5.6     Visual Studio 2012 uses Qt 5.1
SketchUp2016
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

HOOPS Visualize 2016 Service Pack 2 Update 1 is a bug fix release only.

Parasolid support varies by platform:

• Linux Ubuntu/Centos 32-bit platforms work with Parasolid 28.1. Please note that going forward this platform will no longer be supported with the HPS Parasolid Sprocket.
• VC11 works with Parasolid 29.0137.
• All other platforms work with Parasolid 29.0122 or later.

#### Enhancements

• Support is now available for the Exchange Sprocket for iOS.

## HPS 2016 SP2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016 SP2
HOOPS Publish2016 SP2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid29.0
RealDWG2017, 2016     RealDWG 2017 works with Visual Studio 2015
RealDWG 2016 works with Visual Studio 2012
There is no support for RealDWG in Visual Studio 2013
Qt5.6     Visual Studio 2012 uses Qt 5.1
SketchUp2016
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

#### Enhancements

• HOOPS Visualize added support for manipulator handles that allow users to easily move and translate objects in the scene. Support is provided in the form of a new operator HPS::HandlesOperator. Handle support is currently in BETA status. Current limitations include:
• Moved objects locations are not updated in any external databases. This means that while the data will be updated on the screen, the source data will not be updated in the HOOPS Exchange, HOOPS Publish, Parasolid or RealDWG database. This will only have a noticeable impact if you export the data.
• When editing geometry that is associated with a Component, the component structure might be altered destructively.
These limitations will be addressed in the 2017 release. The look of the geometry representing the handles and the behavior of the handles themselves is subject to change in future releases. You can add HPS::HandlesOperator to any application you wish, just like any other operator. Full support will be available in 2017.
• HOOPS Visualize now allows you to set custom backgrounds on inserted text strings. The HPS::ShapeDefinition and HPS::ShapeKit classes were introduced to allow you to do this. The following new classes HPS::ShapeCoordinate, HPS::ShapePoint, HPS::ShapeElement, HPS::PolygonShapeElement, HPS::EllipseShapeElement, HPS::CircleShapeElement, HPS::EllipticalArcShapeElement, HPS::CircularArcShapeElement, HPS::LineShapeElement and HPS::AnchorShapeElement allow you to control these shapes. Finally, several new functions have been added to the HPS::PortfolioKey class to enable you to set these backgrounds. These include DefineShape, UndefineShape, ImportShape, ImportAllShapes, GetShapeDefinitionCount, ShowShapeDefinition and ShowAllShapeDefinitions. Please see this tutorial for a simple example.
• A variety of bug-fixes and improvements were made to the Parasolid Sprocket including some which addressed edge-stitching issues.
• A variety of improvements to the HOOPS Exchange integration have been made, including:
• Support for mobile platforms. Please note, all Android applications developed with the Exchange Sprocket (sprk_exchange) must use the GCC 4.9 toolchain.
• Support for flippable PMI via HPS::Exchange::ImportOptionsKit::SetPMIFlipping, which dictates whether Visualize will flip PMI when rotating so that text and symbols remain readable.
• Improvements have been made to the quality and performance of shadow map and ambient occlusion capabilities.
• New classes have been added to support custom shape definitions: .
• Built on top of the custom shape classes, the new operator HPS::AnnotationOperator has been created to insert text annotations using mouse- and touch-driven devices.
• A new function HPS::KeyPath::ComputeExtent has been added. It calculates a screen-space rectangle that fully encloses the segments specified in the key path. The rectangle honors visibilities and accounts for any text strings that are in the scene.
• Visualize now supports pixel-space subwindows (exposed via ).
• More control over fine-grain filtering has been added, allowing frame buffer effects (bloom, ambient occlusion, silhouette edges, depth of field, and eye dome lighting) to be toggled on or off individually using new functions in the HPS::VisualEffectsControl class.
•  Click to see the new functions in the HPS::VisualEffectsControl class:

#### Functional Changes

• The OpenGL1.X and DirectX9 drivers have been deprecated. Support for these drivers will be removed at a later date. Developers are recommended to use the HPS::Window::Driver::Default3D which will automatically choose the best driver for your device.
• Sewing for all types of HOOPS Exchange models is now exposed as an import option. As a result, some function signatures have changed:
• Function signature HPS::Exchange::ImportOptionsKit & HPS::Exchange::SetIGESSewingTolerance(double in_tolerance) has changed to .
• Function signature HPS::Exchange::ImportOptionsKit & HPS::Exchange::UnsetIGESSewingTolerance() has changed to .
• Function signature bool HPS::Exchange::ShowIGESSewingTolerance(double & out_tolerance) const has changed to .

## HPS 2016 SP1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016 SP1
HOOPS Publish2016 SP1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid28.1
RealDWG2016     Only supported with Visual Studio 2012
Qt5.6     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.1     Linux and OS X use wxWidgets 3.0

#### Enhancements

• Visual Studio 2015 is now supported.
• HOOPS Visualize can now automatically generate text backgrounds. New options on the Text[Key|Kit] as well as TextAttribute[Kit|Control] control everything related to the background. See [Set|Unset|Show]Background(), [Set|Unset|Show]BackgroundMargins(), and [Set|Unset|Show]BackgroundStyle().
• Control of edge weight and tolerance for cutting sections is now available. See CuttingSectionAttribute[Control|Kit]::[Set|Unset|Show]Tolerance() and [Set|Unset|Show]Weight().
• Point cloud files (PTS, PTX, XYZ) are now importable. See HPS::PointCloud::File::Import.
• Screen-anchored PMI and incremental load are now supported in our Exchange bridge.
• Significant performance improvements for highlighting when using HPS::Drawing::Overlay::WithZValues or HPS::Drawing::Overlay::InPlace.
• Print to scale is now supported.
• Qt 5.6 is now supported.
• Variety of bug-fixes related to fully supporting international text strings.

•   New functions related to the HOOPS Exchange bridge

#### Functional Changes

• D3DImage is now the default driver in the WPF Sandbox.
• Function signature HPS::ImportOptionsKit::SetPMIDefaultColor(RGBColor const & in_color) has changed to HPS::ImportOptionsKit::SetPMIDefaultColor(RGBColor const & in_color, bool in_override_color = false).
• Function signature HPS::ImportOptionsKit::ShowPMIDefaultColor(RGBColor & out_color) const has changed to HPS::ImportOptionsKit::ShowPMIDefaultColor(RGBColor & out_color, bool & out_override) const.

## HPS 2016 U2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016 SP1
HOOPS Publish2016 SP1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Enhancements

• The HOOPS Exchange and HOOPS Publish integration libraries have been updated to 2016 SP1.
• General performance improvements to static model.

## HPS 2016 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016
HOOPS Publish2016
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

HOOPS Visualize 2016 Update 1 is a bug fix release only.

## HPS 2016

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2016
HOOPS Publish2016
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Enhancements

• The HOOPS Publish integration is now supported on Linux platforms.
• The HOOPS Publish integration has been enhanced to support exporting both Exchange models and Visualize scene graph data to a 3D PDF document.
• HPS::ComponentTree and HPS::SceneTree objects can now have more than one highlight options kit associated with them, so HPS::ComponentTree::SetHighlightOptions(HighlightOptionsKitArray const & in_options) function was added. You can also append a highlight options kit without having to show the current ones using the new function HPS::ComponentTree::AddHighlightOptions. New functions have also been added to facilitate enabling and disabling of multiple highlight styles. These widgets are tightly integrated with MFC and WPF and are only supported on Windows platforms.
• New Exchange interface functions HPS::Exchange::File::GetInformation and HPS::Exchange::File::GetThumbnailImage wrap the native Exchange functions A3DGetFileInformation and A3DExtractFileThumbnail.
• The amount of system memory allocated and utilized after an HSF file import has been significantly reduced. This can enable applications to successfully load and interact with larger HSF files, particularly on mobile devices where system memory is fairly limited.
• The HPS::Exchange::MeasurementOperator is now available for use on an Exchange model with B-rep. This operator measures edges, face distances, face angles, and point-to-point.
• The HPS::MarkupOperator is now available, which enables the user to insert markup into a scene. Types include text, circles, rectangles, and freehand markup.
• Calculation of the camera near and far planes is now possible using HPS::WindowKey::ConvertCoordinates.
• Support has been added for setting the hard edge angle.
• Performance of cutting sections has been improved in certain cases. Specifically, Visualize will cull away segments whose bounding volume falls completely on the 'cut' side of any active cutting planes, instead of sending the segments to the graphics hardware for further processing. This can result performance gains in situations where the model contains numerous segments, or if HPS::StaticModel::AttributeSpatialStaticModel is enabled.
• The HPS::CameraChangedEvent has been added. It is injected by our operators which modify the camera positions. Users can subscribe its handler to get notified whenever one of the operators changes the camera settings.
• A new importer, HPS::ExchangeParasolid, enables you to import a non-Parasolid model into a Parasolid session while preserving the model's PMI and capture information.
•   HOOPS Exchange models can now be exported with B-rep information and Visualize data to the PRC format

#### Functional Changes

• HPS::ComponentTree::GetHighlightOptions() now returns a HPS::HighlightOptionsKitArray (it used to return a HPS::HighlightOptionsKit).

•   HOOPS Publish changes to support export of both Exchange B-rep and Visualize data

#### Significant API changes

In the name of standardization, we have made some necessary API changes that break compatibility with older code. Below is a list of those changes. To facilitate updating to the new libraries, we've included a Python script located in the /tools directory that can be used to automatically update an entire code base to the new API. The exception to this is the change to conditions, parts of which could not be discerned by regular expressions. The full details of these changes follow.

•   Various enumeration values have been renamed in order to standardize similar values and remove redundancy wherever possible.
•   Functions that accept a kit have been renamed so they match the name of that type of kit. The Sprocket-level update paradigm has been brought into line with the style of HPS core by introducing the option of returning an update notifier.
•   Some conditions had overloaded nomenclature that could be confusing. The new approach disambiguates conditional expressions from the conditions (strings) which can be used to satisfy them.

## HPS 2015 SP2 U2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 2
HOOPS Publish2015 Service Pack 2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

HOOPS Visualize 2015 Service Pack 2 Update 2 is a bug-fix release only.

## HPS 2015 SP2 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 2
HOOPS Publish2015 Service Pack 2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Enhancements

• Improved the performance and interactivity of highlighting and isolating geometry.
• Reduced flickering in fixed-framerate mode.
• Improved the performance of D3D image and offscreen rendering.

#### Functional Changes

• Support for user-defined shaders has been removed.

## HPS 2015 SP2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 2
HOOPS Publish2015 Service Pack 2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
RealDWG2016     Only supported with Visual Studio 2012
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Functional Changes

• The android_sandbox project, which was based on Eclipse, has been renamed to android_eclipse_sandbox. android_sandbox still exists, but it is now an Android Studio project.
• The HPS::TouchEvent::SetTouches method has been removed. Touches can now be set using the regular assignment operator.

## HPS 2015 SP1 U3

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 2
HOOPS Publish2015 Service Pack 2
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Functional Changes

• The Exchange interface has been updated to HOOPS Exchange SP2.
• The Translate functions in Exchange have changed. They now take a HPS::TranslationOptionsKit argument, which allows the user to specify additional translation options.

## HPS 2015 SP1 U2

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 1
HOOPS Publish2015 Service Pack 1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Improvements

• Improved the performance and interactivity of highlighting and isolating geometry.
• Reduced flickering in fixed-framerate mode.
• Improved the performance of D3D image and offscreen rendering.

## HPS 2015 SP1 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 1
HOOPS Publish2015 Service Pack 1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### Functional changes

• A bug has been fixed in our license validation

## HPS 2015 SP1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 1
HOOPS Publish2015 Service Pack 1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

#### New features and enhancements

• 64-bit iOS simulator libraries are now included.
• There is a new import function that can operate directly on an A3DAsmModelFile, and a new ExportPRC function which, given a HPS::SprocketPath, will construct PRC from the scene graph.
• The axis triad and the navigation cube may now be resized and arbitrarily positioned.
• Colored point clouds can now be exported to 3D PDFs.
• Multiple CAD models may now be imported into the same scene graph using the HOOPS Exchange integration.
• Exchange components can now be reloaded in order to maintain synchronicity between PRC data and the Visualize scene graph.
• Subtrees can now be exported to 3D PDF documents.
• Functions have been added to query arbitrary subsets of points to the following geometry types (kits and keys): shell, mesh, NURBS curve and surface, cylinder, line, and polygon. The points can be queried by list as well as by range.
• A new model comparison function, HPS::SubwindowKit::SetModelCompareMode is now available with allows you to compare two models and highlight any differences.

•   The functionality of the cutting section operator has been enhanced

#### Functional changes

• The HPS::Publish::AnnotationKit::ShowSource function has changed to accommodate exporting subtrees. It can now return either a SprocketPath or a KeyPathArray, together with an enum telling the user which of the two return values is valid. This breaks compatibility with previous versions of HPS, so if you were previously using the HPS::Publish::AnnotationKit::ShowSource function, you will need to change your code for it to work with this version of HOOPS Visualize.
• Exporting of HPS::Stream files now happens asynchronously. The export now works very much like the import functions, in that it returns a notifier which can be used to check the progress or cancel the export. If you require the old export behavior, you can use a HPS::Stream::ExportNotifier and call Wait(). See section "Exporting Files" in the Programming Guide.
• The "ImportTime" and "ParseTime" metadata that was present on the CADModel have been removed and replaced with GetImportTime and GetParseTime on the HPS::Exchange::ImportNotifier. This change was also made to Parasolid CAD models and HPS::Parasolid::ImportNotifier for consistency.
• The HPS::Exchange::TranslationNotifier::GetModelLoadTime function was renamed to GetImportTime, and additionally the (new) GetImportTime and (existing) GetTranslationTime functions on the TranslationNotifier have been changed to return time in milliseconds, not seconds.
• The behavior of HPS::Component::Delete has changed. Previously, calling HPS::Component::Delete would delete all the underlying subcomponents, even if they had multiple owners. Now, if HPS::Component::Delete is invoked on a component which has subcomponents with multiple owners, it will merely remove that single owner, leaving that multiply-owned subcomponent intact. However, if a subcomponent only has one owner it will be deleted if its owner is deleted.
• Object space selection methods on the Database are deprecated and will be removed in the next major release (Visualize 2016). Use the variants from the HPS::SelectionControl instead.

## HPS 2015 U1

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015 Service Pack 1
HOOPS Publish2015 Service Pack 1
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2015
wxWidgets3.0

## HPS 2015

#### Library compatibility information:

Library nameVersionWindowsLinuxOS XAndroidiOSNotes
HOOPS Exchange2015
HOOPS Publish2015
.NET Framework4.0     4.5 required when using D3D_IMAGE_CANVAS
Parasolid27
Qt5.3     Visual Studio 2012 uses Qt 5.1
SketchUp2014
wxWidgets3.0

#### New features and enhancements

• A reference component hierarchy browser is now included in the WPF and MFC sandboxes, and is provided in source code form. This allows developers to more easily add a custom model-browser to Visualize applications.
• The performance of patterned line and edge drawing in the DX11 and OpenGL2 drivers has been improved by up to 15x. The reference manual entry for HPS::LinePattern::Default lists further details.
• A new polygonal clip region interface is available, which enables the user to clip or mask geometry in a segment tree.
• A new event type has been added - HPS::UpdateCompletedEvent - which is triggered whenever a display update is completed.
• The HPS::CuttingSectionOperator is now available.
• The HPS::MouseWheelOperator zoom amount and modifier key can now be configured.
• New methods have been added to the HPS::SelectionResults class: Union, Intersect, Difference, and SymmetricDifference.
• Shell optimizations can now be specified in the STL importer using HPS::STL::ImportOptionsKit::SetOptimization
• Highlighting performance as well as rendering performance of highlighted scenes has been improved.
• Rendering performance when using static model has been improved for a wide variety of scene graph organizations.
• Performance of view-dependent vertex markers (splat-rendering using filled circles and filled squares) has been improved in the DirectX 11 driver. See section 2.1.5 of the Programming Guide for details about vertex markers.
• Attribute locks can now be set on cameras.
• Added capability to set a filter on an include key or a style key so that you can control what is included or styled.

•   HOOPS Publish new features
• Developers now have the ability to force the color of PMI to one selected by the user. This is done through HPS::Publish::ArtworkKit::SetPMIColor.
• Developers can specify how many views are scrolled when the "previoius" and "next" buttons are clicked in a view carousel. This is controlled through HPS::Publish::AnnotationKit::SetCarouselButtons.
• The following items can now be added to pages: check boxes, radio buttons, list boxes, drop down lists, and digital signature fields. Each one of these items has an associated kit, and they can be inserted through the HPS::Publish::PageKit and HPS::Publish::PageControl.

•   HOOPS Exchange new features
• Files supported by Exchange can be translated to Parasolid parts. This is done through the HPS::Exchange::File::Translate function (to translate a file which has not been loaded into HPS), the HPS::Exchange::CADModel::Translate function (to translate an existing CADModel) or the HPS::Exchange::Component::Translate function (to translate a single representation item component). All of these functions return a HPS::Exchange::TranslationNotifier, which is a variation on the HPS::IONotifier.
• Added options to specify the JT tessellation level on import
• Added options to only import global IDs as metadata for IFC files
• Added options not to import lines for IFC files
• Added options to optimize face import for IFC files
• CATIA V5 drawings are now supported