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() 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" ) } }