added range for topspar
This commit is contained in:
parent
5c565be49c
commit
015cbee1e6
1 changed files with 44 additions and 25 deletions
69
src/main.rs
69
src/main.rs
|
@ -36,7 +36,7 @@ fn main() {
|
||||||
|
|
||||||
// struts
|
// struts
|
||||||
for port in [true,false] {
|
for port in [true,false] {
|
||||||
let mut wing = wing(&wing_airfoil, STRUTS/2, WINGSPAN/2.0, CHORD, CHORD * WING_TAPER);
|
let mut wing = wing(&wing_airfoil, STRUTS/2, WINGSPAN/2.0, CHORD, CHORD * WING_TAPER, SparType::Top);
|
||||||
wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing);
|
wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing);
|
||||||
if port {
|
if port {
|
||||||
wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing);
|
wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing);
|
||||||
|
@ -53,7 +53,7 @@ fn main() {
|
||||||
|
|
||||||
// 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)));
|
||||||
rudder.add_child(wing(&control_airfoil, RUDDER_STRUTS, RUDDER_HEIGHT, RUDDER_CHORD, RUDDER_CHORD * RUDDER_TAPER));
|
rudder.add_child(wing(&control_airfoil, RUDDER_STRUTS, RUDDER_HEIGHT, RUDDER_CHORD, RUDDER_CHORD * RUDDER_TAPER, SparType::Center));
|
||||||
rudder.add_child(spar(RUDDER_HEIGHT, false));
|
rudder.add_child(spar(RUDDER_HEIGHT, false));
|
||||||
rudder = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); rudder);
|
rudder = scad!(Translate(vec3(LENGTH-RUDDER_CHORD, 0.0, 0.0)); rudder);
|
||||||
scad_file.add_object(rudder);
|
scad_file.add_object(rudder);
|
||||||
|
@ -61,7 +61,7 @@ fn main() {
|
||||||
// elevator
|
// elevator
|
||||||
let mut elevator = scad!(Translate(vec3(LENGTH-ELEVATOR_CHORD, 0.0,0.0)));
|
let mut elevator = scad!(Translate(vec3(LENGTH-ELEVATOR_CHORD, 0.0,0.0)));
|
||||||
for port in [true,false] {
|
for port in [true,false] {
|
||||||
let mut wing = wing(&control_airfoil, ELEVATOR_STRUTS, ELEVATOR_HEIGHT, ELEVATOR_CHORD, ELEVATOR_CHORD * ELEVATOR_TAPER);
|
let mut wing = wing(&control_airfoil, ELEVATOR_STRUTS, ELEVATOR_HEIGHT, ELEVATOR_CHORD, ELEVATOR_CHORD * ELEVATOR_TAPER, SparType::Top);
|
||||||
wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing);
|
wing = scad!(Translate(vec3(0.0, FUSELAGE_GAP,0.0)); wing);
|
||||||
if port {
|
if port {
|
||||||
wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing);
|
wing = scad!(Mirror(vec3(0.0, 1.0, 0.0)); wing);
|
||||||
|
@ -93,33 +93,27 @@ fn main() {
|
||||||
allparts.write_to_file(format!("build/allparts.scad"));
|
allparts.write_to_file(format!("build/allparts.scad"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum SparType {
|
||||||
|
None,
|
||||||
|
Top,
|
||||||
|
Center,
|
||||||
|
}
|
||||||
|
|
||||||
/// returns a extruded airfoil with the given dimensions
|
/// returns a extruded airfoil with the given dimensions
|
||||||
fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject {
|
fn strut(airfoil: &Airfoil, chord: f32, width: f32, spar: &SparType) -> ScadObject {
|
||||||
let aerofoil = scad::PolygonParameters::new(airfoil.get_points().clone());
|
let aerofoil = scad::PolygonParameters::new(airfoil.get_points().clone());
|
||||||
let shape = scad!(Polygon(aerofoil));
|
let shape = scad!(Polygon(aerofoil));
|
||||||
|
|
||||||
let strut_hole = {
|
let strut_hole = {
|
||||||
let points = airfoil.get_points();
|
match spar {
|
||||||
let points = &points[0.. points.len() / 2];
|
SparType::Top => topspar_negative(airfoil, chord, 0.1..0.6),
|
||||||
let perimeter = span_length(points);
|
SparType::Center => {
|
||||||
let span = points_in_range(&Vec::from(points), perimeter * 0.4.. perimeter);
|
scad!(Union)
|
||||||
|
},
|
||||||
let mut mask = scad!(Union);
|
SparType::None => {
|
||||||
|
scad!(Union)
|
||||||
let mut last: Option<ScadObject> = None;
|
|
||||||
for point in span {
|
|
||||||
let mut current = scad!(Square(vec2(0.001/ chord, CARDBOARD_WIDTH / chord)));
|
|
||||||
current = scad!(Translate2d(point.clone() - vec2(0.0, CARDBOARD_WIDTH/chord)); current);
|
|
||||||
if let Some(last_mask) = last {
|
|
||||||
let mut hull = scad!(Hull);
|
|
||||||
hull.add_child(current.clone());
|
|
||||||
hull.add_child(last_mask);
|
|
||||||
mask.add_child(hull);
|
|
||||||
}
|
}
|
||||||
last = Some(current);
|
|
||||||
}
|
}
|
||||||
register_part(mask.clone());
|
|
||||||
mask
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut strut_shape = scad!(Difference);
|
let mut strut_shape = scad!(Difference);
|
||||||
|
@ -142,6 +136,31 @@ fn strut(airfoil: &Airfoil, chord: f32, width: f32) -> ScadObject {
|
||||||
rotated
|
rotated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn topspar_negative(airfoil: &Airfoil, chord: f32, range: Range<f32>) -> ScadObject {
|
||||||
|
let points = airfoil.get_points();
|
||||||
|
let points = &points[0.. points.len() / 2];
|
||||||
|
let perimeter = span_length(points);
|
||||||
|
|
||||||
|
let span = points_in_range(&Vec::from(points), perimeter * (1.0-range.end) .. perimeter * (1.0-range.start));
|
||||||
|
|
||||||
|
let mut mask = scad!(Union);
|
||||||
|
|
||||||
|
let mut last: Option<ScadObject> = None;
|
||||||
|
for point in span {
|
||||||
|
let mut current = scad!(Square(vec2(0.001/ chord, CARDBOARD_WIDTH / chord)));
|
||||||
|
current = scad!(Translate2d(point.clone() - vec2(0.0, CARDBOARD_WIDTH/chord)); current);
|
||||||
|
if let Some(last_mask) = last {
|
||||||
|
let mut hull = scad!(Hull);
|
||||||
|
hull.add_child(current.clone());
|
||||||
|
hull.add_child(last_mask);
|
||||||
|
mask.add_child(hull);
|
||||||
|
}
|
||||||
|
last = Some(current);
|
||||||
|
}
|
||||||
|
register_part(mask.clone());
|
||||||
|
mask
|
||||||
|
}
|
||||||
|
|
||||||
fn spar(length: f32, center: bool) -> ScadObject {
|
fn spar(length: f32, center: bool) -> ScadObject {
|
||||||
let mut spar = scad!(Union);
|
let mut spar = scad!(Union);
|
||||||
|
|
||||||
|
@ -169,7 +188,7 @@ fn lerp(a: f32, b:f32, x:f32) -> f32 {
|
||||||
a*(1.0-x) + b*x
|
a*(1.0-x) + b*x
|
||||||
}
|
}
|
||||||
|
|
||||||
fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32) -> ScadObject {
|
fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32, spar: SparType) -> ScadObject {
|
||||||
let mut wing = scad!(Translate(vec3(0.0,0.0,0.0)));
|
let mut wing = scad!(Translate(vec3(0.0,0.0,0.0)));
|
||||||
|
|
||||||
// struts
|
// struts
|
||||||
|
@ -183,7 +202,7 @@ fn wing(aerofoil: &Airfoil, struts: usize, length: f32, chord: f32, taper: f32)
|
||||||
|
|
||||||
let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0)));
|
let mut transform = scad!(Translate(vec3(0.0, spacing ,0.0)));
|
||||||
|
|
||||||
let strut = strut(&aerofoil, chord, CARDBOARD_WIDTH);
|
let strut = strut(&aerofoil, chord, CARDBOARD_WIDTH, &spar);
|
||||||
transform.add_child(strut);
|
transform.add_child(strut);
|
||||||
wing.add_child(transform);
|
wing.add_child(transform);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue