diff --git a/Makefile b/Makefile index 68138e1..e6a2a4a 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +MAIN_AIRFOIL = ag24.dat +CONTROL_AIRFOIL = m1-il.dat +TAIL = t-tail + UNAME = $(shell uname) ifeq ($(UNAME), Linux) SCAD = openscad @@ -6,8 +10,7 @@ ifeq ($(UNAME), Darwin) SCAD = OpenSCAD endif -AIRFOILS = ag24.dat m1-il.dat -TAIL = t-tail +AIRFOILS = $(MAIN_AIRFOIL) $(CONTROL_AIRFOIL) b: build/allparts.svg @@ -16,15 +19,15 @@ build: build/assembly.scad: src/*.rs $(AIRFOILS) mkdir -p build - cargo run $(TAIL) assembly + cargo run $(AIRFOILS) $(TAIL) assembly build/part%.scad: src/*.rs $(AIRFOILS) mkdir -p build - cargo run parts $(TAIL) + cargo run $(AIRFOILS) parts $(TAIL) build/allparts.scad: src/*.rs $(AIRFOILS) mkdir -p build - cargo run sheet $(TAIL) + cargo run $(AIRFOILS) sheet $(TAIL) e393.dat: curl http://airfoiltools.com/airfoil/seligdatfile?airfoil=e393-il -o e393.dat @@ -46,7 +49,7 @@ edgevertical.dat: edgevertical.zip unzip -p edgevertical.zip Edge-Vertical.dat > edgevertical.dat build/%.png: build/%.scad - $(SCAD) --colorscheme Metallic -o $@ $< + $(SCAD) --imgsize 1920,1080 --colorscheme Metallic -o $@ $< build/%.svg: build/%.scad $(SCAD) -o $@ $< @@ -73,20 +76,20 @@ clean: cargo clean vis: build/assembly-clear.scad - openscad build/assembly-clear.scad + $(SCAD) build/assembly-clear.scad v-tail: src/*.rs $(AIRFOILS) - cargo run v-tail assembly sheet parts + cargo run $(AIRFOILS) v-tail assembly sheet parts t-tail: src/*.rs $(AIRFOILS) - cargo run t-tail assembly sheet parts + cargo run $(AIRFOILS) t-tail assembly sheet parts build/testwing-clear.scad: build/testwing.scad sed 's/color("clear-red")/color([1.0,1.0,0.0,0.9])/g' $< > $@ sed 's/color("clear-blue")/color([0.0,1.0,1.0,1.0])/g' -i $@ build/assembly-clear.scad: src/*.rs $(AIRFOILS) - cargo run assembly $(TAIL) film stdout |\ + cargo run $(AIRFOILS) assembly $(TAIL) film stdout |\ sed 's/color("clear-red")/color([1.0,0.0,0.0,0.5])/g' |\ sed 's/color("clear-blue")/color([0.0,1.0,0.0,0.9])/g' |\ sed 's/color("clear-blue")/color([0.0,0.0,1.0,0.9])/g' > $@ diff --git a/src/main.rs b/src/main.rs index 9829a43..b71e361 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,12 +4,18 @@ use scad::*; use selig::SeligFile; use selig::Span; use std::env::args; +use std::path::Path; use std::ops::Range; mod constants; mod selig; fn main() { - let args: Vec = args().collect(); + let mut args = args().skip(1); + let main_airfoil_path = args.next().unwrap(); + let main_airfoil_path = Path::new(&main_airfoil_path); + let control_airfoil_path = args.next().unwrap(); + let control_airfoil_path = Path::new(&control_airfoil_path); + let args: Vec = args.collect(); let gen_film = args.contains(&"film".to_string()); let gen_v_tail = args.contains(&"v-tail".to_string()); let gen_t_tail = args.contains(&"t-tail".to_string()); @@ -25,10 +31,18 @@ fn main() { scad_file.set_detail(50); // cambered airfoil, used in the wing - let wing_airfoil: SeligFile = SeligFile::parse(include_str!("../ag24.dat")); + let wing_airfoil: SeligFile = SeligFile::load(main_airfoil_path).unwrap(); + eprintln!("Main airfoil: {}", wing_airfoil.get_name()); + if let Some(desc) = wing_airfoil.get_description() { + eprintln!("{}", desc); + } // symmetric airfoil, used in the control surfaces - let control_airfoil: SeligFile = SeligFile::parse(include_str!("../m1-il.dat")); + let control_airfoil: SeligFile = SeligFile::load(control_airfoil_path).unwrap(); + eprintln!("Control airfoil: {}", control_airfoil.get_name()); + if let Some(desc) = control_airfoil.get_description() { + eprintln!("{}", desc); + } // main wing let mut wing_transform = mirrored_wing(&wing_airfoil, &WING); diff --git a/src/selig.rs b/src/selig.rs index 5261bd0..22c9071 100644 --- a/src/selig.rs +++ b/src/selig.rs @@ -1,4 +1,5 @@ -use std::ops::Range; +use std::{ops::Range, path::Path, fs::File, io::Read}; +use std::io; use nalgebra::Vector2; @@ -37,6 +38,12 @@ impl SeligFile { } } + pub fn load(path: &Path) -> io::Result { + let mut buf = String::new(); + File::open(path)?.read_to_string(&mut buf)?; + io::Result::Ok(Self::parse(&buf)) + } + pub fn get_points(&self) -> &Airfoil { &self.data }