2d and 3d polylines for cgmath
This crate contains data structures and methods that deals with lines in 2D and 3D space.
There are 3D and 2D implementations of:
- LineString, a sequence of points, aka Polyline.
- Line, a finite two-point struct (no rays).
- Ramer–Douglas-Peucker and
- Visvalingam-Whyatt line simplification algorithms.
- Sampling of boostvoronoi parabolic arc curves.
- Rudimentary functionality to save to .obj file
There are 2D implementations of:
- LineString2 convex hull calculation (gift wrapping & Graham scan)
- Aabb axis aligned bounding box.
- Self intersection tests for line strings, or groups of lines O( n log n + i log n).
- Convex hull containment test (single threaded or multi-threaded with ryon)
- Simple affine transformation (pan, zoom)
If you want to use this library in your cgmath project you add this to your Cargo.toml:
linestring = {version="0.7"}
Rust toolchains
This crate uses #![feature(map_first_last)]
if compiled by +nightly. This is functionality is only emulated when run on +stable.
Demo GUI
Run the line simplification example with :
cargo run --example fltk_gui
Todo
- Improve on error handling
- Benchmark and optimize (add smallvec to simplify rdp?)
- optimize Ramer–Douglas-Peucker
- optimize Visvalingam-Whyatt
- Stable overlapping co-linear line detection
- Add subdivide