// -*- C -*- hoopthick = 3; hinnerrad = 15; houterrad = hinnerrad + hoopthick; hcentredist = 10; blockdepth = 5; blockwidth = hcentredist*2 + 6; height = 20; ziglen = hcentredist/2; feedxgap = 5; feedzgap = 5; ribdepth = 2; ribheight = 3; module Oval(centredist, rad) { hull() { translate([-centredist/2,0,0]) circle(r=rad); translate([+centredist/2,0,0]) circle(r=rad); } } module Hoop(){ difference(){ hull(){ Oval(hcentredist, houterrad); translate([0, (blockdepth + hoopthick)/2 + hinnerrad]) square([blockwidth, blockdepth + hoopthick], center=true); } Oval(hcentredist, hinnerrad); } } module Positive(){ translate([0,0, -height/2]) linear_extrude(height=20) Hoop(); } module Division(biggerpi) { xgap = feedxgap * biggerpi; zgap = feedzgap * biggerpi; mirror([0,0,1]) translate([-(ziglen + xgap/2), -100, zgap/2]) cube([100, 100, 10]); } module Ribs(){ imax = ceil(height*2 / ribheight); for (i=[-imax:imax]) { hull(){ translate([-ribdepth/2, ribheight*i, 0]) polygon([[0, 0], [ribdepth, -ribheight], [ribdepth, +ribheight]]); translate([50, 0]) square([1, height*2], center=true); } } } module Demo(){ //difference(){ % Positive(); // Division(0); //} Division(1); } Ribs();