mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 08:52:32 +00:00
Add the linesweeper 0.5.0 package to vendor/ with no file changed, so that a fix to it can reach the Craft apps through this repository without waiting for a linesweeper release. The GitHub repository its manifest names is archived, and its README says development moved off GitHub. Leave out the test font (fonts live in craft-fonts), the logo artwork, the snapshot images and the package's repository tooling. SOURCE.json lists each with its hash. Add a workspace exclude, a [patch.crates-io] entry, SOURCE.json with the archive hash and per-file hashes, NOTICE and ATTRIBUTION.md rows, and the package's tests in the backend test script. craft-prepress's flatten feature now builds against the copy, so Cargo.lock drops the package's registry source and checksum.
31 lines
1.2 KiB
Markdown
31 lines
1.2 KiB
Markdown
# linesweeper: a robust sweep-line algorithm
|
|
|
|
[](https://crates.io/crates/linesweeper)
|
|
[](https://docs.rs/linesweeper)
|
|
|
|
This rust crate implements a "robust" version of the Bentley-Ottmann sweep-line
|
|
algorithm, and uses it to provide various two-dimensional geometric primitives
|
|
like boolean operations on sets bounded by Bézier paths.
|
|
It is currently in an early beta state.
|
|
|
|

|
|
|
|
## Basic usage
|
|
|
|
To compute binary operations between curves, use the `binary_op` function, which
|
|
takes in two paths and computes some binary operation on them:
|
|
|
|
```rust
|
|
use kurbo::Shape;
|
|
use linesweeper::{binary_op, FillRule, BinaryOp};
|
|
|
|
let square = kurbo::Rect::from_center_size((0.0, 0.0), (2.0, 2.0)).to_path(1e-6);
|
|
let circle = kurbo::Circle::new((0.0, 0.0), 1.2).to_path(1e-6);
|
|
binary_op(&square, &circle, FillRule::EvenOdd, BinaryOp::Intersection);
|
|
```
|
|
|
|
## Advanced usage
|
|
|
|
For more advanced usage (like custom n-ary operations) see `Topology`, or
|
|
the example in `examples/bus.rs`.
|