accept command line arguments
This commit is contained in:
parent
c536047a43
commit
f59aeb6594
2 changed files with 69 additions and 36 deletions
16
Makefile
16
Makefile
|
@ -6,14 +6,24 @@ ifeq ($(UNAME), Darwin)
|
||||||
SCAD = OpenSCAD
|
SCAD = OpenSCAD
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
AIRFOILS = ag24.dat m1-il.dat
|
||||||
|
|
||||||
b: build/allparts.svg
|
b: build/allparts.svg
|
||||||
|
|
||||||
build:
|
build:
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
|
|
||||||
build/%.scad: src/*.rs ag24.dat m1-il.dat
|
build/assembly.scad: src/*.rs $(AIRFOILS)
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
cargo run
|
cargo run t-tail assembly
|
||||||
|
|
||||||
|
build/part%.scad: src/*.rs $(AIRFOILS)
|
||||||
|
mkdir -p build
|
||||||
|
cargo run parts t-tail
|
||||||
|
|
||||||
|
build/allparts.scad: src/*.rs $(AIRFOILS)
|
||||||
|
mkdir -p build
|
||||||
|
cargo run sheet t-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
|
||||||
|
@ -69,7 +79,7 @@ build/testwing-clear.scad: build/testwing.scad
|
||||||
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: build/assembly.scad
|
build/assembly-clear.scad: build/assembly.scad
|
||||||
cargo run --features film
|
cargo run --features assembly t-tail film
|
||||||
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' -i $@
|
sed 's/color("clear-blue")/color([0.0,1.0,0.0,0.9])/g' -i $@
|
||||||
sed 's/color("clear-blue")/color([0.0,0.0,1.0,0.9])/g' -i $@
|
sed 's/color("clear-blue")/color([0.0,0.0,1.0,0.9])/g' -i $@
|
||||||
|
|
89
src/main.rs
89
src/main.rs
|
@ -3,11 +3,21 @@ use nalgebra::Vector3;
|
||||||
use scad::*;
|
use scad::*;
|
||||||
use selig::SeligFile;
|
use selig::SeligFile;
|
||||||
use selig::Span;
|
use selig::Span;
|
||||||
|
use std::env::args;
|
||||||
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 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());
|
||||||
|
let gen_parts = args.contains(&"parts".to_string());
|
||||||
|
let gen_allparts = args.contains(&"sheet".to_string());
|
||||||
|
let gen_assembly = args.contains(&"assembly".to_string());
|
||||||
|
let gen_test = args.contains(&"test".to_string());
|
||||||
|
|
||||||
let mut scad_file = ScadFile::new();
|
let mut scad_file = ScadFile::new();
|
||||||
|
|
||||||
let mut parts = Vec::new();
|
let mut parts = Vec::new();
|
||||||
|
@ -22,7 +32,7 @@ fn main() {
|
||||||
// main wing
|
// main wing
|
||||||
let mut wing_transform = mirrored_wing(&wing_airfoil, &WING);
|
let mut wing_transform = mirrored_wing(&wing_airfoil, &WING);
|
||||||
|
|
||||||
#[cfg(feature = "film")] {
|
if gen_film {
|
||||||
let mut wrapped = scad!(Hull; wing_transform.visualization.clone());
|
let mut wrapped = scad!(Hull; wing_transform.visualization.clone());
|
||||||
wrapped = scad!(Minkowski; wrapped);
|
wrapped = scad!(Minkowski; wrapped);
|
||||||
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
||||||
|
@ -38,39 +48,51 @@ fn main() {
|
||||||
fuselage.visualization));
|
fuselage.visualization));
|
||||||
parts.append(fuselage.parts.as_mut());
|
parts.append(fuselage.parts.as_mut());
|
||||||
|
|
||||||
t_tail(control_airfoil, &mut parts, &mut scad_file, wing_airfoil);
|
if gen_t_tail {
|
||||||
//v_tail(control_airfoil, &mut parts, &mut scad_file, wing_airfoil);
|
t_tail(&control_airfoil, &mut parts, &mut scad_file, &wing_airfoil, gen_film);
|
||||||
|
}
|
||||||
// every part visualized together
|
if gen_v_tail {
|
||||||
scad_file.write_to_file(String::from("build/assembly.scad"));
|
v_tail(control_airfoil, &mut parts, &mut scad_file, wing_airfoil, gen_film);
|
||||||
|
|
||||||
// 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
|
if gen_assembly {
|
||||||
let mut allparts = ScadFile::new();
|
// every part visualized together
|
||||||
parts.push(scad!(Square(vec2(STOCK_WIDTH, STOCK_HEIGHT))));
|
scad_file.write_to_file(String::from("build/assembly.scad"));
|
||||||
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
|
if gen_parts {
|
||||||
let mut test = ScadFile::new();
|
// every part in seperate files
|
||||||
let test_airfoil = SeligFile::parse(include_str!("../m1-il.dat"));
|
for (idx, part) in parts.clone().into_iter().enumerate() {
|
||||||
let wing = wing(&test_airfoil, &RUDDER, SparType::Top);
|
let mut file = ScadFile::new();
|
||||||
test.add_object(scad!(NamedColor("clear-blue".to_string()); wing.0.visualization));
|
file.set_detail(50);
|
||||||
test.add_object(scad!(NamedColor("clear-red".to_string()); wing.1.visualization));
|
file.add_object(part);
|
||||||
test.write_to_file(String::from("build/testwing.scad"));
|
file.write_to_file(format!("build/part{idx:0>3}.scad"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if gen_allparts {
|
||||||
|
// 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());
|
||||||
|
}
|
||||||
|
|
||||||
|
if gen_test {
|
||||||
|
// 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<ScadObject>, scad_file: &mut ScadFile, wing_airfoil: SeligFile) {
|
fn t_tail(control_airfoil: &SeligFile, parts: &mut Vec<ScadObject>, scad_file: &mut ScadFile, wing_airfoil: &SeligFile, gen_film: bool) {
|
||||||
// rudder
|
// rudder
|
||||||
let mut rudder = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)));
|
let mut rudder = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)));
|
||||||
let (mut struts,mut spar) = wing(
|
let (mut struts,mut spar) = wing(
|
||||||
|
@ -84,7 +106,7 @@ fn t_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &m
|
||||||
parts.append(spar.parts.as_mut());
|
parts.append(spar.parts.as_mut());
|
||||||
rudder = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); rudder);
|
rudder = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); rudder);
|
||||||
|
|
||||||
#[cfg(feature = "film")] {
|
if gen_film {
|
||||||
let mut wrapped = scad!(Hull; rudder.clone());
|
let mut wrapped = scad!(Hull; rudder.clone());
|
||||||
wrapped = scad!(Minkowski; wrapped);
|
wrapped = scad!(Minkowski; wrapped);
|
||||||
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
||||||
|
@ -96,7 +118,7 @@ fn t_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &m
|
||||||
// elevator
|
// elevator
|
||||||
let mut elevator = mirrored_wing(&wing_airfoil, &ELEVATOR);
|
let mut elevator = mirrored_wing(&wing_airfoil, &ELEVATOR);
|
||||||
|
|
||||||
#[cfg(feature = "film")] {
|
if gen_film {
|
||||||
let elevator = scad!(Translate(vec3(LENGTH - ELEVATOR_CHORD, 0.0, 0.0)); elevator.visualization.clone());
|
let elevator = scad!(Translate(vec3(LENGTH - ELEVATOR_CHORD, 0.0, 0.0)); elevator.visualization.clone());
|
||||||
let mut wrapped = scad!(Hull; elevator);
|
let mut wrapped = scad!(Hull; elevator);
|
||||||
wrapped = scad!(Minkowski; wrapped);
|
wrapped = scad!(Minkowski; wrapped);
|
||||||
|
@ -108,7 +130,7 @@ fn t_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &m
|
||||||
parts.append(&mut elevator.parts);
|
parts.append(&mut elevator.parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn v_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &mut ScadFile, wing_airfoil: SeligFile) {
|
fn v_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &mut ScadFile, wing_airfoil: SeligFile, gen_film: bool) {
|
||||||
// rudder
|
// rudder
|
||||||
let mut ruddervators = scad!(Union);
|
let mut ruddervators = scad!(Union);
|
||||||
let mut ruddervator = scad!(Union);//scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)));
|
let mut ruddervator = scad!(Union);//scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)));
|
||||||
|
@ -127,8 +149,9 @@ fn v_tail(control_airfoil: SeligFile, parts: &mut Vec<ScadObject>, scad_file: &m
|
||||||
ruddervators.add_child(ruddervator);
|
ruddervators.add_child(ruddervator);
|
||||||
ruddervators = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); ruddervators);
|
ruddervators = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); ruddervators);
|
||||||
|
|
||||||
#[cfg(feature = "film")] {
|
if gen_film {
|
||||||
let mut wrapped = scad!(Hull; rudder.clone());
|
// this won't look right
|
||||||
|
let mut wrapped = scad!(Hull; ruddervators.clone());
|
||||||
wrapped = scad!(Minkowski; wrapped);
|
wrapped = scad!(Minkowski; wrapped);
|
||||||
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
wrapped.add_child(scad!(Sphere(Radius(1.0))));
|
||||||
scad_file.add_object(scad!(NamedColor("clear-red".to_string()); wrapped));
|
scad_file.add_object(scad!(NamedColor("clear-red".to_string()); wrapped));
|
||||||
|
|
Loading…
Reference in a new issue