$fn = 64; // Parametric Variables num_wrenches = 10; base_height = 25; floor_thickness = 3; slot_angle = 60; // SAE Wrench Sizes (1/4" to 3/4") labels = ["1/4", "5/16", "11/32", "3/8", "7/16", "1/2", "9/16", "5/8", "11/16", "3/4"]; // Functions for spacing and slot widths to accommodate increasing wrench sizes function x_pos(i) = 10 + (i * 12) + (i * i * 1.35); function slot_w(i) = 4.0 + (i * 0.6); module sae_wrench_holder() { difference() { // Main Body hull() { translate([0, 0, 0]) cylinder(r=25, h=base_height); translate([240, 0, 0]) cylinder(r=35, h=base_height); } // Angled Slots for Wrench Handles for(i = [0 : num_wrenches - 1]) { translate([x_pos(i), 0, floor_thickness + (base_height / 2)]) rotate([0, 0, slot_angle]) cube([140, slot_w(i), base_height], center=true); } // Engraved Size Labels for(i = [0 : num_wrenches - 1]) { // Position text on the ridge between slots, near the front edge translate([x_pos(i), 0, base_height - 1]) rotate([0, 0, slot_angle]) translate([-12, -slot_w(i)/2 - 4.5, 0]) linear_extrude(2) text( labels[i], size=4.5, halign="center", valign="center", font="Liberation Sans:style=Bold" ); } } } // Render the model sae_wrench_holder();