FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
/**
A simple way to drive someng using a electric drill/screwdriver.
Attach a bolt, and add rubber grip (I used an old bike tyre).
My first use for this wa to turn a filament spool, as I wanted to transfer
filament from an nice environmentally friendly cardboard spool to an
(evil if used only once) plastic spool.
*/
class DriverWheel : Model {
// One of my spools has a 31mm opening, but most are larger
// Note this is the "small" diameter, the crown will make it larger.
@Custom
var diameter = 35
@Custom
var depth = 20
@Custom
var baseThickness = 1.0
@Custom
var thickness = 1.5
@Custom
var bolt = 5.5 // For an M5 bolt?
// A lower value makes the crown more pronounced.
@Custom
var crown = 2.0
override fun build() : Shape3d {
val profile = PolygonBuilder().apply {
moveTo(0,0)
lineTo(diameter/2,0)
circularArcTo(diameter/2, depth, diameter*crown, false,true)
lineTo(diameter/2,depth)
lineTo(diameter/2-thickness, depth)
circularArcTo(diameter/2-thickness, baseThickness, diameter*crown, false,false)
lineTo(0,baseThickness)
}.build()
val finP = PolygonBuilder().apply {
moveTo( 0,0 )
lineTo(diameter/2,0)
circularArcTo(diameter/2, depth/2, diameter*crown, false,true)
lineTo(5,4)
}.build()
val fins = finP.extrude( 1 ).centerZ().rotateX(90).repeatAroundZ(7) +
Cylinder(5,6)
// I added fins to the design, but my 1st print din't include them,
// and it worked just fine!
val result = profile.revolve() /*+ fins*/ -
Cylinder.hole( depth, bolt/2 ).center()
return result // Cube( diameter*2,1,diameter*2).center()
}
}