FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
import static uk.co.nickthecoder.foocad.arrange.v1.Arrange.*
import uk.co.nickthecoder.foocad.threaded.v2.*
import static uk.co.nickthecoder.foocad.threaded.v2.Thread.*
import static uk.co.nickthecoder.foocad.extras.v1.Extras.*
class CornerClamp : Model {
@Custom( about="Max width of wood that can fit in the clamp" )
var gap = 65
@Custom( about="Length,thickness,height" )
var blockSize = Vector3(60, 5, 30)
@Custom
var baseThickness = 3
@Custom
var endSize = Vector3(20, 30, 20)
@Custom
var footThickness = 5
@Custom
var thread = Thread(10)
.headSize(Vector2(20,10))
.headChamfer(1)
.rodChamfer(0.1)
.clearance(0.3)
fun end() : Shape3d {
val end = Square( endSize.x, endSize.y )
.roundAllCorners(3)
.leftTo( gap )
.extrude( baseThickness + endSize.z )
val hole = thread.threadedHole( endSize.x )
.rotateY(90)
.rightTo( end.right )
.centerYTo( end.middle.y )
.centerZTo( baseThickness + endSize.z/2 )
return end - hole
}
@Piece
fun bolt() : Shape3d {
return thread.bolt( gap + endSize.x + footThickness ).color("Orange")
}
@Piece
fun foot() : Shape3d {
val base = Square( endSize.x, blockSize.z - 2 )
.center()
.roundAllCorners(3)
.extrude( footThickness )
val hole = thread.threadedHole( base.size.z - 0.5 )
.clipped(true)
.topTo( base.top )
return (base - hole).color("Orange").darker()
}
@Piece
fun clamp() : Shape3d {
val triangle = Triangle( blockSize.x, blockSize.x )
.roundAllCorners(2)
.rotate(180)
val block = (triangle - triangle.offset(-blockSize.y))
.extrude( blockSize.z )
val base = Square( blockSize.x + gap + endSize.x )
.roundCorner(2,blockSize.x + (blockSize.x - endSize.y)/2,1)
.roundCorner(0,blockSize.x,1)
.roundAllCorners(10)
.extrude( baseThickness )
.leftTo( -blockSize.x )
.frontTo( -blockSize.x )
val xEnd = end().centerYTo( triangle.middle.y )
val yEnd = end().rotateZ(90).centerXTo( triangle.middle.x )
return base + block + xEnd + yEnd
}
override fun build() : Shape3d {
val bolts = bolt().tileY(2,1).rightTo(-1).frontTo(1)
val feet = foot().tileY(2,1).rightTo(-1).backTo(-1)
val clamp = clamp().leftTo(1)
return bolts + feet + clamp
}
}