#algorithm #clipping #line #graphics

line-clipping

A simple crate implementing line clipping algorithms

10 releases

Uses new Rust 2024

0.3.5 Nov 29, 2025
0.3.4 Sep 28, 2025
0.3.3 May 19, 2025
0.2.2 May 11, 2025
0.1.0 Nov 18, 2024

#192 in Algorithms

Download history 5157/week @ 2025-10-17 4536/week @ 2025-10-24 6145/week @ 2025-10-31 10209/week @ 2025-11-07 11849/week @ 2025-11-14 13436/week @ 2025-11-21 14996/week @ 2025-11-28 8913/week @ 2025-12-05 10966/week @ 2025-12-12 9617/week @ 2025-12-19 28963/week @ 2025-12-26 37503/week @ 2026-01-02 49496/week @ 2026-01-09 70539/week @ 2026-01-16 95034/week @ 2026-01-23 133987/week @ 2026-01-30

358,437 downloads per month
Used in 484 crates (3 directly)

MIT/Apache

22KB
242 lines

Line clipping

crate-badge docs-badge license-badge
github-badge build-badge codecov-badge

A rust crate to implement several line clipping algorithms. See the documentation for more information. The choice of algorithms is based on the following article which contains a good summary of the options:

Matthes D, Drakopoulos V. Line Clipping in 2D: Overview, Techniques and Algorithms. J Imaging. 2022 Oct 17;8(10):286. doi: 10.3390/jimaging8100286. PMID: 36286380; PMCID: PMC9605407.

Supports:

TODO

  • Cyrus-Beck
  • Liang-Barsky
  • Nicholl-Lee-Nicholl
  • More comprehensive testing

Installation

cargo add line-clipping

Minimum supported Rust version

The crate is built with Rust 1.85 to match the 2024 edition. The MSRV may increase in a future minor release, but will be noted in the changelog.

Usage

use line_clipping::cohen_sutherland::clip_line;
use line_clipping::{LineSegment, Point, Window};

let line = LineSegment::new(Point::new(-10.0, -10.0), Point::new(20.0, 20.0));
let window = Window::new(0.0, 10.0, 0.0, 10.0);
let clipped_line = clip_line(line, window);

License

Copyright (c) Josh McKinney

This project is licensed under either of

at your option.

Contribution

Contributions are welcome! Please open an issue or submit a pull request.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~97KB