FooCAD Source Codeimport static uk.co.nickthecoder.foocad.screws.v3.Screws.*
import static uk.co.nickthecoder.foocad.along.v2.Along.*
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
class TwistLatchSimple : Model {
@Custom
var latchSize = Vector3(40, 10, 10)
@Custom
var diameter = 20
@Custom
var holeDiameter = 4
@Custom
var countersink = Countersink( 4, 12 )
@Custom
var washerThickness = 2.0
@Custom
var padThickness = 2.0
@Custom
var cornerRadius = 2.0
@Custom
var keyholeHanger = KeyholeHanger()
@Piece
fun washer() : Shape3d {
return (Circle( diameter / 2 - 1 ) - Circle( holeDiameter/2 + 1 ))
.extrude( washerThickness )
.color( "DarkGrey" )
}
@Piece
fun pad() : Shape3d {
return Square( latchSize.x - diameter / 2 - 2, latchSize.y ).center()
.roundAllCorners( cornerRadius )
.smartExtrude( padThickness )
.top( Fillet( padThickness ) )
.color( "DarkGrey" )
}
@Piece
fun latch() : Shape3d {
val latch = Square( latchSize.x, latchSize.y )
.roundAllCorners( cornerRadius )
.smartExtrude( latchSize.z )
.top( Fillet( cornerRadius ) )
.centerY()
val round = Circle( diameter / 2 )
.smartExtrude( latchSize.z )
.top( Fillet( cornerRadius ) )
println( "countersink = $countersink" )
val hole = countersink.depth( latchSize.z)
.topTo(latchSize.z)
return latch + round - hole
}
@Piece
fun keyholeTest() : Shape3d {
val block = Cube( 10, 30, 40 ).centerXY()
val keyhole = keyholeHanger
.alongY2().mirrorZ()
.frontTo( block.front )
.translateZ( block.middle.z )
return block - keyhole
}
override fun build() : Shape3d {
val washer = washer()
val latch = latch().bottomTo( washer.top ).color("green")
val pad = pad().rightTo( latch.right ).mirrorZ().bottomTo(0)
return washer + latch + pad
}
}