/* Prints a bar which should be 100mm. Wait for it to cool. I guess your printer should be recalibrate whenever you re-tensioning the belt, and also periodically (as the belt will naturally loosen over time)??? If your printer needs adjusting, you can then use gcode : M503 # View the current steps per unit M92 Xnnn # Set the new value for the steps per unit M500 # Save settings in EEPROM Where nnn = currentSteps * 100 / actualLength e.g. My test print was 97.9mm and M503 reported : echo: M92 X78.74 Y78.74 Z2560.00 E105.00 So 78.74 * 100 / 97.9 = 80.43 M92 X80.43 Print the model again, and repeated the proccess till it is as accurate as you want. Then M500 to save the settings in EEPROM. M500 See https://marlinfw.org/docs/gcode/M092.html If your printer doesn't support saving settings, then you could add the M92 command as preamble gcode within your slicer settings. Or if you are adventurous, you could re-flash the firmware with corrected values (You did buy a printer with free software right? ;-) */ class CalibrateX : Model { var size = 100 override fun build() : Shape3d { val cube = Cube(6).centerXY() - Text( "X", BOLD, 4 ).center().extrude(5).translateZ(5.6) return cube.translateX(size-cube.size.x).also().centerXY() + Cube( size, 3, 0.8 ).centerXY() + Cube( size, 0.8, 3 ).centerXY() } }