FooCAD Source Codeimport 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
}
}