FooCAD Source Codeimport 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
}
}