diff --git a/src/main.rs b/src/main.rs index 613bbe7..9e6f77e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -45,8 +45,6 @@ fn main() { } // spars - // main wing - scad_file.add_object(spar(WINGSPAN+FUSELAGE_GAP*2.0, true)); // "fuselage" scad_file.add_object(scad!(Rotate(-90.0, vec3(0.0, 0.0, 1.0)); @@ -100,6 +98,35 @@ fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject { let aerofoil = scad::PolygonParameters::new(airfoil.get_points().clone()); let shape = scad!(Polygon(aerofoil)); + let strut_hole = { + let points = &airfoil.get_points()[0..80]; + let perimeter = span_length(points); + let span = points_in_range(&Vec::from(points), perimeter * 0.4.. perimeter); + + let mut mask = scad!(Union); + + let mut last: Option = None; + for point in span { + let mut current = scad!(Square(vec2(0.001/ chord, CARDBOARD_WIDTH / chord))); + current = scad!(Translate2d(point.clone() - vec2(0.0, CARDBOARD_WIDTH/chord)); current); + if let Some(last_mask) = last { + let mut hull = scad!(Hull); + hull.add_child(current.clone()); + hull.add_child(last_mask); + mask.add_child(hull); + } + last = Some(current); + } + register_part(mask.clone()); + mask + }; + + let mut strut_shape = scad!(Difference); + strut_shape.add_child(shape); + strut_shape.add_child(strut_hole); + + let shape = strut_shape; + let extrude = LinExtrudeParams { height: width, center: true,