Initial commit
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
$fn=12;
|
||||
|
||||
difference(){
|
||||
cube([20,80,10]);
|
||||
translate([20/2,80/4,50/2])
|
||||
#cylinder(h=51,r=1.5,center=true);
|
||||
translate([20/2,80/4*3,50/2])
|
||||
#cylinder(h=51,r=1.5,center=true);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
$fn=12;
|
||||
|
||||
difference(){
|
||||
cube([20,80,40]);
|
||||
translate([20/2,80/4,40/2])
|
||||
#cylinder(h=46,r=3,center=true);
|
||||
translate([20/2,80/4*3,40/2])
|
||||
#cylinder(h=46,r=3,center=true);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
$fn=12;
|
||||
|
||||
difference(){
|
||||
cube([20,80,45]);
|
||||
translate([20/2,80/4,45/2])
|
||||
#cylinder(h=46,r=3,center=true);
|
||||
translate([20/2,80/4*3,45/2])
|
||||
#cylinder(h=46,r=3,center=true);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
$fn=12;
|
||||
|
||||
difference(){
|
||||
cube([20,80,50]);
|
||||
translate([20/2,80/4,50/2])
|
||||
#cylinder(h=51,r=3,center=true);
|
||||
translate([20/2,80/4*3,50/2])
|
||||
#cylinder(h=51,r=3,center=true);
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,254 @@
|
||||
//Parametric L Bracket
|
||||
//You can make this any length, Width, Height & Thickness you want
|
||||
//You can also have 1, 2 or 4 screws on each leg of the L
|
||||
//8/19/2015 By: David Bunch
|
||||
//
|
||||
//Revised 8/20/2015 to make rounded ends instead of chamfers
|
||||
// and more flexibility on screws
|
||||
//CUSTOMIZER VARIABLES
|
||||
|
||||
/* [Basic Dimensions] */
|
||||
|
||||
//1. Length of Part along 1st L
|
||||
Len = 1.75*25.4; //[25:1:75]
|
||||
|
||||
//2. Width of L along 2nd L
|
||||
Wid = 0.65*25.4; //[25:1:75]
|
||||
|
||||
//3. Height of L Bracket
|
||||
Ht = 1*25.4; //[20:1:75]
|
||||
|
||||
//4. Thickness of Leg along X-Axis
|
||||
Thk_X = 0.25*25.4; //[2:.5:12]
|
||||
|
||||
//5. Thickness of Leg along Y-axis
|
||||
Thk_Y = 0.5*25.4; //[2:.5:12]
|
||||
|
||||
//6. Weld Diameter at L junction
|
||||
WeldDia = 0.5*25.4; //[2:.5:12]
|
||||
|
||||
//7. Round Corners (0 = No, 1 = Yes)
|
||||
RndON = 1; //[0:No, 1:Yes]
|
||||
|
||||
//8. # of parts to make (1,2,3 or 4)
|
||||
Parts = 1; //[1:1:4]
|
||||
|
||||
/* [Hole Sizes] */
|
||||
|
||||
//9. Hole Diameter for Screws (#8 screw default)
|
||||
HoleSize = 3; //[0:#6, 1:#8, 2:#10, 3:3mm, 4:4mm, 5:5mm, 6:6mm]
|
||||
//#10 Screws are 4.5 measured
|
||||
//#8 Screws are 4.2 measured
|
||||
//#6 Screws are 3.4 measured
|
||||
|
||||
//10. Taper or Countersink Hole
|
||||
Tap_CnkSnk = 1; //[0:None, 1:Tapered, 2:Counter Sink]
|
||||
|
||||
//11. Drill Hole Tolerance
|
||||
Tolerance = .1; //[0:.05:.8]
|
||||
|
||||
/* [Hole Offsets] */
|
||||
//12. 1st Hole Offset distance from end of X-Axis
|
||||
HoleOffset_X1 = 10; //[6:.5:30]
|
||||
|
||||
//13. 2nd Hole Offset distance from 1st Hole of X-Axis
|
||||
HoleOffset_X2 = 10; //[6:.5:30]
|
||||
|
||||
//14. 1st Hole Offset distance from end of Y-Axis
|
||||
HoleOffset_Y1 = 0.5*25.4; //[6:.5:30]
|
||||
|
||||
//15. 2nd Hole Offset distance from 1st Hole of Y-Axis
|
||||
HoleOffset_Y2 = 10; //[6:.5:30]
|
||||
|
||||
/* [Number of Holes] */
|
||||
//16. # of Screws on each side of L (1 or 2)
|
||||
Screws_X = 2; //[1:One Screw, 2:Two Screws]
|
||||
|
||||
//17. # of Screws on each side of L (1 or 2)
|
||||
Screws_Y = 1; //[1:One Screw, 2:Two Screws]
|
||||
|
||||
//18. # of Screws along Height of L on X-Axis (1 or 2)
|
||||
Screws_ZX = 1; //[1:One Screw, 2:Two Screws]
|
||||
|
||||
//19. # of Screws along Height of L on Y-Axis (1 or 2)
|
||||
Screws_ZY = 1; //[1:One Screw, 2:Two Screws]
|
||||
|
||||
//20. Screw Height (I use 3/4" screws for default)
|
||||
ScrewHt = 19.0; //[9.5:.5:38]
|
||||
|
||||
//CUSTOMIZER VARIABLES END
|
||||
|
||||
//HoleSize = 4.2; //[#6:3.4, #8:4.2, #10:4.5, 3mm:3, 4mm:4, 5mm:5, 6mm:6]
|
||||
// //#10 Screws are 4.5 measured
|
||||
// //#8 Screws are 4.2 measured
|
||||
// //#6 Screws are 3.4 measured
|
||||
//
|
||||
////10. Taper or Countersink Hole
|
||||
//Tap_CnkSnk = 1; //[0:None, 1:Tapered, 2:Counter Sink]
|
||||
//
|
||||
////11. Dia. of Taper Head of Screw (#8 used for default)
|
||||
//TaperDia = 7.9; //[6.45:#6, 7.95:#8, 9.0:#10, 6:3mm, 4mm:8, 5mm:10, 6mm:12]
|
||||
A_Hole_OD = [3.4,4.2,4.5,3,4,5,6];
|
||||
A_Head_OD = [6.45,7.95,9,6,8,10,12];
|
||||
A_TaperLen = [2.66,3.5,3.9,3,4.2,5.5,6.5];
|
||||
|
||||
HoleOD = A_Hole_OD[HoleSize] + Tolerance; //Calculated Hole Diameter
|
||||
TapOD = A_Head_OD[HoleSize] + Tolerance; //Calculated Tapered Head Diameter
|
||||
TaperLen = A_TaperLen[HoleSize];
|
||||
WeldRad = WeldDia / 2; //Radius of Weld
|
||||
|
||||
//Calcs for Hole(s) along X axis
|
||||
Ht2ZX = Ht / (Screws_ZX + 1); //Half Height or 1/3 height if 2 screws are used
|
||||
echo("Ht2ZX = ", Ht2ZX);
|
||||
H_X = (Len - Thk_Y - WeldRad) / (Screws_X + 1);
|
||||
echo("H_X = ",H_X);
|
||||
//Hole_X = H_X + Thk_Y + WeldRad;
|
||||
Hole_X1 = Len - HoleOffset_X1;
|
||||
Hole_X2 = Hole_X1 - HoleOffset_X2;
|
||||
echo("Hole_X1 = ",Hole_X1);
|
||||
//Hole_X2 = Hole_X1 + H_X;
|
||||
echo("Hole_X2 = ",Hole_X2);
|
||||
//
|
||||
//Calcs for Hole(s) along Y axis
|
||||
Ht2ZY = Ht / (Screws_ZY + 1); //Half Height or 1/3 height if 2 screws are used
|
||||
echo("Ht2ZY = ", Ht2ZY);
|
||||
H_Y = (Wid - Thk_X - WeldRad) / (Screws_Y + 1);
|
||||
echo("H_Y = ",H_Y);
|
||||
//Hole_Y = H_Y + Thk_X + WeldRad;
|
||||
Hole_Y1 = Wid - HoleOffset_Y1;
|
||||
Hole_Y2 = Hole_Y1 - HoleOffset_Y2;
|
||||
echo("Hole_Y = ",Hole_Y1);
|
||||
//Hole_Y2 = Hole_Y + H_Y;
|
||||
echo("Hole_Y2 = ",Hole_Y2);
|
||||
//
|
||||
ScrewThreadHt = ScrewHt - TaperLen;
|
||||
Ht2x = Ht * 2;
|
||||
Ht_Half = Ht / 2;
|
||||
Ires = round(((Ht * 3.14) / 4) / .8) * 4;
|
||||
Hole_Res = round(((TapOD * 3.14) / 4) / 1) * 4;
|
||||
echo(Hole_Res = Hole_Res);
|
||||
module DrawSrewCut()
|
||||
{
|
||||
//This combines the head to the screw
|
||||
if (Tap_CnkSnk == 0)
|
||||
{
|
||||
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
|
||||
|
||||
} else if (Tap_CnkSnk == 1)
|
||||
{
|
||||
union()
|
||||
{
|
||||
cylinder(d1=TapOD,d2=HoleOD,h=TaperLen,$fn=Hole_Res);
|
||||
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
|
||||
}
|
||||
} else if (Tap_CnkSnk == 2)
|
||||
{
|
||||
union()
|
||||
{
|
||||
cylinder(d=TapOD,h=TaperLen,$fn=Hole_Res);
|
||||
cylinder(d=HoleOD,h=ScrewThreadHt,$fn=Hole_Res);
|
||||
}
|
||||
}
|
||||
}
|
||||
module LBracket()
|
||||
{
|
||||
union()
|
||||
{
|
||||
cube([Len,Thk_X,Ht]); //Draw the X axis side
|
||||
cube([Thk_Y,Wid,Ht]); //Draw the Y axis side
|
||||
translate([Thk_Y,Thk_X,0])
|
||||
cylinder(d=WeldDia,h=Ht,$fn=4); //Add the Weld
|
||||
}
|
||||
}
|
||||
module RndCorner_XY()
|
||||
{
|
||||
difference()
|
||||
{
|
||||
cylinder(d=Ht2x,h=Thk_X+Thk_Y,$fn=Ires);
|
||||
translate([0,0,-1])
|
||||
cylinder(d=Ht,h=Thk_X+Thk_Y+2,$fn=Ires);
|
||||
translate([-(Ht2x+2),-(Ht+1),-1])
|
||||
cube([Ht2x+2,Ht2x+2,Thk_X+Thk_Y+2]);
|
||||
}
|
||||
}
|
||||
module Screws_X()
|
||||
{
|
||||
//Drill holes for Screws along the X axis
|
||||
translate([Hole_X1,Thk_X+.02,Ht2ZX])
|
||||
rotate([90,0,0])
|
||||
DrawSrewCut();
|
||||
if (Screws_X == 2)
|
||||
{
|
||||
translate([Hole_X2,Thk_X+.02,Ht2ZX])
|
||||
rotate([90,0,0])
|
||||
DrawSrewCut();
|
||||
}
|
||||
}
|
||||
module Screws_Y()
|
||||
{
|
||||
//Drill holes for Screws along the Y axis
|
||||
translate([Thk_Y+.02,Hole_Y1,Ht2ZY])
|
||||
rotate([0,-90,0])
|
||||
DrawSrewCut();
|
||||
if (Screws_Y == 2)
|
||||
{
|
||||
translate([Thk_Y+.02,Hole_Y2,Ht2ZY])
|
||||
rotate([0,-90,0])
|
||||
DrawSrewCut();
|
||||
}
|
||||
}
|
||||
module DrawL()
|
||||
{
|
||||
rotate([90,0,0])
|
||||
difference()
|
||||
{
|
||||
LBracket();
|
||||
Screws_X();
|
||||
if (Screws_ZX == 2)
|
||||
{
|
||||
translate([0,0,Ht2ZX])
|
||||
Screws_X();
|
||||
}
|
||||
Screws_Y();
|
||||
if (Screws_ZY == 2)
|
||||
{
|
||||
translate([0,0,Ht2ZY])
|
||||
Screws_Y();
|
||||
}
|
||||
if (RndON == 1)
|
||||
{
|
||||
//Round the X-Axis Corner
|
||||
translate([Len-Ht_Half,-1,Ht_Half])
|
||||
rotate([-90,0,0])
|
||||
RndCorner_XY();
|
||||
//Round the Y-Axis Corner
|
||||
translate([-1,Wid-Ht_Half,Ht_Half])
|
||||
rotate([90,0,90])
|
||||
RndCorner_XY();
|
||||
}
|
||||
//The following section is only for visual checks of how far screws go into wood
|
||||
//These will not draw on final render
|
||||
translate([0,-12.7,0])
|
||||
%cube([Hole_X1,12.7,38.1]); //Check how far screw goes into 1/2" wood
|
||||
translate([-19.02,0,0])
|
||||
%cube([19.02,Hole_Y1,38.1]); //Check how far screw goes into 3/4" wood
|
||||
if (Tap_CnkSnk != 0)
|
||||
{
|
||||
translate([Hole_X1,Thk_X + 2 + TaperLen,Ht2ZX])
|
||||
rotate([90,0,0])
|
||||
color("red")
|
||||
%DrawSrewCut();
|
||||
translate([Thk_Y+2+TaperLen,Hole_Y1,Ht2ZY])
|
||||
rotate([0,-90,0])
|
||||
color("red")
|
||||
%DrawSrewCut();
|
||||
}
|
||||
}
|
||||
}
|
||||
//Draw how ever many parts user wants along the Y-Axis
|
||||
for ( i = [1 : Parts] )
|
||||
{
|
||||
translate([0,(Ht+6) * i,0])
|
||||
DrawL();
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,154 @@
|
||||
include <BOSL2/std.scad>
|
||||
|
||||
$fn=20;
|
||||
|
||||
showScan=0;
|
||||
showAnchors=0;
|
||||
showDoor=1;
|
||||
showSeparateObjects=0;
|
||||
|
||||
// model sizes
|
||||
panelThickness=3;
|
||||
|
||||
// door measurements
|
||||
doorGutter=6;
|
||||
doorToBolt=34;
|
||||
|
||||
if(showScan) {
|
||||
// scan
|
||||
// lay flat and set the bottom-right as origin
|
||||
translate([-5,110,55]) rotate([-90,0,0])
|
||||
#rotate([26.9,15,-1]) scale(450) import("scan.stl");
|
||||
}
|
||||
if(showAnchors) {
|
||||
// scale measurement
|
||||
/*
|
||||
translate([-270,162,0])
|
||||
cuboid([20,210,1], anchor=BOTTOM+LEFT);
|
||||
translate([-250,47,0])
|
||||
cuboid([305-20,20,1], anchor=BOTTOM+LEFT);
|
||||
translate([-250,47+210+20,0])
|
||||
cuboid([305-20,20,1], anchor=BOTTOM+LEFT);
|
||||
*/
|
||||
|
||||
translate([35,47+10,0])
|
||||
#cylinder(h=10, d=5, anchor=BOTTOM);
|
||||
translate([-250,47+10,0])
|
||||
#cylinder(h=10, d=5, anchor=BOTTOM);
|
||||
translate([-250,47+210+10,0])
|
||||
#cylinder(h=10, d=5, anchor=BOTTOM);
|
||||
translate([35,47+210+10,0])
|
||||
#cylinder(h=10, d=5, anchor=BOTTOM);
|
||||
}
|
||||
if(showDoor) {
|
||||
if (showSeparateObjects) {
|
||||
rotate([0,0,-90]) translate([-20,8,10])
|
||||
color("orange") import("limit-switch-flag-and-chain-catch-assembled.stl");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module topPanel(){
|
||||
translate([doorGutter,230,0]){
|
||||
difference(){
|
||||
cuboid([40,145,panelThickness], rounding=1, edges=["Y",BACK], anchor=FRONT+LEFT+BOTTOM) {
|
||||
if (showSeparateObjects) {
|
||||
// limit switch
|
||||
translate([0,-12-65,0]) position(TOP+BACK) color("purple") rotate(90) import("limit-switch-mount-sideways.stl");
|
||||
// servo mount
|
||||
translate([17.8,-42,20]) position(TOP+BACK+LEFT) rotate([0,0,90]) color("teal") import("Futaba_3001_Servo_Mount.stl");
|
||||
// servo
|
||||
translate([44,-31.5,31]) position(TOP+BACK+LEFT) rotate([0,0,90]) color("gray") import("servo futaba s3003 v6.stl");
|
||||
// top pulley
|
||||
translate([-10,-21,31]) position(TOP+BACK+LEFT) rotate([0,90,0]) color("red") import("parametric_ball_pulley-improved-with-flares.stl");
|
||||
}
|
||||
// servo mount holes
|
||||
difference(){
|
||||
translate([0,-1,0]) position(TOP+BACK+LEFT) cuboid([40,61,19], rounding=1, anchor=BACK+LEFT+BOTTOM);
|
||||
translate([26.6,-20.1,10]) position(TOP+BACK+LEFT)
|
||||
cyl(h=10,d=2, anchor=BACK+LEFT+BOTTOM);
|
||||
translate([26.6,-41.5,10]) position(TOP+BACK+LEFT)
|
||||
cyl(h=10,d=2, anchor=BACK+LEFT+BOTTOM);
|
||||
}
|
||||
}
|
||||
// mounting hole
|
||||
translate([29,37,0]) {
|
||||
cyl(h=panelThickness+1,d=5, anchor=BOTTOM);
|
||||
translate([0,0,panelThickness-2])
|
||||
cyl(h=3,d=15, chamfer1=0.5, anchor=BOTTOM);
|
||||
}
|
||||
// limit switch hole
|
||||
translate([32,74.1,0]) {
|
||||
cyl(h=panelThickness+1,d=2, anchor=BOTTOM);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module middlePanel(){
|
||||
translate([doorGutter,85,0]) {
|
||||
cuboid([40,145,panelThickness], rounding=1, edges=["Y"], anchor=FRONT+LEFT+BOTTOM) {
|
||||
if (showSeparateObjects) {
|
||||
//arduino
|
||||
translate([20,0,0]) color("green") position(TOP) cuboid([2*INCH,2.5*INCH,1*INCH], anchor=BOTTOM);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module bottomPanel(){
|
||||
translate([doorGutter,-60,0]) {
|
||||
difference() {
|
||||
cuboid([40,145,panelThickness], rounding=1, edges=["Y",FRONT], anchor=FRONT+LEFT+BOTTOM) {
|
||||
if (showSeparateObjects) {
|
||||
// limit switch
|
||||
translate([0,60,0]) position(TOP+FRONT) rotate(90) color("purple") import("limit-switch-mount-sideways-right.stl");
|
||||
// bottom pulley
|
||||
translate([-3,-5,27.5]) position(TOP+FRONT+LEFT) color("teal") import("LBracket_Parametric_rev9.stl");
|
||||
translate([-10,14,31]) position(TOP+FRONT+LEFT) rotate([0,90,0]) color("red") import("parametric_ball_pulley-improved-with-flares.stl");
|
||||
}
|
||||
// pulley mount
|
||||
difference(){
|
||||
translate([2,0,0]) position(TOP+FRONT+LEFT) cuboid([35,27.5,27.5], rounding=1, anchor=FRONT+LEFT+BOTTOM);
|
||||
translate([20.7,12.9,20]) position(TOP+FRONT+LEFT)
|
||||
cyl(h=10,d=2, anchor=FRONT+LEFT+BOTTOM);
|
||||
translate([30.7,12.9,20]) position(TOP+FRONT+LEFT)
|
||||
cyl(h=10,d=2, anchor=FRONT+LEFT+BOTTOM);
|
||||
}
|
||||
}
|
||||
// mounting hole
|
||||
translate([29,117,0]) {
|
||||
cyl(h=panelThickness+1,d=5, anchor=BOTTOM);
|
||||
translate([0,0,panelThickness-2])
|
||||
cyl(h=3,d=15, chamfer1=0.5, anchor=BOTTOM);
|
||||
}
|
||||
// limit switch hole
|
||||
translate([32,66,0]) {
|
||||
cyl(h=panelThickness+1,d=2, anchor=BOTTOM);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
difference(){
|
||||
union(){
|
||||
topPanel();
|
||||
middlePanel();
|
||||
bottomPanel();
|
||||
}
|
||||
translate([doorGutter+20,85,0]) scale(0.4) partition_cut_mask(gap=0, cutpath="dovetail", $slop=0.5);
|
||||
translate([doorGutter+20,230,0]) scale(0.4) partition_cut_mask(gap=0, cutpath="dovetail", $slop=0.5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,59 @@
|
||||
showAssembled=1;
|
||||
|
||||
$fn=12;
|
||||
|
||||
flagHeight=15;
|
||||
flagWidth=20;
|
||||
flagDepth=10;
|
||||
baseThickness=2;
|
||||
chainHolderDiameter=3;
|
||||
|
||||
gutterHeight=5;
|
||||
gutterWidth=4;
|
||||
|
||||
// slice it for printing
|
||||
if (showAssembled) {
|
||||
wholeModel();
|
||||
} else {
|
||||
difference(){
|
||||
wholeModel();
|
||||
translate([-50,-50,baseThickness]) cube(100);
|
||||
}
|
||||
|
||||
translate([-50,0,0]) difference(){
|
||||
wholeModel();
|
||||
translate([-50,-50,-100+baseThickness]) cube(100);
|
||||
}
|
||||
}
|
||||
|
||||
module wholeModel(){
|
||||
difference() {
|
||||
union() {
|
||||
translate([0,-gutterWidth/2,gutterHeight/2-(gutterHeight-1)]){
|
||||
cube([flagDepth,flagWidth-gutterWidth,gutterHeight-2], center=true);
|
||||
}
|
||||
|
||||
translate([0,-gutterWidth,(flagHeight-gutterHeight)/2]){
|
||||
cube([flagDepth,flagWidth,flagHeight-gutterHeight], center=true);
|
||||
}
|
||||
|
||||
translate([0,-(flagWidth+20)/2,2/2]){
|
||||
difference(){
|
||||
cube([flagDepth,20,baseThickness], center=true);
|
||||
translate([0,0,0])
|
||||
cylinder(h=4,r=2.5,center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0,0,baseThickness]){
|
||||
chainHolder();
|
||||
translate([0,chainHolderDiameter+.5,0]) chainHolder();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module chainHolder() {
|
||||
translate([-flagDepth/3,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth/2+1,d=chainHolderDiameter, center=true);
|
||||
translate([flagDepth/3,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth/2+1,d=chainHolderDiameter, center=true);
|
||||
translate([0,-flagWidth/2+2,0]) rotate([0,90,0]) cylinder(h=flagDepth,d=0.7, center=true);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
$fn=12;
|
||||
|
||||
flagHeight=35;
|
||||
flagWidth=25;
|
||||
baseThickness=2;
|
||||
|
||||
gutterHeight=5;
|
||||
gutterWidth=4;
|
||||
|
||||
translate([0,-gutterWidth/2,gutterHeight/2-gutterHeight]){
|
||||
cube([10,flagWidth-gutterWidth,gutterHeight], center=true);
|
||||
}
|
||||
|
||||
translate([0,-gutterWidth,(flagHeight-gutterHeight)/2]){
|
||||
#cube([10,flagWidth,flagHeight-gutterHeight], center=true);
|
||||
}
|
||||
|
||||
translate([0,-(flagWidth+20)/2,2/2]){
|
||||
difference(){
|
||||
cube([10,20,baseThickness], center=true);
|
||||
translate([0,0,0])
|
||||
#cylinder(h=4,r=2.5,center=true);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,52 @@
|
||||
switchHeight = 5;
|
||||
switchWidth = 12;
|
||||
switchLength = 20;
|
||||
|
||||
switchHoleFromFront = 9; // we assume "front" is the left here, adjust for right
|
||||
switchHoleFromSide = 5.5;
|
||||
switchHoleSpacing = 9;
|
||||
|
||||
baseWidth = 12;
|
||||
baseLength = 25;
|
||||
baseThickness = 2;
|
||||
|
||||
slotWidth = 3;
|
||||
slotLength = 15;
|
||||
slotCenterFromBack = 11;
|
||||
slotFromSide = 6;
|
||||
slotSpacing = 9;
|
||||
|
||||
filletSize = 3;
|
||||
|
||||
$fn=10;
|
||||
|
||||
// switch mount
|
||||
difference(){
|
||||
cube([switchWidth,switchLength,switchHeight]);
|
||||
translate([switchHoleFromFront, switchHoleFromSide, 10/2+switchHeight/2+0.1]) {
|
||||
#cylinder(h=10, r=1, center=true);
|
||||
}
|
||||
translate([switchHoleFromFront, switchHoleFromSide+switchHoleSpacing, 10/2+switchHeight/2+0.1]) {
|
||||
#cylinder(h=10, r=1, center=true);
|
||||
}
|
||||
}
|
||||
// base
|
||||
translate([0,-baseLength,0]){
|
||||
difference(){
|
||||
cube([baseWidth,baseLength,baseThickness]);
|
||||
translate([slotFromSide,slotCenterFromBack,baseThickness/2]){
|
||||
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fillet
|
||||
translate([0,-filletSize,baseThickness]) {
|
||||
prism(baseWidth,filletSize,filletSize);
|
||||
}
|
||||
|
||||
module prism(l, w, h){
|
||||
polyhedron(//pt 0 1 2 3 4 5
|
||||
points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
|
||||
faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
|
||||
);
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,56 @@
|
||||
switchHeight = 20;
|
||||
switchWidth = 12;
|
||||
switchLength = 20;
|
||||
|
||||
switchHoleFromFront = 9; // we assume "front" is the left here, adjust for right
|
||||
switchHoleFromSide = 5.5;
|
||||
switchHoleSpacing = 9;
|
||||
|
||||
baseWidth = 20;
|
||||
baseLength = 25;
|
||||
baseThickness = 2;
|
||||
|
||||
slotWidth = 2;
|
||||
slotLength = 15;
|
||||
slotCenterFromBack = 11;
|
||||
slotFromSide = 5.5;
|
||||
slotSpacing = 9;
|
||||
|
||||
filletSize = 5;
|
||||
|
||||
$fn=10;
|
||||
|
||||
// switch mount
|
||||
difference(){
|
||||
cube([switchWidth,switchLength,switchHeight]);
|
||||
translate([switchHoleFromFront, switchHoleFromSide, 10/2+switchHeight/2+0.1]) {
|
||||
#cylinder(h=10, r=1, center=true);
|
||||
}
|
||||
translate([switchHoleFromFront, switchHoleFromSide+switchHoleSpacing, 10/2+switchHeight/2+0.1]) {
|
||||
#cylinder(h=10, r=1, center=true);
|
||||
}
|
||||
}
|
||||
// base
|
||||
translate([0,-baseLength,0]){
|
||||
difference(){
|
||||
cube([baseWidth,baseLength,baseThickness]);
|
||||
translate([slotFromSide,slotCenterFromBack,baseThickness/2]){
|
||||
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
|
||||
}
|
||||
translate([slotFromSide+slotSpacing,slotCenterFromBack,baseThickness/2]){
|
||||
cube([slotWidth,slotLength,baseThickness+0.2], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fillet
|
||||
translate([0,-filletSize,baseThickness]) {
|
||||
prism(baseWidth,filletSize,filletSize);
|
||||
}
|
||||
|
||||
module prism(l, w, h){
|
||||
polyhedron(//pt 0 1 2 3 4 5
|
||||
points=[[0,0,0], [l,0,0], [l,w,0], [0,w,0], [0,w,h], [l,w,h]],
|
||||
faces=[[0,1,2,3],[5,4,3,2],[0,4,5,1],[0,3,4],[5,2,1]]
|
||||
);
|
||||
}
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Reference in New Issue
Block a user