Exit Full View
Up

/Words/DrinkNameRings.foocad

DrinkNameRings
FooCAD Source Code
import static uk.co.nickthecoder.foocad.arrange.v1.Arrange.*
import static uk.co.nickthecoder.foocad.changefilament.v1.ChangeFilament.*

class DrinkNameRings : Model, PostProcessor  {

    var diameter = 35

    var thickness = 1.2

    var textThickness = 0.6

    var fontSize = 13

    var width = 3.5

    @Custom( lines=10 )
    var names = """Nick
Nalin
Emma
"""
    
    fun ring( name : String ) : Shape3d {

        val thin = (
            Circle( diameter/2 ) -
            Circle( diameter/2 - 0.1 )
        ) - Square( width*3, diameter).centerX()
        val ring = thin.minkowski(Circle(width/2).sides(10)).extrude(thickness)
        val text = Text( name, fontSize ).center()
            .aroundCircle( -diameter/2 )

        val text3d = text.offset(1).extrude(thickness) +
            text.offset(0.2).extrude(thickness+textThickness).color("Black")

        return ring + text3d

    }
  
    
    override fun build() : Shape3d {

        val pieces = listOf<Shape3d>()
        for (name in names.splitLines()) {
            pieces.add( ring( name ) )
        }
        return arrangeX( 2, pieces )
    }


    // This is the main focus of this example! Also not that the class must implement PostProcessor.
    override fun postProcess(gcode: GCode) {
        pauseAtHeight( gcode, thickness, "Change Colour" )
    }
}