FooCAD Source Codeimport uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
import uk.co.nickthecoder.foocad.extras.v1.*
import static uk.co.nickthecoder.foocad.extras.v1.Extras.*
class RotaryTool : Model {
var thickness = 2.0
var batterySize = Vector2( 20, 65 )
var jointLength = 3.0
var clearance = 0.3
var switchSize = Vector2( 12, 10 )
var chargerSize = Vector2( 18, 20 )
meth batteryCircle() = Circle( batterySize.x / 2 )
meth batteryBump() = Square( 6.0, batterySize.x/2 ).centerX().backTo( batterySize.x / 2 + 2).roundAllCorners(2,6)
meth batteryInside() = batteryCircle() + batteryBump()
meth batteryOutside() = ( batteryCircle() hull batteryBump() ).toPolygon().offset(thickness)
@Piece
meth batteryTube() : Shape3d {
val main = (batteryOutside() - batteryInside())
.extrude( batterySize.y + jointLength*2 )
return main
}
@Piece
meth chargerCap() : Shape3d {
val inside = batteryInside() - Square( 30 ).centerX().backTo(0)
val outside = batteryOutside()
val baseThickness = 2
val thin = 0.8
val main = outside.smartExtrude( baseThickness + chargerSize.y )
.bottom( Chamfer( 1.6 ) )
// TODO Check USB size 8x3?? Check chargerSize
val forCharger = Square( 8, 3 ).centerX().mirrorY().extrude(chargerSize.y + 10) +
(Square( chargerSize.x, 3 ).centerX().mirrorY() + inside).extrude(chargerSize.y + 10).translateZ(thin)
val lid = Square( chargerSize.x + 1, 3 ).centerX().mirrorY().extrude(1.2).bottomTo( thin + chargerSize.y )
val connection = (batteryInside() - batteryInside().offset(-thickness)).extrude(4)
.bottomTo( main.top )
return main - forCharger + lid //+ connection
}
override fun build() : Shape3d {
val cap = chargerCap().color("Green")
val batteryTube = batteryTube().bottomTo( cap.top - jointLength + clearance + 40 )
val battery = Cylinder( 65, 18/2 ).previewOnly().bottomTo( batteryTube.bottom )
return cap + batteryTube + battery
}
}