include <./gnal_v3.scad>; $fn = 250; REEL_H = 42; REEL_D = 94; REEL_OUTER_WALL_H = 4; REEL_OUTER_WALL_W = 3; REEL_INNER_D = 25.7 + 6; REEL_INNER_H = 19.5; REEL_INNER_WALL_W = 3; SPOKE_H = 3; ROTATIONS = 14; module notches (pos = [0, 0, 0], pad = 0) { translate(pos) { intersection () { cylinder(r = (29.5 + pad) / 2, h = 6, center = true); rotate([0, 45, 0]) cube([3, 31, 3], center = true); } } } module reel_frame () { difference () { union () { //outer wall translate([0, 0, REEL_OUTER_WALL_H / 2]) difference () { cylinder(r = REEL_D / 2, h = REEL_OUTER_WALL_H, center = true); cylinder(r = (REEL_D / 2) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true); } //inner wall translate([0, 0, REEL_INNER_H / 2]) difference () { cylinder(r = REEL_INNER_D / 2, h = REEL_INNER_H, center = true); cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true); translate([14, 0, 0]) rotate([0, 0, 45]) cube([10, 0.3, 20], center = true); } //top notches translate([0, 0, 19.4]) difference () { notches(pad = -0.4); cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = 6 + 1, center = true); } //spokes translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) { rotate([0, 0, i * (360 / 6)]) { translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) { cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true); } } } translate([0, 0, 4]) rotate([0, 0, 8]) spiral(rotations = ROTATIONS, fn = $fn, start_d = 29.5, bottom = -4); } //bottom notches notches(pad = 0.0); } } module reel_top () { difference () { union () { //outer wall translate([0, 0, SPOKE_H / 2]) difference () { cylinder(r = REEL_D / 2, h = SPOKE_H, center = true); cylinder(r = (REEL_D / 2) - REEL_OUTER_WALL_W, h = REEL_OUTER_WALL_H + 1, center = true); } //inner wall translate([0, 0, SPOKE_H / 2]) difference () { cylinder(r = REEL_INNER_D / 2, h = SPOKE_H, center = true); cylinder(r = (REEL_INNER_D / 2) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true); } translate([0, 0, SPOKE_H / 2]) difference () { cylinder(r = (REEL_INNER_D + REEL_D) / 4, h = SPOKE_H, center = true); cylinder(r = ((REEL_INNER_D + REEL_D) / 4) - REEL_INNER_WALL_W, h = REEL_INNER_H + 1, center = true); } //spokes translate([0, 0, SPOKE_H / 2]) for (i = [0:5]) { rotate([0, 0, i * (360 / 6)]) { translate([0, ((REEL_D - REEL_INNER_D) / 2) - 1.5, 0]) { cube([4.5, (REEL_D - REEL_INNER_D) / 2, SPOKE_H], center = true); } } } } intersection () { cylinder(r = 30.5 / 2, h = 6, center = true); rotate([0, 45, 0]) cube([3, 31, 3], center = true); } } } PART = "reel_frame"; if (PART == "reel_frame") { reel_frame(); } else if (PART == "reel_top") { rotate([180, 0, 0]) reel_top(); }