190 lines
2.9 KiB
OpenSCAD
190 lines
2.9 KiB
OpenSCAD
|
|
module puzzle_line(a=20, b=15, z=40, h=10) {
|
|
render()
|
|
difference() {
|
|
union() {
|
|
cube([1, z, h]);
|
|
|
|
hull() {
|
|
translate([0,(z-a)/2,0])
|
|
cube([0.5, a, h]);
|
|
translate([1.5,(z-b)/2,0])
|
|
cube([0.5, b, h]);
|
|
}
|
|
}
|
|
|
|
hull() {
|
|
translate([-0.5,(z-(a-1))/2,0])
|
|
cube([0.5, (a-1), h]);
|
|
translate([0.5,(z-(b-1))/2,0])
|
|
cube([0.5, (b-1), h]);
|
|
}
|
|
}
|
|
}
|
|
|
|
module contour(h=70) {
|
|
for(r = [0:5]) {
|
|
rotate([0,0,(r+0.5)*60])
|
|
translate([10.9,-6.88,0])
|
|
{
|
|
if( r%2 == 0 ) {
|
|
mirror([1,0,0])
|
|
translate([-1,0,0])
|
|
puzzle_line(5.7, 3.2, z=6.88*2, h=h);
|
|
} else {
|
|
puzzle_line(4.5, 2.2, z=6.88*2, h=h);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module contour_hull(h=1, a=5.7, b=3.2, z=6.88*2, a0=4.5,b0=2.2,z0=6.88*2) {
|
|
render()
|
|
difference() {
|
|
union() {
|
|
cylinder(d=27, h=h, $fn=6);
|
|
|
|
for(r = [0:2]) {
|
|
rotate([0,0,r*120-30])
|
|
translate([10.9,-6.88,0]) {
|
|
hull() {
|
|
translate([-0.5,(z0-(a0-1))/2,0])
|
|
cube([0.5, (a0-1), h]);
|
|
translate([0.5,(z0-(b0-1))/2,0])
|
|
cube([0.5, (b0-1), h]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for(r = [0:2]) {
|
|
rotate([0,0,30+r*120])
|
|
translate([10.9,-6.88,0])
|
|
mirror([1,0,0])
|
|
translate([-1,0,0])
|
|
{
|
|
|
|
hull() {
|
|
translate([-0.5,(z-(a-1))/2,0])
|
|
cube([0.5, (a-1), h]);
|
|
translate([0.5,(z-(b-1))/2,0])
|
|
cube([0.5, (b-1), h]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module inner_contour(h=70) {
|
|
for(r = [0:5]) {
|
|
rotate([0,0,(r+0.5)*60])
|
|
translate([10.5-1,-6,0])
|
|
{
|
|
if( r%2 == 0 ) {
|
|
mirror([1,0,0])
|
|
translate([-1,0,0])
|
|
puzzle_line(6, 4.4, z=6*2, h=h);
|
|
} else {
|
|
puzzle_line(4.5, 1, z=6*2, h=h);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module inner_contour_hull(h=1, a=5.7, b=3.2, z=6.88*2, a0=4.4,b0=2.1,z0=6.88*2) {
|
|
render()
|
|
union() {
|
|
cylinder(d=22.6, h=h, $fn=6);
|
|
inner_contour(h=h);
|
|
}
|
|
}
|
|
|
|
module front_text(value="220", unit="Ω") {
|
|
color([0,0,1])
|
|
{
|
|
translate([0,4,6])
|
|
linear_extrude(8)
|
|
text(value, size=6, halign="center", font="+Jakatar");
|
|
|
|
translate([0,-9,0])
|
|
linear_extrude(8)
|
|
text(unit, size=10, halign="center", font="+Jakatar");
|
|
}
|
|
}
|
|
|
|
module front() {
|
|
render()
|
|
difference() {
|
|
cylinder(d=26.5, h=8, $fn=6);
|
|
|
|
translate([0,-8,2])
|
|
cylinder(d=24, h=6, $fn=6);
|
|
|
|
translate([0,-3,1])
|
|
cylinder(d=20, h=5, $fn=6);
|
|
}
|
|
}
|
|
|
|
module inner_color(value, unit, h) {
|
|
translate([0,0,h])
|
|
render()
|
|
intersection(){
|
|
front();
|
|
front_text(value, unit);
|
|
}
|
|
}
|
|
|
|
module inner(value="220", unit="Ω", h=70) {
|
|
{
|
|
render()
|
|
difference()
|
|
{
|
|
inner_contour(h=h);
|
|
|
|
translate([-20,4,0])
|
|
cube([40, 15, h]);
|
|
}
|
|
|
|
// back
|
|
inner_contour_hull();
|
|
|
|
// front
|
|
translate([0,0,h])
|
|
{
|
|
render()
|
|
difference()
|
|
{
|
|
front();
|
|
front_text(value, unit);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
module outer(h=70) {
|
|
translate([0,0,-10])
|
|
cylinder(d=15.5, h=10, $fn=6);
|
|
|
|
contour(h=h);
|
|
|
|
translate([0,0,0])
|
|
contour_hull();
|
|
}
|
|
|
|
|
|
translate([0,0,10])
|
|
{
|
|
|
|
color([0.22,0.2,0.2])
|
|
inner("220", "Ω", h=70);
|
|
|
|
color([0.7,0.8,1.0])
|
|
inner_color("220", "Ω", h=70);
|
|
}
|
|
|
|
color([0.7, 0.4, 0.4])
|
|
outer(h=70);
|
|
|
|
|