diff --git a/src/constants.rs b/src/constants.rs index 8166df5..6a132fc 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -1,3 +1,5 @@ +use std::ops::Range; + use crate::WingConfig; /// Constants @@ -23,7 +25,7 @@ pub const FUSELAGE_GAP: f32 = 0.4 * IN2MM; /// a very large number, used to place unknown objects such that they do not intersect pub const INF: f32 = 1000.0; pub const RUDDER_HEIGHT: f32 = 5.0 * IN2MM; -pub const RUDDER_CHORD: f32 = 3.0 * IN2MM; +pub const RUDDER_CHORD: f32 = 4.0 * IN2MM; pub const RUDDER_TAPER: f32 = 0.7; pub const RUDDER_STRUTS: usize = 3; pub const RUDDER: WingConfig = WingConfig { @@ -42,5 +44,6 @@ pub const ELEVATOR: WingConfig = WingConfig { taper: ELEVATOR_TAPER, struts: ELEVATOR_STRUTS, }; +pub const MIDSPAR_RANGE: Range = 0.1..0.4; pub const STOCK_HEIGHT: f32 = 25.0 * IN2MM; pub const STOCK_WIDTH: f32 = 37.0 * IN2MM; diff --git a/src/main.rs b/src/main.rs index de09630..0f53897 100644 --- a/src/main.rs +++ b/src/main.rs @@ -176,9 +176,17 @@ fn wing(wing_airfoil: &SeligFile, wing_config: &WingConfig, spar: SparType) -> ( spar }, SparType::Center => { - // TODO: negative in struts // TODO: taper - centered_cube(vec3(wing_config.chord * 0.5, wing_config.length, CARDBOARD_WIDTH), (false, false, true)) + let mut mid_spar = scad!(Hull); + let bottom = centered_cube(vec3(wing_config.chord * (MIDSPAR_RANGE.end - MIDSPAR_RANGE.start) , CARDBOARD_WIDTH, CARDBOARD_WIDTH), (false, false, true)); + let mut top = scad!(Translate(vec3(0.0, wing_config.length - CARDBOARD_WIDTH, 0.0))); + top.add_child(scad!(Scale(vec3(wing_config.taper, 1.0, 1.0)); bottom.clone())); + mid_spar.add_child(top); + mid_spar.add_child(bottom); + mid_spar = scad!(Translate(vec3(MIDSPAR_RANGE.start * wing_config.chord, 0.0, 0.0)); mid_spar); + let mut spar = scad!(Difference; mid_spar); + spar.add_child(wing.clone()); + spar }, }; @@ -208,7 +216,9 @@ fn strut(airfoil: &SeligFile, chord: f32, width: f32, spar: &SparType) -> Constr match spar { SparType::Top => topspar_negative(airfoil, chord, 0.1..0.6), SparType::Center => { - scad!(Union) + scad!(Translate2d(vec2(MIDSPAR_RANGE.start, 0.0)); + centered_square(vec2(MIDSPAR_RANGE.end - MIDSPAR_RANGE.start, CARDBOARD_WIDTH/ chord), (false,true)) + ) } SparType::None => { scad!(Union)