Fill the repository
This commit is contained in:
+198
@@ -0,0 +1,198 @@
|
||||
// ------------------------------------------------------------------------
|
||||
// Customizable struts for Fischertechnik.
|
||||
// The modules in this file can be used to generate:
|
||||
// - i-struts (struts with a length which is a multiple of the basic
|
||||
// building block (15 mm)). i-struts may or may not have additional
|
||||
// eyelets every 15 mm.
|
||||
// - x-struts with predefined length corresponding to the Fischertechnik
|
||||
// original struts.
|
||||
// - x-struts with any length to connect other diagonal distances than
|
||||
// the standard x-struts.
|
||||
//
|
||||
// Diagonal distances between structural design elements (15 mm grid) which
|
||||
// might be printable depending on your 3D printers build plate:
|
||||
// from https://www.ftcommunity.de/data/downloads/beschreibungen/statikhilfe.pdf
|
||||
// R15 | 15 | 30 | 45 | 60 | 75 | 90 | 105 | 120 | 135 |
|
||||
// 15 | 21,2 | | | | | | | | |
|
||||
// 30 | 33,5 | 42,4 | | | | | | | |
|
||||
// 45 | 47,4 | 54,1 | 63,6 | | | | | | |
|
||||
// 60 | 61,8 | 67,1 | 75,0 | 84,9 | | | | | |
|
||||
// 75 | 76,5 | 80,8 | 87,5 | 96,0 | 106,1 | | | | |
|
||||
// 90 | 91,2 | 94,9 | 100,6 | 108,2 | 117,2 | 127,3 | | | |
|
||||
// 105 | 106,1 | 109,2 | 114,2 | 120,9 | 129,0 | 138,3 | 148,5 | | |
|
||||
// 120 | 120,9 | 123,7 | 128,2 | 134,2 | 141,5 | 150,0 | 159,5 | 169,7 | |
|
||||
// 135 | 135,8 | 138,3 | 142,3 | 147,7 | 154,4 | 162,2 | 171,0 | 180,6 | 190,9 |
|
||||
// 150 | 150,7 | 153,0 | 156,6 | 161,6 | 167,7 | 174,9 | 183,1 | 192,1 | 201,8 |
|
||||
// 165 | 165,7 | 167,7 | 171,0 | 175,6 | 181,2 | 187,9 | 195,6 | 204,0 | 213,2 |
|
||||
// 180 | 180,6 | 182,5 | 185,5 | 189,7 | 195,0 | 201,2 | 208,4 | 216,3 | 225,0 |
|
||||
//
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
|
||||
//----------------------- parameters ---------------------------
|
||||
/* [Strut options] */
|
||||
// The type of the strut, may be an I-Strut or an X-Strut
|
||||
StrutType = 0; // [0 : no output, 1:X-Strut, 2:I-Strut, 3:I-Strut with hole]
|
||||
|
||||
// The length of the I-Strut (should be a multiple of the basic block size of 15 mm)
|
||||
I_Strut_Length = 60; // [15:15:195]
|
||||
|
||||
// The length of the X-Strut
|
||||
X_Strut_Length = 42.4; // [21.2, 42.4, 63.6, 84.8, 106.1, 127.3, 148.5, 169.6, 190.9]
|
||||
|
||||
// An individual strut length for X-Struts (overrides X_Strut_Length if > 1.0)
|
||||
Individual_Strut_Length = 0.1;
|
||||
|
||||
// Should the backside be indented too? If printed with indention, the indention is too small to use support structures and remove them successfully.
|
||||
Indent_Backside = 0; // [0:No, 1:Yes ]
|
||||
|
||||
/* [Hidden] */
|
||||
|
||||
// **********************
|
||||
// ** Static Settings: **
|
||||
// **********************
|
||||
|
||||
// $fn = 50;
|
||||
$fa = 0.5; // default minimum facet angle is now 0.5
|
||||
$fs = 0.5; // default minimum facet size is now 0.5 mm
|
||||
// Build plate size correction for the eyelets
|
||||
Correction = 0.2; // [0.0, 0.1, 0.2, 0.3]
|
||||
|
||||
|
||||
strut_radius = 3.975;
|
||||
strut_width = 7.95;
|
||||
strut_thickness = 2.8;
|
||||
// strut_eyelet_radius = 3.2;
|
||||
strut_eyelet_radius = 3.3;
|
||||
jut = 0.1;
|
||||
eyelet_height = strut_thickness + jut;
|
||||
|
||||
// *********************
|
||||
// ** Helper Modules: **
|
||||
// *********************
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a basic strut without any eyelets
|
||||
// --------------------------------------------------------------------
|
||||
module strut(len = 15, h = strut_thickness, w = strut_width) {
|
||||
hull() {
|
||||
cylinder(d = w, h = h, center = true);
|
||||
translate([0, len, 0])
|
||||
cylinder(d = w, h = h, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a single eyelet which can be substracted from a strut
|
||||
// --------------------------------------------------------------------
|
||||
module strut_eyelet(radius = strut_eyelet_radius, correctionVal = 0.0) {
|
||||
cube_width = radius * 2;// apply_correction(7.2, correctionVal, horizontal);
|
||||
cube_height = 3.1; // apply_correction(3.1, correctionVal, horizontal);
|
||||
|
||||
union() {
|
||||
// prefix the intersection with render(), otherwise we'll get
|
||||
// a message "Normalized Tree is growing past 200000 elements"
|
||||
// on i_struts with a lot of eyelets.
|
||||
// It takes a bit on the first compile, but the after rendering
|
||||
// the eyelet is in the cache and draws relatively fast.
|
||||
// Without the render() an i_strut(360) takes forever to calculate.
|
||||
render() intersection() {
|
||||
#union() {
|
||||
cube([cube_height,cube_width,eyelet_height], center = true);
|
||||
cylinder(r = 2.1, h = eyelet_height, center = true);
|
||||
}
|
||||
cylinder(r = radius, h = eyelet_height, center = true);
|
||||
}
|
||||
translate([0, 0, 0.375 + 0.65])
|
||||
cylinder(r = radius, h = 0.75 + jut, center = true);
|
||||
translate([0, 0,-(0.375 + 0.65)])
|
||||
cylinder(r = radius, h = 0.75 + jut, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a single indention to be placed between two eyelets on a strut.
|
||||
// --------------------------------------------------------------------
|
||||
module indention(len = 1, width = 1, off = 1, indention = 1) {
|
||||
translate([0, len / 2, indention])
|
||||
cube([width, len - off * 2, 0.75 + jut], center = true);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a row of eyelets every 15 mm for the i-struts
|
||||
// --------------------------------------------------------------------
|
||||
module strut_eyelet_row(cnt = 1, eyelet_dist = FT_GRID_SIZE, correction = 0.0) {
|
||||
for (i = [0 : eyelet_dist : cnt * eyelet_dist]) {
|
||||
translate([0, i, 0]) {
|
||||
strut_eyelet(correctionVal = correction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a row of indentions between the eyelets on an i-strut
|
||||
// --------------------------------------------------------------------
|
||||
module strut_indention_row(cnt = 1, eyelet_dist = FT_GRID_SIZE, indention = 0.375 + 0.65) {
|
||||
for (i = [0 : eyelet_dist : cnt * eyelet_dist]) {
|
||||
translate([0, i, 0])
|
||||
indention(len = eyelet_dist, width = strut_eyelet_radius * 2, off = strut_radius, indention = indention);
|
||||
}
|
||||
}
|
||||
|
||||
// ********************
|
||||
// ** Strut Modules: **
|
||||
// ********************
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// a strut with an eyelet at both ends and the length as text on the
|
||||
// center of the indendtion
|
||||
// --------------------------------------------------------------------
|
||||
module x_or_i_strut(len = FT_GRID_SIZE * 2, h = strut_thickness, w = strut_width) {
|
||||
union() {
|
||||
difference() {
|
||||
strut(len = len, h = h, w = w);
|
||||
strut_eyelet();
|
||||
translate([0, len, 0])
|
||||
strut_eyelet();
|
||||
indention(len = len, width = strut_eyelet_radius * 2, off = strut_radius, indention = 0.375 + 0.65);
|
||||
if (Indent_Backside == 1)
|
||||
indention(len = len, width = strut_eyelet_radius * 2, off = strut_radius, indention = -(0.375 + 0.65));
|
||||
}
|
||||
linear_extrude(height = 1.1, convexity = 100, twist = 0)
|
||||
translate([0,len / 2 , 1])
|
||||
rotate([0, 0, 90])
|
||||
text(str(len), font="Impact", size = 3.5, valign="center", halign="center");
|
||||
}
|
||||
}
|
||||
// --------------------------------------------------------------------
|
||||
// an i-strut with eyelets every 15mm
|
||||
// --------------------------------------------------------------------
|
||||
module i_strut_with_holes(len = FT_GRID_SIZE * 2, h = strut_thickness, w = strut_width) {
|
||||
difference() {
|
||||
strut(len = len, h = h, w = w);
|
||||
strut_eyelet_row(len / FT_GRID_SIZE);
|
||||
strut_indention_row(cnt = (len / FT_GRID_SIZE) - 1);
|
||||
if (Indent_Backside == 1)
|
||||
strut_indention_row(cnt = (len / FT_GRID_SIZE) - 1, indention = -(0.375 + 0.65));
|
||||
}
|
||||
}
|
||||
|
||||
// ********************
|
||||
// ** Build section: **
|
||||
// ********************
|
||||
module main() {
|
||||
if (StrutType == 1) {
|
||||
if (Individual_Strut_Length > 1.0)
|
||||
x_or_i_strut(len = Individual_Strut_Length);
|
||||
else
|
||||
x_or_i_strut(len = X_Strut_Length);
|
||||
}
|
||||
else if (StrutType == 2) {
|
||||
x_or_i_strut(len = I_Strut_Length);
|
||||
}
|
||||
else if (StrutType == 3) {
|
||||
i_strut_with_holes(len = I_Strut_Length);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user