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
import pcloud

# 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 = pcloud.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 = pcloud.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 = pcloud.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.2.11.tar.gz (12.5 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.2.11-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pcdkit-0.2.11.tar.gz
Algorithm Hash digest
SHA256 1a80028a5a4b017f3b4ceecdf386e6d1cc932ee7dc56713a28951d1d0d76dd93
MD5 ec6a839323eaf4b88e1e4bdb428c4927
BLAKE2b-256 53fb2f86009cb8d810bc9ae174f3ad451361e95592bc1cdc077593e9df5c57a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pcdkit-0.2.11.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.2.11-py3-none-any.whl.

File metadata

  • Download URL: pcdkit-0.2.11-py3-none-any.whl
  • Upload date:
  • Size: 14.3 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.2.11-py3-none-any.whl
Algorithm Hash digest
SHA256 8de2708e4b84cc3085c1060465200620234946af485e2cbf07dec6e14f872a2b
MD5 e21176200b6f970ce03cf66cf7b814f4
BLAKE2b-256 f36cca279ad3b77f60b890a10b9075391521f78df56546200c9949b97f5f0c33

See more details on using hashes here.

Provenance

The following attestation bundles were made for pcdkit-0.2.11-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