mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 17:28:12 +08:00
* Initial vector modify node * Initial extraction of data from monitor nodes * Migrate to point id * Start converting to modify node * Non destructive spline tool (tout le reste est cassé) * Fix unconnected modify node * Fix freehand tool * Pen tool * Migrate demo art * Select points * Fix the demo artwork * Fix the X and Y inputs for path tool * G1 continous toggle * Delete points * Fix test * Insert point * Improve robustness of handles * Fix GRS shortcuts on path * Dragging points * Fix build * Preserve opposing handle lengths * Update demo art and snapping * Fix polygon tool * Double click end anchor * Improve dragging * Fix text shifting * Select only connected verts * Colinear alt * Cleanup * Fix imports * Improve pen tool avoiding handle placement * Improve disolve * Remove pivot widget from Transform node properties * Fix demo art * Fix bugs * Re-save demo artwork * Code review * Serialize hashmap as tuple vec to enable deserialize_inputs * Fix migrate * Add document upgrade function to editor_api.rs * Finalize document upgrading * Rename to the Path node * Remove smoothing from Freehand tool * Upgrade demo artwork * Propertly disable raw-rs tests --------- Co-authored-by: Keavon Chambers <keavon@keavon.com> Co-authored-by: Adam <adamgerhant@gmail.com> Co-authored-by: Dennis Kobert <dennis@kobert.dev>
43 lines
1.8 KiB
Rust
43 lines
1.8 KiB
Rust
/// Comparison functions used for tests in the bezier module
|
|
#[cfg(test)]
|
|
use super::{CircleArc, Subpath};
|
|
#[cfg(test)]
|
|
use crate::utils::f64_compare;
|
|
|
|
use crate::consts::MAX_ABSOLUTE_DIFFERENCE;
|
|
|
|
use glam::DVec2;
|
|
|
|
// Compare two f64s with some maximum absolute difference to account for floating point errors
|
|
#[cfg(test)]
|
|
pub fn compare_f64s(f1: f64, f2: f64) -> bool {
|
|
f64_compare(f1, f2, MAX_ABSOLUTE_DIFFERENCE)
|
|
}
|
|
|
|
/// Compare points by allowing some maximum absolute difference to account for floating point errors
|
|
pub fn compare_points(p1: DVec2, p2: DVec2) -> bool {
|
|
p1.abs_diff_eq(p2, MAX_ABSOLUTE_DIFFERENCE)
|
|
}
|
|
|
|
/// Compare vectors of points by allowing some maximum absolute difference to account for floating point errors
|
|
#[cfg(test)]
|
|
pub fn compare_vec_of_points(a: Vec<DVec2>, b: Vec<DVec2>, max_absolute_difference: f64) -> bool {
|
|
a.len() == b.len() && a.into_iter().zip(b).all(|(p1, p2)| p1.abs_diff_eq(p2, max_absolute_difference))
|
|
}
|
|
|
|
/// Compare circle arcs by allowing some maximum absolute difference between values to account for floating point errors
|
|
#[cfg(test)]
|
|
pub fn compare_arcs(arc1: CircleArc, arc2: CircleArc) -> bool {
|
|
compare_points(arc1.center, arc2.center)
|
|
&& f64_compare(arc1.radius, arc1.radius, MAX_ABSOLUTE_DIFFERENCE)
|
|
&& f64_compare(arc1.start_angle, arc2.start_angle, MAX_ABSOLUTE_DIFFERENCE)
|
|
&& f64_compare(arc1.end_angle, arc2.end_angle, MAX_ABSOLUTE_DIFFERENCE)
|
|
}
|
|
|
|
/// Compare Subpath by verifying that their bezier segments match.
|
|
/// In this way, matching quadratic segments where the handles are on opposite manipulator groups will be considered equal.
|
|
#[cfg(test)]
|
|
pub fn compare_subpaths<PointId: crate::Identifier>(subpath1: &Subpath<PointId>, subpath2: &Subpath<PointId>) -> bool {
|
|
subpath1.len() == subpath2.len() && subpath1.closed() == subpath2.closed() && subpath1.iter().eq(subpath2.iter())
|
|
}
|