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)
|
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' > $@
|
||||||
|
|
20
src/main.rs
20
src/main.rs
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue