use <./common/common.scad>; $fn = 150; SPACING = 42; WALL_THICKNESS = 1.25 + .5; PLANE_BACK = 1.55; CART_H = 16.85 + .75; FEED_D = 19.14; TAKEUP_D = 22.04; TAKEUP_OFFSET_Y = -(TAKEUP_D - FEED_D) / 2; CONNECT_X = SPACING - (TAKEUP_D / 2) - (FEED_D / 2) + 2; CONNECT_Y = 8.85; CONNECT_Z = 1.3; CONNECT_OFFSET_X = ((TAKEUP_D / 2) - (FEED_D / 2)) / 2; CONNECT_OFFSET_Y = (FEED_D / 2) - (CONNECT_Y / 2) - 5.02; CONNECT_OFFSET_Z = -(CART_H / 2) + (CONNECT_Z / 2); FILM_NEG_Y = .75; FILM_NEG_OFFSET_Y = 8.5; CAP_LIP_H = 5.92; CAP_LIP = .56; CAP_THICKNESS = .5; TOP_H = 1; module 110_cartridge_case () { H = 19; FOD = FEED_D + 3; FID = FEED_D + .5; TOD = TAKEUP_D + 3; TID = TAKEUP_D + .5; MID = 17; MID_OFFSET = 2.55; difference () { union () { translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD), h = H, center = true); translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD), h = H, center = true); translate([0, MID_OFFSET, 0]) cube([SPACING, MID, H], center = true); } translate([0, 0, -1]) union () { translate([SPACING / 2, 0, 0]) cylinder(r = R(FID), h = H, center = true); translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TID), h = H, center = true); translate([0, MID_OFFSET - .25, 0]) cube([SPACING, MID - 2, H], center = true); } } } module 110_cartridge_cover () { H = 4; FOD = FEED_D + 3; TOD = TAKEUP_D + 3; MID = 17; MID_OFFSET = 2.55; difference () { union () { translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD + 3), h = H, center = true); translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD + 3), h = H, center = true); translate([0, MID_OFFSET, 0]) cube([SPACING, MID + 3, H], center = true); } translate([0, 0, 1.5]) union () { translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD), h = H, center = true); translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD), h = H, center = true); translate([0, MID_OFFSET, 0]) cube([SPACING, MID, H], center = true); } } } module 110_cartridge_takeup () { H = 15.95; D = 15.5; INNER_D = 14; difference() { cylinder(r = R(D), h = H, center = true); translate([0, 0, .65]) cylinder(r = R(INNER_D), h = H, center = true); translate([-3, 7, .65]) rotate([0, 0, 60]) cube([10, .5, H], center = true); } translate([0, 0, -(D / 2) + 1.5]) cylinder(r = R(4), h = 3, center = true); for (i = [0:3]) { rotate([0, 0, i * 90]) translate([(D / 4) - .75, 1.25, -(D / 2) + 1.5]) cube([(D / 2) + 1, 1, 3], center = true); } } module 110_cartridge_takeup_cover () { INNER_D = TAKEUP_D - WALL_THICKNESS; difference () { union () { cylinder(r = R(TAKEUP_D), h = 1, center = true); translate([TAKEUP_D / 4, TAKEUP_D / 4, 0]) { cube([TAKEUP_D / 2, TAKEUP_D / 2, 1], center = true); } translate([0, 0, -1.5]) cylinder(r = R(13.87) + .2, h = 3, center = true); } translate([0, 0, .65]) cylinder(r = R(13.87) - .5, h = 100, center = true); } translate([(TAKEUP_D / 2) - 1, 7.5, -1]) cube([1.8, 1.8, 1.8], center = true); } module feed (pos = [0, 0, 0]) { INNER_D = FEED_D - WALL_THICKNESS; 1_OFFSET_Z = (CART_H / 2) - (CAP_LIP_H / 2); translate(pos) difference () { union () { cylinder(r = R(FEED_D), h = CART_H, center = true); translate([-FEED_D / 4, FEED_D / 4, 0]) { cube([FEED_D / 2, FEED_D / 2, CART_H], center = true); } } translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true); //film neg translate ([-FEED_D / 2, FILM_NEG_OFFSET_Y, WALL_THICKNESS / 2]) { cube([FEED_D, FILM_NEG_Y, CART_H], center = true); } } } module feed_cap () { cylinder(r = R(FEED_D), h = CART_H, center = true); } module feed_cap_neg () { INNER_D = FEED_D - CAP_LIP; difference () { cylinder(r = R(FEED_D), h = CAP_LIP_H, center = true); translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true); translate([-FEED_D / 4, FEED_D / 4, 0]) { cube([FEED_D / 2, FEED_D / 2, CART_H], center = true); } } } module takeup (pos = [0, 0, 0]) { INNER_D = TAKEUP_D - WALL_THICKNESS; translate(pos) difference () { union () { cylinder(r = R(TAKEUP_D), h = CART_H, center = true); translate([TAKEUP_D / 4, TAKEUP_D / 4, 0]) { cube([TAKEUP_D / 2, TAKEUP_D / 2, CART_H], center = true); } } //notch translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true); //film neg translate ([TAKEUP_D / 2, FILM_NEG_OFFSET_Y - TAKEUP_OFFSET_Y, WALL_THICKNESS / 2]) { cube([TAKEUP_D, FILM_NEG_Y, CART_H], center = true); } } } module connector (pos = [0, 0, 0]) { translate(pos) cube([CONNECT_X, CONNECT_Y, CONNECT_Z], center = true); } module 110_cartridge_body () { feed([SPACING / 2, 0, 0]); takeup([-SPACING / 2, TAKEUP_OFFSET_Y, 0]); connector([CONNECT_OFFSET_X, CONNECT_OFFSET_Y, CONNECT_OFFSET_Z]); } PART = "body"; if (PART == "case") { rotate([180, 0, 0]) 110_cartridge_case(); } else if (PART == "cover") { 110_cartridge_cover(); } else if (PART == "takeup") { 110_cartridge_takeup(); } else if (PART == "body") { 110_cartridge_body(); }