Exit Full View
ZipUp

/Furniture/GlassTableLegs.foocad

GlassTableLegs
FooCAD Source Code
import 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
    }



}