// 2020 Extrusion Insert // Configurable 3D printable insert for 2020 aluminum extrusion // Import PCIe holder functionality include ; // Trapezium module - creates a centralized trapezoid shape (2D) // Parameters: // base_width: width of the bottom edge // top_width: width of the top edge // height: height of the trapezium module trapezium_2d(base_width, top_width, height) { // Create the trapezoid points (centered) points = [ [-base_width/2, -height/2], // bottom left [base_width/2, -height/2], // bottom right [top_width/2, height/2], // top right [-top_width/2, height/2] // top left ]; polygon(points); } // Rectangle module - creates a rectangle extending from base (2D) // Parameters: // width: width of the rectangle // height: height of the rectangle // offset_y: vertical offset from origin (default 0) module rectangle_2d(width, height, offset_y = 0) { translate([0, offset_y]) square([width, height], center = true); } // Combined module - joins trapezium and rectangle together // Parameters: // trap_base_width: trapezium base width // trap_top_width: trapezium top width // trap_height: trapezium height // rect_width: rectangle width // rect_height: rectangle height // rect_offset: vertical offset for rectangle from trapezium base module trapezium_with_rectangle_2d( trap_base_width, trap_top_width, trap_height, rect_width, rect_height, rect_offset = 0 ) { union() { // Main trapezium trapezium_2d(trap_base_width, trap_top_width, trap_height); // Rectangle extending from base translate([0, -trap_height/2 + rect_offset]) rectangle_2d(rect_width, rect_height); } } // Example usage (uncomment to test): // Individual shapes: //trapezium_2d(base_width = 20, top_width = 10, height = 15); //translate([30, 0]) rectangle_2d(width = 8, height = 5); // Combined shape extruded to 3D: rect_height_val = 1.7; extrude_height = 15; linear_extrude(height = extrude_height) { trapezium_with_rectangle_2d( trap_base_width = 10.95, trap_top_width = 5.5, trap_height = 4.0, rect_width = 6.3, rect_height = rect_height_val, rect_offset = -rect_height_val/2 // Half of rectangle height to center it at base edge ); }