class FirstLayerTest : Model { @Custom var layerHeight = 0.2 @Custom var size = 220 @Custom var squareSize = 20 @Custom var lineWidth = 5 @Piece fun full() : Shape3d { return Square( size ).extrude( layerHeight ) } @Piece fun circles() : Shape3d { val flat = Circle( size*0.5 ) - Circle( size*0.4) + Circle( size*0.3 ) - Circle( size*0.2 ) + Circle( size*0.1 ) return flat.extrude( layerHeight ) } @Piece fun chess() : Shape3d { val row = Square( size / 8 ) .translateX( size / 4 ).also() .translateX( size / 2 ).also() val rows = row.translate( size/8, size/8 ).also() .translateY( size/4 ).also() .translateY( size/2 ).also() return rows.extrude( layerHeight ) } @Piece fun dots() : Shape3d { val row = Circle( size / 16 ) .translateX( size / 4 ).also() .translateX( size / 2 ).also() val rows = row.translate( size/8, size/8 ).also() .translateY( size/4 ).also() .translateY( size/2 ).also() return rows.extrude( layerHeight ) } override fun build() : Shape3d { val squares = Square( squareSize ) .leftTo( -size /2 ) .mirrorX().also() .frontTo( - size / 2 ) .mirrorY().also() + Square( squareSize ).center() val lines = ( Square( size, lineWidth ).center() + Square( size, lineWidth ).centerX().frontTo( squares.front ) .mirrorY().also() ).rotate(90).also() return (squares + lines).extrude( layerHeight ) } }