From 73418031ae95e058f49b4615f4aeb6f28d6f100b Mon Sep 17 00:00:00 2001 From: mattmcw Date: Thu, 12 Sep 2024 23:10:08 -0400 Subject: [PATCH] Save gate work (broken). --- app/data/cfg.json | 2 +- app/package-lock.json | 2 +- app/package.json | 2 +- data/cfg.json | 2 +- package-lock.json | 4 +- package.json | 2 +- processing/mcopy/cfg.json | 2 +- scad/mcopy_gate.scad | 210 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 218 insertions(+), 8 deletions(-) create mode 100644 scad/mcopy_gate.scad diff --git a/app/data/cfg.json b/app/data/cfg.json index 6a4410a..9a6d96a 100644 --- a/app/data/cfg.json +++ b/app/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.125", + "version": "1.8.126", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/app/package-lock.json b/app/package-lock.json index 863f7fd..f7c1df3 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.125", + "version": "1.8.126", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/app/package.json b/app/package.json index cd78b16..a8b1ab8 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "mcopy-app", - "version": "1.8.125", + "version": "1.8.126", "description": "GUI for the mcopy small gauge film optical printer platform", "main": "main.js", "scripts": { diff --git a/data/cfg.json b/data/cfg.json index 6a4410a..9a6d96a 100644 --- a/data/cfg.json +++ b/data/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.125", + "version": "1.8.126", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/package-lock.json b/package-lock.json index 4482f99..bd1215a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mcopy", - "version": "1.8.125", + "version": "1.8.126", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mcopy", - "version": "1.8.125", + "version": "1.8.126", "license": "MIT", "dependencies": { "alert": "file:app/lib/alert", diff --git a/package.json b/package.json index 42c944b..0c248af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mcopy", - "version": "1.8.125", + "version": "1.8.126", "description": "Small gauge film optical printer platform", "main": "build.js", "directories": { diff --git a/processing/mcopy/cfg.json b/processing/mcopy/cfg.json index 6a4410a..9a6d96a 100644 --- a/processing/mcopy/cfg.json +++ b/processing/mcopy/cfg.json @@ -1,5 +1,5 @@ { - "version": "1.8.125", + "version": "1.8.126", "ext_port": 1111, "profiles": { "mcopy": { diff --git a/scad/mcopy_gate.scad b/scad/mcopy_gate.scad new file mode 100644 index 0000000..c8e1a22 --- /dev/null +++ b/scad/mcopy_gate.scad @@ -0,0 +1,210 @@ +include <./common/common.scad>; + +PlateZ = 1.3 + 1; +PlateX = 35.1; +PlateY = 30.1; + +FrontPlateVoidX = 14.2; +FrontPlateVoidY = 12.9; + +BackPlateVoidX = 10.77; +BackPlateVoidY = 8.71; + +FrontPlateClearanceX = 10.5; + +FrontPlateSpacerX = 15; +FrontPlateSpacerZ = 0.5; + +PerfSpacingX = 12.1; +PerfSpacingY = 22.75; + +AlignmentX = 13.2; +AlignmentSpacingY = 22.7; + +PlateBoltSpacingY = 14; +PlateBoltX = 2.58; +BoltD = 2; + +Super16X = 12.4; +Super16Y = 7.5; + +module perf_void (pos = [0, 0, 0]) { + translate(pos) cube([2.3, 1.79, 10], center = true); +} + +module perfs_void () { + perf_void([PerfSpacingX / 2, PerfSpacingY / 2, 0]); + perf_void([-PerfSpacingX / 2, PerfSpacingY / 2, 0]); + perf_void([PerfSpacingX / 2, -PerfSpacingY / 2, 0]); + perf_void([-PerfSpacingX / 2, -PerfSpacingY / 2, 0]); +} + +module front_plate_void (pos = [0, 0, 0]) { + translate(pos) { + //large void + cube([FrontPlateVoidX + 3.5, FrontPlateVoidY, PlateZ + 1], center = true); + //film Clearance + film_clearance_void([0, 0, -1 - 0.2]); + //perfs + perfs_void(); + } +} + +module front_plate () { + + difference () { + union () { + rounded_cube([PlateX, PlateY, PlateZ], d = 2, $fn = 25, center = true); + //front plate spacer + translate([-(PlateX / 2) + (FrontPlateSpacerX / 2), 0, (-PlateZ / 2) - (FrontPlateSpacerZ / 2)]) cube([FrontPlateSpacerX, PlateY, FrontPlateSpacerZ], center = true); + } + front_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -0.2]); + //corners + translate([(-PlateX / 2), (PlateY / 2) - 0.8, 0]) rotate([0, 0, 35]) cube([7.1 * 2, 7.1, PlateZ + 2], center = true); + translate([(-PlateX / 2), (-PlateY / 2) + 0.8, 0]) rotate([0, 0, -35]) cube([7.1 * 2, 7.1, PlateZ + 2], center = true); + //bolts + translate([(-PlateX / 2) + PlateBoltX, PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30); + translate([(-PlateX / 2) + PlateBoltX, -PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30); + //alignment rod voids + translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, 0]) cylinder(r = R(BoltD + 0.1), h = 10, center = true , $fn = 30); + translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, 0]) cylinder(r = R(BoltD + 0.1), h = 10, center = true , $fn = 30); + } +} + +module gate_mask_slide (pos = [0, 0, 0], pad = 0.0, format = "") { + Z = -1; + GuideAdjust = -1.5; + FormatBevelY = format == "super16" ? 5 : 5.5; + + translate(pos) { + difference () { + union () { + translate([0, 0, Z]) cube([20, FrontPlateVoidY + pad, PlateZ + 2], center = true); + intersection () { + translate([0, 0, Z]) cube([20, 100, PlateZ + 2], center = true); + union () { + translate([0, FrontPlateVoidY / 2 + GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true); + translate([0, -FrontPlateVoidY / 2 - GuideAdjust, Z]) rotate([45, 0, 0]) cube([20, PlateZ + 2 + pad, PlateZ + 2 + pad], center = true); + } + } + if (format != "") { + translate([(20 / 2) + .6, 0, -3.5]) cube([2, FrontPlateVoidY + 8, PlateZ + 2 + 5], center = true); + } + } + + // difference + if (format != "") { + difference () { + film_clearance_void([0, 0, 1 + 0.2]); + if (format == "standard16" || format == "super16") { + difference () { + cube([BackPlateVoidX + 10, BackPlateVoidY + 6, 10], center = true); + translate([0, BackPlateVoidY / 2 + FormatBevelY, 4.5]) rotate([-20, 0, 0]) cube([FrontPlateClearanceX + 3, 10, 10], center = true); + translate([0, -BackPlateVoidY / 2 - FormatBevelY, 4.5]) rotate([20, 0, 0]) cube([FrontPlateClearanceX + 3, 10, 10], center = true); + } + } + } + } + + if (format == "standard16") { + cube([BackPlateVoidX, BackPlateVoidY, 10], center = true); + translate([0, 0, -4.5]) trap_cube(height = 5, top_x = BackPlateVoidX, top_y = BackPlateVoidY, bottom_x = BackPlateVoidX + 5, bottom_y = BackPlateVoidY + 5, wall_thickness = 50); + + } else if (format == "super16") { + translate([(-BackPlateVoidX / 2) + (Super16X / 2), 0, 0]) { + cube([Super16X, Super16Y, 10], center = true); + translate([0, 0, -4.5]) trap_cube(height = 5, top_x = Super16X, top_y = Super16Y, bottom_x = Super16X + 5, bottom_y = Super16Y + 5, wall_thickness = 50); + } + + } + } + //translate([0, 0, -5]) trap_cube(height = 5, top_x = BackPlateVoidX, top_y = BackPlateVoidY, bottom_x = BackPlateVoidX + 5, bottom_y = BackPlateVoidY + 5, wall_thickness = 50); + } + +} + +module gate_mask_slide_standard16 (pos = [0, 0, 0]) { + gate_mask_slide(pos, pad = 0.0, format = "standard16"); +} + +module gate_mask_slide_super16 (pos = [0, 0, 0]) { + gate_mask_slide(pos, pad = 0.0, format = "super16"); +} + +module film_clearance_void (pos = [0, 0, 0]) { + Z = -0.5; + translate(pos) { + //film clearance + cube([FrontPlateClearanceX, PlateY + 1, PlateZ], center = true); + //bevels + intersection () { + union () { + translate([FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); + translate([-FrontPlateClearanceX / 2, 0, 0]) rotate([0, 45, 0]) cube([2, PlateY + 1, 2], center = true); + } + cube([FrontPlateClearanceX + 40, PlateY + 1, PlateZ], center = true); + } + } +} + +module back_plate_void (pos = [0, 0, 0]) { + translate(pos) { + //large void + translate([(PlateX / 2) - (20 / 2) - (FrontPlateVoidX / 2) , 0, 0]) { + cube([20, FrontPlateVoidY + 0.2, 10], center = true); + gate_mask_slide( pad = 0.2); + } + //film clearance + film_clearance_void([0, 0, 1 + 0.2]); + //perfs + perfs_void(); + } +} + +module back_plate () { + RodZ = 4; + ExtraPlateZ = 1; + difference () { + union () { + rounded_cube([PlateX, PlateY, PlateZ], d = 2, $fn = 25, center = true); + translate([0, 0, -(PlateZ / 2) - (ExtraPlateZ / 2)]) rounded_cube([PlateX, PlateY, 2], d = ExtraPlateZ, $fn = 25, center = true); + } + back_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, 0]); + //corners + translate([(-PlateX / 2), (PlateY / 2) - 0.8, 0]) rotate([0, 0, 35]) cube([7.1 * 2, 7.1, 10], center = true); + translate([(-PlateX / 2), (-PlateY / 2) + 0.8, 0]) rotate([0, 0, -35]) cube([7.1 * 2, 7.1, 10], center = true); + //bolts + translate([(-PlateX / 2) + PlateBoltX, PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30); + translate([(-PlateX / 2) + PlateBoltX, -PlateBoltSpacingY / 2, 0]) cylinder(r = R(BoltD), h = 10, center = true , $fn = 30); + } + //alignment rods + translate([(-PlateX / 2) + AlignmentX, AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(BoltD), h = RodZ, center = true , $fn = 30); + translate([(-PlateX / 2) + AlignmentX, -AlignmentSpacingY / 2, RodZ / 2]) cylinder(r = R(BoltD), h = RodZ, center = true , $fn = 30); +} + +module debug () { + //front_plate(); + translate([0, 0, -3]) back_plate(); + gate_mask_slide_standard16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3]); + gate_mask_slide_super16([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, -3+3]); + //front_plate_void([(PlateX / 2) - (FrontPlateVoidX / 2) - 2.41, 0, 0]); + film_clearance_void([0, 0, 15]); + +} + +PART="gate_mask_slide_super16"; + +if (PART == "front_plate") { + rotate([0, 180, 0]) front_plate(); +} else if (PART == "back_plate") { + back_plate(); +} else if (PART == "gate_mask_slide") { + rotate([0, 90, 0]) gate_mask_slide(); +} else if (PART == "gate_mask_slide_standard16") { + rotate([0, 90, 0]) gate_mask_slide_standard16(); +} else if (PART == "gate_mask_slide_super16") { + rotate([0, 90, 0]) gate_mask_slide_super16(); + +} else { + debug(); +} \ No newline at end of file