earclip - v1.2.0
    Preparing search index...

    earclip - v1.2.0

    earclip

    GitHub Actions Workflow Status npm crate downloads bundle docs-ts docs-rust doc-coverage code-coverage Discord

    The fastest and smallest JavaScript polygon triangulation library with builtin tesselation. 3.18 kB minified and gzipped.

    # NPM
    npm install earclip
    # PNPM
    pnpm add earclip
    # Yarn
    yarn add earclip
    # Bun
    bun add earclip

    # Rust
    cargo add earclip

    The library implements a modified ear slicing algorithm, optimized by z-order curve hashing and extended to handle holes, twisted polygons, degeneracies and self-intersections in a way that doesn't guarantee correctness of triangulation, but attempts to always produce acceptable results for practical data.

    It's based on ideas from FIST: Fast Industrial-Strength Triangulation of Polygons by Martin Held and Triangulation by Ear Clipping by David Eberly.

    import { earclip } from 'earclip'

    const poly = [[[3506,-2048],[7464,402],[-2048,2685],[-2048,-2048],[3506,-2048]],[[-2048,-37],[1235,747],[338,-1464],[-116,-1188],[-2048,-381],[-2048,-37]],[[-1491,-1981],[-1300,-1800],[-1155,-1981],[-1491,-1981]]]
    const modulo = 8192 / 2

    const res = earclip(poly, modulo)
    console.log(res)

    const polyAsPoints = [
    [{ x: 3506, y: -2048 },{ x: 7464, y: 402 },{ x: -2048, y: 2685 },{ x: -2048, y: -2048 },{ 3506, y: -2048 }],
    [{ x: -2048, y: -37 },{ x: 1235, y: 747 },{ x: 338, y: -1464 },{ x: -116, y: -1188 },{ x: -2048, y: -381 },{ x: -2048, y: -37 }],
    [{ x: -1491, y: -1981 },{ x: -1300, y: -1800 },{ x: -1155, y: -1981 },{ x: -1491, y: -1981 }],
    ]
    const res2 = earclip(polyAsPoints, modulo)

    assert(res === res2)
    Note


    Safety Unsafe code is forbidden by a #![forbid(unsafe_code)] attribute in the root of the rust library.


    You need the tool tarpaulin to generate the coverage report. Install it using the following command:

    cargo install cargo-tarpaulin
    

    The bacon coverage tool is used to generate the coverage report. To utilize the pycobertura package for a prettier coverage report, install it using the following command:

    pip install pycobertura
    

    To run the tests, use the following command:

    # TYPESCRIPT
    ## basic test
    bun run test
    ## live testing
    bun run test:dev

    # RUST
    ## basic test
    cargo test
    # live testing
    bacon test

    To generate the coverage report, use the following command:

    cargo tarpaulin
    # faster
    cargo tarpaulin --color always --skip-clean
    # bacon
    bacon coverage # or type `l` inside the tool

    Run the Rust benchmarks using the following command:

    cargo +nightly bench