Files
forts/clip.scad
T

157 lines
3.3 KiB
OpenSCAD
Raw Normal View History

2026-09-07 12:49:58 -07:00
$fn = 300;
outer = 25.9;
part = "b";
if (part == "a" || part == "*") {
difference() {
assembly();
clips(mask=true);
}
}
if (part == "b" || part == "*") {
intersection() {
assembly();
clips(mask=true);
}
}
module tenten() {
color("red")
union() {
difference() {
hull() {
for (x=[0.75, outer - 0.75], y=[0.75, outer - 0.75])
translate([x, y, 0]) {
cylinder(h=30, r=0.75);
}
}
for (t=[[-1, (outer - 9) / 2], [outer - 1.0, (outer - 9) / 2]])
translate([t[0], t[1], -1])
cube([2, 9, 32]);
for (t=[[-1, (outer - 9) / 2], [outer - 3, (outer - 9) / 2]])
translate([t[0], t[1] + 1.1, -1])
cube([4, 6.8, 32]);
for (t=[[(outer - 9) / 2, -1], [(outer - 9) / 2, outer - 1.0]])
translate([t[0], t[1], -1])
cube([9, 2, 32]);
for (t=[[(outer - 9) / 2, -1], [(outer - 9) / 2, outer - 3]])
translate([t[0] + 1.1, t[1], -1])
cube([6.8, 4, 32]);
}
for (x=[(outer - 9) / 2,(outer - 9) / 2 + 9], y=[1.1,outer-1.1]) {
translate([x, y, 0])
cylinder(h=30, d=2.2);
translate([y, x, 0])
cylinder(h=30, d=2.2);
}
}
}
module assembly() {
difference() {
union() {
hull() {
for (x=[1, outer + 3], y=[1, outer])
translate([x, y, 0])
cylinder(h=12, r=1.4);
}
hull() {
for (x=[1.7, outer + 2.3], y=[1.7, outer - 0.7])
translate([x, y, 0])
cylinder(h=20, r=1.2);
}
}
translate([2, -1.01, -1])
tenten();
translate([10, -1, -1])
cube([15, 5, 30]);
}
clips();
}
module clips(mask=false) {
translate([-3.51, 1, 0]) {
if (mask) {
clipmask();
} else {
clip();
}
}
translate([outer + 7.51, 1, 0])
mirror([1, 0, 0]) {
if (mask) {
clipmask();
} else {
clip();
}
}
translate([3, outer + 4.5, 0])
rotate([0, 0, -90]) {
if (mask) {
clipmask();
} else {
clip();
}
}
translate([27, outer + 9.5, 0])
mirror([1, 0, 0])
rotate([0, 0, -90]) {
if (mask) {
clipmask();
} else {
clip();
}
}
}
module clip() {
difference() {
hull() {
for (y=[0, 20])
translate([0, y, 0]) {
translate([1, 2, 0])
cylinder(h=12, d=4);
translate([1, 0, 0])
cube([4, 4, 12]);
}
}
translate([1.2, -1.75, -1])
rotate([0, 0, 25])
cube([2.4, 2, 14]);
for (y=[0.8:1.7:18])
translate([2.4, y, -1])
rotate([0, 0, 65])
cube([0.5, 2.0, 14]);
for (y=[0.4:1.7:18])
translate([0.7, y, -1])
rotate([0, 0, -65])
cube([0.5, 2.1, 14]);
}
}
module clipmask() {
translate([0.3, -1, -1])
cube([2.7, 20.1, 14]);
}