$fn=64; // --- Parameters --- clip_thickness = 10; // Thickness of the clip (Z-axis) cable_diameter = 6.5; // Diameter of the hole for the cable slit_width = 2.5; // Width of the inner slit for cable insertion handle_width = 14; // Width of the axe handle handle_length = 80; // Length of the handle below the head blade_radius = 22; // Size of the main axe blade blade_offset = 18; // Distance of the blade from the handle module viking_axe_cable_clip() { linear_extrude(height=clip_thickness) { difference() { // Main solid shape union() { // Handle body translate([-handle_width/2, -handle_length]) square([handle_width, handle_length + 30]); // Pommel (bottom of handle) translate([0, -handle_length]) scale([1.4, 1]) circle(r=handle_width/2); // Top cap of the handle translate([0, 30]) scale([1, 0.5]) circle(r=handle_width/2); // Axe Head hull() { // Attachment base on handle translate([-handle_width/2, 5]) square([handle_width, 20]); // Main blade curve translate([blade_offset, 15]) circle(r=blade_radius); } } // --- Cutouts --- // Beard cutout (lower curve of the blade) translate([blade_offset - 2, -10]) circle(r=18); // Top curve cutout translate([blade_offset - 2, 40]) circle(r=18); // Cable holding hole translate([blade_offset + 2, 15]) circle(r=cable_diameter/2); // V-notch slit for snapping the cable in translate([blade_offset + 2, 15]) rotate(-10) polygon([ [0, -slit_width/2], [0, slit_width/2], [blade_radius + 5, slit_width/2 + 2], [blade_radius + 5, -slit_width/2 - 2] ]); // Optional mounting hole for a screw (M4 size) translate([0, -handle_length/2]) circle(r=2.2); } } } // Render the object lying flat for optimal 3D printing viking_axe_cable_clip();