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 } }