1
Fork 0

extracted wing generation to function

This commit is contained in:
Andy Killorin 2023-11-01 09:37:10 -05:00
parent d2708723f0
commit 9647d1b3b2
No known key found for this signature in database
GPG key ID: 8CB11B45B690DC2A
2 changed files with 44 additions and 23 deletions

View file

@ -6,7 +6,7 @@ pub const CHORD: f32 = 11.2 * IN2MM;
pub const WINGSPAN: f32 = 45.0 * IN2MM;
pub const LENGTH: f32 = 0.0;
/// strut count in the main wing
pub const STRUTS: usize = 6;
pub const STRUTS: usize = 20;
pub const CARDBOARD_WIDTH: f32 = 2.4;
/// length of each side of the triangular spar
pub const SPAR_SIDE_WIDTH: f32 = 0.75 * IN2MM;

View file

@ -21,30 +21,20 @@ fn main() {
// symetric airfoil, used in the control surfaces
let evert: Airfoil = selig::parse(include_str!("../edgevertical.dat"));
let mut wing = scad!(Translate(vec3(0.0,0.0,0.0)));
let mut wing_transform = scad!(Translate(vec3(0.0,0.0,0.0)));
// struts
for strut_idx in 0..STRUTS + 2 {
let port: bool = strut_idx % 2 == 1;
let out: usize = strut_idx/2;
let mut spacing = WINGSPAN/STRUTS as f32 * out as f32 + FUSELAGE_GAP / 2.0;
println!("{port} {out} {spacing}");
let falloff = 0.95f32.powf(spacing / 40.0);
if port { spacing = -spacing };
let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0)));
let strut = strut(&e393, CHORD * falloff, CARDBOARD_WIDTH);
transform.add_child(strut);
wing.add_child(transform);
for port in [true,false] {
let mut wing = wing(&e393, STRUTS/2, WINGSPAN/2.0, CHORD, CHORD * 0.8);
wing = scad!(Translate(vec3(0.0, 10.0,0.0)); wing);
if port {
wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing);
}
wing_transform.add_child(wing);
}
// spars
scad_file.add_object(spar(WINGSPAN));
scad_file.add_object(spar(WINGSPAN, true));
// rudder
let mut rudder = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)));
@ -53,7 +43,7 @@ fn main() {
scad_file.add_object(rudder);
let cardboard = vec3(0.38, 0.26, 0.26);
scad_file.add_object(scad!(Color(cardboard); wing));
scad_file.add_object(scad!(Color(cardboard); wing_transform));
scad_file.write_to_file(String::from("build/assembly.scad"));
@ -91,11 +81,16 @@ fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject {
rotated
}
fn spar(length: f32) -> ScadObject {
fn spar(length: f32, center: bool) -> ScadObject {
let mut spar = scad!(Union);
register_part(scad!(Square(vec2(length, SPAR_SIDE_WIDTH * 3.0))));
for i in 0..3 {
let panel = scad!(Cube(vec3(SPAR_SIDE_WIDTH, length, CARDBOARD_WIDTH)));
let mut panel = scad!(Cube(vec3(SPAR_SIDE_WIDTH, length, CARDBOARD_WIDTH)));
if center {
panel = scad!(Translate(vec3(0.0, -length/2.0, 0.0)); panel)
}
let rot = 120.0 * i as f32;
spar.add_child(scad!(
Rotate(rot, vec3(0.0, 1.0, 0.0)); panel
@ -108,3 +103,29 @@ fn spar(length: f32) -> ScadObject {
fn register_part(part: ScadObject) {
PARTS.lock().unwrap().push(part);
}
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 {
let mut wing = scad!(Translate(vec3(0.0,0.0,0.0)));
// struts
for strut_idx in 0..struts + 1 {
let gap = length/struts as f32;
let chord = lerp(chord, taper, strut_idx as f32 / struts as f32);
let spacing = strut_idx as f32 * gap;
let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0)));
let strut = strut(&aerofoil, chord, CARDBOARD_WIDTH);
transform.add_child(strut);
wing.add_child(transform);
}
wing
}