use manifold_csg::{CrossSection, JoinType, Manifold};
fn main() {
let square = CrossSection::square(20.0, 20.0, true);
let circle = CrossSection::circle(10.0, 64);
println!(
"Square: area={:.1}, verts={}",
square.area(),
square.num_vert()
);
println!(
"Circle: area={:.1}, verts={}",
circle.area(),
circle.num_vert()
);
let with_hole = &square - &circle;
println!("\nSquare - Circle: area={:.1}", with_hole.area());
let rounded = square.offset(3.0, JoinType::Round, 2.0, 32);
let shrunk = square.offset(-2.0, JoinType::Round, 2.0, 32);
println!("\nOffset +3 (round): area={:.1}", rounded.area());
println!("Offset -2 (round): area={:.1}", shrunk.area());
let l_shape = CrossSection::from_polygons(&[vec![
[0.0, 0.0],
[20.0, 0.0],
[20.0, 10.0],
[10.0, 10.0],
[10.0, 20.0],
[0.0, 20.0],
]]);
println!("\nL-shape: area={:.1}", l_shape.area());
let extruded = l_shape.extrude(15.0);
println!("L-shape extruded: volume={:.1}", extruded.volume());
let fancy = Manifold::extrude_with_options(
&circle, 30.0, 20, 180.0, 0.5, 0.5, );
println!("Twisted/tapered cylinder: volume={:.1}", fancy.volume());
let profile = CrossSection::from_polygons(&[vec![
[5.0, 0.0],
[10.0, 0.0],
[10.0, 5.0],
[7.0, 5.0],
[7.0, 2.0],
[5.0, 2.0],
]]);
let revolved = Manifold::revolve(&profile, 64, 360.0);
println!("Revolved L-profile: volume={:.1}", revolved.volume());
let cube = Manifold::cube(10.0, 10.0, 10.0, false);
let slice = cube.slice_to_cross_section(5.0); println!("\nCube sliced at z=5: area={:.1}", slice.area());
let a = CrossSection::circle(5.0, 32).translate(0.0, 0.0);
let b = CrossSection::circle(5.0, 32).translate(20.0, 0.0);
let hull = CrossSection::batch_hull(&[a, b]);
println!("Hull of two circles: area={:.1}", hull.area());
let warped = square.warp(|x, y| {
[x * 0.8, y * 0.8]
});
println!("\nWarped square: area={:.1}", warped.area());
}