use crate::datatypes::{
AngleKind,
inputs::{DatumCircle, DatumCircularArc, DatumLineSegment, DatumPoint},
};
use super::Constraint;
impl Constraint {
pub fn lines_parallel([l0, l1]: [DatumLineSegment; 2]) -> Self {
Self::LinesAtAngle(l0, l1, AngleKind::Parallel)
}
pub fn lines_perpendicular([l0, l1]: [DatumLineSegment; 2]) -> Self {
Self::LinesAtAngle(l0, l1, AngleKind::Perpendicular)
}
pub fn point_bisects_arc(arc: DatumCircularArc, point: DatumPoint) -> [Self; 2] {
let center_to_point = DatumLineSegment {
p0: arc.center,
p1: point,
};
[
Constraint::PointArcCoincident(arc, point),
Constraint::Symmetric(center_to_point, arc.start, arc.end),
]
}
pub fn parallel_lines_distance(lines: [DatumLineSegment; 2], distance: f64) -> [Self; 2] {
[
Constraint::lines_parallel(lines),
Constraint::PointLineDistance(lines[0].p0, lines[1], distance),
]
}
pub fn circle_arc_coincident(circle: DatumCircle, arc: DatumCircularArc) -> [Self; 2] {
[
Constraint::PointsCoincident(circle.center, arc.center),
Constraint::LinesEqualLength(
DatumLineSegment {
p0: arc.center,
p1: arc.start,
},
DatumLineSegment {
p0: arc.center,
p1: arc.end,
},
),
]
}
}