6 releases (1 stable)

1.0.0 Jan 29, 2022
0.1.4 Jan 29, 2022

#1166 in Parser implementations

MIT/Apache

60KB
1.5K SLoC

off-rs - A simple .off file parser

Apache 2.0 License MIT License Issues Continuous integration docs.rs Crates.io

Parses .off (Object File Format) files. This implementation follows this spec from the Princeton Shape Benchmark.

Sample .off file:

# this file header has to be the first instruction
OFF
# cube.off
# A cube

# 8 vertices, 6 faces, 12 edges
8 6 12

# vetex coordinates: x, y, z
  1.632993   0.000000   1.154701
  0.000000   1.632993   1.154701
 -1.632993   0.000000   1.154701
  0.000000  -1.632993   1.154701
  1.632993   0.000000  -1.154701
  0.000000   1.632993  -1.154701
 -1.632993   0.000000  -1.154701
  0.000000  -1.632993  -1.154701

# face indicies & RGBA color data: n, v1, v2, v3, v4, r, g, b, a
  4  0 1 2 3  1.000 0.000 0.000 0.75
  4  7 4 0 3  0.300 0.400 0.000 0.75
  4  4 5 1 0  0.200 0.500 0.100 0.75
  4  5 6 2 1  0.100 0.600 0.200 0.75
  4  3 2 6 7  0.000 0.700 0.300 0.75
  4  6 5 4 7  0.000 1.000 0.000 0.75

This cube.off file is parsed using off-rs in this example.

Usage

    let off_string = r#"
OFF
3 1
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
4  0 1 2 3  255 0 0 # red
"#;

let mesh = off_rs::parse(
    off_string,
    Default::default() // optional ParserOptions
);

println!("{:#?}", mesh);

Will return a structure like this:

Mesh {
    vertices: [
        Vertex {
            position: Position {
                x: 1.0,
                y: 0.0,
                z: 0.0,
            },
            color: None,
        },
        ...
    faces: [
        Face {
            vertices: [
                0,
                1,
                2,
                3,
            ],
            color: Some(
                Color {
                    red: 1.0,
                    green: 0.0,
                    blue: 0.0,
                    alpha: 1.0,
                },
            ),
        },
        ...

No runtime deps