import 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 } }