Graphite/libraries/bezier-rs
Nikita-str f25038067e
Path tool: sliding point insertion (#1581)
* #1578 sliding point works(1st approx)

TODO:
* don't move too close to the side points
* double click works incorrect?
* do we need to jump from segment to segment?

* #1578 disallow move slide point too close to side points

* fix double click + ctrl insertion

* #1578 select insertion point (except `ctrl` case)

* #1578 far depends on line width & more accurate seg finding

* #1578 insert point on most top suitable selected layer

* #1581 draw insertion point by overlay  + `Esc` abort

* #1581 sharp stay unchanged on double click

* #1581 fix incorrect handle of scaling

* #1581 `square` selection point & too close in px(instead of magic)

* #1581 bug fix: insertion point on unselection

* #1581 use `color: Option` instead of `SelectionType`

* Some code review, still need to review shape_editor.rs

* #1581 insert sharp point on a straight segment

Also correct insertion on quadratic segments

`ManipulatorGroup::have_handle` have such form because `handle = Some(self.anchor)` often used instead of `handle = None`

* Final code review pass

* Code review pass

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
2024-02-05 08:45:25 +00:00
..
src Path tool: sliding point insertion (#1581) 2024-02-05 08:45:25 +00:00
Cargo.toml Fix floating point error with Poisson-disk points being sampled outside shape (#1596) 2024-02-04 17:16:16 +00:00
LICENSE-APACHE Move bezier-rs into libraries folder and deploy its interactive docs 2022-08-14 16:17:27 -07:00
LICENSE-MIT Move bezier-rs into libraries folder and deploy its interactive docs 2022-08-14 16:17:27 -07:00
README.md Bezier-rs: Release version 0.2 2023-03-28 12:37:52 -07:00

README.md

crates.iodocs.rsrepo

Bezier-rs

Computational geometry algorithms for Bézier segments and shapes useful in the context of 2D graphics.

Play with the interactive documentation which visualizes each API function in a fun manner:

View the interactive API


Bezier-rs is built for the needs of Graphite, an open source 2D vector graphics editor. We hope it may be useful to others, but presently Graphite is its primary user. Pull requests are welcomed for new features, code cleanup, ergonomic enhancements, performance improvements, and documentation clarifications.

The library currently provides functions dealing with single Bézier curve segments and open-or-closed multi-segment paths (which we call subpaths).

In the future, the library will be expanded to include compound paths (multiple subpaths forming a single shape, where the winding order determines inside-or-outside-ness) and operations between paths (e.g. boolean operations, convex hull). Pull requests for these additional features would be highly desirable.

Bezier-rs is inspired by Bezier.js and A Primer on Bézier Curves by Pomax. Bezier-rs is not a port of Bezier.js so the API for single-segment Bézier curves has some differences, and the intention is to offer a broader scope that provides algorithms beyond single curve segments (as noted above) to eventually service full vector shapes.

Terminology

Graphite and Bezier-rs use the following terminology for vector data. These depictions are given for cubic Bézier curves.

Manipulators Curve/Bezier Segment Subpath/Path Open/Closed