geo_aid_script/unroll/library/
intersection.rsuse num_traits::One;
use crate::{math::Build, token::number::ProcNum};
use super::prelude::*;
fn intersection_function_ll(
k: Expr<Line>,
l: Expr<Line>,
context: &CompileContext,
display: Properties,
) -> Expr<Point> {
let mut expr = context.intersection_display(k, l, display);
if let Some(node) = &mut expr.node {
node.set_associated(Associated);
}
expr
}
fn intersection_function_lc(
k: Expr<Line>,
omega: Expr<Circle>,
context: &mut CompileContext,
display: Properties,
) -> Expr<Point> {
let mut point = context.free_point_display(display);
context.point_on_line(&point, &k, ProcNum::one());
context.point_on_circle(&point, &omega, ProcNum::one());
if let Some(node) = &mut point.node {
node.set_associated(Associated);
}
point
}
fn intersection_function_cc(
o1: Expr<Circle>,
o2: Expr<Circle>,
context: &mut CompileContext,
display: Properties,
) -> Expr<Point> {
let mut point = context.free_point_display(display);
context.point_on_circle(&point, &o1, ProcNum::one());
context.point_on_circle(&point, &o2, ProcNum::one());
if let Some(node) = &mut point.node {
node.set_associated(Associated);
}
point
}
#[derive(Debug)]
pub struct Associated;
impl BuildAssociated<PointNode> for Associated {
fn build_associated(
self: Box<Self>,
_build: &mut Build,
associated: &mut HierarchyNode<PointNode>,
) {
associated.root.display_dot.set_if_unset(false);
}
}
pub fn register(library: &mut Library) {
library.add(
Function::new("intersection")
.overload(intersection_function_ll)
.overload(intersection_function_lc)
.overload(intersection_function_cc),
);
}