ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
A Modern Library for 3D Data Processing

Introduction

ACloudViewer is an open-source library that supports rapid development of software that deals with 3D data. The ACloudViewer frontend exposes a set of carefully selected data structures and algorithms in both C++ and Python. The backend is highly optimized and is set up for parallelization.

Core Features

ACloudViewer includes the following core features:

  • 3D data structures: Point clouds, meshes, octrees, and more
  • 3D data processing algorithms: Filtering, segmentation, registration, surface reconstruction
  • Scene reconstruction: Multi-view stereo, structure from motion
  • 3D visualization: Interactive 3D viewer with Qt-based GUI
  • Point cloud I/O: Support for PCD, PLY, LAS, E57, and many other formats
  • Mesh I/O: Support for OBJ, STL, OFF, and more
  • Plugin system: Extensible architecture for custom algorithms
  • Integration with PCL: Seamless interoperability with Point Cloud Library
  • Cross-platform: Available on Linux, macOS, and Windows
  • Available in C++ and Python: Full API for both languages

Architecture

ACloudViewer is organized into several key modules that work together to provide a complete 3D data processing pipeline:

ACloudViewer Architecture Layers

Figure 1: ACloudViewer architecture showing the different layers and how they fit together to enable full end-to-end pipelines.

πŸ’‘ Architecture Highlights:
β€’ Layered Design: Clear separation between application, plugins, core processing, and foundation layers
β€’ Extensibility: Plugin system allows adding new file formats and algorithms without modifying core
β€’ Integration: Seamless interoperability with PCL, VTK, Qt, and other industry-standard libraries
β€’ Dual API: Full functionality available in both C++ and Python

Detailed Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         ACloudViewer Application                       β”‚
β”‚                   (ACloudViewer, CloudViewer, Python Bindings)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
               β”‚                                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Plugin System    β”‚   β”‚    Visualization Layer  β”‚
β”‚   (IO + Standard Plugins)     β”‚   β”‚    (Vtk-based 3D Viewer)       β”‚
β”‚                               β”‚   β”‚                                β”‚
β”‚ β€’ qLASIO, qE57IO, qDracoIO    β”‚   β”‚ β€’ Interactive 3D rendering     β”‚
β”‚ β€’ qCSF, qM3C2, qPoissonRecon  β”‚   β”‚ β€’ Scene graph management       β”‚
β”‚ β€’ qPCL, qCanupo, qTreeIso     β”‚   β”‚ β€’ User interactions            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚                                     β”‚
               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Core Processing Layer                         β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚ cloudViewer  β”‚  β”‚   CV_db     β”‚  β”‚   CV_io     β”‚  β”‚  PCLEngine   β”‚     β”‚
β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚  β”‚              β”‚     β”‚
β”‚  β”‚ β€’ ccPoint    β”‚  β”‚ β€’ Database   β”‚  β”‚ β€’ File I/O   β”‚  β”‚ β€’ PCL        β”‚     β”‚
β”‚  β”‚   Cloud      β”‚  β”‚   Management β”‚  β”‚   (PCD,PLY,  β”‚  β”‚   Integrationβ”‚     β”‚
β”‚  β”‚ β€’ ccMesh     β”‚  β”‚ β€’ Entity     β”‚  β”‚    LAS,E57)  β”‚  β”‚ β€’ Filtering  β”‚     β”‚
β”‚  β”‚ β€’ ccHObject  β”‚  β”‚   Hierarchy  β”‚  β”‚ β€’ Format     β”‚  β”‚ β€’ Registr.   β”‚     β”‚
β”‚  β”‚ β€’ ccOctree   β”‚  β”‚ β€’ Scene Mgmt β”‚  β”‚   Converters β”‚  β”‚ β€’ Segment.   β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                      Reconstruction Module                      β”‚ β”‚
β”‚  β”‚   β€’ Surface Reconstruction  β€’ Mesh Generation  β€’ Poisson Recon         β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                          Foundation Layer                            β”‚
β”‚                                                                             β”‚
β”‚  β€’ Eigen (Linear Algebra)     β€’ Qt (GUI & Widgets)                          β”‚
β”‚  β€’ PCL (Point Cloud Library)  β€’ Boost (Utilities)                           β”‚
β”‚  β€’ VTK (Visualization)         β€’ OpenMP (Parallelization)                   β”‚
β”‚  β€’ CGAL (Geometric Algorithms)                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow:
  Input Files β†’ CV_io β†’ Core Structures β†’ Processing (Plugins/PCL) β†’ 
  Visualization/Output β†’ Export (CV_io)

