FooCAD Source Codeimport uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
import uk.co.nickthecoder.foocad.cup.v1.*
import static uk.co.nickthecoder.foocad.cup.v1.Cup.*
import uk.co.nickthecoder.foocad.extras.v1.*
import static uk.co.nickthecoder.foocad.extras.v1.Extras.*
class GlassTableLegs : Model {
var tilt = 10
var legDiameter = 40
var thickness = 5
@Custom( about="Metal piece glued to the glass top" )
var lugSize = Vector2( 30, 10 )
var legs = Triangle( 300, 200, 80 )
var slack = 0.3
@Piece
meth adaptor() : Shape3d {
val extra = 10 + lugSize.y
val main = Circle( legDiameter/2 + thickness )
.cup( legDiameter + extra, thickness )
.baseThickness( extra + thickness + lugSize.y )
.translateZ(-extra)
.rotateX(tilt)
val forLug = Circle( lugSize.x / 2 + slack ).extrude( lugSize.y )
val sliceExcess = Cube( 100 ).centerXY()
return main.intersection( sliceExcess ) - forLug
}
override fun build() : Shape3d {
val table = legs.offset( 50 )
.roundAllCorners( 30 )
.extrude( 8 ).previewOnly()
val lug = Circle( lugSize.x / 2 ).extrude( lugSize.y )
.topTo(0)
.color( "DarkGrey" )
val lugs = lug +
lug.translate( legs.right, 0, 0 ) +
lug.translate( legs.paths[0].points[2].to3d() )
val adaptor = adaptor().translateZ(30)
return table + lugs + adaptor
}
}