From c536047a43485d131b5c69b670df1f096305434d Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Mon, 6 Nov 2023 09:06:48 -0600 Subject: [PATCH] added v-tail --- src/main.rs | 82 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 24 deletions(-) diff --git a/src/main.rs b/src/main.rs index 785feb2..87aab8b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,6 +38,39 @@ fn main() { fuselage.visualization)); parts.append(fuselage.parts.as_mut()); + t_tail(control_airfoil, &mut parts, &mut scad_file, wing_airfoil); + //v_tail(control_airfoil, &mut parts, &mut scad_file, wing_airfoil); + + // every part visualized together + scad_file.write_to_file(String::from("build/assembly.scad")); + + // every part in seperate files + for (idx, part) in parts.clone().into_iter().enumerate() { + let mut file = ScadFile::new(); + file.set_detail(50); + file.add_object(part); + file.write_to_file(format!("build/part{idx:0>3}.scad")); + } + + // all parts in one file + let mut allparts = ScadFile::new(); + parts.push(scad!(Square(vec2(STOCK_WIDTH, STOCK_HEIGHT)))); + allparts.set_detail(50); + for (idx, part) in parts.into_iter().enumerate() { + allparts.add_object(scad!(Translate2d(vec2(0.0, INF * idx as f32)); part)); + } + allparts.write_to_file("build/allparts.scad".to_string()); + + // test airfoil + let mut test = ScadFile::new(); + let test_airfoil = SeligFile::parse(include_str!("../m1-il.dat")); + let wing = wing(&test_airfoil, &RUDDER, SparType::Top); + test.add_object(scad!(NamedColor("clear-blue".to_string()); wing.0.visualization)); + test.add_object(scad!(NamedColor("clear-red".to_string()); wing.1.visualization)); + test.write_to_file(String::from("build/testwing.scad")); +} + +fn t_tail(control_airfoil: SeligFile, parts: &mut Vec, scad_file: &mut ScadFile, wing_airfoil: SeligFile) { // rudder let mut rudder = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0))); let (mut struts,mut spar) = wing( @@ -73,34 +106,35 @@ fn main() { scad_file.add_object(scad!(Translate(vec3(LENGTH - ELEVATOR_CHORD, 0.0, 0.0)); elevator.visualization)); parts.append(&mut elevator.parts); +} - // every part visualized together - scad_file.write_to_file(String::from("build/assembly.scad")); +fn v_tail(control_airfoil: SeligFile, parts: &mut Vec, scad_file: &mut ScadFile, wing_airfoil: SeligFile) { + // rudder + let mut ruddervators = scad!(Union); + let mut ruddervator = scad!(Union);//scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0))); + ruddervator = scad!(Rotate(60.0, vec3(1.0, 0.0, 0.0)); ruddervator); + let (mut struts,mut spar) = wing( + &control_airfoil, + &RUDDER, + SparType::Top, + ); + ruddervator.add_child(struts.visualization); + ruddervator.add_child(spar.visualization); + ruddervator = scad!(Translate(vec3(0.0, FUSELAGE_GAP, 0.0)); ruddervator); + parts.append(struts.parts.as_mut()); + parts.append(spar.parts.as_mut()); + ruddervators.add_child(scad!(Mirror(vec3(0.0, 1.0, 0.0)); ruddervator.clone())); + ruddervators.add_child(ruddervator); + ruddervators = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); ruddervators); - // every part in seperate files - for (idx, part) in parts.clone().into_iter().enumerate() { - let mut file = ScadFile::new(); - file.set_detail(50); - file.add_object(part); - file.write_to_file(format!("build/part{idx:0>3}.scad")); + #[cfg(feature = "film")] { + let mut wrapped = scad!(Hull; rudder.clone()); + wrapped = scad!(Minkowski; wrapped); + wrapped.add_child(scad!(Sphere(Radius(1.0)))); + scad_file.add_object(scad!(NamedColor("clear-red".to_string()); wrapped)); } - // all parts in one file - let mut allparts = ScadFile::new(); - parts.push(scad!(Square(vec2(STOCK_WIDTH, STOCK_HEIGHT)))); - allparts.set_detail(50); - for (idx, part) in parts.into_iter().enumerate() { - allparts.add_object(scad!(Translate2d(vec2(0.0, INF * idx as f32)); part)); - } - allparts.write_to_file("build/allparts.scad".to_string()); - - // test airfoil - let mut test = ScadFile::new(); - let test_airfoil = SeligFile::parse(include_str!("../m1-il.dat")); - let wing = wing(&test_airfoil, &RUDDER, SparType::Top); - test.add_object(scad!(NamedColor("clear-blue".to_string()); wing.0.visualization)); - test.add_object(scad!(NamedColor("clear-red".to_string()); wing.1.visualization)); - test.write_to_file(String::from("build/testwing.scad")); + scad_file.add_object(ruddervators); } /// A physical object