FooCAD Source Codeimport uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
class CableTie : Model {
var size = Vector3( 20, 20, 6 )
var holeSize = Vector2( 2, 2.3 )
var wiggle = 1.0
var chamfer = 0.4
meth hole( length : double ) : Shape3d {
val dir = Vector2( 0, length / 6 )
val path = PolygonBuilder().apply {
moveTo(0,-1)
lineBy(0,1)
bezierBy( dir, dir,Vector2( wiggle/2, length * 0.3 ) )
bezierBy( dir, dir,Vector2( -wiggle, length * 0.4 ) )
bezierBy( dir, dir,Vector2( wiggle/2, length * 0.3 ) )
lineBy(0,1)
}.buildPath()
return Square( holeSize ).center()
.extrude( path )
.centerY()
}
@Piece
meth parallel() : Shape3d {
val block = Square( size.x, size.y ).center()
.roundAllCorners( chamfer )
.smartExtrude( size.z )
.edges( Chamfer(chamfer) )
val offset = size.x*0.25
val hole = hole( size.y )
.centerZTo( block.middle.z )
.translateX( offset )
.translateX( -offset * 2).also()
return block - hole
}
@Piece
meth cross() : Shape3d {
val block = Square( size.x, size.y ).center()
.roundAllCorners( chamfer )
.smartExtrude( size.z + holeSize.y + 1 )
.edges( Chamfer(chamfer) )
val hole = hole( size.y )
.rotateZ(90).translateZ(holeSize.y + 1).also(2)
.centerZTo( block.middle.z )
return block - hole
}
override meth build() : Shape3d {
return parallel() + cross().translateX(20)
}
}