Crate survex_rs

source ·
Expand description

survex-rs

Rust bindings to the Survex img.c library which can be used via a safe API utilising SurveyData and Station structs, or directly via unsafe Rust.

Safe API

The safe API is able to read data from a Survex .3d file and store it in a SurveyData instance. SurveyData instances contain a vector of references to Station structs and a graph, built using petgraph, of connections between those stations.

A helper function, load_from_path, is provided to read a given Survex .3d file and return a SurveyData instance.

Unsafe API

If you wish to simply access the Survex img.c library directly using unsafe Rust, you can do so via the bindings in the survex module.

Examples

Safe API

use std::path::PathBuf;
use survex_rs::read::load_from_path;
use survex_rs::station::Point;

let path = PathBuf::from("tests/data/nottsii.3d");
let data = load_from_path(path).unwrap();

println!("Loaded {} stations", data.stations.len());
// Loaded 1904 stations

println!("Loaded {} survey legs", data.graph.edge_count());
// Loaded 1782 survey legs

let station = data.get_by_label("nottsii.entrance").unwrap();
let station = station.borrow();
println!("Station '{}' is at {}", station.label, station.coords);
// Station 'nottsii.entrance' is at 66668.00, 78303.00, 319.00

let coords = Point::new(66668.00, 78303.00, 319.00);
let station = data.get_by_coords(&coords).unwrap();
let station = station.borrow();
println!("{:#?}", station);
// Station {
//     label: "nottsii.entrance",
//     coords: Point {
//         x: 66668.0,
//         y: 78303.0,
//         z: 319.0,
//     },
//     index: NodeIndex(1901),
//     lrud: LRUD {
//         left: None,
//         right: None,
//         up: None,
//         down: None,
//     },
//     surface: false,
//     underground: false,
//     entrance: true,
//     exported: true,
//     fixed: true,
//     anonymous: false,
//     wall: false,
// }

Unsafe API

For an example of how to use the unsafe API, take a look at the source for load_from_path in src/read.rs.

You can also take a look at the functions in the survex module and reference them to the Survex img.c and img.h files found in the src/ directory of the Survex GitHub.

Modules

  • Data structures to represent processed Survex data
  • Helper functions for reading Survex files
  • Data structures to represent survey stations
  • Unsafe Rust bindings to the Survex img.c library