Exit Full View
ZipUp

/New/SpringForm.foocad

SpringForm
FooCAD Source Code
import 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
    }

}