Skip to main content

A lightweight PCD file processing library

Project description

PCDKit

A lightweight and efficient Python library for working with PCD (Point Cloud Data) files.
Supports both in-memory and memory-mapped processing, and provides modular tools for I/O, transformation, merge and metadata management.

📦 Features

  • ✅ Read/write PCD files (ASCII, binary, and compressed)
  • ✅ Structured NumPy or memory-mapped point cloud representation
  • ✅ Add/drop/set custom fields
  • ✅ Apply geometric transformations (e.g., rotation, translation)
  • ✅ Metadata-aware, type-safe interface

🚀 Installation

pip install pcdkit

🧪 Usgae

from pathlib import Path

import numpy as np
from pcloud import PointCloud

# Create a structured NumPy array with 5 3D points
array = np.array([
    (1.0, 2.0, 3.0),
    (4.0, 5.0, 6.0),
    (7.0, 8.0, 9.0),
    (10.0, 11.0, 12.0),
    (13.0, 14.0, 15.0),
], dtype=[("x", "f4"), ("y", "f4"), ("z", "f4")])

# Temporary paths for saving memory-mapped file and PCD
memmap_path = Path("test.memmap")
pcd_path = Path("test.pcd")

# ----------------------------
# 1. Construct PointCloud from NumPy array
# ----------------------------
cloud = PointCloud.from_array(array, memmap_file_path=memmap_path)

# Add a new field called 'intensity' with default value 1.0
cloud.add_field("intensity", "f4", default=1.0)

# Set the intensity field to a constant value
cloud.set_field("intensity", 5.0)

# Overwrite the intensity field with a per-point array
cloud.set_field("intensity", np.array([10, 20, 30, 40, 50]))

# Apply an affine transformation (scale coordinates by 2)
transform = np.eye(4)
transform[:3, :3] *= 2
cloud.transform(transform)

# Drop the intensity field
cloud.drop_field("intensity")

# Save the point cloud to a binary PCD file
cloud.save(pcd_path, format="binary")
print(f"Saved PointCloud from array to: {pcd_path}")

# ----------------------------
# 2. Load the saved PCD back and verify structure
# ----------------------------
cloud_loaded = PointCloud.load_pcd_from_path(
    file_path=pcd_path,
    memmap_file_path=memmap_path.with_suffix(".reloaded.memmap"),
    replace_nan_with_zero=True,
)

print("Reloaded PointCloud:")
print(cloud_loaded)

# ----------------------------
# 3. Merge the original and reloaded clouds
# ----------------------------
merged_cloud = PointCloud.merge(
    [cloud, cloud_loaded],
    memmap_file_path=Path("merged.memmap")
)

print("Merged PointCloud:")
print(merged_cloud)
merged_cloud.save("merged.pcd", format="binary")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pcdkit-0.1.1.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pcdkit-0.1.1-py3-none-any.whl (3.1 kB view details)

Uploaded Python 3

File details

Details for the file pcdkit-0.1.1.tar.gz.

File metadata

  • Download URL: pcdkit-0.1.1.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pcdkit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 512b370a23648c7696f519606839fe58755ac3b67990b4691e7c6c66e8844d17
MD5 a75a6b91bfe5740f4a31e56df6440961
BLAKE2b-256 4fc48f35e0d47a61a845a90657af4dabc9503054ed5105f122103d2be7649116

See more details on using hashes here.

Provenance

The following attestation bundles were made for pcdkit-0.1.1.tar.gz:

Publisher: release.yml on FledgeXu/PCDKit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pcdkit-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pcdkit-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 3.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pcdkit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bbe2ec556b707326a6738a375c197d9f139e36b27cbeb9866d90f1aa023a26d8
MD5 e3110ef7358581df7fc250385c8d4dc6
BLAKE2b-256 01a6bf43ceaf672f68321ec965b122c5d3854e9ff5c1091a2147d31594f0dd7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pcdkit-0.1.1-py3-none-any.whl:

Publisher: release.yml on FledgeXu/PCDKit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page