From 69ad02260c9e0814909b425b2ed6eacd77fe11c8 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Tue, 31 Oct 2023 13:14:25 -0500 Subject: [PATCH] added svg part registry --- Makefile | 21 ++++++++++++++++++++- src/main.rs | 15 +++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 780f80b..4f36cc7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,24 @@ -out.scad: e393.selig src/*.rs +build/%.scad: e393.selig src/*.rs + mkdir -p build cargo run e393.selig: curl http://airfoiltools.com/airfoil/seligdatfile?airfoil=e393-il > e393.selig + +build/%.png: build/%.scad + OpenSCAD --colorscheme Metallic -o $@ $< + +build/%.svg: build/%.scad + OpenSCAD -o $@ $< + +build/%.stl: build/%.scad + OpenSCAD -o $@ $< + +.PHONY: svgs clean +svgs: build/%.scad + ls build/part*.scad | sed 's/scad/svg/' | xargs make + +clean: + rm -rf build + rm *.selig + diff --git a/src/main.rs b/src/main.rs index 745677a..2eb0556 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +use std::sync::Mutex; + use nalgebra::Vector3; use scad::*; use constants::*; @@ -5,9 +7,11 @@ use selig::Airfoil; mod constants; mod selig; +static PARTS: Mutex> = Mutex::new(Vec::new()); + fn main() { let mut scad_file = ScadFile::new(); - let mut parts: Vec = Vec::new(); + //let mut parts: Vec = Vec::new(); scad_file.set_detail(50); @@ -35,7 +39,6 @@ fn main() { let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0))); let strut = strut(&e393, CHORD * falloff, CARDBOARD_WIDTH); - parts.push(strut.clone()); transform.add_child(strut); wing.add_child(transform); } @@ -48,12 +51,11 @@ fn main() { scad_file.write_to_file(String::from("build/assembly.scad")); - for (idx, part) in parts.into_iter().enumerate() { + for (idx, part) in PARTS.lock().unwrap().to_owned().into_iter().enumerate() { let mut file = ScadFile::new(); file.set_detail(50); file.add_object(part); file.write_to_file(format!("build/part{idx}.scad")); - } } @@ -70,6 +72,7 @@ fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject { let unit: Vector3 = Vector3::new(1.0, 1.0, 1.0); let scaled = scad!(Scale(unit * chord); shape); + register_part(scaled.clone()); let strut = scad!(LinearExtrude(extrude); scaled); let rotated = scad!(Rotate(90.0, vec3(1.0, 0.0, 0.0)); strut); rotated @@ -88,3 +91,7 @@ fn spar(length: f32) -> ScadObject { spar } + +fn register_part(part: ScadObject) { + PARTS.lock().unwrap().push(part); +}