Exit Full View
Up

/Furniture/HallwaySeat.foocad

HallwaySeat
FooCAD Source Code
import static uk.co.nickthecoder.foocad.along.v2.Along.*

class HallwaySeat : Model {

    @Custom var isExploded = false

    var unitWidth = 1000
    var unitDepth = 300
    var unitHeight = 1200

    var seatDepth = 400
    var feetHeight = 320

    override fun build() : Shape3d {
        val exploded = if (isExploded) 100 else 0

        val depth =  unitDepth + seatDepth
        val width = unitWidth

        val sheet = SheetLumber( "sheet", 12, "Orange" )
        val feetLumber = Lumber( "feet", 30, 50, "ForestGreen" )
        val trimLumber = Lumber( "trim", 80, 12, "LightGreen" )
        val supportLumber = Lumber( "support", 12, 25 )

        val mockUnit = Cube( width, unitDepth, unitHeight )
            .centerX().centerY().translate( 0, seatDepth/2, 0 )
            

        val floor = sheet.cut( width - trimLumber.thickness() * 2, depth - trimLumber.thickness() * 2 )
            .label( "floor" )
            .alongY2()
            .centerX().centerY()
            .translate( 0,0, -sheet.thickness() )

        val feet = feetLumber.cut( feetHeight )
            .label( "feet" )
            .translate( -width/2 + trimLumber.thickness(), -depth/2 + trimLumber.thickness(), -feetHeight - sheet.thickness() )
            .mirrorX().also().mirrorY().also()

        val edgeTrim = trimLumber.cut( depth - trimLumber.thickness() * 2 )
            .darker()
            .label( "edgeTrim" )
            .alongY().rotate(0,90,0)
            .centerY()
            .translate( -width/2, 0, 0 )
            .mirrorX().also()

        val endTrim = trimLumber.cut( width )
            .label( "endTrim" )
            .alongX()
            .centerX()
            .translate( 0, -depth/2, -trimLumber.width() )
            .mirrorY().also()

        val edgeSupport = supportLumber.cut( depth - trimLumber.thickness() * 2 - feetLumber.thickness() * 2 - 20 )
            .label( "edgeSupport" )
            .alongY()
            .centerY()
            .translate( -width/2 + trimLumber.thickness(), 0, -supportLumber.thickness() -sheet.thickness() )
            .mirrorX().also()

        val endSupport = supportLumber.cut( width - trimLumber.thickness() * 2 - feetLumber.width() * 2 - 20 )
            .label( "endSupport" )
            .alongX()
            .rotate( 90, 0, 0 )
            .centerX()
            .translate( 0, depth / 2 - supportLumber.width(), -supportLumber.thickness() -sheet.thickness() )
            .mirrorY().also()

        return mockUnit + feet + edgeTrim + endTrim + floor + edgeSupport + endSupport
    }

}