use pcd_rs::{DataKind, DynReader};
use std::path::Path;
fn main() -> pcd_rs::Result<()> {
let path = Path::new("pcd-rs/test_files/test_compressed.pcd");
println!("Reading compressed PCD file: {:?}", path);
let reader = DynReader::open(path)?;
let meta = reader.meta();
println!("\nFile Metadata:");
println!(" Version: {}", meta.version);
println!(" Data format: {:?}", meta.data);
println!(" Dimensions: {} x {}", meta.width, meta.height);
println!(" Total points: {}", meta.num_points);
println!(
" Fields: {:?}",
meta.field_defs
.fields
.iter()
.map(|f| &f.name)
.collect::<Vec<_>>()
);
assert_eq!(
meta.data,
DataKind::BinaryCompressed,
"File should be binary_compressed"
);
println!("\nReading first 5 points...");
let mut count = 0;
for (i, point_result) in reader.enumerate() {
match point_result {
Ok(point) => {
if i < 5 {
println!("Point {}: {} fields", i, point.0.len());
for (j, field) in point.0.iter().take(3).enumerate() {
print!(" Field {}: ", j);
match field {
pcd_rs::Field::F32(vals) => println!("F32 = {:?}", vals),
pcd_rs::Field::F64(vals) => println!("F64 = {:?}", vals),
pcd_rs::Field::I8(vals) => println!("I8 = {:?}", vals),
pcd_rs::Field::I16(vals) => println!("I16 = {:?}", vals),
pcd_rs::Field::I32(vals) => println!("I32 = {:?}", vals),
pcd_rs::Field::U8(vals) => println!("U8 = {:?}", vals),
pcd_rs::Field::U16(vals) => println!("U16 = {:?}", vals),
pcd_rs::Field::U32(vals) => println!("U32 = {:?}", vals),
pcd_rs::Field::I64(vals) => println!("I64 = {:?}", vals),
pcd_rs::Field::U64(vals) => println!("U64 = {:?}", vals),
}
}
}
count += 1;
}
Err(e) => {
eprintln!("Error reading point {}: {}", i, e);
break;
}
}
if i >= 99 {
break;
}
}
println!("\nSuccessfully read {} points", count);
Ok(())
}