/* GNU AGPLv3 (or later at your option) see bottom for more license info. please keep this notice. */ /* measurements from misumi's 3030 aluminum extrusion data sheet https://us.misumi-ec.com/pdf/fa/2012/p2_0545.pdf */ //$fn = 30; // use this while editing $fn = 100; // use this for generating STL foot_height = 18; // 2 for test prints // 20 for final prints foot_length = 2; wall_width = 2; nub_depth = 4; desired_corner_rounding_radius = 2/2.1; // rounding radius needs to be just under half the size of the wall_width maximum_corner_rounding_radius = wall_width / 2 - 0.1; corner_rounding_radius = (desired_corner_rounding_radius < maximum_corner_rounding_radius) ? desired_corner_rounding_radius : maximum_corner_rounding_radius; // the printed nubs did not fit into the extrusion gap perfectly. // we can change the model just a little bit to accomodate printing // imperfections. fudge = 0.1; //fudge = 0.0; // 3030 dimensions x = 30; y = 30; opening_width = 8; outer_block = (30 - 16.5) / 2; wall = 2; module ring(outer_radius, wall_width) { difference() { circle(outer_radius); circle(outer_radius - wall_width); } } module fillet(r) { offset(-r) { offset(r) { children(); } } } module round_corners(r) { fillet(r) { fillet(-r) { children(); } } } module side_nub() { // side nub, goes into side 3030 openings a = opening_width; b = foot_height + wall_width - (y - opening_width) / 2; side_nub_length = (a < b) ? a : b; translate([0, (y - opening_width) / 2 + fudge]) { square([nub_depth, side_nub_length - fudge]); } } module bottom_nub() { // bottom nub, goes into bottom 3030 opening translate([(x - opening_width) / 2, 0]) { square([opening_width / 2, nub_depth]); } } module half_foot_2d() { // outer ring difference() { ring(foot_height + wall_width, wall_width); square(foot_height + wall_width); rotate(-45) { square(foot_height + wall_width); } } // upper connector, vertical 3030 holder translate([-wall_width, -wall_width]) { square([wall_width, foot_height + wall_width]); } // upper connecter, horizontal 3030 holder translate([-wall_width, -wall_width]) { square([wall_width + x / 2, wall_width]); } // bottom connector translate([cos(45) * foot_height, -(sin(45) * foot_height + wall_width)]) { square([x / 2 - cos(45) * foot_height, wall_width]); } bottom_nub(); side_nub(); } module foot_2d() { round_corners(corner_rounding_radius) { translate([-x / 2, 0, 0]) { half_foot_2d(); } translate([x / 2, 0, 0]) { mirror() { half_foot_2d(); } } } } module foot() { rotate(a = 0, v = [1, 0, 0]) { linear_extrude(height = foot_length) { foot_2d(); } } } // half_foot_2d(); // foot_2d(); foot(); /* This file is part of 3d-printables. 3d-printables is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 3d-printables is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 3d-printables. If not, see . */