Exit Full View
Up

/GardenFurniture/later/ColdFrame.foocad

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

class ColdFrame : Model {

    // The size of a standard double bed. Change these for a king/queen sized bed.
    val width = 800
    val length = 1000
    val height1 = 400
    val height2 = 500

    val diagonalLength = 420
    val roofAngle = 15

    val thickness = 27

    val baseLumber = Lumber( "Base", 94, thickness, "ForestGreen" ).stockLength( 2400 )
    val postLumber = Lumber( "Post", 39, thickness, "DarkGreen" ).stockLength( 2400 )
    val roofLumber = Lumber( "Roof", 39, thickness, "LightGreen" ).stockLength( 2400 )


    override fun build() : Shape3d {

        
        val baseLength = baseLumber.cut( length ).alongX()
            .label( "topLength" )
        val topEnd = baseLumber.cut( width - baseLumber.thickness()*2 ).brighter().rotate(0,0,90).alongY()
            .label( "topSide" )
        val base =
            baseLength.translate( -length/2, -width/2, 0).mirrorY().also() +
            topEnd.translate( -length/2 + thickness, -width/2 + thickness,0).mirrorX().also()

        val cornerPost = postLumber.cut( height1 ).label( "cornerPost" )
        val midPost = postLumber.cut( height2 ).label( "midPost" )
        val diagonal = postLumber.cut( diagonalLength ).label( "diagonal" ).brighter()

        val roofLength = roofLumber.cut( length - postLumber.width() * 2 ).alongX()
                .rotate( -roofAngle, 0, 0 )
        val roofLengths =
             roofLength.translate( -length/2 + postLumber.width(), width/2, height1-30 )
                .mirrorY().also() +
            roofLength
                .translate( -length/2 + postLumber.width(), 40, height2 - 30 )
                .mirrorY().also()

        val end =
            cornerPost.translate( -length/2 + baseLumber.thickness(), -width/2 + baseLumber.thickness(), 0 )
                .mirrorY().also() +
            midPost.translate( -length/2 + baseLumber.thickness(), -thickness/2, 0 ) +
            diagonal.alongY().rotate( -roofAngle, 0, 0 ).translate( -length/2, 0, height2-thickness).mirrorY().also()
            
        return base + end.mirrorX().also() + roofLengths

    }

}