// -*- C -*- crewpunch_slop = 0.3; holder_min_wall = 2; holder_attach_xsz = 5; holder_ctie_width = 4.0 + 0.5; holder_ctie_thick = 2.0 + 0.5; holder_attach_walls = 3; holder_attach_roof = 2.5; // from careful measurement crewpunch_shape = [[ 6, [0.6, 6.0], [1.6, 12.3] ], [ 8, [1.1, 6.2], [1.9, 12.5] ], [ 10, [1.6, 6.5], [2.1, 12.8] ], [ 12, [1.8, 6.6], [2.3, 12.7] ], [ 14, [2.1, 6.8], [2.6, 13.0] ], [ 16, [2.4, 6.9], [2.7, 13.2] ]]; crewpunch_shaft_max_y = 7.5; crewpunch_systematic_size_error = +0.36; crewpunch_min_y = 4.7 - crewpunch_systematic_size_error; crewpunch_smallest_shape = crewpunch_shape[0]; crewpunch_biggest_shape = crewpunch_shape[len(crewpunch_shape)-1]; // computed attach_ysz = holder_attach_walls*2 + holder_ctie_width; holder_front_wall = crewpunch_shaft_max_y - crewpunch_biggest_shape[1][1] + attach_ysz; holder_block_zsz = crewpunch_biggest_shape[0] - crewpunch_smallest_shape[0]; holder_xsz = crewpunch_biggest_shape[2][0] + crewpunch_biggest_shape[2][1] + holder_min_wall*2; holder_ysz = crewpunch_biggest_shape[1][0] + crewpunch_biggest_shape[1][1] + holder_min_wall + holder_front_wall; // objects module CrewPunch(){ ourslop = crewpunch_slop - crewpunch_systematic_size_error; hull(){ for(layer=crewpunch_shape){ translate([0,0, layer[0]]){ for(xind=[0,1]) //translate([xind?0:1,0,0]) for(yind=[0,1]) //translate([0,yind?0.5:0,0]) mirror([xind?1:0,0,0]) mirror([0,yind?0:1,0]){ translate([-0.1,-0.1,-0.1]) cube([0.1 + layer[2][xind] + ourslop, 0.1 + layer[1][yind] + ourslop, 0.2]); } } } } } module PunchHolder(){ difference(){ cube([holder_xsz, holder_ysz, holder_block_zsz]); translate([crewpunch_biggest_shape[2][1] + holder_min_wall, crewpunch_biggest_shape[1][0] + holder_front_wall, -crewpunch_smallest_shape[0]]) CrewPunch(); } translate([0,0,holder_block_zsz]){ difference(){ translate([holder_xsz/2 - holder_attach_xsz/2, 0, -1]) cube([holder_attach_xsz, attach_ysz, holder_ctie_thick + holder_attach_roof + 1]); translate([-30, holder_attach_walls, 0.1]) cube([60, holder_ctie_width, holder_ctie_thick]); } } } //CrewPunch(); PunchHolder();