Hola, al menos en Marlin sí que se puede, os cuento:
Yo tengo instalado el LCD en mi Printrbot, ya sabéis lo complicado que es ajustar mecánicamente la altura del eje Z correctamente para que la primera capa sea como debe ser, siempre hay que hacer ajustarlo finamente luego en el software de fileteado, mi ordenador es un poco viejete y que tener que andar procesando los STL varias veces es un coñazo.
¿solución? miré bien todos los parámetros y gcodes de Marlin y encontré la forma de darle un offset por software al valor del 0 "mécanico" obtenido por el home y modifiqué el código del LCD de Marlin para poder modificar esos offset desde el LCD. De esta forma fileteo siempre a altura de primera capa 0.0 y ajusto el offset desde el LCD con valor negativo en función de la altura a la que haya calibrado mecánicamente el eje Z. OJO: esto no significa que los ejes se muevan mas allá del home mecánico, sino que el home mecánico en realidad no será 0 para él, sino que será el offset que le metas. Ejemplo: le meto de offset -0.20 en el eje Z, cuando haga el home ya sabrá cual es el 0.00 real, pues Marlin toma ese 0.00 como -0.20, de forma que si con un gcode le mandas moverse 0.40 se irá al 0.20.
Lo mismo para el eje X e Y evidentemente, los offsets de estos ejes yo lo uso para mover un poco la impresión de la pieza a otro lado de la cama sin tener que volver a filetear, desde el LCD directamente.
Para mi es muy muy práctico y útil modificar esos parámetros de forma tan sencilla.
Estos offset se modifican mediante un gcode, el M206, pero pueden almacenarse en la EEPROM con el gcode M500 de Marlin (ojo, este gcode almacena muchos más parámetros de golpe).
Si lo quieres modificar directamente en el código fuente de Marlin, hasta donde yo se no puede hacerse con ningún define del preprocesador ni con ninguna constante, ya que el gcode M206 lo que hace es modificar una variable, esta es: float add_homeing[3], y está definida e inicializada en el fichero Marlin_main.cpp:
float add_homeing[3]={0,0,0};
Los tres valores corresponden a los ejes X, Y, Z respectivamente. Modificando esa variable ahí (que es donde se inicializa) deberías poder meter los offset que necesitas.
Para probarlo podrías lanzar el gcode a mano desde el Pronterface antes de imprimir, en la documentación de Marlin indica como hacerlo: "Example: M206 X10.0 Y10.0 Z-0.4", es igual que lo hagas antes de que la impresora haga el home, ya que Marlin lo que hace en realidad es almacenar el valor en la variable add_homeing, y cada vez que recibe un gcode de movimiento tiene en cuenta esa variable.
Si te animas a probar y te funciona ya nos cuentas!