v3.9.4 (Asher) - 02/01/2026
-
New features:
- Add code style check support
- Add vtk PBR rendering support for multiple texturing
- Add Texturing Atlas support for reconstruction module
- Add Excellent Texture mesh rendering support
- Add 2D Image Rendering support with transparency feature
- Add Qt6 compatible interface strategy support
- Add Cork plugin for linux and macos
- Add ruler widget based on vtk support for measurement tools
- Add protractor widget based on vtk support for measurement tools
- Add contour widget based on vtk support for measurement tools
- Add selection tools based on vtk
- Add memory monitoring module in the bottom-right corner of the application
- Real-time display of current memory usage and available memory
- Visual indicator for memory status with color-coded alerts
- Helps users monitor system resources during intensive operations
- New 'Display > Display settings' options:
- Restore default window geometry on startup
- option to control whether the default window geometry (size and position) should be restored or not
- Edit > Color > Gaussian filter
- Edit > Color > Bilateral filter
- Edit > Color > Median filter
- Edit > Color > Mean filter
- to improve coloring by applying a color filter
- New setting dialog to customize keyboard shortcuts for all actions
- DB tree: new context menu option 'Export images'
- to export as PNG files all images highlighted or children of highlighted entities (recursive)
- thanks to https://github.com/stolariks for the initial contribution
- New entity: Circle
- specific polyline that is currently the result of the 'Tools > Fit > Circle' method
- the user can control the radius and the display resolution
- New method: 'Edit > Circle > Promote to Cylinder'. can be used on a Circle entity to derive a cylinder from it (CC will simply ask for the cylinder height)
- New entity: Disc
- the user can control the radius and the display resolution
- distances between a point cloud and a disc can be computed with 'Tools > Distances > Cloud/primitive dist'
- Add View (Render view) property for ccObject
- Add Light specular intensity adjustment support
- Add AxesGrid support for ccObject
- Add documentation support
- New 'Display > Display settings' BoundingBox options:
- Show BoundingBox on selected (checkbox)
- BoundingBox opacity (0.0-1.0 slider)
- BoundingBox line width (spinbox)
- Automatically hide BoundingBox when Axes Grid is visible
- All settings are persistent across sessions
- Add multiple theme support with new themes:
- Catppuccin theme
- Dracula theme
- Fluent theme
- Gruvbox theme
- macOS theme
- Material Dark theme
- Material Light theme
- Nord theme
- OneDark theme
- Tokyo Night theme
-
Bug fixes:
- Fix code style
- Fix ubuntu wheel import warning
- Fix ubuntu wheel cuda testing
- Fix Illegal instruction issues with pcl and ACloudViewer with -march=native
- Remove cloudViewer::make_shared and EIGEN_MAKE_ALIGNED_OPERATOR_NEW as no need any more with C++17
- Replace EIGEN_STL_MAP with std::unordered_map for Reconstruction module
- Fix crash on ubuntu22.04 for reconstruction due to misalignment
- Fix python env package issues with pyenv manager
- Fix numpy version > 2.x issues and now support numpy > 2.x version
- Fix ReconstructionOptionsWidget crash issues due to no PBA_ENABLED compile_definitions for ACloudViewer
- Fix CHANGLOG.xxx format
- macOS x86_64 not longer supported, only macOS arm64 is supported.
- Fix log verbosity level handling to align with CloudCompare
- Fix CVLog::Print messages not printing when log level is "Standard"
- Fix all log messages appearing in red color
- Fix PrintDebug messages not appearing when verbosity level is "Verbose"
- Fix log filtering logic to match CloudCompare behavior
- Fix axes grid bounds not being set when selecting folders/parent nodes
- When selecting a folder or parent node, axes grid now correctly displays the overall bounding box of all contained objects
- Added recursive search in scene DB to find objects by viewID when not in source object map
- Uses getDisplayBB_recursive(false) to calculate aggregate bbox for all children
- Fix opacity property UI disappearing when selecting folders
- Opacity control now appears for folders in addition to renderable objects
- When adjusting opacity on a folder, all renderable children are recursively updated with the new opacity value
- Initial opacity value for folders is calculated as the average opacity of all renderable children
- Fix 2DLabel caption text font size issues on macOS
- Fix Find data UI issues
- Fix GitHub CI issues for macOS, Windows, and Ubuntu workflows
- Fix curl and MKL/TBB CMake configuration issues
- Fix PLY filter error handling and metadata preservation
- Fix ply.comments metadata not being preserved when saving PLY files
- Fix incorrect error code returned when PLY file opening fails
- Fix scalar field value saving to use getValue() instead of getGlobalShift() + getValue()
- Fix Qt platform plugin missing issue in Python wheel packages
- Fix CMake variable name mismatch (QT5_PLUGINS_PATH_LIST -> QT_PLUGINS_PATH_LIST) causing Qt plugins not being copied to wheel
- Fix Qt plugin path environment variable setup for Linux, macOS, and Windows platforms
- Ensure QT_QPA_PLATFORM_PLUGIN_PATH is correctly set to platforms subdirectory when available
- Fix Qt library version conflict issues on all platforms
- Add library path isolation to prevent mixing system Qt libraries with package Qt libraries
- Linux: Filter system Qt paths from LD_LIBRARY_PATH before loading any libraries
- macOS: Filter system Qt paths from DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH
- Windows: Filter system Qt paths from PATH environment variable
- Unified library path filtering logic across all platforms to prevent "Cannot mix incompatible Qt library" errors
-
Enhancements:
- Replace
#ifndefwith#pragma once - Use GLIBCXX_USE_CXX11_ABI=ON by default
- Remove
setuptoolsandwheelfrom requirements for end users - CUDA support 11.8 -> 12.6.3 Tensorflow 2.16.2 -> 2.19.0. PyTorch 2.2.2 -> 2.7.1
- Change python package file name from
cloudViewer*tocloudviewer*due to PEP 503 standard behavior - Opt win wheel testing with cuda and cpu
- Opt Cuda test wheel strategy on ubuntu
- Rename docker scripts
- Remove deprecated module: libs/PCLEngine/VtkWidgets
- Refactor module: libs/PCLEngine/Tools
- Fix performance for non-contiguous NumPy array conversion in pybind vector converters. This change removes restrictive
py::array::c_styleflags and adds a runtime contiguity check, improving Pandas-to-Open3D conversion speed by up to ~50× - Add VoxelGrid transform, rotate, translate and scale support
- Update DLPack to v1.2
- Align logging system with CloudCompare
- Reorder CVLog::MessageLevelFlags to match CloudCompare (LOG_VERBOSE=0, LOG_STANDARD=1, LOG_IMPORTANT=2, LOG_WARNING=3, LOG_ERROR=4)
- Centralize log filtering in CVLog::LogMessage() based on global verbosity level
- Update ecvOptions to use CVLog::MessageLevelFlags directly
- Print current log verbosity level during initialization
- Improve serialization interface
- Add verboseDescription parameter to GenericArrayFromFile and GenericArrayFromTypedFile interfaces
- Align with CloudCompare serialization implementation
- Update all serialization call sites to include descriptive verbose messages
- Improve draw method interface consistency
- Unified draw method interface for ccBBox and ecvOrientedBBox
- Both classes now support draw(context) with default color and draw(context, color) with custom color
- Simplified calling code by using context.bbDefaultCol instead of explicit color parameters
- Optimize theme system and add multiple popular themes
- Enhanced theme selection UI in Display settings
- Improved theme loading and application performance
- Updated compilation documentation with theme information
- Refactor project structure and module naming
- Rename main application folder from
eCVtoappfor better clarity and consistency - Rename library modules from
eCV_db/eCV_iotoCV_db/CV_ioto align with naming conventions (CVViewer, CVAppCommon, CVPluginAPI) - Update all CMakeLists.txt, build scripts, documentation, and UI resource paths to reflect new folder structure
- Maintain backward compatibility with CMake target names (CV_DB_LIB, CV_IO_LIB)
- Rename main application folder from
- Add CMake option for ScalarType precision
- Add CVCORELIB_SCALAR_DOUBLE option to define ScalarType as double (instead of float)
- Default value is ON (double precision)
- Allows users to choose between float and double precision for scalar computations
- Align PLY filter implementation with CloudCompare
- Remove tuComboBox and tvComboBox texture coordinate selection UI elements
- Remove special_texture logic and texCoords_cb2 function
- Fix scalar field saving logic to properly handle originalStdPropsNames and compute min/max values
- Fix texture saving to use mirrored().save() method
- Fix TextureFile comment handling to use "TextureFile" keyword
- Fix ply.comments metadata handling to preserve existing comments or add createdBy/createdDateTime
- Fix error code for ply_open failures (use CC_FERR_THIRD_PARTY_LIB_FAILURE instead of CC_FERR_READING)
- Update PLY open dialog UI to use QListWidget for scalar fields selection instead of fixed combo boxes
- Improve scalar field type selection based on value ranges (int8, uint8, int16, uint16, float32, float64)
- Refactor Python library path management for better maintainability
- Unified library path filtering and setup logic across Linux, macOS, and Windows platforms
- Extract common Qt path filtering into reusable functions (_filter_qt_paths, _setup_library_paths_early)
- Improve code organization and reduce duplication in platform-specific library loading
- Improve documentation deployment process
- Replace hardcoded version number in index.html with @Version@ placeholder
- Update make_docs.py to automatically replace version placeholder during deployment
- Main repository no longer needs manual version number updates in documentation files
- Replace
-
New plugins:
- G3 Point - Granulometry made simple in ACloudViewer
- github repository: https://github.com/p-leroy/qG3Point
- author page: https://lidar.univ-rennes.fr/en/g3point
- G3 Point - Granulometry made simple in ACloudViewer
Supported Platforms:
- Windows
x86/64 - Linux
x86/64 - MacOS
X64 && arm64 (M1-4)
What's Changed
- add code style support by @Asher-1 in #87
- fix import warnings and test wheel issues by @Asher-1 in #88
- fix code style by @Asher-1 in #89
- fix ubuntu wheel import warning and opt win wheel testing by @Asher-1 in #90
- opt cuda test wheel strategy by @Asher-1 in #91
- update update-release.yml with package number updated by @Asher-1 in #92
- Users/dahailu/v3.9.4 by @Asher-1 in #93
- Users/dahailu/v3.9.4 by @Asher-1 in #94
- Users/dahailu/v3.9.4 by @Asher-1 in #95
- Users/dahailu/v3.9.4 by @Asher-1 in #96
- fix ci issues with docs by @Asher-1 in #97
- fix docs issues by @Asher-1 in #98
- Users/dahailu/v3.9.4 by @Asher-1 in #99
- fix: remove duplicate Hashmap.cpp (case-insensitive filesystem issue) by @Asher-1 in #100
- Users/dahailu/v3.9.4 by @Asher-1 in #101
- add vocb tree files downloading support and fix windows ci by @Asher-1 in #102
- remove test_data and fix mainPages unvalid link issues by @Asher-1 in #103
- fix no space left on device by @Asher-1 in #104
- update docs by @Asher-1 in #105
- fix c++ api version by @Asher-1 in #106
- fix c++ mainpage missing issues by @Asher-1 in #107
- fix pull issues with gph-page issues and remove ubuntu18.04 support by @Asher-1 in #108
Full Changelog: v3.9.3...v3.9.4