8 releases

0.1.7 Jun 10, 2020
0.1.6 Jun 3, 2020
0.1.2 May 31, 2020

#1864 in Parser implementations

Apache-2.0/MIT

27KB
615 lines

Readme

This is a c3d file format parser/reader written in rust. C3d is a biomechanics data format wildly used in the field of motion cpature.

The parser is written with the guidance of the c3d.org specification and the python parser from py-c3d.

features

  1. Currently parsing only.
  2. After reading the header/parameter block, because the adapter implements the iterator trait, you can read the (frame_index, points_data, analog_data) without needing to copy all the data section upfront.
  3. Error estimation and camera observation information are correctly parsed according to the specification.
  4. When consuming the reader, the analog data will be offset and scaled individulally/globally if the corresponding parameter is set.

usage


use c3d_rs::C3dAdapter;

let mut file = File::open("somefile")?;

let mut buf: Vec<u8> = vec![];
file.read_to_end(&mut buf)?;

let mut cursor = Cursor::new(buf)

/// adapter accepts impl Read + Seek.
let adapter = C3dAdapter::new(&mut file)?.construct()?;
let adapter = C3dAdapter::new(&mut buf[..])?.construct()?;


/// read labels into Vec<String> with whitespace stripped.
let point_labels: Vec<String> = adapter.get_points_labels().unwrap();
let adapter_labels: Vec<String> = adapter.get_adapter_labels().unwrap();

/// reading (frame, ponts, analog) from iterator
for (frame_idx, points_data, optional_analog_data) in adapter.reader()?.into_iter() {

}

/// working with vendor specific parameter.
let param = adapter.parameter.unwrap().get("GROUP:PARAMETER").unwrap();


Dependencies

~0.4–1MB
~21K SLoC