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.2.tar.gz (11.6 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.2-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pcdkit-0.2.2.tar.gz
  • Upload date:
  • Size: 11.6 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.2.tar.gz
Algorithm Hash digest
SHA256 ce702f02e1b878c4ab6908b28ecb5e735460fc704334534d2e5c7246696dd123
MD5 7dfcaf613b83d05a21aa6dff0c3dcc85
BLAKE2b-256 516d8113cff8fad9961bcc7f49c286223e6a1ea3eb966e3ba38b30beb2c33fe9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: pcdkit-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 13.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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 28b1d797590a7d900068b5462b92d8d3f1139b2fbb8d90dcd687f15a51fbd425
MD5 a38c80115119bfd4cab16f9c330f2501
BLAKE2b-256 117068eb43858673be956bcc7f16a43fed8283a2437d5569b66b2b1e17754d90

See more details on using hashes here.

Provenance

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