✨ Added
- Massive JPEG2000 DICOM decoding speedup (up to ×10) for encapsulated JPEG2000 data
- Optimized path bypassing GDCM decoding
- Especially effective for Enhanced US Volume
- Includes additional
io::bitmapperformance improvements and direct buffer access
- Modern switch button widget as an alternative to classic checkboxes in Qt settings (
widget="switch_button"). - Axis-aligned bounding box stored directly in
sight::data::mesh, lazily computed and reusable for intersection tests. - Non-linear activity sequencer mode
- Activities no longer forced into a linear workflow
go_toslot now accepts activity identifiers for programmatic navigation
- Point splatting support in visualization pipeline.
- Camera centering service for meshes (
sight::module::filter::mesh::center). - RGBA image support in negatoscopes.
- Mesh picking while dragging the mouse (continuous picking with pressed button).
- Optional display of shape fiducials on all slices.
- Doctest framework introduced for unit tests, with native VSCode integration.
- Application-level QSS override support, loading
.qssfiles directly from the application directory.
🛠 Changed
- VCPKG updated (build, dependencies, toolchain refresh).
- NSIS installer enhanced to support Windows long paths (>260 characters).
- CI improvements
- Controlled parallelism via variables
- Ubuntu image updated to clang 20
- Improved VSCode debugging for multi-project workspaces
- Dispatcher refactor: lambda + variadic arguments support to reduce boilerplate.
- Minizip updated with fast multithreaded compression.
- Transparency handling fixed and improved for Ogre ≥ 14
- Correct transparent queue assignment
- Floating-point depth for OIT to avoid artifacts
- Nearest-neighbor interpolation enforced for segmentation rendering.
- Lazy update behavior introduced for negato adaptors requiring masks.
🐛 Fixed
- Long-standing negato adaptor issues
- RGB handling with transforms
- Missing input validity checks
- Timer cumulative time computation (now properly accumulated across runs).
- Deferred services now correctly handle sub-objects accessed via dot operator.
- Config manager parsing errors for property sub-objects.
- Fullscreen and window recreation issues when no preferences are present.
- Button bar styling inconsistencies when joystick is not configured.
- Multiple ruler-related bugs
- Random disappearance
- Incorrect slice visibility
- Broken fiducial slice range selector
- Progress sound handling on Linux.
- Avoid crashes when negato images are not yet available.
♻️ Refactored
- New progress API (
sight::core::progress) replacing the old job system- Clear separation: progress reporting only, no task execution
- Automatic asynchronous execution via dedicated workers
- Simplified and renamed signals/slots
- All progress-reporting services migrated to the new API, including IO readers/writers.
- Legacy DICOM job-based code removed, modern DICOM paths used instead.
- Obsolete landmark data and related services removed.
- Progress bar code split into a dedicated library.
- CSpell dictionary moved into the repository for better IDE consistency.
🧪 Testing & Tooling
- Gradual migration from CppUnit to Doctest.
- Native test discovery in CTest and VSCode test panel.
- Improved debugging workflow without launcher scripts.
👉 Sight 25.2.0 focuses on performance, robustness, and architectural cleanup:
faster DICOM IO, clearer progress reporting, better visualization correctness, and a more modern UI layer. Less legacy, fewer footguns, more predictable behavior.