FooCAD Source Codeimport static uk.co.nickthecoder.foocad.arrange.v1.Arrange.*
import uk.co.nickthecoder.foocad.smartextrusion.v1.*
import static uk.co.nickthecoder.foocad.smartextrusion.v1.SmartExtrusion.*
class TelescopicRod : Model {
var sectionNumber = 0
var innerDiameter = 20
var sectionHeight = 30
var thickness = 0.8
var lipSize = Vector2( 1, 6 )
var clearance = 0.25
meth edgeProfile() = PolygonBuilder().apply {
moveTo( 0,0 )
lineTo( lipSize.x, lipSize.x )
lineTo( lipSize.x, lipSize.y )
}.buildPath()
meth one( sectionNumber : double ) : Shape3d {
val radius = radius( sectionNumber )
val edge = ProfileEdge( edgeProfile() ).reverse()
val circle = Circle( radius )
val ring = circle - circle.offset( - thickness )
val tube = ring
.smartExtrude( sectionHeight )
.insideTop( edge )
.outsideBottom( edge )
return tube
}
meth radius( sectionNumber : int ) = innerDiameter/2 + sectionNumber * (thickness + lipSize.x + clearance )
@Piece( printable=false )
meth nested3() : Shape3d {
var result : Shape3d = Cube(0)
for ( n in 0 until 3 ) {
result += one( n )
}
return result
}
@Piece
meth arranged2() = arranged( 2 )
@Piece
meth arranged3() = arranged( 3 )
meth arranged( count : int ) : Shape3d {
val sections = listOf<Shape3d>()
for ( n in 0 until count ) {
sections.add( one( n ) )
}
return arrange( sections )
}
@Piece( print="all" )
override fun build() : Shape3d {
return nested3()
}
}
/*
class TelescopicRod : Model {
var innerDiameter = 50
var sectionHeight = 30
var thickness = 0.8
var sections = 2
var clearance = 0.5
var delta = 1
meth one( radius : double ) : Shape3d {
val circle = Circle( radius )
val ring = circle.offset(thickness) - circle
val tube = ring
.smartExtrude( sectionHeight )
.offsetTop( -delta )
return tube
}
// meth insideRadius() = outerDiameter / 2 - (sections-1) * (thickness + lip + clearance )
//@Piece
//meth outer() = one( outerDiameter/2 )
//@Piece
//meth inner() = one( insideRadius() )
@Piece
meth all() : Shape3d {
var result : Shape3d = Cube(0)
var radius = innerDiameter / 2
for ( n in 0 until sections ) {
result += one( radius )
radius += thickness + clearance
}
return result
}
@Piece( print="all" )
override fun build() : Shape3d {
return all() //+
//outer().translateY( outerDiameter + 10 )// +
//inner().translateY( -outerDiameter )
}
}
*/