Skip to content

ACloudViewer 3.9.4

Latest

Choose a tag to compare

@Asher-1 Asher-1 released this 30 Jan 19:01
5f3adc8

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 #ifndef with #pragma once
    • Use GLIBCXX_USE_CXX11_ABI=ON by default
    • Remove setuptools and wheel from 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* to cloudviewer* 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_style flags 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 eCV to app for better clarity and consistency
      • Rename library modules from eCV_db/eCV_io to CV_db/CV_io to 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)
    • 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
  • New plugins:

Supported Platforms:

  • Windows x86/64
  • Linux x86/64
  • MacOS X64 && arm64 (M1-4)

What's Changed

Full Changelog: v3.9.3...v3.9.4