Add path-bool library (#1952)
* Add path-bool library * Cleanup code * Cargo format * Integrate boolean ops into graphite * Add test for editor crash * Fix edge sort floating point instability * Add unit test for red-dress failure * Backport tests and aux functions * Use curvature based sorting * Convert linear cubic splines to line segments * Deduplicate reversed path segments * Fix epsilon for empty segments * Remove parameter based intersection pruning * Add support for reversed paths * Add benchmark infrastructure * Add intersection benchmark * Add recursion bound * Implement support for overlapping path segments * Remove rouge prinln * Fix sorting for bezier segments with one control point at the start of the segment * Cleanup log statements * Directly translate graphite paths to Path segments * Round data before passing it to path_bool * Fix flag_faces traversal order * Add test for white dots in bottom right of painted dreams * Make rounding configurable * Update demo artwork to remove manual path modifications * Convert from path segments to manipulator groups directly * Remove dead code * Fix clippy lints * Replace functions in path segment with methods and add documentation * Add more documentation * Close subpaths * Reorganize files and add README.md * Add license information * Code review * Fix license info * Adopt new node macro and fix demo artwork * Close subpaths with Z --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 34.567256000000,24.000000000000 C 53.715002000000,0.442178810000 45.300906000000,-4.317487500000 24.000000000000,13.432744000000 C -0.827533230000,-4.565426100000 -3.667447600000,0.282647560000 13.432744000000,24.000000000000 C 7.253940300000,36.164106000000 -12.008885000000,59.286948000000 24.000000000000,34.567256000000 C 51.396769000000,54.792375000000 51.194312000000,47.292195000000 34.567256000000,24.000000000000 M 33.482395000000,35.465086000000 C 24.313014000000,27.199681000000 24.313014000000,27.240877000000 14.231274000000,34.296289000000 C 20.811334000000,24.000000000000 21.218447000000,24.000000000000 12.821577000000,12.534583000000 C 24.000000000000,21.897190000000 24.000000000000,22.032673000000 34.786675000000,13.635803000000 C 27.166446000000,22.791080000000 29.683555000000,25.141755000000 33.482395000000,35.465086000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 34.567256000000,24.000000000000 C 53.715002000000,0.442178810000 45.300906000000,-4.317487500000 24.000000000000,13.432744000000 C -0.827533230000,-4.565426100000 -3.667447600000,0.282647560000 13.432744000000,24.000000000000 C 7.253940300000,36.164106000000 -12.008885000000,59.286948000000 24.000000000000,34.567256000000 C 51.396769000000,54.792375000000 51.194312000000,47.292195000000 34.567256000000,24.000000000000 M 33.482395000000,35.465086000000 C 24.313014000000,27.199681000000 24.313014000000,27.240877000000 14.231274000000,34.296289000000 C 20.811334000000,24.000000000000 21.218447000000,24.000000000000 12.821577000000,12.534583000000 C 24.000000000000,21.897190000000 24.000000000000,22.032673000000 34.786675000000,13.635803000000 C 27.166446000000,22.791080000000 29.683555000000,25.141755000000 33.482395000000,35.465086000000"/><path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 33.482395000000,35.465086000000 C 29.683555000000,25.141755000000 27.166446000000,22.791080000000 34.786675000000,13.635803000000 C 24.000000000000,22.032673000000 24.000000000000,21.897190000000 12.821577000000,12.534583000000 C 21.218447000000,24.000000000000 20.811334000000,24.000000000000 14.231274000000,34.296289000000 C 24.313014000000,27.240877000000 24.313014000000,27.199681000000 33.482395000000,35.465086000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 34.567256000000,24.000000000000 C 53.715002000000,0.442178810000 45.300906000000,-4.317487500000 24.000000000000,13.432744000000 C -0.827533230000,-4.565426100000 -3.667447600000,0.282647560000 13.432744000000,24.000000000000 C 7.253940300000,36.164106000000 -12.008885000000,59.286948000000 24.000000000000,34.567256000000 C 51.396769000000,54.792375000000 51.194312000000,47.292195000000 34.567256000000,24.000000000000 M 33.482395000000,35.465086000000 C 24.313014000000,27.199681000000 24.313014000000,27.240877000000 14.231274000000,34.296289000000 C 20.811334000000,24.000000000000 21.218447000000,24.000000000000 12.821577000000,12.534583000000 C 24.000000000000,21.897190000000 24.000000000000,22.032673000000 34.786675000000,13.635803000000 C 27.166446000000,22.791080000000 29.683555000000,25.141755000000 33.482395000000,35.465086000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 34.567256000000,24.000000000000 C 53.715002000000,0.442178810000 45.300906000000,-4.317487500000 24.000000000000,13.432744000000 C -0.827533230000,-4.565426100000 -3.667447600000,0.282647560000 13.432744000000,24.000000000000 C 7.253940300000,36.164106000000 -12.008885000000,59.286948000000 24.000000000000,34.567256000000 C 51.396769000000,54.792375000000 51.194312000000,47.292195000000 34.567256000000,24.000000000000 M 33.482395000000,35.465086000000 C 24.313014000000,27.199681000000 24.313014000000,27.240877000000 14.231274000000,34.296289000000 C 20.811334000000,24.000000000000 21.218447000000,24.000000000000 12.821577000000,12.534583000000 C 24.000000000000,21.897190000000 24.000000000000,22.032673000000 34.786675000000,13.635803000000 C 27.166446000000,22.791080000000 29.683555000000,25.141755000000 33.482395000000,35.465086000000"/><path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 33.482395000000,35.465086000000 C 29.683555000000,25.141755000000 27.166446000000,22.791080000000 34.786675000000,13.635803000000 C 24.000000000000,22.032673000000 24.000000000000,21.897190000000 12.821577000000,12.534583000000 C 21.218447000000,24.000000000000 20.811334000000,24.000000000000 14.231274000000,34.296289000000 C 24.313014000000,27.240877000000 24.313014000000,27.199681000000 33.482395000000,35.465086000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 33.482395000000,35.465086000000 C 29.683555000000,25.141755000000 27.166446000000,22.791080000000 34.786675000000,13.635803000000 C 24.000000000000,22.032673000000 24.000000000000,21.897190000000 12.821577000000,12.534583000000 C 21.218447000000,24.000000000000 20.811334000000,24.000000000000 14.231274000000,34.296289000000 C 24.313014000000,27.240877000000 24.313014000000,27.199681000000 33.482395000000,35.465086000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 777 B |
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48"
|
||||
height="48"
|
||||
viewBox="0 0 48 48"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
|
||||
<path id="a"
|
||||
style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round"
|
||||
d="M 34.567256,24 C 51.194312,47.292195 51.396769,54.792375 24,34.567256 -12.008885,59.286948 7.2539403,36.164106 13.432744,24 -3.6674476,0.28264756 -0.82753323,-4.5654261 24,13.432744 45.300906,-4.3174875 53.715002,0.44217881 34.567256,24 Z"/>
|
||||
<path id="b"
|
||||
style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round"
|
||||
d="M 33.482395,35.465086 C 24.313014,27.199681 24.313014,27.240877 14.231274,34.296289 20.811334,24 21.218447,24 12.821577,12.534583 24,21.89719 24,22.032673 34.786675,13.635803 c -7.620229,9.155277 -5.10312,11.505952 -1.30428,21.829283 z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1017 B |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg width="48" height="48" viewBox="0 0 48 48" version="1.1" id="svg1" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<path style="fill:#ff0000;stroke:#000000;stroke-width:1.99937;stroke-linecap:round;stroke-linejoin:round" d="M 34.567256000000,24.000000000000 C 53.715002000000,0.442178810000 45.300906000000,-4.317487500000 24.000000000000,13.432744000000 C -0.827533230000,-4.565426100000 -3.667447600000,0.282647560000 13.432744000000,24.000000000000 C 7.253940300000,36.164106000000 -12.008885000000,59.286948000000 24.000000000000,34.567256000000 C 51.396769000000,54.792375000000 51.194312000000,47.292195000000 34.567256000000,24.000000000000"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 775 B |