// -*- C -*- // xxx bolt_above = 4; wall_thick = 4; bolthole_height = 4; bolthole_width = 10; base_thick = 5; lidinner_thick_allow = 20; space = 25; anchor_thick = 4; anchor_rad = 4; bevel = 15; // ----- calculated ----- gppA = [0,0]; gppB = gppA - [ wall_thick, 0 ]; gppL = [ gppB[0], -(lidinner_thick_allow + space + base_thick) ]; // anchor anchor_b = anchor_thick + anchor_rad; appM = gppL + anchor_b * [1,1]; a_bevel = 2 * anchor_b * (1 + sqrt(0.5)); module upp_app_Profile(t_bevel){ xppE = gppL + t_bevel * [0,1]; xppF = gppL + t_bevel * [1,0]; xppJ = xppE + wall_thick * [ 1, tan(22.5) ]; xppI = xppF + base_thick + [ tan(22.5), 1 ]; polygon([ gppA, gppB, xppE, xppF, xppF + [1,0], xppI + [1,0], xppJ ]); } module UsualProfile(){ upp_app_Profile(bevel); } module NearAnchorProfile(){ upp_app_Profile(a_bevel); } module AnchorProfile(){ xppE = gppL + t_bevel * [0,1]; xppF = gppL + t_bevel * [1,0]; upp_app_Profile(a_bevel); difference(){ hull(){ polygon([ xppE, xppF, xppF + [0,1], xppE + [1,0] ]); translate(appM) circle(r= anchor_b); } translate(appM) circle(r= anchor_rad); } } module Demo(){ color("red") AnchorProfile(); translate([0,0,2]) color("black") NearAnchorProfile(); color("blue") UsualProfile(); } Demo();