FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
import uk.co.nickthecoder.foocad.threaded.v2.*
class SpringForm : Model {
var size = Vector2( 20, 30 )
var pitch = 3.0
var wireDiameter = 2.0
var baseSize = Vector2( 70, 10 )
meth thread() = Thread( size.x, pitch )
override fun build() : Shape3d {
val thread = thread()
val base = Square( baseSize.x, thread.diameter + 1 ).center()
.roundAllCorners(1)
.smartExtrude( baseSize.y )
.edges( Chamfer(0.6) )
val rod = thread.threadedRod(size.y)
.chamferBottom(false)
.bottomTo( base.top - 1 )
val reinforce = Square(1).center().translateX( thread.diameter/2 - 4 )
.extrude( baseSize.y + size.y/2 )
.bottomTo(0.6)
.repeatAroundZ(6)
val holeDiameter = wireDiameter + 0.4
val hole = Circle( holeDiameter/2 ).extrude( 10 )
.topTo( rod.top + 0.01 )
val slot = Square( size.x, holeDiameter ).center()
.extrude( holeDiameter )
.topTo( hole.top )
val slotEnd = Square( holeDiameter )
.extrude( holeDiameter + thread.pitch*4 )
.centerY().rightTo( rod.right )
.topTo( slot.top )
.mirrorX().also()
//.color("Red")
val prepHole = Circle( holeDiameter/2 )
.extrude( baseSize.y + 0.02 )
.bottomTo( -0.01 )
.rightTo( base.right - thread.diameter )
.frontTo( base.front + 2 )
.mirrorX().also().mirrorY().also()
return base + rod - hole - slot - slotEnd - reinforce - prepHole
}
}