diff --git a/housing/path413.svg b/housing/path413.svg new file mode 100644 index 0000000..d7f4625 --- /dev/null +++ b/housing/path413.svg @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + version="1.1" + id="svg39" + width="242.97607" + height="310.57062" + viewBox="0 0 242.97607 310.57062" + sodipodi:docname="aaron.svg" + inkscape:export-filename="IMG_2034.svg" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="0.0" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs43" /> + <sodipodi:namedview + id="namedview41" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:lockguides="false" + inkscape:zoom="0.55429685" + inkscape:cx="1563.2418" + inkscape:cy="586.32843" + inkscape:window-width="1645" + inkscape:window-height="1212" + inkscape:window-x="2886" + inkscape:window-y="169" + inkscape:window-maximized="0" + inkscape:current-layer="g45" /> + <g + inkscape:groupmode="layer" + inkscape:label="Image" + id="g45" + transform="translate(-904.56362,-517.54901)"> + <path + style="display:inline;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#800000;stroke-width:0.52;stroke-opacity:1" + d="m 928.85248,517.80917 c 0,0 82.08602,7.50501 115.85852,12.6647 8.2165,1.2553 73.6428,13.60281 73.6428,13.60281 0,0 15.0222,3.05334 22.6207,7.78805 6.8557,4.2718 7.3867,8.8036 5.054,17.07228 -4.517,16.01191 -5.1597,18.29345 -5.1597,18.29345 l -24.8603,62.8544 -25.2156,59.45716 -24.6327,53.46339 c 0,0 -7.7659,15.54574 -16.6781,28.67949 -8.9122,13.13376 -21.1883,22.57193 -21.1883,22.57193 l -6.4197,5.24017 c 0,0 -6.7141,4.14108 -16.5644,5.54827 -9.85033,1.40719 -35.17968,2.81435 -35.17968,2.81435 h -24.39128 c 0,0 -9.3444,-0.60242 -13.24757,-4.19797 -3.31522,-3.05394 -5.10278,-4.10775 -8.79838,-11.28108 -4.05325,-7.86754 -9.26744,-73.97452 -9.26744,-73.97452 0,0 -7.40117,-102.36203 -7.61882,-107.1406 -0.60645,-13.31425 -1.40719,-74.05501 -1.40719,-74.05501 l -0.52597,-27.81208 c 0,0 -0.97146,-5.73281 5.54827,-9.9308 2.23096,-1.43648 18.43084,-1.65839 18.43084,-1.65839 z" + id="path413" + sodipodi:nodetypes="cscssccccsccsccsscsccsc" + inkscape:label="path413" /> + </g> +</svg> diff --git a/housing/thing.scad b/housing/thing.scad new file mode 100644 index 0000000..21369b9 --- /dev/null +++ b/housing/thing.scad @@ -0,0 +1,117 @@ +module ShifterThing() { + translate([-8, 3, -1]) + linear_extrude(4) + rotate([0, 0, -17]) + rotate([0, 180, 0]) + import("path413.svg", center=true, dpi=94.5); +} + +TOP_PLATE_Y = 101; + +module Foo(width) { + difference() { + linear_extrude(2) + square([width, TOP_PLATE_Y], center=true); + + translate([0, 0, -1]) + linear_extrude(4) + square([width - 4, TOP_PLATE_Y - 4], center=true); + //ShifterThing(); + } +} + +POST_DIAMETER = 6; +POST_OUTER_DIAMETER = 14; +REAR_TAB_LENGTH = 16; +MIN_WALL_THICKNESS = 2; + +module RearPost(height) { + $fn = 80; + diameter = POST_DIAMETER; + + outer_diameter = POST_OUTER_DIAMETER; + + length = (outer_diameter / 2) + (REAR_TAB_LENGTH - outer_diameter); + echo(length); + + difference() { + linear_extrude(height) + union() { + circle(d = outer_diameter); + translate([-(outer_diameter / 2), -length]) + square([outer_diameter, length]); + } + + translate([0, 0, -1]) + linear_extrude(height + 2) + circle(d = diameter); + } +} + +BOX_X = 79; + +module FrontPosts(height) { + x = (BOX_X / 2) + 7; + translate([-x, 0, 0]) + rotate([0, 0, 90]) + FrontPost(height); + + translate([x, 0, 0]) + rotate([0, 0, -90]) + FrontPost(height); +} + +module FrontPost(height) { + $fn = 80; + diameter = POST_DIAMETER; + + outer_diameter = POST_OUTER_DIAMETER; + + length = (outer_diameter / 2) + (16 - outer_diameter); + + difference() { + linear_extrude(height) + union() { + circle(d = outer_diameter); + translate([-(15 / 2), -7]) + polygon([[0, 0], [15, 0], [14.5, 7], [0.5, 7]]); + } + + translate([0, 0, -1]) + linear_extrude(height + 2) + circle(d = diameter); + } + +} + +module RearWall(height) { + rear_post_center_x = (59 / 2) + (POST_DIAMETER / 2); + + for (i = [-1, 1]) { + translate([i * rear_post_center_x, 0, 0]) + RearPost(height); + } + + top_fill_y = REAR_TAB_LENGTH - (POST_OUTER_DIAMETER / 2); + // Top plate between tabs + translate([0, -(top_fill_y / 2), height - MIN_WALL_THICKNESS]) + linear_extrude(MIN_WALL_THICKNESS) + // Just adding +2 to make it slightly wider so everything is connected nicely + square([((rear_post_center_x * 2) - POST_OUTER_DIAMETER) + 2, top_fill_y], center=true); + + linear_extrude(height) + square([(rear_post_center_x * 2) - POST_DIAMETER, 2], center=true); +} + +REAR_POST_Z = 31; + +translate([0, (TOP_PLATE_Y / 2) - (15 / 2), 0]) + FrontPosts(REAR_POST_Z + 2); // front are ~2mm lower + +translate([0, 0, 2]) { +translate([0, -((TOP_PLATE_Y / 2) + 9), 0]) +rotate([0, 0, 180]) + RearWall(REAR_POST_Z); +translate([0, 0, REAR_POST_Z - 2]) + Foo(79); +}