Files
vectorcraft/crates/render/src/geometry.rs
T

38 lines
1.4 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use super::*;
/// Most dashes a dotted guide is drawn with (1.5 on, 2.5 off on screen); a longer one is solid.
pub(crate) const MAX_GUIDE_DASHES: f64 = 100_000.0;
/// The length of `p`'s control polygon: at least its own length (infinite when a point is).
pub(crate) fn polygon_length(p: &BezPath) -> f64 {
let (mut last, mut len): (Option<kurbo::Point>, f64) = (None, 0.0);
for el in p.elements() {
let points = match *el {
kurbo::PathEl::MoveTo(q) => {
last = Some(q);
continue;
}
kurbo::PathEl::LineTo(q) => [Some(q), None, None],
kurbo::PathEl::QuadTo(a, b) => [Some(a), Some(b), None],
kurbo::PathEl::CurveTo(a, b, c) => [Some(a), Some(b), Some(c)],
kurbo::PathEl::ClosePath => continue,
};
for q in points.into_iter().flatten() {
if let Some(l) = last {
len += l.distance(q);
}
last = Some(q);
}
}
if len.is_nan() { f64::INFINITY } else { len }
}
/// The pixel size of `region` rendered at `scale` pixels per point (at least 1×1).
pub fn region_pixels(region: Rect, scale: f64) -> (u32, u32) {
((region.width() * scale).round().max(1.0) as u32, (region.height() * scale).round().max(1.0) as u32)
}
pub(crate) fn rects_overlap(a: Rect, b: Rect) -> bool {
a.x0 <= b.x1 && b.x0 <= a.x1 && a.y0 <= b.y1 && b.y0 <= a.y1
}