Omvandla träd 3D tryckt leksak (7 / 11 steg)
Steg 7: Att sätta allt ihop
Här är den resulterande kod för hela med massor av variabler som kan leka med den. Filen OpenSCAD är också fäst här.
Strukturen för trädet är:
- Top cap (endast projektion)
- spinnare (en loop)
- botten cap (bara indraget)
spinnare = 8. Hur många barer spinning
startDist = 20; inledande sträcka för spinner. Lägsta (ballWidth + connectorWidth) / 2
distStep = 5; ökar värdet i avstånd för varje spinner
rotatePreview = 8; Förhandsgranska rotation effekter
ballWidth = 14. bredd av bollar på varje spinner
ballHeight = 6; höjden av bollar på varje spinner
connectorWidth = 17; bredd av kontakten i mitten av spinner
strecksatsen = 3.5. djup av indraget i kontakt
djup = 3; djup av extrudering från kontakten
marginal = 1; extra höjd mellan bollar
modul spinner(dist) {
centrala hållare för pluggen
Difference() {
huvudavsnittet
Union() {
cylinder
translate([0,0,-(ballHeight+margin)/2]) cylinder (h = ballHeight + marginal, r = connectorWidth/2, $fn = 50);
bar
kub (storlek = [dist * 2, 4, 3], center = true);
bollar i ändarna
translate([Dist,0,0]) scale([1,1,ballHeight/ballWidth]) sfär (r = ballWidth/2, $fn = 50);
translate([-Dist,0,0]) scale([1,1,ballHeight/ballWidth]) sfär (r = ballWidth/2, $fn = 50);
manlig kontakt
translate([0,0,-(ballHeight+margin)/2-extrude])
Intersection() {
cylinder (h = ballHeight, r = connectorWidth/2-2, $fn = 50);
kub (storlek = [20,8,10], center = true);
}
}
indragen utrymme på toppen
första gruppen gör det möjligt för 8 graders vridning ett sätt
translate([0,0,ballHeight/2-indent+margin/2])
Intersection() {
cylinder (h = ballHeight + 1, r = connectorWidth/2-1, $fn = 50);
rotate([0,0,-8]) kub (storlek = [20,8,10], center = true);
}
andra gruppen gör 40 graders vridning andra sätt
translate([0,0,ballHeight/2-indent+margin/2])
Intersection() {
cylinder (h = ballHeight + 1, r = connectorWidth/2-1, $fn = 50);
rotate([0,0,40]) kub (storlek = [20,8,10], center = true);
}
cylinder för att klippa ut mitten för pluggen
translate([0,0,-25]) cylinder (h = 50, r = 3.2, $fn = 50);
}
}
Top cap
Difference() {
Union() {
huvudavsnittet
translate([0,0,(ballHeight+margin+extrude+3)-(ballHeight+1)/2]) cylinder (h = ballHeight + marginal, r = connectorWidth/2, $fn = 50);
manlig kontakt
translate([0,0,(ballHeight+margin+extrude+3)-(ballHeight+margin)/2-extrude])
Intersection() {
cylinder (h = ballHeight, r = connectorWidth/2-2, $fn = 50);
kub (storlek = [20,8, ballHeight], center = true);
}
}
translate([0,0,-100]) cylinder (h = 200, r = 3.2, $fn = 50);
}
spinnare
för (jag = [0:spinners-1]) {
translate([0,0,-i*(ballHeight+margin+extrude+3)])rotate([0,0,rotatePreview*i]) spinner(i*distStep+startDist);
}
botten cap
translate([0,0,-(ballHeight+margin+extrude+3)*Spinners-3])
Difference() {
huvudavsnittet
translate([0,0,-(ballHeight/2+1)/2]) cylinder (h = ballHeight + marginal, r = connectorWidth/2, $fn = 50);
indragen utrymme på toppen
första gruppen gör det möjligt för 8 graders vridning ett sätt
translate([0,0,ballHeight/2-indent+margin/2])
Intersection() {
cylinder (h = ballHeight + 1, r = connectorWidth/2-1, $fn = 50);
rotate([0,0,-8]) kub (storlek = [20,8,10], center = true);
}
andra gruppen gör 45 graders vridning andra sätt
translate([0,0,ballHeight/2-indent+margin/2])
Intersection() {
cylinder (h = ballHeight + 1, r = connectorWidth/2-1, $fn = 50);
rotate([0,0,40]) kub (storlek = [20,8,10], center = true);
}
pluggen cutout
translate([0,0,-180]) cylinder (h = 200, r = 3.2, $fn = 50);
}