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