FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
import static uk.co.nickthecoder.foocad.changefilament.v1.ChangeFilament.*
/*
A sphere with one flat side containing a magnet.
The same size as the ball bearing, so that it fits neatly in the tray.
*/
class WhiskeyBallTool3 : Model, PostProcessor {
var ballSize = 19.5
// Size of the void for the magnet.
var voidDiameter = 9.0
var voidHeight = 5.0
var floor = 0.4
var flat = 1.9
var sides = 60
override fun build() : Shape3d {
val sphere = Sphere( ballSize/2 ).sides(sides).translateZ(ballSize/2 - flat )
val removeFlat = Cube( 100, 100, flat + 0.01 ).translateZ(-flat-0.01).centerXY()
val hole = Cylinder.hole( voidHeight, voidDiameter/2 )
.translateZ( floor )
val result = sphere - removeFlat - hole
// Space them out well, so that the magnets don't jump together!
return result.repeatX(4, ballSize+30) // Cube( 100,1,100 ).center()
}
override fun postProcess(gcode: GCode) {
// NOTE, this is 'flat' too early, which gives some time to get ready!
gcode.alertAtHeight( voidHeight, "Add magnet" )
}
}