// -*- C -*- include nook_th = 8; // xxx nook_cnr_rad = 10; case_th = 2.5; ledge_w = 4; tape_th = 1.5; tape_inside = 2.0; gap = 0.5 * [1,1]; // calculated ledge_h = case_th; lid_th = case_th; spp0 = [0,0]; spp1 = spp0 + case_th * [-1,0]; spp9 = spp0 + ledge_h * [0,-1]; spp8 = spp9 + nook_th * [0,-1]; spp7 = spp8 + case_th * [-1,-1]; spp11y = spp1[1] - tape_th; spp4y = 0.5 * (spp0[1] + spp7[1]); spp3y = spp4y + tape_inside/2; spp5y = spp4y - tape_inside/2; spp2y = spp3y + tape_th; spp6y = spp5y - tape_th; spp20 = spp8 + nook_cnr_rad * [1,0]; spp20x = spp20[0]; tppA = spp0 + gap; tppB = spp1 + [0, gap[1]]; tppC = tppB + lid_th * [0,1]; tppD = [ spp20x, tppC[1] ]; tppE = [ spp20x, tppB[1] ]; tppF = tppA + ledge_w * [1,0]; tppG = tppF + ledge_h * [0,-1]; tppH = [ tppA[0], tppG[1] ]; tppJx = tppA[0] + tape_th; module SideMainProfile() { rectfromto(spp7, spp0); rectfromto(spp7, spp20); } module TopTapeCutout() { polygon([ tppA, tppA + [-1,-1], tppH + [-1,-1], [ tppJx, tppH[1]-1 ], [ tppJx, tppC[1]+1 ], [ tppA[0], tppC[1]+1 ]]); } module TopMainProfile() { l = [ tppA, tppB, tppC, tppD, tppE, tppF, tppG, tppH ]; echo(l); polygon(l); } module SideTapeCutout1(y0,y1) { rectfromto([ spp7[0]-1, y0 ], [ spp8[0]+1, y1 ]); } module SideTapeCutout() { SideTapeCutout1(spp6y, spp5y); SideTapeCutout1(spp3y, spp2y); SideTapeCutout1(spp3y, spp2y); SideTapeCutout1(spp11y, spp1[1] + 1); } module Demo(){ translate([0,0,-2]) SideMainProfile(); translate([0,0,-2]) color("yellow") TopMainProfile(); color("red") difference(){ SideMainProfile(); SideTapeCutout(); } translate([0,0,0]) color("purple") difference(){ TopMainProfile(); TopTapeCutout(); } //%SideTapeCutout(); } Demo();