/* * Copyright (c) Camden Dixie O'Brien * SPDX-License-Identifier: AGPL-3.0-only */ module shaft (length, radius, taper_length) { translate([-length / 2, 0, 0]) rotate([0, 90, 0]) { non_tapered_length = length - taper_length; cylinder(non_tapered_length, r = radius); translate([0, 0, non_tapered_length]) cylinder(taper_length, radius, 0); } } module panel (length, height, thickness, wedge_length) { rotate([90, 0, 0]) translate([0, 0, -thickness / 2]) scale([-1, 1, 1]) linear_extrude(thickness) polygon([[0, 0], [wedge_length, height], [length, height], [length, 0]]); } module vane (length, shaft_radius, shaft_taper_length, panel_height, panel_thickness, panel_wedge_length, hub_height, hub_outer_radius, hub_inner_radius) { union () { difference () { union () { shaft (length, shaft_radius, shaft_taper_length); cylinder(hub_height, r = hub_outer_radius, center = true); } cylinder(hub_height + 1, r = hub_inner_radius, center = true); } panel_length = length / 2 - hub_outer_radius; translate ([-hub_outer_radius, 0, 0]) panel (panel_length, panel_height, panel_thickness, panel_wedge_length); } } vane (260, 6, 24, 80, 3, 40, 14, 12, 6);