1
Fork 0

Load airfoils at runtime

This commit is contained in:
Andy Killorin 2023-11-06 13:24:24 -06:00
parent 873eaaf82c
commit ee07ec1b2c
No known key found for this signature in database
GPG key ID: 8CB11B45B690DC2A
3 changed files with 38 additions and 14 deletions

View file

@ -1,3 +1,7 @@
MAIN_AIRFOIL = ag24.dat
CONTROL_AIRFOIL = m1-il.dat
TAIL = t-tail
UNAME = $(shell uname) UNAME = $(shell uname)
ifeq ($(UNAME), Linux) ifeq ($(UNAME), Linux)
SCAD = openscad SCAD = openscad
@ -6,8 +10,7 @@ ifeq ($(UNAME), Darwin)
SCAD = OpenSCAD SCAD = OpenSCAD
endif endif
AIRFOILS = ag24.dat m1-il.dat AIRFOILS = $(MAIN_AIRFOIL) $(CONTROL_AIRFOIL)
TAIL = t-tail
b: build/allparts.svg b: build/allparts.svg
@ -16,15 +19,15 @@ build:
build/assembly.scad: src/*.rs $(AIRFOILS) build/assembly.scad: src/*.rs $(AIRFOILS)
mkdir -p build mkdir -p build
cargo run $(TAIL) assembly cargo run $(AIRFOILS) $(TAIL) assembly
build/part%.scad: src/*.rs $(AIRFOILS) build/part%.scad: src/*.rs $(AIRFOILS)
mkdir -p build mkdir -p build
cargo run parts $(TAIL) cargo run $(AIRFOILS) parts $(TAIL)
build/allparts.scad: src/*.rs $(AIRFOILS) build/allparts.scad: src/*.rs $(AIRFOILS)
mkdir -p build mkdir -p build
cargo run sheet $(TAIL) cargo run $(AIRFOILS) sheet $(TAIL)
e393.dat: e393.dat:
curl http://airfoiltools.com/airfoil/seligdatfile?airfoil=e393-il -o 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 unzip -p edgevertical.zip Edge-Vertical.dat > edgevertical.dat
build/%.png: build/%.scad build/%.png: build/%.scad
$(SCAD) --colorscheme Metallic -o $@ $< $(SCAD) --imgsize 1920,1080 --colorscheme Metallic -o $@ $<
build/%.svg: build/%.scad build/%.svg: build/%.scad
$(SCAD) -o $@ $< $(SCAD) -o $@ $<
@ -73,20 +76,20 @@ clean:
cargo clean cargo clean
vis: build/assembly-clear.scad vis: build/assembly-clear.scad
openscad build/assembly-clear.scad $(SCAD) build/assembly-clear.scad
v-tail: src/*.rs $(AIRFOILS) 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) 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 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-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 $@ sed 's/color("clear-blue")/color([0.0,1.0,1.0,1.0])/g' -i $@
build/assembly-clear.scad: src/*.rs $(AIRFOILS) 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-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,1.0,0.0,0.9])/g' |\
sed 's/color("clear-blue")/color([0.0,0.0,1.0,0.9])/g' > $@ sed 's/color("clear-blue")/color([0.0,0.0,1.0,0.9])/g' > $@

View file

@ -4,12 +4,18 @@ use scad::*;
use selig::SeligFile; use selig::SeligFile;
use selig::Span; use selig::Span;
use std::env::args; use std::env::args;
use std::path::Path;
use std::ops::Range; use std::ops::Range;
mod constants; mod constants;
mod selig; mod selig;
fn main() { fn main() {
let args: Vec<String> = 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<String> = args.collect();
let gen_film = args.contains(&"film".to_string()); let gen_film = args.contains(&"film".to_string());
let gen_v_tail = args.contains(&"v-tail".to_string()); let gen_v_tail = args.contains(&"v-tail".to_string());
let gen_t_tail = args.contains(&"t-tail".to_string()); let gen_t_tail = args.contains(&"t-tail".to_string());
@ -25,10 +31,18 @@ fn main() {
scad_file.set_detail(50); scad_file.set_detail(50);
// cambered airfoil, used in the wing // 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 // 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 // main wing
let mut wing_transform = mirrored_wing(&wing_airfoil, &WING); let mut wing_transform = mirrored_wing(&wing_airfoil, &WING);

View file

@ -1,4 +1,5 @@
use std::ops::Range; use std::{ops::Range, path::Path, fs::File, io::Read};
use std::io;
use nalgebra::Vector2; use nalgebra::Vector2;
@ -37,6 +38,12 @@ impl SeligFile {
} }
} }
pub fn load(path: &Path) -> io::Result<Self> {
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 { pub fn get_points(&self) -> &Airfoil {
&self.data &self.data
} }