266 lines
9.2 KiB
OpenSCAD
266 lines
9.2 KiB
OpenSCAD
// ----------------------------------------------------------------
|
|
// A collection of a few parameterizable lugs for Fischertechnik
|
|
// struts
|
|
//
|
|
|
|
/* [Lug options] */
|
|
// Type
|
|
Lug_type = 0; // [0 : no output, 1:Connecting strip, 2:L-shaped lug, 3:T-shaped lug, 4: X-shaped lug, 5: Star-shaped lug, 6: Y-shaped lug, 7: Angle lug]
|
|
// Legth of a lug
|
|
Lug_length = 45; // [45.0 : 0.1 : 150.0]
|
|
/* [Options for the star shaped lug] */
|
|
// use only the half of a star?
|
|
Half_star = 0; // [0:no, 1:yes]
|
|
/* [Options for the Y-shaped lug] */
|
|
// Angle between the two branches
|
|
Y_Angle = 60.0; // [5 : 0.1 : 177]
|
|
/* [Options for the lug with a branch] */
|
|
// Angle of the branch in relation to the lug
|
|
Angle = 30.0; // [22.0 : 0.1 : 158.0]
|
|
|
|
/* [Hidden] */
|
|
|
|
// **********************
|
|
// ** Static Settings: **
|
|
// **********************
|
|
include<ft_util.scad>
|
|
|
|
segment_length = 22.5;
|
|
segment_width = 10.0;
|
|
segment_height = 2.0;
|
|
wall_length = 11.8;
|
|
wall_width = 1.0;
|
|
wall_height = 4.0;
|
|
|
|
|
|
// *********************
|
|
// ** Helper Modules: **
|
|
// *********************
|
|
|
|
// --------------------------------------------------------------------
|
|
// One part of a lug. Multiple segments asre combined to build the
|
|
// different forms of as lug
|
|
// --------------------------------------------------------------------
|
|
module lug_segment(length = segment_length, eyelet_row = true) {
|
|
difference() {
|
|
rotate([0,0,180])
|
|
translate([0,-length / 2,0])
|
|
union() {
|
|
translate([0, 0 , segment_height / 2])
|
|
cube([segment_width, length, segment_height], center = true);
|
|
translate([-(segment_width / 2), length / 2 - wall_length ,0])
|
|
cube([wall_width, wall_length, wall_height]);
|
|
translate([segment_width / 2 - wall_width, length / 2 - wall_length ,0])
|
|
cube([wall_width, wall_length, wall_height]);
|
|
}
|
|
|
|
if (eyelet_row == true) {
|
|
if (length < 22) {
|
|
translate([0, BASIC_BLOCK_HALF, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
else {
|
|
for (i = [0 : BASIC_BLOCK_SIZE : length - 22]) {
|
|
translate([0, BASIC_BLOCK_HALF + i, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
translate([0, BASIC_BLOCK_HALF, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ******************
|
|
// ** Lug Modules: **
|
|
// ******************
|
|
|
|
// --------------------------------------------------------------------
|
|
// Two parts in a row with a configurable length and an optional
|
|
// eyelet in the center
|
|
// --------------------------------------------------------------------
|
|
module connecting_strip(length = 45, center_eyelet = true) {
|
|
part_length = length / 2 + MANIFOLD_CORRECTION;
|
|
|
|
difference() {
|
|
union() {
|
|
translate([0,-part_length + MANIFOLD_CORRECTION,0])
|
|
lug_segment(part_length);
|
|
rotate([0,0,180])
|
|
translate([0, -part_length + MANIFOLD_CORRECTION, 0])
|
|
lug_segment(part_length);
|
|
}
|
|
if (center_eyelet == true)
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// a l-lug with configurable length
|
|
// --------------------------------------------------------------------
|
|
module l_lug(length = 27.5) {
|
|
difference() {
|
|
union() {
|
|
lug_segment(length);
|
|
translate([length - (segment_width / 2), length - (segment_width / 2), 0])
|
|
rotate([0,0,90])
|
|
lug_segment(length);
|
|
}
|
|
translate([0, length - segment_width / 2, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// a t-lug with configurable length
|
|
// --------------------------------------------------------------------
|
|
module t_lug(length = 45) {
|
|
l_lug_length = length * 0.6111111;
|
|
|
|
difference() {
|
|
union() {
|
|
l_lug(l_lug_length);
|
|
rotate([0,0,180])
|
|
translate([0, -l_lug_length * 2 + segment_width, 0])
|
|
lug_segment (l_lug_length);
|
|
}
|
|
translate([0, l_lug_length - segment_width / 2, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// an x-lug with configurable length
|
|
// --------------------------------------------------------------------
|
|
module x_lug(length = 45) {
|
|
l_lug_length = length * 0.6111111;
|
|
union() {
|
|
translate([0,-l_lug_length + segment_width / 2,0])
|
|
l_lug(l_lug_length);
|
|
rotate([0,0,180])
|
|
translate([0,-l_lug_length + segment_width / 2,0])
|
|
l_lug(l_lug_length);
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// a star-lug with configurable length and the option to build only
|
|
// half of the star
|
|
// --------------------------------------------------------------------
|
|
module star_lug(length = 45, half_star = 0) {
|
|
lug_length = length * 0.6111111;
|
|
lug_length2 = length * 0.5111111;
|
|
difference() {
|
|
union() {
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length);
|
|
rotate([0,0,60])
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length2);
|
|
rotate([0,0,120])
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length2);
|
|
rotate([0,0,180])
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length);
|
|
if (half_star == 0) {
|
|
rotate([0,0,240])
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length2);
|
|
rotate([0,0,300])
|
|
translate([0,-lug_length + segment_width / 2,0])
|
|
lug_segment(lug_length2);
|
|
}
|
|
}
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// a lug with configurable length and angle of the second part
|
|
// --------------------------------------------------------------------
|
|
module angle_lug(length = 45, angle = 158) {
|
|
save_angle = max(min(angle, 158), 22);
|
|
part_length = length / 2 + MANIFOLD_CORRECTION;
|
|
branch_length = part_length * sqrt(1/sin(save_angle));
|
|
difference() {
|
|
union() {
|
|
rotate([0, 0, save_angle])
|
|
translate([0, -branch_length, 0])
|
|
lug_segment(branch_length);
|
|
connecting_strip(length, center_eyelet = false);
|
|
}
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
if (save_angle < 35) {
|
|
translate ([0, -length / 2 + BASIC_BLOCK_HALF, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
|
|
}
|
|
if (save_angle > 145) {
|
|
translate ([0, length / 2 - BASIC_BLOCK_HALF, 0])
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
// an y-lug with a configurable length and angel between the two ends
|
|
// --------------------------------------------------------------------
|
|
module y_lug(length = 45, angle = 60) {
|
|
save_length = max(length, 45);
|
|
save_angle = max(min(angle, 177), 5);
|
|
center_length = segment_width;
|
|
part_length = save_length / 2 + MANIFOLD_CORRECTION;
|
|
branch_length = part_length * sqrt(1/sin(save_angle));
|
|
difference() {
|
|
union() {
|
|
if (save_angle > 90) {
|
|
translate([0, 0 , segment_height / 2])
|
|
cube([segment_width, center_length, segment_height], center = true);
|
|
}
|
|
rotate([0,0,180])
|
|
translate([0, -part_length + MANIFOLD_CORRECTION, 0])
|
|
lug_segment(part_length);
|
|
rotate([0,0,save_angle])
|
|
translate([0,-branch_length,0])
|
|
lug_segment(branch_length, eyelet_row = false);
|
|
rotate([0,0,-save_angle])
|
|
translate([0,-branch_length,0])
|
|
lug_segment(branch_length, eyelet_row = false);
|
|
}
|
|
eyelet(height = segment_height * 2 + MANIFOLD_CORRECTION);
|
|
}
|
|
}
|
|
|
|
// ********************
|
|
// ** Build section: **
|
|
// ********************
|
|
module main() {
|
|
if (Lug_type == 1) {
|
|
connecting_strip(length = Lug_length);
|
|
}
|
|
else if (Lug_type == 2) {
|
|
l_lug(length = Lug_length);
|
|
}
|
|
else if (Lug_type == 3) {
|
|
t_lug(length = Lug_length);
|
|
}
|
|
else if (Lug_type == 4) {
|
|
x_lug(length = Lug_length);
|
|
}
|
|
else if (Lug_type == 5) {
|
|
star_lug(length = Lug_length, half_star = Half_star);
|
|
}
|
|
else if (Lug_type == 6) {
|
|
y_lug(length = Lug_length, angle = Y_Angle);
|
|
}
|
|
else if (Lug_type == 7) {
|
|
angle_lug(length = Lug_length, angle = Angle);
|
|
}
|
|
}
|
|
|
|
main();
|