// Sheet-metal 90° L-bracket (folded part + flat pattern) // Units mm, Z up. Horizontal leg on Z=0 along +X, vertical leg on X=0 face along +Z. /* [Mode] */ // "folded" = 3D part, "flat" = 2D unfolded outline (export DXF) mode = "folded"; // [folded, flat] /* [Sheet] */ // Material thickness thickness = 1.5; // [0.5:0.1:6] // Inside bend radius bend_radius = 1.5; // [0.1:0.1:10] // K-factor (neutral axis position) k_factor = 0.44; // [0.2:0.01:0.5] /* [Legs] */ // Horizontal leg length, to outside of bend (outer mold line) leg_a = 40; // [10:1:200] // Vertical leg length, to outside of bend (outer mold line) leg_b = 40; // [10:1:200] // Bracket width (Y) width = 30; // [10:1:200] /* [Holes] */ // Hole diameter hole_d = 5.5; // [1:0.1:20] // Hole center distance from the bend's outside face hole_from_bend = 15; // [3:0.5:100] // Hole center inset from each side edge hole_edge_inset = 8; // [2:0.5:50] /* [Hidden] */ $fn = 96; T = thickness; R = bend_radius; Ro = R + T; // outside bend radius setback = Ro; // 90° bend: tangent to outer virtual sharp flat_a = leg_a - setback; // straight portion of leg A flat_b = leg_b - setback; // straight portion of leg B BA = (PI / 2) * (R + k_factor * T); // bend allowance, 90° flat_len = flat_a + BA + flat_b; hole_ys = [hole_edge_inset, width - hole_edge_inset]; module holes_2d(x0) { for (y = hole_ys) translate([x0, y]) circle(d = hole_d); } module flat_2d() { difference() { square([flat_len, width]); // leg A hole: hole_from_bend - setback from bend tangent; leg A free end at x=0 holes_2d(flat_a - (hole_from_bend - setback)); // leg B hole holes_2d(flat_a + BA + (hole_from_bend - setback)); } } module folded() { difference() { union() { // leg A (horizontal), Z 0..T, X Ro..leg_a translate([Ro, 0, 0]) cube([flat_a, width, T]); // leg B (vertical), X 0..T, Z Ro..leg_b translate([0, 0, Ro]) cube([T, width, flat_b]); // bend: annulus sector, centre axis along Y at (Ro, *, Ro) translate([Ro, width, Ro]) rotate([90, 0, 0]) linear_extrude(width) intersection() { difference() { circle(r = Ro); circle(r = R); } translate([-Ro - 1, -Ro - 1]) square(Ro + 1); // third quadrant } } // holes in leg A for (y = hole_ys) translate([hole_from_bend, y, -1]) cylinder(d = hole_d, h = T + 2); // holes in leg B for (y = hole_ys) translate([-1, y, hole_from_bend]) rotate([0, 90, 0]) cylinder(d = hole_d, h = T + 2); } } if (mode == "flat") flat_2d(); else folded();