// -*- 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; ribsgap = 1; ribdepth = 3; ribheight = 4; blockoverlapcnr = 5; 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 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 Division(cutmore) { mirror([0,0,1]) { translate([0, 0, -cutmore*feedzgap/2]) { translate([-ziglen + -cutmore*feedxgap/2, -100, 0]) cube([100, 100, 50]); } } translate([blockwidth/2 - blockoverlapcnr, -50, -50]) cube([100, 100, 100]); translate([50, houterrad + blockdepth/2 + -cutmore*ribsgap, 0]) rotate([-90,0,90]) linear_extrude(height=100) Ribs(); } module SDemo(){ //difference(){ % Positive(); // Division(0); //} Division(-1); } module A(){ difference(){ Positive(); Division(+1); } } module B(){ intersection(){ Positive(); Division(-1); } } module Demo(){ color("red") A(); // color("blue") B(); } //Ribs(); //Demo(); A(); //B(); //%Division(+1); //Demo();