FooCAD Source Codeimport static uk.co.nickthecoder.foocad.along.v2.Along.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
class SaladBed : Model {
@Custom
// https://www.homebase.co.uk/stewart-premium-extra-deep-gravel-tray-38cm/12814777.html
//var traySize = Vector3( 380, 240, 80 )
// https://www.homebase.co.uk/stewart-premium-gravel-tray-52cm/12840691.html
var traySize = Vector3( 420, 520, 90 )
@Custom
var gap = Vector2( 10, 10 )
@Custom
var thickness = 18
@Custom
var across = 3
@Custom
var back = 1
val supportLumber = Lumber("support", 40, 20 )
val lumber = Lumber( "lumber", 150, thickness )
val trimLumber = Lumber( "trim", 20, 20 )
val extraLumber = Lumber( "extra", 30, 20 )
override fun build() : Shape3d {
val front = lumber.cut( traySize.x * across + gap.x*across + thickness * 2)
.alongX()
.translateY( -back * traySize.y / 2 -thickness -gap.y*back/2)
.centerX()
val frontBack = front.mirrorY().also()
val side = lumber.cut( traySize.y * back + gap.y*back )
.alongY()
.centerY()
.leftTo(front.left)
.darker()
val sides = side.mirrorX().also()
val supportOffset = 40
val support = supportLumber.cut( side.size.y )
.alongY()
.centerY()
.translateX(traySize.x - supportOffset*2s - supportLumber.width()).also()
.darker()
val supports = support.repeatX( across, traySize.x ).centerX()
val trimX = trimLumber.cut( front.size.x - lumber.thickness() * 2 )
.alongX()
.frontTo( front.back )
.topTo( front.top )
.centerX()
.color( "Orange" )
val trimFrontBack = trimX.mirrorY().also()
val trimY = trimLumber.cut( side.size.y - trimLumber.thickness() * 2 )
.alongY()
.leftTo( side.right )
.topTo( front.top )
.centerY()
.color( "Orange" ).darker()
val trimSides = trimY.mirrorX().also()
// NOTE, add a mitre at each end, and cut a slot in the trim using the table saw.
val trimExtras = extraLumber.cut( side.size.y - 6 )
.alongY2()
.leftTo( side.right )
.topTo( front.top + 6 )
.color( "Orange" ).darker()
.repeatX( across -1, traySize.x + gap.x / 2 )
.centerXY()
val trimExtras2 = extraLumber.cut( traySize.x )
.alongX2()
.topTo( front.top )
.repeatX( across, traySize.x + gap.x / 2 )
.repeatY( 0, traySize.y + gap.y / 2 )
.centerXY()
.color( "Orange" )
val trays = Cube(traySize)
.bottomTo(supports.top)
.tileX( across, gap.x )
.tileY( back, gap.y )
.centerXY().previewOnly()
return frontBack + trimFrontBack + trimSides + trimExtras + trimExtras2 + sides + supports + trays
}
}