//Disable $fn and $fa, do not change these $fn=0; $fa=0.01; $fs=0.5; m2=3.0; module nut() { rotate([0,0,30])cylinder(5,r = 5.5 / 2 / cos(180 / 6) + 0.2, $fn=6); } raild=8.5; blockx=20; blocky=15; blockz=17-3.5+3; blockzpad=3+1.5-3.5/2-0.5; backx=54+(blockx-raild)-2*blockx; backy=blocky; backz=3; boardheight=65; boardwidth=45; boardhole=3; boardstrip=10; boardmargin=10; boardshift=40; shoewidth=45; shoeheight=10; shoeshift=10; shoemargin=6; // rod centre at // blockz/2+blockzpad // (17-3.5+3)/2+3+(1.5-3.5/2); // was // (17-3.5)/2+3-3.5/2; module bearingblock() { difference() { cube([blockx,blocky,blockz]); translate([blockx/2,blocky+0.25,blockz/2+blockzpad]) rotate([90,0,0])cylinder(blocky+0.5,d=raild); translate([4,blocky/2,0])cylinder(blockz,d=m2); translate([4,blocky/2,0])nut(); translate([blockx-4,blocky/2,0])cylinder(blockz,d=m2); translate([blockx-4,blocky/2,0])nut(); } } module endstop() { union() { translate([blockx,0,0])cube([backx,backy,backz]); translate([0,0,0])bearingblock(); translate([backx+blockx,0,0])bearingblock(); difference() { union() { translate([-boardshift,-(boardwidth+boardmargin)/2+backy/2,0])cube([boardstrip,boardwidth+boardmargin,backz]); translate([-boardshift+boardheight,-(boardwidth+boardmargin)/2+backy/2,0])cube([boardstrip,boardwidth+boardmargin,backz]); translate([-boardshift,0,0]) cube([boardshift,backy,backz]); } translate([-boardshift+boardmargin/2,-(boardwidth)/2+backy/2,0])cylinder(d=boardhole,h=backz); translate([-boardshift+boardmargin/2,-(boardwidth)/2+backy/2+boardwidth,0])cylinder(d=boardhole,h=backz); translate([-boardshift+boardmargin/2+boardheight,-(boardwidth)/2+backy/2,0])cylinder(d=boardhole,h=backz); translate([-boardshift+boardmargin/2+boardheight,-(boardwidth)/2+backy/2+boardwidth,0])cylinder(d=boardhole,h=backz); } difference() { union() { translate([backx+2*blockx+shoeshift,(-shoewidth+backy)/2,0]) cube([shoeheight,shoewidth,backz]); translate([backx+2*blockx,0,0]) cube([shoeshift,backy,backz]); } translate([backx+2*blockx+shoeshift+shoeheight/2,(-shoewidth+backy)/2+shoemargin,0]) cylinder(d=boardhole,h=backz); translate([backx+2*blockx+shoeshift+shoeheight/2,(-shoewidth+backy)/2-shoemargin+shoewidth,0]) cylinder(d=boardhole,h=backz); translate([backx+2*blockx+shoeshift+shoeheight/2,backy/2,0]) cylinder(d=boardhole,h=backz); } } } // top translate([0,0,10])intersection() { translate([0,0,blockz/2+blockzpad+1])cube([2*blockx+backx,blocky,blockz]); endstop(); } // bottom intersection() { translate([-100,-100,-(blockz-(blockz/2+blockzpad))])cube([200,200,blockz]); endstop(); } //endstop();