Extension Points:
  β€’ Plugin System: Add custom I/O formats and processing algorithms
  β€’ Python API: Script automation and batch processing
  β€’ PCL Integration: Leverage PCL's extensive algorithm library

Here's a brief overview of the different components and how they fit together to enable full end-to-end pipelines:

Core Modules

  • cloudViewer: Core point cloud and mesh data structures
  • CV_db: Database and entity management for complex 3D scenes
  • CV_io: I/O operations for various file formats (PCD, PLY, LAS, E57, OBJ, STL, etc.)
  • PCLEngine: Integration with Point Cloud Library (PCL)
    • Filtering algorithms
    • Registration (ICP, NDT)
    • Segmentation
    • Surface reconstruction
  • Reconstruction: 3D reconstruction algorithms
    • Surface reconstruction
    • Mesh generation
    • Poisson reconstruction

Plugin System

Application Layer

  • CVViewer: Standalone 3D viewer application
  • ACloudViewer: Main ACloudViewer application with full GUI

C++ Quick Start

Basic Usage

#include <ccPointCloud.h>
#include <FileIOFilter.h>
int main() {
// Load a point cloud
"cloud.pcd",
CC_SHIFT_MODE::AUTO,
nullptr
);
if (cloud) {
std::cout << "Loaded " << cloud->size() << " points" << std::endl;
// Process the point cloud
// ... your code here ...
delete cloud;
}
return 0;
}
int main(int argc, char *argv[])
Definition: main.cpp:271
static ccHObject * LoadFromFile(const QString &filename, LoadParameters &parameters, Shared filter, CC_FILE_ERROR &result)
Loads one or more entities from a file with a known filter.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
unsigned size() const override
Definition: PointCloudTpl.h:38
QTextStream & endl(QTextStream &stream)
Definition: QtCompat.h:718

CMake Integration

cmake_minimum_required(VERSION 3.15)
project(MyCppApp)
find_package(ACloudViewer REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE
ACloudViewer::Core
ACloudViewer::IO
)

Python Quick Start

Pre-built pip packages support Ubuntu 20.04+, macOS 10.15+ and Windows 10+ (64-bit) with Python 3.8-3.11.

# Install
pip install cloudViewer
# Verify installation
python -c "import cloudViewer; print(cloudViewer.__version__)"
# Python API example
python -c "import cloudViewer as cv3d; \
cloud = cv3d.io.read_point_cloud('cloud.pcd'); \
print(f'Loaded {len(cloud.points)} points')"

Compiling from Source

To compile ACloudViewer from source, please refer to the compilation guide.

For detailed build instructions:

Visualization Examples

ACloudViewer provides powerful 3D visualization capabilities for interactive data exploration:

ACloudViewer Main Interface

Main Application Interface

Point Cloud Registration

ICP Registration Example

3D Reconstruction

3D Surface Reconstruction

Semantic Annotation

Semantic Annotation

Resources

Examples

API Documentation

  • C++ API: Browse the complete API reference using the navigation above
    • cloudViewer - Core Module
    • CV_db - Database Module
    • CV_io - I/O Module
    • Classes, Namespaces, Files tabs for detailed navigation
  • Python API: See the Python API documentation

Communication Channels

Citation

Please cite our work if you use ACloudViewer:

@software{acloudviewer2024,
title = {ACloudViewer: A Modern Library for 3D Data Processing},
author = {ACloudViewer Development Team},
year = {2024},
url = {https://github.com/Asher-1/ACloudViewer}
}

License

ACloudViewer is released under the MIT License. See LICENSE file for details.