Load airfoils at runtime
This commit is contained in:
parent
873eaaf82c
commit
ee07ec1b2c
3 changed files with 38 additions and 14 deletions
23
Makefile
23
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' > $@
|
||||
|
|
20
src/main.rs
20
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<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_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);
|
||||
|
|
|
@ -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<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 {
|
||||
&self.data
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue