Exit Full View
Up

/Hardware/Edging.foocad

Edging
FooCAD Source Code
import uk.co.nickthecoder.foocad.cup.v1.*
import static uk.co.nickthecoder.foocad.cup.v1.Cup.*
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*

class Edging : Model {

    @Custom( about="Add extra for clearance" )
    var sheetThickness = 9

    @Custom( about="Thickness of the plastic edging" )
    var edgeThickness = 2

    @Custom
    var depth = 7

    @Custom
    var length = 200

    @Custom
    var chamfer = 0.6

    meth plain( length : double ) : Shape3d {
        val outside = Square( sheetThickness + edgeThickness*2, depth + edgeThickness )
            .centerX()
            .roundAllCorners( chamfer )
        val inside = Square( sheetThickness, depth )
            .centerX().frontTo( edgeThickness )

        return (outside - inside).extrude( length )
            .rotateX(90)
            .centerY()
    }


    @Piece
    @Slice( brimEars=1, brimWidth=10 )
    meth normal() = plain( length )

    @Piece
    @Slice( brimEars=1, brimWidth=10 )
    meth mitre1() : Shape3d {
        val realLength =  length + edgeThickness + depth
        val mitre = Cube( (depth + sheetThickness + edgeThickness) * 2 )
            .centerX()
            .rotateX(45)
            .translateY( realLength / 2 )
        return plain( realLength ) - mitre
    }

    @Piece
    @Slice( brimEars=1, brimWidth=10 )
    meth mitre2() : Shape3d {
        val realLength =  length + (edgeThickness + depth) * 2
        val mitre = Cube( (depth + sheetThickness + edgeThickness) * 2 )
            .centerX()
            .rotateX(45)
            .translateY( realLength / 2 )
        return plain(realLength) - mitre.mirrorY().also()
    }

    override fun build() : Shape3d {
        return normal()
    }
}