Viewer 3.16.0 - Quince
The main focus of this release was the refactoring of the Gumball into a broader Transformation Tools package, which now also includes a new Rectangle Transform tool. Alongside this, significant improvements were made to the Drawing Tools, including the ability to run multiple instances simultaneously, a new pause/resume functionality, many new configuration options, and restriction visualization. A third major area of this release was rendering performance: the glTF loading pipeline, shader caching, scene tree management, and interaction effects were all overhauled to reduce CPU time, memory allocation, and main-thread blocking.
Transformation Tools
- The
@shapediver/viewer.features.gumballpackage has been replaced by@shapediver/viewer.features.transformation-tools. Please refer to the migration guide for details on the renamed exports. - Introduced the new RectangleTransform tool, which allows translating, rotating, and scaling objects in a 2D plane using a widely known handle. It is also available as an interaction parameter type (
rectangleTransform) to be used directly from Grasshopper. - Implemented restriction visualization for transformation tools restrictions.
- Various fixes for rotation issues and occlusion.
Drawing Tools
- Multiple instances of the Drawing Tools can now be active simultaneously. The previous restriction that only one instance could exist at a time has been removed.
- Implemented
pause()andcontinue()to suspend and resume all user interactions without closing the tool. - Added
movePoint()for programmatic movement of individual points. - Added
cancelDrag()andisInteractionActive()to query and cancel in-progress hover/drag interactions. - New
behaviorsettings block: enable/disable insertion, deletion, translation, and selection of points independently, as well as adisplayUnitoption for imperial and other unit formats. - New
visualizationsettings (previously nameddisplay): separate visualization settings for edge controls, pointer position label, and per-restriction wireframe display. - New
keyBindingssettings block: customize the keyboard shortcuts for all drawing tool actions (insert, delete, confirm, cancel, undo, redo). - New geometry options:
weightedAdjacencyfor propagating point movements to neighbors,disabledPointsto lock specific points in place, andconstraintsto restrict position and size along each axis. - New
controlsarray for attaching custom point controls (e.g. edge-aligned or plane-aligned movement). - Support for imperial display units (
"mile","feet","inches"). - Restriction visualization (wireframe outline) is now built in and can be configured per restriction via
wireframeandwireframeColorproperties on point, line, and geometry restrictions.
Camera
- New
initialAutoAdjustoption onICameraApiand inViewportCreationDefinitionto automatically fit the camera to the model the first time a scene is loaded. - Fixed issues with orthographic camera zooming into the model and near-plane clipping.
- Fixed plane restriction interactions with orthographic cameras.
Session Error Events
- Introduced the new
SESSION_ERRORevent (EVENTTYPE_SESSION.SESSION_ERROR), which carries anISessionErrorEventwith the originatingErrorobject. This makes it possible to react to session-level errors without wrappingcreateSession/customizecalls in try-catch. - Implemented texture fallback for failed texture downloads so that models are still displayed even if some textures cannot be loaded.
Performance
- Added
ViewportApi.updateGeometryData()for updating the material of a geometry on the GPU without triggering a full scene tree reconversion — ideal for hover/interaction effects. - Integrated
ImageBitmapfor faster texture decoding during glTF loading. - General glTF loading performance improvements and shader caching improvements.
- Attribute Visualization performance improvements.
Bugfixes
- Fixed scene extents computation for very small models (SS-9520).
- Fixed a race condition in parameter computation triggers (SS-9476).
- Fixed scene extents / camera adjust for models with instanced geometry.
- Fixed text label rendering issues.