FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*
class GardenPath : Model {
override fun build() : Shape3d {
val endY = 6100
val endRight = 3120
val doorCenterX = 1530
val straightY = 2800 // 3340
val end = Cube( 600, 100, 1 ).rightTo( endRight ).backTo( endY )
val door = Cube( 600, 100, 1 ).centerXTo( 1530 ).frontTo(0)
val brickH = Square( 200, 100 ).offset(-4).margin(4).extrude(50)
val brickV = Square( 100, 200 ).offset(-4).margin(4).extrude(50)
val x3 = brickH.tileX(3)
val y6 = brickV.tileX(6)
val line2 = brickV + brickH.tileY(2).tileX(2).leftTo(100) + brickV.rightTo(600)
val threshold = x3.rightTo( endRight ).frontTo(endY).topTo(-50)
val step1 = y6.rightTo( endRight ).backTo(endY)
val step2 = line2.rightTo( endRight ).backTo(step1.front)
val step = (step1 + step2).bottomTo( threshold.top )
.color("DarkRed")
val last = line2.rightTo( endRight ).backTo( step.front )
.color("FireBrick")
val first = line2.centerXTo( doorCenterX ).tileY(straightY / line2.size.y)
.color("FireBrick")
val foo = 1400
val radius = 1400
val curve = PolygonBuilder().apply{
moveTo( first.middle.x, first.back )
bezierBy(
Vector2( 0, foo ),
Vector2( 0, foo ),
Vector2( last.middle.x - first.middle.x, last.front - first.back )
)
}.buildPath()
val curve3d = curve.thickness( 600 ).extrude( 50 )
val circle1 = Circle( radius ).leftTo(first.right).centerYTo(first.back)
val circle2 = circle1.rightTo( last.left ).centerYTo( last.front)
val circles = (circle1+circle2).extrude(100).previewOnly()
return threshold + step + last + first + door + curve3d + circles
}
}