use crate::prelude::*;
pub struct Pipe;
impl Pipe {
pub fn straight(od: f64, wall_thickness: f64, length: f64, center: bool, fn_: u64) -> Scad {
assert!(od - wall_thickness * 2.0 > 0.0);
difference!(
cylinder!(h=length, d1=od, d2=od, center=center, fn=fn_);
translate!([0.0, 0.0, -1.0],
cylinder!(h=length + 2.0, d1=od - wall_thickness * 2.0,
d2=od - wall_thickness * 2.0, center=center, fn=fn_);
);
)
}
pub fn straight_solid(od: f64, length: f64, center: bool, fn_: u64) -> Scad {
cylinder!(h=length, d1=od, d2=od, center=center, fn=fn_)
}
pub fn curved(od: f64, wall_thickness: f64, degrees: f64, radius: f64, fn_: u64) -> Scad {
assert!(od - wall_thickness * 2.0 > 0.0);
assert!(degrees > 0.0 && degrees <= 360.0);
translate!([-od / 2.0 - radius, 0.0, 0.0],
rotate!([90.0, 0.0, 0.0],
rotate_extrude!(angle=degrees, convexity=4, fn=fn_,
translate!([od /2.0 + radius, 0.0, 0.0],
difference!(
circle!(d=od, fn=fn_);
circle!(d=od - wall_thickness * 2.0, fn=fn_);
);
);
);
);
)
}
pub fn curved_solid(od: f64, degrees: f64, radius: f64, fn_: u64) -> Scad {
assert!(degrees > 0.0 && degrees <= 360.0);
translate!([od / 2.0 - radius, 0.0, 0.0],
rotate!([90.0, 0.0, 0.0],
rotate_extrude!(angle=degrees, convexity=4, fn=fn_,
translate!([od /2.0 + radius, 0.0, 0.0],
circle!(d=od, fn=fn_);
);
);
);
)
}
pub fn tapered(
od1: f64,
od2: f64,
wall_thickness: f64,
length: f64,
center: bool,
fn_: u64,
) -> Scad {
assert!(od1 - wall_thickness * 2.0 > 0.0);
assert!(od2 - wall_thickness * 2.0 > 0.0);
difference!(
cylinder!(h=length, d1=od1, d2=od2, center=center, fn=fn_);
translate!([0.0, 0.0, -0.001],
cylinder!(h=length + 0.002, d1=od1 - wall_thickness * 2.0,
d2=od2 - wall_thickness * 2.0, center=center, fn=fn_);
);
)
}
pub fn tapered_solid(od1: f64, od2: f64, length: f64, center: bool, fn_: u64) -> Scad {
cylinder!(h=length, d1=od1, d2=od2, center=center, fn=fn_)
}
}