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