iOverlay
The iOverlay is a fast poly-bool library supporting main operations like union, intersection, difference, and xor, governed by either the even-odd or non-zero rule. This algorithm is based on Vatti clipping ideas but is an original implementation.
Documentation
Try out iOverlay with an interactive demo:
Features
- Operations: union, intersection, difference, and exclusion.
- Polygons: with holes, self-intersections, and multiple paths.
- Simplification: removes degenerate vertices and merges collinear edges.
- Fill Rules: even-odd and non-zero.
Getting Started
Add the following to your Cargo.toml:
[dependencies]
i_overlay = "^1.4"
Hello world
Let's union two squares
let subj = ;
let clip = ;
let mut overlay = new;
overlay.add_path;
overlay.add_path;
let graph = overlay.into_graph;
let shapes = graph.extract_shapes;
println!;
if shapes.len > 0
Shapes result
The output of the extract_shapes function is a Vec<Vec<Vec<F64Point>>>, where:
- The outer
Vec<F64Shape>represents a set of shapes. - Each shape
Vec<F64Path>represents a collection of paths, where the first path is the outer boundary, and all subsequent paths are holes in this boundary. - Each path
Vec<F64Point>is a sequence of points, forming a closed path.
Note: Outer boundary paths have a clockwise order, and holes have a counterclockwise order.