$fn = 64; // --- Parameters --- staff_diameter = 38; // Diameter of the wizard staff holder_thickness = 8; // Thickness of the holder ring wall_clearance = 25; // Distance from wall to staff plate_width = 50; // Wall mounting plate width plate_height = 90; // Wall mounting plate height plate_thickness = 6; // Wall mounting plate thickness screw_hole_dia = 5; // Screw hole diameter screw_head_dia = 10; // Screw head countersink diameter hook_length = 25; // Length of accessory hooks hook_dia = 8; // Diameter of accessory hooks arm_height = 20; // Height of the main support arm module wizard_staff_holder() { arm_length = wall_clearance + staff_diameter/2; ring_outer_dia = staff_diameter + holder_thickness * 2; difference() { union() { // Wall Plate translate([0, plate_thickness/2, 0]) cube([plate_width, plate_thickness, plate_height], center=true); // Main support arm translate([0, (arm_length + plate_thickness)/2, 0]) cube([plate_width * 0.5, arm_length + plate_thickness, arm_height], center=true); // Staff C-Clamp Ring translate([0, plate_thickness + arm_length, 0]) cylinder(d=ring_outer_dia, h=arm_height, center=true); // Left Accessory Hook for cables translate([-plate_width/2 + 2, plate_thickness/2, -plate_height/4]) { rotate([0, -90, 0]) cylinder(d=hook_dia, h=hook_length + 2); translate([-hook_length, 0, 0]) { sphere(d=hook_dia); cylinder(d=hook_dia, h=15); translate([0, 0, 15]) sphere(d=hook_dia); } } // Right Accessory Hook for cables translate([plate_width/2 - 2, plate_thickness/2, -plate_height/4]) { rotate([0, 90, 0]) cylinder(d=hook_dia, h=hook_length + 2); translate([hook_length, 0, 0]) { sphere(d=hook_dia); cylinder(d=hook_dia, h=15); translate([0, 0, 15]) sphere(d=hook_dia); } } } // --- Subtractions --- // Vertical staff cutout translate([0, plate_thickness + arm_length, 0]) { cylinder(d=staff_diameter, h=arm_height + 2, center=true); // Front opening for snap-fit insertion translate([0, staff_diameter/2 + holder_thickness/2, 0]) cube([staff_diameter * 0.75, staff_diameter, arm_height + 2], center=true); } // Top screw hole translate([0, 0, plate_height/2 - 15]) rotate([-90, 0, 0]) { cylinder(d=screw_hole_dia, h=plate_thickness * 4, center=true); translate([0, 0, plate_thickness - 3]) cylinder(d1=screw_hole_dia, d2=screw_head_dia, h=3.1); } // Bottom screw hole translate([0, 0, -plate_height/2 + 15]) rotate([-90, 0, 0]) { cylinder(d=screw_hole_dia, h=plate_thickness * 4, center=true); translate([0, 0, plate_thickness - 3]) cylinder(d1=screw_hole_dia, d2=screw_head_dia, h=3.1); } } } // Render the model wizard_staff_holder();