FooCAD Source Codeimport static uk.co.nickthecoder.foocad.layout.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.Layout3d.*
class Buttons : Model {
@Custom
var piece = "all"
val dx = 13/2
val dy = 13/2
val gap = 1.0
fun outline() : Shape2d {
val shape = SVGParser().parseFile("kobo.svg").shapes["buttons"].center()
val svgWidth = shape.size.x
return shape.scale( 26/svgWidth, 25/svgWidth )
}
fun down() = PolygonBuilder().apply {
moveTo( 2,-5 )
lineTo( 8,-12 )
lineTo( -8,-12 )
lineTo( -2,-5 )
}.build()
fun right() = PolygonBuilder().apply {
moveTo( 5,2 )
lineTo( 13,6 )
lineTo( 13,-6 )
lineTo( 5, -2 )
}.build()
fun diagonal() = PolygonBuilder().apply {
moveTo( 0.5,2 )
lineTo( 10, 12 )
lineTo( 12,7.5 )
lineTo( 2,1 )
}.build()
fun ok() = Square( 7,7 ).roundAllCorners(1).center()
fun bottom() : Shape3d {
val outline = outline()
val around = (outline.offset(2) - outline).extrude(2)
val sheet = (
down().mirrorY().also() +
right().mirrorX().also() +
diagonal().mirrorX().also() +
Square( 7 ).center()
).extrude( 0.2 )
val nipple = Cube( 1.2, 1.2, 1.5 )
val nipples = nipple.repeatX( 3, dx ).centerXY() +
nipple.repeatY( 2, dy * 2 ).centerXY()
return sheet + nipples + around
}
fun top() : Shape3d {
val outline = outline()
val button = ok()
val arrows = (
right().mirrorX().also() +
down().mirrorY().also()
).intersection( outline.offset(-2) )
val base = (
right().mirrorX().also() +
down().mirrorY().also() +
diagonal().mirrorX().also()
).intersection( outline ).extrude(0.4).color("Yellow")
val buttons = (
arrows.extrude(3) +
button.extrude( 4 )
).color("Orange")
val edge = (outline - (arrows+button).offset(gap)).extrude(1.5)
return base + buttons + edge
}
override fun build() : Shape3d {
return bottom() + top().translateX(30)
}
}