// -*- C -*- // xxx from actual ksafe bolt_above = 4; wall_thick = 4; bolthole_height = 4; bolthole_width = 10; main_sz = 30; cnr_rad = 10; // other parameters web_thick = 4; bolthole_rhs = 20; bolthole_lhs = 20; boltreinf_thick = 6; anchor_wall_space = 45; base_thick = 4; 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 AnchorWallProfile(){ UsualProfile(); NearAnchorProfile(); hull(){ for (bev = [bevel, a_bevel]) { upp_app_Vars(bev) { polygon([ $xppE, $xppF, $xppI, $xppJ ]); } } } } module DemoProfiles(){ translate([0,0,-2]) color("yellow") AnchorWallProfile(); color("red") AnchorProfile(); translate([0,0,2]) color("black") NearAnchorProfile(); translate([0,0,4]) color("blue") UsualProfile(); } DemoProfiles();