143 lines
2.9 KiB
OpenSCAD
143 lines
2.9 KiB
OpenSCAD
inner_ring();
|
|||
|
|
outer_ring();
|
||
|
|
spokes();
|
||
|
|
|
||
|
|
|
||
|
|
module inner_ring() {
|
||
|
|
difference() {
|
||
|
|
cylinder(h=4, d=70, $fn=500);
|
||
|
|
|
||
|
|
translate([0, 0, -1])
|
||
|
|
cylinder(h=6, d=55, $fn=500);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module outer_ring() {
|
||
|
|
difference() {
|
||
|
|
union() {
|
||
|
|
cylinder(h=4, d=210, $fn=500);
|
||
|
|
|
||
|
|
bend1();
|
||
|
|
|
||
|
|
bend2();
|
||
|
|
|
||
|
|
ring();
|
||
|
|
}
|
||
|
|
|
||
|
|
translate([0, 0, -1])
|
||
|
|
cylinder(h=6, d=195, $fn=500);
|
||
|
|
|
||
|
|
translate([-220, -150, -10])
|
||
|
|
cube([220, 300, 200]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module spokes() {
|
||
|
|
for (a = [-55 : 27.5 : 55]) {
|
||
|
|
rotate([0, 0, a])
|
||
|
|
translate([30, -5, 0])
|
||
|
|
cube([70, 10, 4]);
|
||
|
|
}
|
||
|
|
|
||
|
|
translate([0, 30, 0])
|
||
|
|
cube([10, 70, 4]);
|
||
|
|
|
||
|
|
translate([0, -100, 0])
|
||
|
|
cube([10, 70, 4]);
|
||
|
|
}
|
||
|
|
|
||
|
|
module bend1() {
|
||
|
|
translate([0, 0, 10])
|
||
|
|
rotate_extrude($fn=500)
|
||
|
|
translate([105, 0, 0])
|
||
|
|
difference() {
|
||
|
|
circle(d=20, $fn=500);
|
||
|
|
|
||
|
|
circle(d=12, $fn=500);
|
||
|
|
|
||
|
|
translate([-10, 0, 0])
|
||
|
|
square(20);
|
||
|
|
|
||
|
|
translate([-20, -10, 0])
|
||
|
|
square(20);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module bend2() {
|
||
|
|
translate([0, 0, 75])
|
||
|
|
rotate_extrude($fn=500)
|
||
|
|
translate([100, 0, 0])
|
||
|
|
difference() {
|
||
|
|
circle(d=30, $fn=500);
|
||
|
|
|
||
|
|
circle(d=22, $fn=500);
|
||
|
|
|
||
|
|
translate([-20, -40, 0])
|
||
|
|
square(40);
|
||
|
|
|
||
|
|
translate([-30, 0, 0])
|
||
|
|
rotate([0, 0, -15])
|
||
|
|
square(60, center=true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module ring() {
|
||
|
|
difference() {
|
||
|
|
union() {
|
||
|
|
translate([0, 0, 10])
|
||
|
|
cylinder(h=65, d=230, $fn=500);
|
||
|
|
|
||
|
|
difference() {
|
||
|
|
translate([-13, 0, 44])
|
||
|
|
// torus(i=57, o=147, xs=0.5, $fn=500);
|
||
|
|
torus2(r1=101, r2=45, xs=0.6, $fn=500);
|
||
|
|
|
||
|
|
cube([200, 200, 200]);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
translate([0, 0, -20])
|
||
|
|
cylinder(h=150, d=221, $fn=500);
|
||
|
|
|
||
|
|
for (a = [-84 : 6 : 84]) {
|
||
|
|
for (h = [15 : 18 : 69]) {
|
||
|
|
p = (a + 84) / 168;
|
||
|
|
d = 10 * pow(p, 0.8);
|
||
|
|
|
||
|
|
rotate([0, 0, a])
|
||
|
|
translate([100, 0, h])
|
||
|
|
rotate([0, 90, 0])
|
||
|
|
cylinder(h=50, d=d, $fn=50);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
for (a = [-87 : 6 : 87]) {
|
||
|
|
for (h = [24 : 18 : 63]) {
|
||
|
|
p = (a + 87) / 174;
|
||
|
|
d = 10 * pow(p, 0.8);
|
||
|
|
|
||
|
|
rotate([0, 0, a])
|
||
|
|
translate([100, 0, h])
|
||
|
|
rotate([0, 90, 0])
|
||
|
|
cylinder(h=50, d=d, $fn=50);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module torus(i, o, xs=1.0, ys=1.0) {
|
||
|
|
r = (o - i) / 2;
|
||
|
|
|
||
|
|
rotate_extrude()
|
||
|
|
translate([i + r, 0, 0])
|
||
|
|
scale([xs, ys, 1.0])
|
||
|
|
circle(r);
|
||
|
|
}
|
||
|
|
|
||
|
|
module torus2(r1, r2, xs=1.0, ys=1.0) {
|
||
|
|
rotate_extrude()
|
||
|
|
translate([r1, 0, 0])
|
||
|
|
scale([xs, ys, 1.0])
|
||
|
|
circle(r2);
|
||
|
|
}
|