Exit Full View
Up

/Tools/CornerBracket.foocad

CornerBracket
FooCAD Source Code
import static uk.co.nickthecoder.foocad.extras.v1.Extras.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout2d.*
import static uk.co.nickthecoder.foocad.layout.v1.Layout3d.*

class CornerBracket : Model {
    

    @Custom( about = "length, width, thickness" )
    var size = Vector3( 30, 10, 2 )

    @Custom
    var holeD = 4.0

    @Custom
    var holeCountA = 2

    @Custom( about="This is usually 1 less than holeCountA" )
    var holeCountB = 1
    
    @Custom
    var coverThickness = 0.6

    @Custom
    var slack = 0.1

    fun foo( holeD : double ) : Shape3d {

        val tri = Triangle( size.y + size.z, size.y + size.z )
        val extrude = tri.extrude( size.x )
            .rotateY(-90)
            .rotateZ(180)
            .backTo( size.z )
            .centerX()

        val hole = Cylinder( 100, holeD /2 ).sides(6).center()
        val spaceX = size.x - size.z
        val result = extrude -
            Cube( size.x - size.z * 2, size.y, size.y )
                .centerX().backTo(0).bottomTo( size.z ) -
            hole.repeatX( holeCountA, spaceX / holeCountA )
                .centerX().translateY( -size.y / 2 + size.z / 2 ) -
            hole.repeatX( holeCountB, spaceX / holeCountB ) 
                .rotateX(90)
                .centerX().translateZ( size.y / 2 + size.z / 2 )
                
                
        return result
    }

    @Piece
    fun bracket() = foo( holeD )

    @Piece
    fun jig() = foo( 1.5 )

    @Piece
    fun cover() : Shape3d {
        val width = size.y + size.z
        val baseWidth = Math.sqrt( 2*width*width )
        val base = Cube( size.x, baseWidth, coverThickness ).centerXY()
        val triWidth = size.y - size.z
        val tri = Triangle( triWidth, triWidth ).roundCorner(0,triWidth/2)
        val wings = tri.extrude( size.z )
            .rotateY(-90).rotateX(180+45)
            .translateZ( Math.sqrt( triWidth*triWidth*2 )/2 )
            .translateX( size.x/2 - size.z - slack )
            .mirrorX().also()

        return base + wings.color("Green")
    }

    override fun build() : Shape3d {
        val width = size.y + size.z
        val diag = Math.sqrt( width * width * 2 )

        /*
        return if ( piece == "bracket" ) {
            bracket().rotateX(45+90)
        } else if ( piece == "cover" ) {
            cover()
        } else if ( piece == "jig" ) {
            jig()
        } else if ( piece == "both" ) {
            bracket() +
            cover().translateY(-size.y*2)
        } else {
        */
        val bracket = bracket().frontTo(0).color( "Orange" )
            
        return bracket +
            cover().backTo(0).translateZ( -coverThickness )
                .rotateX( -180 + 45 )
                .color("Green")

                
    }
}