$fn=80; guideRail = 0; linkRail = 0; markRail = 1; length = 70; baseWidth = 60; pinDiameter = 6; pinSlot = 1; pinHeightTol=0.2; pinSlotDepth=5; pinHoleTol=.3; pinChamfer=1.2; grWidth=10; grHeight=8; lrWidth= 10; lrHeight=5; mrWidth=10; mrHeight=3; slotWidth=2; slotLength=55; if (guideRail == 1) { //Right guide rail union() { translate([baseWidth/2,-length/2,0])cube([grWidth,length,grHeight]); translate([(baseWidth/2)+(grWidth/2),-length/2,0])cylinder(grHeight,d=grWidth); mirror([0,1,0])translate([(baseWidth/2)+(grWidth/2),-length/2,0])cylinder(grHeight,d=grWidth); difference() { union () { translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } mirror([0,1,0])difference() { union () { translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } } //Left guide rail mirror([1,0,0]) union() { translate([baseWidth/2,-length/2,0])cube([grWidth,length,grHeight]); translate([(baseWidth/2)+(grWidth/2),-length/2,0])cylinder(grHeight,d=grWidth); mirror([0,1,0])translate([(baseWidth/2)+(grWidth/2),-length/2,0])cylinder(grHeight,d=grWidth); difference() { union () { translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } mirror([0,1,0])difference() { union () { translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } } } if (linkRail == 1) { //Bottom link rail difference() { union() { translate([0,-length/2,grHeight+(lrHeight/2)])cube([baseWidth+grWidth,lrWidth,lrHeight],center=true); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight,d=lrWidth); mirror([1,0,0])translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight,d=lrWidth); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); mirror([1,0,0])translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); translate([0,-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); } //Top link rail mirror([0,1,0]) difference() { union() { translate([0,-length/2,grHeight+(lrHeight/2)])cube([baseWidth+grWidth,lrWidth,lrHeight],center=true); translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight,d=lrWidth); mirror([1,0,0])translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight])cylinder(lrHeight,d=lrWidth); } translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); mirror([1,0,0])translate([(baseWidth/2)+(grWidth/2),-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); translate([0,-length/2,grHeight-1])cylinder(grHeight+2,d=pinDiameter+pinHoleTol); } } if (markRail == 1) { difference() { translate([0,0,grHeight-mrHeight])union() { translate([0,0,mrHeight/2])cube([mrWidth,length,mrHeight],center=true); translate([0,-length/2,0])cylinder(mrHeight,d=mrWidth); mirror([0,1,0])translate([0,-length/2,0])cylinder(mrHeight,d=mrWidth); difference() { union () { translate([0,-length/2,mrHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([0,-length/2,mrHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([0,-length/2,mrHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } mirror([0,1,0])difference() { union () { translate([0,-length/2,mrHeight])cylinder(lrHeight+pinHeightTol,d=pinDiameter); translate([0,-length/2,mrHeight+lrHeight+pinHeightTol])cylinder(lrHeight/3,d1= pinDiameter+1,d2=pinDiameter/pinChamfer); } translate([0,-length/2,mrHeight+2*lrHeight-pinSlotDepth])cube([pinDiameter+2,pinSlot,lrHeight],center=true); } } cube([slotWidth,slotLength,100],center=true); } }