$fn = 64; // --- PARAMETERS --- shield_thickness = 4; detail_thickness = 2; spool_height = 35; spool_diameter = 25; wall_plate_diameter = 55; wall_plate_thickness = 4; peg_size = 14; peg_depth = 10; // --- LAYOUT --- // Parts are separated and oriented to print flat on the bed without supports translate([-45, 0, 0]) shield_part(); translate([45, 0, 0]) wall_mount_part(); // --- MODULES --- // 2D Profile of the Heater Shield module shield_outline() { intersection() { // Curved sides translate([-45, 25]) circle(r=85); translate([45, 25]) circle(r=85); // Flat top cutoff and bounding box translate([-50, -60]) square([100, 110]); } } // Part 1: The Shield (Prints face down) module shield_part() { // Front details (Trim and Cross) - touching the build plate color("silver") linear_extrude(detail_thickness) { // Outer raised trim difference() { shield_outline(); offset(r=-4) shield_outline(); } // Crusader style cross translate([0, 5]) { square([12, 85], center=true); // Vertical bar translate([0, 10]) square([65, 12], center=true); // Horizontal bar } } // Main Shield Base color("steelblue") translate([0, 0, detail_thickness]) linear_extrude(shield_thickness) { shield_outline(); } // Attachment Peg (Plugs into the wall mount) color("silver") translate([0, 5, detail_thickness + shield_thickness]) { // Main peg body linear_extrude(peg_depth - 1) square([peg_size, peg_size], center=true); // Chamfered tip for easy insertion translate([0, 0, peg_depth - 1]) linear_extrude(1, scale=0.8) square([peg_size, peg_size], center=true); } } // Part 2: Wall Mount & Cable Spool (Prints flat on the wall plate) module wall_mount_part() { color("darkgray") difference() { union() { // Wall plate cylinder(d=wall_plate_diameter, h=wall_plate_thickness); // Spool core for wrapping or resting cables translate([0, 0, wall_plate_thickness]) cylinder(d=spool_diameter, h=spool_height); // Tapered base for extra strength translate([0, 0, wall_plate_thickness]) cylinder(d1=spool_diameter + 8, d2=spool_diameter, h=8); } // Countersunk screw holes for wall mounting for(x = [-20, 20]) { translate([x, 0, -1]) { // Screw shaft cylinder(d=4.5, h=wall_plate_thickness + 2); // Countersink head translate([0, 0, wall_plate_thickness - 2]) cylinder(d1=4.5, d2=9, h=2.1); } } // Square socket to receive the shield's peg (with 0.3mm clearance) translate([0, 0, wall_plate_thickness + spool_height - peg_depth]) linear_extrude(peg_depth + 1) square([peg_size + 0.6, peg_size + 0.6], center=true); } }