use <../math/math.scad> include <../defineVariable.scad> module octogonBot(sizeBot=sizeBot,scaleBot=scaleBot,borderBot=borderBot,deepBot=deepBot,deepBorderBot=deepBorderBot){ for (i = [[0,0,0],[1,0,0],[0,1,0]]){ union(){ rotate(90,i){ rotate(360/16,[0,0,1]){ cylinder(h=sizeBot*2,r=sizeOctogon(sizeBot)-borderOctogon(borderBot),$fn=8,center=true); translate([0,0,sizeBot-deepBot]){ cylinder(h=sizeBot,r=sizeOctogon(sizeBot)-borderInsideOctogon(borderBot,deepBorderBot),$fn=8,center=true); } translate([0,0,-sizeBot+deepBot]){ cylinder(h=sizeBot,r=sizeOctogon(sizeBot)-borderInsideOctogon(borderBot,deepBorderBot),$fn=8,center=true); } } } } } } module diffCubeOctogon(sizeBot){ t=sizeBot/sqrt(2); for(j=[[0,0,0],[1,0,0],[0,1,0]]){ rotate(90,j){ rotate(45,[0,0,1]){ for (i = [[-t,0,0],[t,0,0],[0,t,0],[0,-t,0]]){ union(){ translate(i){ cube([sizeOctogonSegment(sizeBot),sizeOctogonSegment(sizeBot),(sizeBot)*2],center=true); } } } } } } } module cubeBot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot){ distanceOctoCube=sqrt(sizeBot/2.0*sizeBot/2.0+(sizeOctogon(sizeBot))*(sizeOctogon(sizeBot))); distanceCube=sqrt(distanceOctoCube*distanceOctoCube-(sizeOctogonSegment(sizeBot)*sizeOctogonSegment(sizeBot)/4)); distanceCube=sizeBot/sqrt(2)-sizeOctogonSegment(sizeBot)/2;; union(){ for (i = [[-1,0,0],[1,0,0],[0,1,0],[0,-1,0]]){ union(){ rotate(45,i){ cube([sizeOctogonSegment(sizeBot)-borderBot,sizeOctogonSegment(sizeBot)-borderBot,sizeBot*2],center=true); translate([0,0,distanceCube+distanceCube/2-deepBot]){ cube([sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),distanceCube],center=true); } translate([0,0,-distanceCube-distanceCube/2+deepBot]){ cube([sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),distanceCube],center=true); } } } } for (i = [[0,0,-1],[0,0,1]]){ union(){ rotate(45,i){ cube([sizeOctogonSegment(sizeBot)-borderBot,sizeBot*2,sizeOctogonSegment(sizeBot)-borderBot],center=true); translate([0,distanceCube+distanceCube/2-deepBot]){ cube([sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),distanceCube,sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot)],center=true); } translate([0,-distanceCube-distanceCube/2+deepBot]){ cube([sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot),distanceCube,sizeOctogonSegment(sizeBot)-borderInsideBot(borderBot,deepBorderBot)],center=true); } } } } diffCubeOctogon(sizeBot); } } module hexagonBot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot){ s=5.8*scaleBot; union(){ for (i = [45,-45,135,-135]){ rotate(i,[0,0,1]){ rotate(54.5,[1,0,0]){ cylinder(h=sizeBot*2,r=sizeHexagonSegment(sizeBot)-borderHexagon(borderBot),$fn=6,center=true); translate([0,0,sizeBot+s]){ cylinder(h=sizeBot,r=sizeHexagonSegment(sizeBot),$fn=6,center=true); } translate([0,0,sizeBot+s-deepBot]){ cylinder(h=sizeBot,r=sizeHexagonSegment(sizeBot)-borderInsideHexagon(borderBot,deepBorderBot),$fn=6,center=true); } translate([0,0,-sizeBot-s]){ cylinder(h=sizeBot,r=sizeHexagonSegment(sizeBot),$fn=6,center=true); } translate([0,0,-sizeBot-s+deepBot]){ cylinder(h=sizeBot,r=sizeHexagonSegment(sizeBot)-borderInsideHexagon(borderBot,deepBorderBot),$fn=6,center=true); } } } } } } module percage(){ a=56; for (i=[a,a+90,a+180,a+270,-a,-a-90,-a-180,-a-270]){ rotate(i,[0,0,1]){ translate([sizeCube/2+1,0,0]){ cylinder(h=sizeCube,r=1.5,$fn=20,center=true); translate([0,0,sizeCube/6]){ cylinder(sizeCube/10,r=3,$fn=20,center=true); } } } } } module bot(sizeBot=sizeBot,scaleBot=scaleBot,borderBot=borderBot,deepBot=deepBot,deepBorderBot=deepBorderBot){ sizeBot=sizeBot*scaleBot; borderBot=borderBot*scaleBot; deepBot=deepBot*scaleBot; deepBorderBot=deepBorderBot*scaleBot; difference() { cube(sizeBot,center=true); octogonBot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot); cubeBot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot); hexagonBot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot); } } module halfBot(sizeBot=sizeBot,scaleBot=scaleBot,borderBot=borderBot,deepBot=deepBot,deepBorderBot=deepBorderBot){ difference(){ bot(sizeBot,scaleBot,borderBot,deepBot,deepBorderBot); translate([0,0,-sizeBot*scaleBot]) cube(scaleBot*sizeBot*2,center=true); } } //halfBot(); bot();