Crate colain

Crate colain 

Source
Expand description

Parser for the Common Layer Interface (.cli) file format

The parser is written according to the spec provided here.

This library works by examining the data in place and collecting pointers to the geometry sections. The CLI object consists of a Vec of layers. Each layer in turn contains a Vec of loops and hatches respectively.

Note: In keeping with the performance oriented nature of the library, conversions to real units using the UNITS portion of the header file is not done automatically. Remember to perform the conversion if necessary.

Note: This library does not yet support parsing of ASCII formated files. Nor has it been tested extensively since .cli files are hard to come by. Please feel free to submit bug reports or .cli files for testing.

§Examples

§Loading and parsing a file

use std::fs::File;
use std::io::prelude::*;
use colain::{
   	CLI,
   	clitype::{LongCLI, ShortCLI}
   };

let mut buf: Vec<u8> = Vec::new();
File::open("example.cli").unwrap().read_to_end(&mut buf).unwrap();

let model = CLI::<LongCLI>::new(&buf).unwrap();

println!("{:?}", model.header());

§Iterating on each point of each loop in each layer

See above for how to initialize model

 use colain::Point; // import the Point trait to provide access via .x() and .y()
 for layer in model.iter() {
     for a_loop in layer.iter_loops() {
         for point in a_loop.iter() {
             let x = point.x();
             let y = point.y();
         }
     }
 }

Re-exports§

pub use util::*;

Modules§

clitype
A CLIType must be specified when creating a CLI object.
util
Produces copies of N elements from the array Yields a ~10% performance bump over returning pointers

Structs§

CLI
Light abstraction over a CLI file
Hatches
Collection of hatches inside a Layer
Header
Contains all available CLI header information
Layer
Represents a layer of a 3D object
Loop
Object representing a loop inside of a Layer

Enums§

Error
Errors encountered when parsing a CLI file

Traits§

Point
Reinterpret [T; 2] as a point
Segment
Reinterpret [T; 4] as two points