From 015cbee1e63514529da779ae7b059eff18e836b6 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Wed, 1 Nov 2023 15:37:26 -0500 Subject: [PATCH] added range for topspar --- src/main.rs | 69 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/src/main.rs b/src/main.rs index 096b52f..ff47d31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,7 +36,7 @@ fn main() { // struts for port in [true,false] { - let mut wing = wing(&wing_airfoil, STRUTS/2, WINGSPAN/2.0, CHORD, CHORD * WING_TAPER); + let mut wing = wing(&wing_airfoil, STRUTS/2, WINGSPAN/2.0, CHORD, CHORD * WING_TAPER, SparType::Top); wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing); if port { wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing); @@ -53,7 +53,7 @@ fn main() { // rudder let mut rudder = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0))); - rudder.add_child(wing(&control_airfoil, RUDDER_STRUTS, RUDDER_HEIGHT, RUDDER_CHORD, RUDDER_CHORD * RUDDER_TAPER)); + rudder.add_child(wing(&control_airfoil, RUDDER_STRUTS, RUDDER_HEIGHT, RUDDER_CHORD, RUDDER_CHORD * RUDDER_TAPER, SparType::Center)); rudder.add_child(spar(RUDDER_HEIGHT, false)); rudder = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); rudder); scad_file.add_object(rudder); @@ -61,7 +61,7 @@ fn main() { // elevator let mut elevator = scad!(Translate(vec3(LENGTH-ELEVATOR_CHORD, 0.0,0.0))); for port in [true,false] { - let mut wing = wing(&control_airfoil, ELEVATOR_STRUTS, ELEVATOR_HEIGHT, ELEVATOR_CHORD, ELEVATOR_CHORD * ELEVATOR_TAPER); + let mut wing = wing(&control_airfoil, ELEVATOR_STRUTS, ELEVATOR_HEIGHT, ELEVATOR_CHORD, ELEVATOR_CHORD * ELEVATOR_TAPER, SparType::Top); wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing); if port { wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing); @@ -93,33 +93,27 @@ fn main() { allparts.write_to_file(format!("build/allparts.scad")); } +enum SparType { + None, + Top, + Center, +} + /// returns a extruded airfoil with the given dimensions -fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject { +fn strut(airfoil: &Airfoil, chord: f32, width: f32, spar: &SparType) -> ScadObject { let aerofoil = scad::PolygonParameters::new(airfoil.get_points().clone()); let shape = scad!(Polygon(aerofoil)); let strut_hole = { - let points = airfoil.get_points(); - let points = &points[0.. points.len() / 2]; - 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); + match spar { + SparType::Top => topspar_negative(airfoil, chord, 0.1..0.6), + SparType::Center => { + scad!(Union) + }, + SparType::None => { + scad!(Union) } - last = Some(current); } - register_part(mask.clone()); - mask }; let mut strut_shape = scad!(Difference); @@ -142,6 +136,31 @@ fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject { rotated } +fn topspar_negative(airfoil: &Airfoil, chord: f32, range: Range) -> ScadObject { + let points = airfoil.get_points(); + let points = &points[0.. points.len() / 2]; + let perimeter = span_length(points); + + let span = points_in_range(&Vec::from(points), perimeter * (1.0-range.end) .. perimeter * (1.0-range.start)); + + 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 +} + fn spar(length: f32, center: bool) -> ScadObject { let mut spar = scad!(Union); @@ -169,7 +188,7 @@ fn lerp(a: f32, b:f32, x:f32) -> f32 { a*(1.0-x) + b*x } -fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32) -> ScadObject { +fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32, spar: SparType) -> ScadObject { let mut wing = scad!(Translate(vec3(0.0,0.0,0.0))); // struts @@ -183,7 +202,7 @@ fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32) let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0))); - let strut = strut(&aerofoil, chord, CARDBOARD_WIDTH); + let strut = strut(&aerofoil, chord, CARDBOARD_WIDTH, &spar); transform.add_child(strut); wing.add_child(transform); }