use <./common/common.scad>; use <./knobs/scad/knob.scad>; RAIL_SPACING_HALF_IN = 30; HALF_IN_RAIL_D = 13; BASE_Y = 97.5; ATTACH_H = 20; INDEX_CARD_X = 127; INDEX_CARD_Y = 76.2; INDEX_CARD_43 = (INDEX_CARD_Y / 3) * 4; module bolex_matte_box_rails_attach (pos = [0, 0, 0]) { $fn = 100; translate(pos) translate([0, 0, ATTACH_H / 2]) difference () { union () { translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = ATTACH_H, center = true); translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = ATTACH_H, center = true); cube([RAIL_SPACING_HALF_IN, HALF_IN_RAIL_D + 6, ATTACH_H], center = true); } translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 0.3, h = ATTACH_H + 1, center = true); translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 0.3, h = ATTACH_H + 1, center = true); cube([RAIL_SPACING_HALF_IN, 2, ATTACH_H + 1], center = true); //m4 bolt translate([0, ((HALF_IN_RAIL_D + 6) / 2) + 4, 2]) rotate([90, 30, 0]) { m4_nut(HALF_IN_RAIL_D + 6); cylinder(r = R(4.25), h = 200, center = true, $fn = 50); } } } module bolex_matte_box_rails_cap (pos = [0, 0, 0]) { $fn = 100; translate(pos) translate([0, 0, ATTACH_H / 2]) difference () { union () { translate([RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = 20, center = true); translate([-RAIL_SPACING_HALF_IN / 2, 0, 0]) cylinder(r = R(HALF_IN_RAIL_D) + 3, h = 20, center = true); cube([RAIL_SPACING_HALF_IN, HALF_IN_RAIL_D + 6, ATTACH_H], center = true); } translate([RAIL_SPACING_HALF_IN / 2, 0, 4]) cylinder(r = R(HALF_IN_RAIL_D) + 0.2, h = 20, center = true); translate([-RAIL_SPACING_HALF_IN / 2, 0, 4]) cylinder(r = R(HALF_IN_RAIL_D) + 0.2, h = 20, center = true); } } module card_slot (pos = [0, 0, 0]) { translate(pos) difference() { cube([INDEX_CARD_43, INDEX_CARD_Y + 1, 1.5], center = true); //bevel long edges translate([0, (INDEX_CARD_Y + 1) / 2, 1.1]) rotate([60, 0, 0]) cube([INDEX_CARD_43, 2, 4], center = true); translate([0, (INDEX_CARD_Y + 1) / 2, -1.1]) rotate([-60, 0, 0]) cube([INDEX_CARD_43, 2, 4], center = true); translate([0, -(INDEX_CARD_Y + 1) / 2, 1.1]) rotate([-60, 0, 0]) cube([INDEX_CARD_43, 2, 4], center = true); translate([0, -(INDEX_CARD_Y + 1) / 2, -1.1]) rotate([60, 0, 0]) cube([INDEX_CARD_43, 2, 4], center = true); //inside short edge translate([-INDEX_CARD_43 / 2, 0, 1.1]) rotate([0, 60, 0]) cube([2, INDEX_CARD_Y + 1, 4], center = true); translate([-INDEX_CARD_43 / 2, 0, -1.1]) rotate([0, -60, 0]) cube([2, INDEX_CARD_Y + 1, 4], center = true); } } module matte_box (pos = [0, 0, 0], Hood = 20) { translate(pos) { translate([0, 0, 8 / 2]) difference () { rounded_cube([INDEX_CARD_43 + 4, INDEX_CARD_Y + 8, 8], d = 5, $fn = 40, center = true); cube([INDEX_CARD_43 - 6, INDEX_CARD_Y - 2, 8 + 1], center = true); card_slot([1.5, 0, 0]); card_slot([10, 0, 0]); translate([20, 0, -8 / 2]) cube([INDEX_CARD_43 - 6, INDEX_CARD_Y - 10, 8 ], center = true); } translate([0, 0, (10 / 2) + (Hood / 2)]) difference () { rounded_cube([INDEX_CARD_43 + 4, INDEX_CARD_Y + 8, Hood], d = 5, $fn = 40, center = true); rounded_cube([INDEX_CARD_43 - 4, INDEX_CARD_Y, Hood + 1], d = 5, $fn = 40, center = true); } } } module bolex_matte_box () { BASE_DIST = BASE_Y - ((INDEX_CARD_Y + 8) / 2); bolex_matte_box_rails_attach([0, -BASE_Y, 0]); translate([0, (-BASE_DIST / 2) - ((INDEX_CARD_Y + 8) / 2) + 4, 8 / 2]) { cube([20, BASE_DIST - 2, 8], center = true); translate([6, 0, 6]) cube([3, BASE_DIST - 4, 20], center = true); translate([-6, 0, 6]) cube([3, BASE_DIST - 4, 20], center = true); } matte_box([-12.5, 0, 0]); } PART = "default"; if (PART == "default") { bolex_matte_box(); } else if (PART == "knob") { knob(H = 10, D = 14, DEPTH = 4, BOLT = "M4", TYPE = "hex"); } else if (PART == "rails_cap") { bolex_matte_box_rails_cap(); }