HOOPS Visualize Release Notes
NOTE: The release notes do not include bug fixes. For a list of bug fixes, see this page.
Service Pack 19.35
Functional changes
- 3DS Max and Microstation plugins have been removed from the package and are now accessed through the Visualize downloads page on the Tech Soft Developer Zone.
- 3DGS - 'opengl' image drivers no longer work with hardware simple shadows on OS X because Apple's pixel buffer implementation NSOpenGLPixelBuffer has been deprecated as of OS X 10.7. Consider using 'opengl2' shadows instead.
- 3DGS - A new rendering option "randomize vertices" is available. When "randomize vertices" is enabled, vertices that are compiled into display lists will be inserted in random order. This option is intended for a more uniform point distribution when applying vertex decimation to non-randomized data.
- ACIS Part Viewer has been removed.
Service Pack 19.34
Functional changes
- MVO - HOpObjectClash function is now virtual so it can be an override function when using C#
- MVO - The option m_bAVIShowCompressionDialog has been added to HOutputHandlerOptions. When set to false, the option disables the compression setting dialog when exporting an AVI file. Dialog appears if the option is set to true - this is the default behavior.
- HIO - HOOPS Visualize now uses HOOPS Exchange and HOOPS Publish version 6.0.
Service Pack 19.32
New features and enhancements
- 3DGS - New rendering option for simple shadow "fast bounding". If set, this will use an available segment bounding rather than calculating a more accurate but time-consuming bounding.
Service Pack 19.30
New features and enhancements
Deprecations
- MVO - VRML import support has been deprecated. The functionality is now provided as-is.
Service Pack 19.28
Functional changes
HIO - Visualize v19.28 requires the HOOPS Publish v5.30 libraries for export via Publish.
Service Pack 19.26
Functional changes
3DGS - iOS now supports hardware-accelerated simple shadows.
Service Pack 19.25
New features
- HIO - The HIO_DWG integration now includes an overhauled 'HIO_DWG2' implementation. Developers who are relying on the curent HIO_DWG should consider the HIO_DWG2 module as a BETA. (The goal is to finalize it in v20.) The new module is located in /dev_tools/hoops_hio/hio_dwg2. If you are interested in testing/using the module, you must manually rebuild it using the provided project files.
Functional changes
- For users of Visual Studio, Visualize now requires VS2008 SP1 or VS2010 SP1
- The previous iOS HOOPS viewer has been replaced by ios_simple
- 3DGS - The iOS libraries now support iOS v5.X+
- 3DGS - Set_Polygonal_Clip_Region now supports concave regions.
- MVO - Printing-to-scale is now supported. This is activated by setting a 'scaling factor' for the model. Using the scaling factor, HOOPS can determine that '1 unit in world space equals 1 cm', and the hardcopy result will physically match the specified scale. Refer to Section 4.3.2 of the HOOPS/MVO Programming Guide for more information.
- MVO - The HOutputHandlerOptions::m_bPrcCompressTessellation option has been added, which sets whether to compress tessellation data when exporting to PRC format. See the HIO_Publish programming guide for more info.
- MVO - The HOutputHandlerOptions::m_ePrcBrepCompression option has been added, which sets the compression level for any BRep data when exporting to the PRC format. See the HIO_Publish programming guide for more info.
Service Pack 19.23
Functional changes
3DGS - ORU and WSU Behavior - Before version 19.23, there was a bug which caused any attributes that handle 'size-units' to behave incorrectly. Specficialy, ORU units were behaving as WSU units, and vice versa. This bug was corrected in 19.23, and therefore developers who were working around it need to remove their workaround by reversing their usage of ORU and WSU wherever they are used.
Maintenance Release 19.17
Enhancements
- HIO - The HIO_Exchange module now imports non-PMI 2D text, and maps it to HOOPS/3DGS scene-graph 'text' primitives.
Language-specific changes
- For C# and Java, the HOOPS/MVO enums HFileInputResult and HFileOutputResult have both been changed to HFileIOResult. This enum is returned by methods such as HBaseModel::Read and HOutputHandler::FileOutputByKey.
Maintenance Release 19.16
New features and enhancements
- HIO - The HIO_Exchange module now imports CAD 'views' information from the original CAD file, and maps it to HOOPS/MVO MarkupManager information. HIOConnector support has also been added to provide a mapping between HOOPS/3DGS and PRC entitites. Refer to the HIO_Exchange documentation for more information.
Functional changes
- HIO - HIO_Exchange and HIO_Publish integration now supports HOOPS Exchange v5.0, and HOOPS Publish v5.0.
- HIO - HIO_DWF supports DWF Toolkit v7.7.
Maintenance Release 19.14
New features and enhancements
- HIO - We've introduced support for integration with HOOPS Publish via the HIO_Publish module. This integration with our sister product allows you to easily export your HOOPS/3DGS scene-graph information, a subset of MVO animation info, and MVO PMI info to 3D-PDF files. Please see the HIO_Publish documentation for more information.
Functional changes
Deprecations
- HIO - The HPDFOptions class has been removed since it longer applies when exporting a PDF. The only extra attributes it provided were related to exporting a 3D-PDF, and such functionality is now handled via the HIO_Publish integration.
Minor Release 19.10
New features and enhancements
MVO - The Material Library offers a way to import, maintain and manipulate our new collection of sophisticated materials via the HMaterialLibrary class.
MVO - There are new classes that help facilitate the insert of PMI information into the HOOPS 3DF database. Learn more about this feature in the programming guide discussion on PMI Classes.
MVO - HBaseOperator and HEventInfo now support multi-touch events. Refer to Section 12.7 of the HOOPS/MVO Programming Guide for more information.
HIO - Support for 64-bit HIO_DWF and HIO_DGN was added.
HIO - HIO_DWG and HIO_DGN modules produce more optimized HOOPS scene-graphs.
When DWG/DGN files are being loaded by the HIO modules, an 'optimize' step has always been performed in order to produce a more efficient scene graph. Despite the optimize step, DWG/DGN files could still end up with 1 segment per DWG/DGN 'entity' (i.e. 1 polyline per segment), which in turn could translate to an extremely large amount of HOOPS segments, thus requiring excessive memory and preventing reasonable rendering performance. We have enhanced the default HIO_DWG and HIO_DGN import behavior to now store user-data on a per-geometry basis rather than in segments. This allows the optimize setep to produce much more optimal HOOPS scene graphs, depending on the contents of the DWG/DGN file.
It is important to note that any application code which was relying on a '1 segment per entity' scene-graph (i.e. query/selection/highlighting code), that code may need to be restructured to work with the default HIO_DWG/HIO_DGN scene-graphs, as a result of there being many entities per segment.
While we strongly encourage you to rely on the new default scene-graph and make any necessary code changes, in the interests of backward compatibility the following option has been added to HInputHandler Options, to allow you to revert to the previous, suboptimal scene-graph creation logic for m_bLegacyOptimize:
- false (the new default behavior), then we perform an Optimize_Segment_Tree with the new options to localize/push user options onto each piece of geometry in a segment (Open_Geometry, Set_User_Options, Close_Geometry), thereby allowing for a more optimal scene graph.
- true (the legacy behavior), then we perform the existing Optimize_Segment_Tree which will leave user options in the segments representing DWG and DGN entities. This can result in extremely segment-heavy (suboptimal) scene-graphs.
3DGS - Support has been added for the iOS platform.
Support has been added for the iOS platform. All of the HOOPS/3DGS, HOOPS/MVO, and HOOPS/Stream APIs are available and behave in a platform-independent fashion, consistent with HOOPS' design as a platform-independent API. (A few rendering caveats related to the Beta status are covered in the OpenGL2 section of the Device Guide). Important HOOPS/3DGS-specific notes:
- iOS 4.X is supported on iPad, iPad2, and iPhone4 hardware, using the Xcode 4.0+ toolset from Apple.
- The 3DF libraries are provided via a single static library which contains HOOPS/3DGS, HOOPS/MVO and HOOPS/Stream, and located at [hoops]\dev_tools\hoops_ios\lib (both the native ARM library for the actual devices, as well as the x86 emulator library are provided)
- A sample HOOPS-based iOS application has been provided, and its source/project is located in [hoops]\demo\ios\IOSHoopsViewer. Please review the readme.txt file before creating your own HOOPS-based iOS prototype, or customizing the existing demo.
- OpenGL2 is the only supported driver for the iOS platform
Developers wishing to prototype HOOPS-based iOS applications should first become familiar with iOS development and the numerous platforms constraints, such as limited screen real estate, reduced CPU/GPU power compared to desktops/laptops, limited amount of flash-memory, lack of a harddrive, absense of a conventional file system, side-loading of files, GUI application development, and so on. Key points to consider when developing HOOPS-based applications for iOS (or any platform for that matter) include:
- Scene-graph organization: Ensuring that you have a well organized (optimized) scene graph will reduce memory usage, thereby allowing you to load larger models as well as boost performance. See Segment Organization for further details.
- Rendering settings: Using the appropriate rendering settings for items such as 'display lists', 'polygon handedness' and 'backplane culling' will help ensure maximum performance. See Rendering Performance for further details.
- Fixed framerate: We have been encouraging developers to prototype and incorporate this technique for a few releases now, and it will probably be particularly important to leverage under iOS. This technique allows you to set a specific framerate (along with very useful extent-culling), thereby ensuring a specific framerate independent of the model complexity. HOOPS/MVO provides high level support for fixed-framerate, while the underlying HOOPS/3DGS capability of time-bounded updates provides core support.
- Memory usage: Your application logic needs to manage/track its memory allocation/usage (it's not done automatically by the Operating System), and your application's usage of any sub-components such as HOOPS has the same needs. For example, if you load 'too large' a model(s) into HOOPS, relative to the available system memory, HOOPS will simply continue to populate its scene graph and the required memory allocations will eventually fail, resulting in an ungraceful exit/crash. While this is the situation on any Operating System with finite memory, the 'memory wall' on iOS devices is much closer than on, say, a 64-bit OS with 4GB of memory. Please refer to the Programming Guide entry on memory for some guidelines on memory-usage tracking and memory conservation.
All HOOPS/3DF .dll files are digitally signed using the certificate authority VeriSign. Signing these files with a key from VeriSign allows them to be fully identified as Tech Soft 3D DLLs.
Functional changes
3DGS - 13121 - New 'clearance' option for ::Compute_Selection_By_Shell_With_Options
::Compute_Selection_By_Shell_With_Options previously only supported a "tolerance" value, which determines how far two shells can be penetrating before they are considered clashing. An additional "clearance" option is now supported, which defines how far a shell can be away from the input shell and still be regarded as clashing. Refer to the
Programming Guide entry for more information.
3DGS - 15178 - Method to query hardware for support of multiple depth peel layers.
::Optimize_Segment_Tree supports the following new options:
- process includes = [off|on] - When this is set includes will be followed and whatever other actions are specified will be applied to them. This does nothing if "expand includes" was also specified.
- localize matrices = [off|on] - Certain geometries can have a local matrix. When specified, matricies will be moved onto the geometry
when possible and if it appears heuristically desirable.
- New 'localize' suboption for 'preserve user options' [localize] - The "localize" option allows user options to be moved on to geometry this can be used with the "merge" option and can counter act some of the negative effects of this option.
- reorganize [= (option, option, ...)] - New options include:
- attributes [=on|off] - When enabled, optimize will reorganize based on attributes. This is almost always preferable to 'color' and is the recomended setting.
- segment names [=discard|record|sequence]
- The "discard" option will remove all segment names from the data.
- The "record" option will add a user option "ssn=<SEGMENT NAME>" to each segment. When used
with localized user data, this can reduce model complexity while preserving information encoded intothe segment names.
- The "sequence" option renames all segments with a sequential number. This can aid debugging or remove model context that is undesirable to expose.
HIO - Change to handling of DWG drawing order information.
The DWG import logic has also been enhanced to map any drawing order information over to z-values. This further enables the 'optimize' step to produce a more efficient scene graph, resulting in more entities per HOOPS segment (as opposed to the extremely suboptimal 1 entity per segment) The following option has been added to HInputHandler Options to allow you to revert to the previous logic for m_bDwgDepthRangeDrawOrder:
- false (the new default behavior), then we offset (2D) geometry which requires a draw order along the z-axis appropriately to achieve the same effect, thereby allowing for a more optimal scene graph.
- true (the legacy behavior), then we use depth range at the segment-level, to preserve the draw order for those 2D entities which require it. This prevents segments from being merged during the optimize process.
HIO - DWF Optimizations and changes to the default scene-graph
The HIO_DWF module handles loading DWF files which can contain both 2D and 3D subfiles. We have rewritten the 2D-DWF import logic so that it produces a much more optimized and logical scene graph.
- All layer segments live under the segment "layers" (there is a non-layer segment for geometry that does not reside in a layer)
- Layer segments have a URI encoded name which is set to the name of the layer (if available). If a layer name is not available, it is named with H_FORMAT_TEXT("layer #06d", number);.
- The segments dwf_information/layer_info and dwf_information/layer_info_deprecated are obsolete and will not be created. Use HC_QShow_Existence to determine if a layer exists. Use HC_Begin_Contents_Search in the "layers" segment to list the layers.
- Each layer has a user options attribute with the name such as layer name = `uri-encoded-layer-name`.
- The segment tree under each layer is sorted by attribute. A segment path, named by the attributes, defines the attribute state. For example, layer #000001/edge line weight 1.0 oru/color 1 0 0/etc....
- URLs and object IDs are now set directly on the geometry as user options. The URL user options have the format url = (uri-encoded-url1, uri-encoded-url2, ...).
- The link_info segment now has one segment per URL. Each of these segments contains geometry references to all geometries which belong to the URL. There are two User_Options set in each URL segment: min and max. Each are three int or float values representing the boundaries of the URL. For example, "min = (1, -2.5, 0), max = (5.5, 2.5, 0)".
- Depth range is no longer used to maintain draw order. The draw order now relies on z-values. As such, each layer has a translation matrix defining the draw order. Each layer has a priority set defining the draw order which would be honored by the "HSRA = priority" rendering option. The z-range is 1/3rd of the diagonal of the 2D drawing (not including the background and non-layer segments).
- For 2D drawings, all have background "paper" (you can disable the background paper by deleting or hiding the "background" segment). The camera is set to orthographic and looks down the -z axis with the +y axis being 'up'. Additionally, the pan operator is set.
HIO - The HIO modules that require HOOPS 3DX are now dependent on 3DX v4.1 See our supported file formats for more details.
HIO - The HIO_DGN module has been updated to support a newer version of the DGNDirect 3rd Party Toolkit: Teigha 3.04.01
Deprecations
- Support for importing the .iv file format has been dropped. Import logic was initially provided as a proof-of-concept to assist developers evaluating HOOPS, and only imported a limited set of .iv files. Developers who wish to import the .iv format should review the scene-graph creation guidelines to build their own import logic, and can contact Develper Support with any questions.
Major Release 19.0
New features and enhancements
MVO - HUtility::TwoPassPrint can handle printing arbitrarily large documents and adds margin support.
Stream - A new opcode, TKE_Conditional_Action, was added to support the new Conditional Actions feature. You can set a conditional action on a segment via Set_Conditional_Action.
Stream - Two new opcodes, TKE_Named_Style, and TKE_Named_Style_Def, were added to support the named styles features. Key HOOPS/3dGS functions associated with this feature include: Define_Named_Style and Named_Style_Segment.
Stream - The TKE_Image opcode has been modified to support the insertion
of compressed image formats such as JPEG, TARGA and DXT.
Stream - The TKE_Rendering_Options opcode has been modified to support the new rendering option for join
cutoff angle for lines and edges.
Stream - The TKE_Text opcode has been modified to support a new
text region option called fitting.
Stream - The TKE_Texture opcode has been modified to support several
new features including a camera
option for skyboxes.
HIO - We've introduced support for integration with HOOPS Exchange. This integration with our sister product will give you access to the powerful data translation capabilities that can import 15 MCAD formats and export to 3D PDF.
HIO - During the DGN import process, if you want to import not just the current model but all models, then you can enable the new HInputHandlerOptions::m_bDGNImportAllModels flag.
HIO - We now support SketchUp 8.
Platforms added
Functional changes
3DGS - 5287 - Separate elements of a texture definition can now have different parameterization sources. For example, when you apply a base texture and decal texture to a surface, the decal texture can have a different parameterization source than the base texture.
3DGS - 8577 - In ::Show_Device_Info, you can now query the hardware for support of depth peel layers by passing the option "depth peeling layers".
3DGS - 10548 - In ::Define_Texture, you can use the new option "transform override" to apply only transforms specified explicitly in the texture definition. Transforms defined via ::Rotate_Texture() or ::Translate_Texture() will ignored.
3DGS - 10736 - In ::Set_Driver_Options, there is a new option for DX9 and OpenGL2 drivers called "gpu resident". When this option is enabled, all image data will be cached on the hardware when possible.
3DGS - 11647 - For the functions ::Filter_Circumcuboid and ::Filter_Circumsphere, you can now pass in additional parameters which affect the calculation of the bounding volume.
3DGS - 11699 - In ::Show_Device_Info, you can now query the hardware to determine the maximum texture size by passing "max texture size".
3DGS - 11716 - For skyboxes, there is a new option in ::Define_Texture called "camera" that lets you specify which segment's camera should be used for rendering a skybox. To learn more about skyboxes, please read the HOOPS/3dGS Programming Guide section on Skyboxes and Cube Maps.
3DGS - 11760 - In ::Set_Driver_Options, you can now pass an image key to the "use window id" option.
3DGS - 11812 - HOOPS 3DF now supports the insertion of compressed images via the ::Insert_Compressed_Image function. Supported formats include JPEG, TARGA, DXT1, DXT3 and DXT5.
3DGS - 11828 - In ::Insert_Image, if you enable the "discard" option, HOOPS will discard image data after it has been loaded into video memory.
3DGS - 11831 - When tiling images, you can ask HOOPS to treat the pixels around the border of a texture as if they were completely transparent. This will allow clamped textures to not affect areas of geometry beyond their domain of definition. This feature can be enabled by setting the "drop" suboption for "tiling" in ::Define_Texture.
3DGS - 11832 - You can now insert grayscale images via ::Insert_Image by enabling the "grayscale" option.
3DGS - 12109 - For the DX9 and OpenGL2 drivers, you now have the ability to enhance the rendering pipeline by allowing developers to inject custom code into the pixel shader. Developers can define a custom shader using the ::Define_Shader function. Learn more about this feature by reading the HOOPS/3dGS Programming Guide section on Custom Material Shaders.
3DGS - 12111 - HOOPS has now added the ability to associate a name with a style via the ::Define_Named_Styles function. Once you have defined a named style, you can then apply styles to segment via the name using the ::Named_Style_Segment function.
3DGS - 12163 - You can now set default line styles and glyph definitions via the ::Set_Default_Line_Styles and ::Set_Default_Glyphs functions, respectively.
3DGS - 12211 - ::Optimize_Segment_Tree now merges shells that have vertex level attributes such as those set via ::MSet_Vertex_Parameters.
3DGS - 12283 - A variety of legacy function have been deprecated and moved to a separated header. Please see the Routines Deprecated section for more information.
3DGS - 12355 - The following PShow functions have been added for textures, glyphs and patterns: ::PShow_Net_Texture, ::PShow_Net_Glyph and ::PShow_Net_Line_Style.
3DGS - 12594 - In ::Optimize_Segment_Tree, a new option "presever user options" has been added. When this setting is enabled, segments with user options are set remain as segments, and will not be collapsed in any way.
3DGS - 12761 - In ::Set_Rendering_Options, you can determine the maximum angle between two segments in a line or edge for which a mitered join will be drawn by setting the new "joint cutoff angle" option.
3DGS - 12790 - There is a new system option "dpi scale factor" that allows you to control the dots per inch when a HOOPS scene is rendered.
3DGS - 12922 - In ::Define_System_Options, there is a new setting "automatic geometry boundings" that allows you to suppress bounding box generation during geometry insertion.
3DGS - 12947 - Conditional actions are a new feature that allows you to associate a specific condition with a specific action. Currently, this feature allows you to determine if segment should be culled. Use the ::Set_Conditional_Action to take advantage of this new capability.
3DGS - 13068 - The ::Compute_Subshell function can now take the key to a mesh as its source.
3DGS - 13494 - In ::Set_Text_Region, there is a new option "fitting" that lets HOOPS know how to horizontally space your text. If you have text that is not transformable, you may want to override the default behavior and set the fitting option to "off".
MVO - The location of the ATL cab file in HTML file output has moved to: developer.techsoft3d.com/downloads/HOOPSATL/hoopsatlcontrol.cab.
Deprecations
3DGS - DK, DQ and DQK variants have been removed and are no longer supported.
3DGS - The "purge memory" Heuristic option has been removed.
3DGS - The following functions have been removed and are no longer supported:
- PShow_Net_Driver
- Set_Driver
- Set_Metafile
- Set_Pixel_Array
- Show_Driver
- Show_Net_Driver
- UnSet_Driver
3DGS - Most of the K, Q and QK variants of the HOOPS/3dGS functions have deprecated. If you are using any of these
functions in your code, please check the full reference index to see
if they have been deprecated. If your code uses any of the deprecated functions, you can successfully compile
against the latest version of HOOPS by including the header hc_legacy.h in your files.
Note that we recommend that you review your code to determine if some minor changes can be made so that your
application uses the support non-variant version of the function. For example, the functions with K variants now return
an key.
3DGS - Most Show_Net and Show_One_Net functions have been deprecated (if your Show_Net function
cannot be found in the full reference index, it has been deprecated). If you
need to use these functions in your code, you can include the header hc_legacy.h
in your files to successfully compile your code with the latest version of HOOPS 3DF. However, we suggest
that you carefully review your code and use a PShow function.
HIO - The U3D file format is no longer supported. However, the U3D format is still supported via HIO 3DX. See our supported file formats for more details.
Platforms no longer supported
Build and linkage changes
3DGS - The standalone window events handling functions have been moved to a new header, hc_standalone.h. If you utilize these functions, please see the events reference index for more information on how to properly upgrade to HOOPS Visualize 19.00.
Interface changes
3DGS - Functions which had K variants now return a key.
Behavior changes
3DGS - When you use ::Define_Texture to create a new texture in HOOPS, the "down sampling" setting will default to "no".