// -*- 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_Vars(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 ]; children(); } module upp_app_Profile(){ polygon([ gppA, gppB, $xppE, $xppF, $xppF + [1,0], $xppI + [1,0], $xppJ ]); } module UsualProfile(){ upp_app_Vars(bevel) upp_app_Profile(); } module NearAnchorProfile(){ upp_app_Vars(a_bevel) upp_app_Profile(); } module AnchorProfile(){ upp_app_Vars(a_bevel) { upp_app_Profile(); 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();