Exit Full View
Up

/GardenFurniture/Hardware/HollowTubeConnectors.foocad

HollowTubeConnectors
FooCAD Source Code
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*

class HollowTubeConnectors : Model {

    var id = 12

    var od = 16

    val clearance = 0.3

    var radius = 20

    var extra = 1

    var connectorLength = 20

    meth halve( piece : Shape3d ) : Shape3d {
        return piece.translateZ(-clearance) - piece.boundingCube().topTo(0)
    }

    meth angle( r : double, angle : double ) : Shape3d {

        val path = PolygonBuilder().apply {
            moveTo( -r, -extra )
            lineTo( -r, 0 )
            circularArcTo( Vector2(-r,0).rotateDegrees(angle), r, false, false )
            lineBy( Vector2(0,extra).rotateDegrees(angle) )
        }.buildPath()

        val outside = Circle( od/2 ).extrude( path )   
        val connectors = Circle( id/2 - clearance )
            .smartExtrude( connectorLength )  
            .rotateX(90).centerZ()
            .translateX(-r).translateY(-extra)
            .mirrorY().rotateZ(-angle).also(2)

        return halve(outside + connectors)
            .translate( r, extra, 0 )
            .color("Orange")
    
    }

    @Piece
    meth angle90() = angle( radius, 90 )

    @Piece
    meth angle60() = angle( radius, 60 )

    @Piece
    meth angle120() = angle( radius, 45 )

    meth tube(length : double) = (Circle( od/2 ) - Circle( id/2 )).extrude( length )

    override fun build() : Shape3d {
        val tube = tube( 50 ).rotateX(-90)
        val tube1 = tube.translateY(4)
        val tube2 = tube.rotateZ(-90).translate(24,-21,0)

        val angle90 = angle90().mirrorY()
        val angle120 = angle120().translateY(58)
        val angle60 = angle60().rotateZ(-90).translateX(tube2.right+3).translateY(tube2.middle.y)

        return tube1 + tube2 + angle90 + angle120 + angle60
    }

}