extracted wing generation to function
This commit is contained in:
parent
d2708723f0
commit
9647d1b3b2
2 changed files with 44 additions and 23 deletions
|
@ -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;
|
||||
|
|
65
src/main.rs
65
src/main.rs
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue