Merge remote-tracking branch 'refs/remotes/MarlinFirmware/bugfix-2.0.x' into bugfix-2.0x

This commit is contained in:
LVD-AC
2017-10-20 08:10:35 +02:00
89 changed files with 2127 additions and 596 deletions

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -674,19 +674,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_START();
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
return false;
return true;
}
}
crc16(crc, &v, 1);
pos++;
value++;
};
return true;
return false;
}
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
do {
uint8_t c = eeprom_read_byte((unsigned char*)pos);
*value = c;
@@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
pos++;
value++;
} while (--size);
return false; // always assume success for AVR's
}
}

View File

@@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_START();
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
return false;
return true;
}
}
crc16(crc, &v, 1);
pos++;
value++;
};
return true;
return false;
}
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
do {
uint8_t c = eeprom_read_byte((unsigned char*)pos);
*value = c;
@@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
pos++;
value++;
} while (--size);
return false;
}
}

View File

@@ -21,7 +21,7 @@ FIL eeprom_file;
bool access_start() {
UINT file_size = 0,
bytes_written = 0;
const char eeprom_zero = 0xFF;
const char eeprom_erase_value = 0xFF;
MSC_Aquire_Lock();
if (f_mount(&fat_fs, "", 1)) {
MSC_Release_Lock();
@@ -34,8 +34,8 @@ bool access_start() {
if (res == FR_OK) {
f_lseek(&eeprom_file, file_size);
while (file_size < E2END && res == FR_OK) {
res = f_write(&eeprom_file, &eeprom_zero, 1, &bytes_written);
while (file_size <= E2END && res == FR_OK) {
res = f_write(&eeprom_file, &eeprom_erase_value, 1, &bytes_written);
file_size++;
}
}
@@ -53,21 +53,92 @@ bool access_finish() {
return true;
}
// File function return codes for type FRESULT This goes away soon. But it is helpful right now to see
// the different errors the read_data() and write_data() functions are seeing.
//
//typedef enum {
// FR_OK = 0, /* (0) Succeeded */
// FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
// FR_INT_ERR, /* (2) Assertion failed */
// FR_NOT_READY, /* (3) The physical drive cannot work */
// FR_NO_FILE, /* (4) Could not find the file */
// FR_NO_PATH, /* (5) Could not find the path */
// FR_INVALID_NAME, /* (6) The path name format is invalid */
// FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
// FR_EXIST, /* (8) Access denied due to prohibited access */
// FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
// FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
// FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
// FR_NOT_ENABLED, /* (12) The volume has no work area */
// FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
// FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
// FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
// FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
// FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
// FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
//} FRESULT;
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
FRESULT s;
UINT bytes_written = 0;
f_lseek(&eeprom_file, pos);
f_write(&eeprom_file, (void *)value, size, &bytes_written);
s = f_lseek(&eeprom_file, pos);
if ( s ) {
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
SERIAL_PROTOCOL("...)\n");
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s);
SERIAL_PROTOCOL("\n");
return s;
}
s = f_write(&eeprom_file, (void *)value, size, &bytes_written);
if ( s ) {
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
SERIAL_PROTOCOL("...)\n");
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s);
SERIAL_PROTOCOL("\n");
SERIAL_PROTOCOLPAIR(" size=", (int) size);
SERIAL_PROTOCOLPAIR("\n bytes_written=", (int) bytes_written);
SERIAL_PROTOCOL("\n");
return s;
}
crc16(crc, value, size);
pos = pos + size;
return (bytes_written == size);
return (bytes_written != size); // return true for any error
}
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
UINT bytes_read = 0;
f_lseek(&eeprom_file, pos);
f_read(&eeprom_file, (void *)value, size, &bytes_read);
FRESULT s;
s = f_lseek(&eeprom_file, pos);
if ( s ) {
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
SERIAL_PROTOCOL("...)\n");
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s);
SERIAL_PROTOCOL("\n");
return true;
}
s = f_read(&eeprom_file, (void *)value, size, &bytes_read);
if ( s ) {
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
SERIAL_PROTOCOL("...)\n");
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s);
SERIAL_PROTOCOL("\n");
SERIAL_PROTOCOLPAIR(" size=", (int) size);
SERIAL_PROTOCOLPAIR("\n bytes_read=", (int) bytes_read);
SERIAL_PROTOCOL("\n");
return true;
}
crc16(crc, value, size);
pos = pos + size;
return bytes_read != size; // return true for any error
}
} // PersistentStore

View File

@@ -78,15 +78,16 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
}
crc16(crc, value, size);
pos += size;
return true;
return false;
}
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
for (int i = 0; i < size; i++) {
value[i] = HAL_STM32F1_eeprom_content [pos + i];
}
crc16(crc, value, size);
pos += size;
return false;
}
} // PersistentStore::

View File

@@ -28,17 +28,17 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_START();
SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
return false;
return true;
}
}
crc16(crc, &v, 1);
pos++;
value++;
};
return true;
return false;
}
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
do {
uint8_t c = eeprom_read_byte((unsigned char*)pos);
*value = c;
@@ -46,6 +46,7 @@ void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) {
pos++;
value++;
} while (--size);
return false;
}
} // PersistentStore

View File

@@ -10,7 +10,7 @@ namespace PersistentStore {
bool access_start();
bool access_finish();
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc);
void read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc);
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc);
} // PersistentStore
} // HAL

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -674,19 +674,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -874,12 +874,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -973,12 +973,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -860,12 +860,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -845,12 +845,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -855,12 +855,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -670,19 +670,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -845,12 +845,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -853,12 +853,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -864,12 +864,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -836,12 +836,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -836,12 +836,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -125,7 +125,7 @@
// Optional custom name for your RepStrap or other custom machine
// Displayed in the LCD "Ready" message
#define CUSTOM_MACHINE_NAME "FT-2020 v3"
#define CUSTOM_MACHINE_NAME "FT-2020 v4"
// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
@@ -634,7 +634,7 @@
* Z Servo Probe, such as an endstop switch on a rotating arm.
*/
#define Z_ENDSTOP_SERVO_NR 0 // Defaults to SERVO 0 connector.
#define Z_SERVO_ANGLES {40,85} // Z Servo Deploy and Stow angles
#define Z_SERVO_ANGLES {40,95} // Z Servo Deploy and Stow angles
/**
* The BLTouch probe uses a Hall effect sensor and emulates a servo.
@@ -851,12 +851,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually
@@ -1682,7 +1677,7 @@
// Servo deactivation
//
// With this option servos are powered only during movement, then turned off to prevent jitter.
#define DEACTIVATE_SERVOS_AFTER_MOVE
//#define DEACTIVATE_SERVOS_AFTER_MOVE
/**
* Filament Width Sensor

View File

@@ -674,19 +674,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.
@@ -1286,7 +1338,7 @@
* For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0.
* Otherwise, adjust according to your client and font.
*/
#define PROPORTIONAL_FONT_RATIO 1.5
#define PROPORTIONAL_FONT_RATIO 2.2
/**
* Spend 28 bytes of SRAM to optimize the GCode parser

View File

@@ -869,12 +869,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -858,12 +858,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -878,12 +878,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -670,19 +670,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -853,12 +853,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -853,12 +853,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -856,12 +856,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -694,19 +694,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -852,12 +852,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -866,12 +866,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -885,12 +885,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -662,19 +662,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -910,12 +910,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -884,12 +884,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -683,19 +683,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -854,12 +854,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -978,12 +978,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -675,19 +675,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -978,12 +978,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -675,19 +675,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -965,12 +965,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -675,19 +675,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -968,12 +968,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -675,19 +675,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -968,12 +968,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -680,19 +680,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -977,12 +977,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -675,19 +675,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -868,12 +868,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -857,12 +857,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -841,12 +841,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -849,12 +849,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -859,12 +859,7 @@
* - AUTO_BED_LEVELING_UBL (Unified Bed Leveling)
* A comprehensive bed leveling system combining the features and benefits
* of other systems. UBL also includes integrated Mesh Generation, Mesh
* Validation and Mesh Editing systems. Currently, UBL is only checked out
* for Cartesian Printers. That said, it was primarily designed to correct
* poor quality Delta Printers. If you feel adventurous and have a Delta,
* please post an issue if something doesn't work correctly. Initially,
* you will need to set a reduced bed size so you have a rectangular area
* to test on.
* Validation and Mesh Editing systems.
*
* - MESH_BED_LEVELING
* Probe a grid manually

View File

@@ -673,19 +673,71 @@
// @section leveling
#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif
// Default mesh area is an area with an inset margin on the print area.
// Below are the macros that are used to define the borders for the mesh area,
// made available here for specialized needs, ie dual extruder setup.
#if ENABLED(MESH_BED_LEVELING)
#define MESH_MIN_X MESH_INSET
#define MESH_MAX_X (X_BED_SIZE - (MESH_INSET))
#define MESH_MIN_Y MESH_INSET
#define MESH_MAX_Y (Y_BED_SIZE - (MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (MESH_INSET))
#elif IS_SCARA
#define MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MESH_INSET)
#define MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#define MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MESH_MIN_X (max(MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define MESH_MIN_Y (max(MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define MESH_MAX_X (min(X_BED_SIZE - (MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MESH_MAX_Y (min(Y_BED_SIZE - (MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MESH_MIN_X (max(X_MIN_POS + MESH_INSET, 0))
#define MESH_MIN_Y (max(Y_MIN_POS + MESH_INSET, 0))
#define MESH_MAX_X (min(X_MAX_POS - (MESH_INSET), X_BED_SIZE))
#define MESH_MAX_Y (min(Y_MAX_POS - (MESH_INSET), Y_BED_SIZE))
#endif
#endif
#elif ENABLED(AUTO_BED_LEVELING_UBL)
#define UBL_MESH_MIN_X UBL_MESH_INSET
#define UBL_MESH_MAX_X (X_BED_SIZE - (UBL_MESH_INSET))
#define UBL_MESH_MIN_Y UBL_MESH_INSET
#define UBL_MESH_MAX_Y (Y_BED_SIZE - (UBL_MESH_INSET))
#if ENABLED(DELTA)
// Probing points may be verified at compile time within the radius
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
// so that may be added to SanityCheck.h in the future.
#define UBL_MESH_MIN_X (X_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + DELTA_PROBEABLE_RADIUS - (UBL_MESH_INSET))
#elif IS_SCARA
#define UBL_MESH_MIN_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MIN_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + UBL_MESH_INSET)
#define UBL_MESH_MAX_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#define UBL_MESH_MAX_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (UBL_MESH_INSET))
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define UBL_MESH_MIN_X (max(UBL_MESH_INSET, 0) - (X_BED_SIZE) / 2)
#define UBL_MESH_MIN_Y (max(UBL_MESH_INSET, 0) - (Y_BED_SIZE) / 2)
#define UBL_MESH_MAX_X (min(X_BED_SIZE - (UBL_MESH_INSET), X_BED_SIZE) - (X_BED_SIZE) / 2)
#define UBL_MESH_MAX_Y (min(Y_BED_SIZE - (UBL_MESH_INSET), Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define UBL_MESH_MIN_X (max(X_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MIN_Y (max(Y_MIN_POS + UBL_MESH_INSET, 0))
#define UBL_MESH_MAX_X (min(X_MAX_POS - (UBL_MESH_INSET), X_BED_SIZE))
#define UBL_MESH_MAX_Y (min(Y_MAX_POS - (UBL_MESH_INSET), Y_BED_SIZE))
#endif
#endif
// If this is defined, the currently active mesh will be saved in the
// current slot on M500.

View File

@@ -143,7 +143,7 @@
// Private functions
static uint16_t circle_flags[16], horizontal_mesh_line_flags[16], vertical_mesh_line_flags[16];
float g26_e_axis_feedrate = 0.020,
float g26_e_axis_feedrate = 0.025,
random_deviation = 0.0;
static bool g26_retracted = false; // Track the retracted state of the nozzle so mismatched

View File

@@ -141,7 +141,8 @@ class unified_bed_leveling {
static void save_ubl_active_state_and_disable();
static void restore_ubl_active_state_and_leave();
static void display_map(const int);
static mesh_index_pair find_closest_mesh_point_of_type(const MeshPointType, const float&, const float&, const bool, uint16_t[16], bool);
static mesh_index_pair find_closest_mesh_point_of_type(const MeshPointType, const float&, const float&, const bool, uint16_t[16]);
static mesh_index_pair find_furthest_invalid_mesh_point();
static void reset();
static void invalidate();
static void set_all_mesh_points_to_value(const float);

View File

@@ -333,7 +333,7 @@
else {
while (g29_repetition_cnt--) {
if (cnt > 20) { cnt = 0; idle(); }
const mesh_index_pair location = find_closest_mesh_point_of_type(REAL, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, NULL, false);
const mesh_index_pair location = find_closest_mesh_point_of_type(REAL, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, NULL);
if (location.x_index < 0) {
// No more REACHABLE mesh points to invalidate, so we ASSUME the user
// meant to invalidate the ENTIRE mesh, which cannot be done with
@@ -529,7 +529,7 @@
}
else {
while (g29_repetition_cnt--) { // this only populates reachable mesh points near
const mesh_index_pair location = find_closest_mesh_point_of_type(INVALID, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, NULL, false);
const mesh_index_pair location = find_closest_mesh_point_of_type(INVALID, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, NULL);
if (location.x_index < 0) {
// No more REACHABLE INVALID mesh points to populate, so we ASSUME
// user meant to populate ALL INVALID mesh points to value
@@ -668,7 +668,7 @@
}
if (parser.seen('T'))
display_map(parser.has_value() ? parser.value_int() : 0);
display_map(g29_map_type);
LEAVE:
@@ -744,6 +744,8 @@
uint16_t max_iterations = GRID_MAX_POINTS;
do {
if (do_ubl_mesh_map) display_map(g29_map_type);
#if ENABLED(NEWPANEL)
if (ubl_lcd_clicked()) {
SERIAL_PROTOCOLLNPGM("\nMesh only partially populated.\n");
@@ -757,7 +759,10 @@
}
#endif
location = find_closest_mesh_point_of_type(INVALID, lx, ly, USE_PROBE_AS_REFERENCE, NULL, close_or_far);
if (close_or_far)
location = find_furthest_invalid_mesh_point();
else
location = find_closest_mesh_point_of_type(INVALID, lx, ly, USE_PROBE_AS_REFERENCE, NULL);
if (location.x_index >= 0) { // mesh point found and is reachable by probe
const float rawx = mesh_index_to_xpos(location.x_index),
@@ -767,8 +772,6 @@
z_values[location.x_index][location.y_index] = measured_z;
}
if (do_ubl_mesh_map) display_map(g29_map_type);
} while (location.x_index >= 0 && --max_iterations);
STOW_PROBE();
@@ -962,7 +965,7 @@
mesh_index_pair location;
do {
location = find_closest_mesh_point_of_type(INVALID, lx, ly, USE_NOZZLE_AS_REFERENCE, NULL, false);
location = find_closest_mesh_point_of_type(INVALID, lx, ly, USE_NOZZLE_AS_REFERENCE, NULL);
// It doesn't matter if the probe can't reach the NAN location. This is a manual probe.
if (location.x_index < 0 && location.y_index < 0) continue;
@@ -1289,7 +1292,7 @@
*/
void unified_bed_leveling::g29_eeprom_dump() {
unsigned char cccc;
uint16_t kkkk;
unsigned int kkkk; // Needs to be of unspecfied size to compile clean on all platforms
SERIAL_ECHO_START();
SERIAL_ECHOLNPGM("EEPROM Dump:");
@@ -1299,7 +1302,7 @@
SERIAL_ECHOPGM(": ");
for (uint16_t j = 0; j < 16; j++) {
kkkk = i + j;
eeprom_read_block(&cccc, (void *)kkkk, 1);
eeprom_read_block(&cccc, (const void *) kkkk, sizeof(unsigned char));
print_hex_byte(cccc);
SERIAL_ECHO(' ');
}
@@ -1345,18 +1348,84 @@
z_values[x][y] -= tmp_z_values[x][y];
}
mesh_index_pair unified_bed_leveling::find_closest_mesh_point_of_type(const MeshPointType type, const float &lx, const float &ly, const bool probe_as_reference, uint16_t bits[16], const bool far_flag) {
mesh_index_pair unified_bed_leveling::find_furthest_invalid_mesh_point() {
bool found_a_NAN = false;
bool found_a_real = false;
mesh_index_pair out_mesh;
out_mesh.x_index = out_mesh.y_index = -1;
out_mesh.distance = -99999.99;
for (int8_t i = 0; i < GRID_MAX_POINTS_X; i++) {
for (int8_t j = 0; j < GRID_MAX_POINTS_Y; j++) {
if ( isnan(z_values[i][j])) { // Check to see if this location holds an invalid mesh point
const float mx = mesh_index_to_xpos(i),
my = mesh_index_to_ypos(j);
if ( !position_is_reachable_by_probe_raw_xy(mx, my)) // make sure the probe can get to the mesh point
continue;
found_a_NAN = true;
int8_t closest_x=-1, closest_y=-1;
float d1, d2 = 99999.9;
for (int8_t k = 0; k < GRID_MAX_POINTS_X; k++) {
for (int8_t l = 0; l < GRID_MAX_POINTS_Y; l++) {
if (!isnan(z_values[k][l])) {
found_a_real = true;
// Add in a random weighting factor that scrambles the probing of the
// last half of the mesh (when every unprobed mesh point is one index
// from a probed location).
d1 = HYPOT(i - k, j - l) + (1.0 / ((millis() % 47) + 13));
if (d1 < d2) { // found a closer distance from invalid mesh point at (i,j) to defined mesh point at (k,l)
d2 = d1; // found a closer location with
closest_x = i; // an assigned mesh point value
closest_y = j;
}
}
}
}
//
// at this point d2 should have the closest defined mesh point to invalid mesh point (i,j)
//
if (found_a_real && (closest_x >= 0) && (d2 > out_mesh.distance)) {
out_mesh.distance = d2; // found an invalid location with a greater distance
out_mesh.x_index = closest_x; // to a defined mesh point
out_mesh.y_index = closest_y;
}
}
} // for j
} // for i
if (!found_a_real && found_a_NAN) { // if the mesh is totally unpopulated, start the probing
out_mesh.x_index = GRID_MAX_POINTS_X / 2;
out_mesh.y_index = GRID_MAX_POINTS_Y / 2;
out_mesh.distance = 1.0;
}
return out_mesh;
}
mesh_index_pair unified_bed_leveling::find_closest_mesh_point_of_type(const MeshPointType type, const float &lx, const float &ly, const bool probe_as_reference, uint16_t bits[16]) {
mesh_index_pair out_mesh;
out_mesh.x_index = out_mesh.y_index = -1;
out_mesh.distance = -99999.9;
// Get our reference position. Either the nozzle or probe location.
const float px = RAW_X_POSITION(lx) - (probe_as_reference == USE_PROBE_AS_REFERENCE ? X_PROBE_OFFSET_FROM_EXTRUDER : 0),
py = RAW_Y_POSITION(ly) - (probe_as_reference == USE_PROBE_AS_REFERENCE ? Y_PROBE_OFFSET_FROM_EXTRUDER : 0);
float best_so_far = far_flag ? -99999.99 : 99999.99;
float best_so_far = 99999.99;
for (uint8_t i = 0; i < GRID_MAX_POINTS_X; i++) {
for (uint8_t j = 0; j < GRID_MAX_POINTS_Y; j++) {
for (int8_t i = 0; i < GRID_MAX_POINTS_X; i++) {
for (int8_t j = 0; j < GRID_MAX_POINTS_Y; j++) {
if ( (type == INVALID && isnan(z_values[i][j])) // Check to see if this location holds the right thing
|| (type == REAL && !isnan(z_values[i][j]))
@@ -1376,35 +1445,14 @@
continue;
// Reachable. Check if it's the best_so_far location to the nozzle.
// Add in a weighting factor that considers the current location of the nozzle.
float distance = HYPOT(px - mx, py - my);
/**
* If doing the far_flag action, we want to be as far as possible
* from the starting point and from any other probed points. We
* want the next point spread out and filling in any blank spaces
* in the mesh. So we add in some of the distance to every probed
* point we can find.
*/
if (far_flag) {
for (uint8_t k = 0; k < GRID_MAX_POINTS_X; k++) {
for (uint8_t l = 0; l < GRID_MAX_POINTS_Y; l++) {
if (i != k && j != l && !isnan(z_values[k][l])) {
//distance += pow((float) abs(i - k) * (MESH_X_DIST), 2) + pow((float) abs(j - l) * (MESH_Y_DIST), 2); // working here
distance += HYPOT(MESH_X_DIST, MESH_Y_DIST) / log(HYPOT((i - k) * (MESH_X_DIST) + .001, (j - l) * (MESH_Y_DIST)) + .001);
}
}
}
}
else
// factor in the distance from the current location for the normal case
// so the nozzle isn't running all over the bed.
distance += HYPOT(raw_x - mx, raw_y - my) * 0.1;
// if far_flag, look for farthest point
if (far_flag == (distance > best_so_far) && distance != best_so_far) {
best_so_far = distance; // We found a closer/farther location with
if (distance < best_so_far) {
best_so_far = distance; // We found a closer location with
out_mesh.x_index = i; // the specified type of mesh value.
out_mesh.y_index = j;
out_mesh.distance = best_so_far;
@@ -1412,7 +1460,6 @@
}
} // for j
} // for i
return out_mesh;
}
@@ -1448,7 +1495,7 @@
uint16_t not_done[16];
memset(not_done, 0xFF, sizeof(not_done));
do {
location = find_closest_mesh_point_of_type(SET_IN_BITMAP, lx, ly, USE_NOZZLE_AS_REFERENCE, not_done, false);
location = find_closest_mesh_point_of_type(SET_IN_BITMAP, lx, ly, USE_NOZZLE_AS_REFERENCE, not_done);
if (location.x_index < 0) break; // stop when we can't find any more reachable points.
@@ -1572,16 +1619,10 @@
info3 PROGMEM = { GRID_MAX_POINTS_X - 1, 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left
static const smart_fill_info * const info[] PROGMEM = { &info0, &info1, &info2, &info3 };
// static const smart_fill_info info[] PROGMEM = {
// { 0, GRID_MAX_POINTS_X, 0, GRID_MAX_POINTS_Y - 2, false } PROGMEM, // Bottom of the mesh looking up
// { 0, GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y - 1, 0, false } PROGMEM, // Top of the mesh looking down
// { 0, GRID_MAX_POINTS_X - 2, 0, GRID_MAX_POINTS_Y, true } PROGMEM, // Left side of the mesh looking right
// { GRID_MAX_POINTS_X - 1, 0, 0, GRID_MAX_POINTS_Y, true } PROGMEM // Right side of the mesh looking left
// };
for (uint8_t i = 0; i < COUNT(info); ++i) {
const smart_fill_info *f = (smart_fill_info*)pgm_read_ptr(&info[i]);
const int8_t sx = pgm_read_word(&f->sx), sy = pgm_read_word(&f->sy),
ex = pgm_read_word(&f->ex), ey = pgm_read_word(&f->ey);
const int8_t sx = pgm_read_byte(&f->sx), sy = pgm_read_byte(&f->sy),
ex = pgm_read_byte(&f->ex), ey = pgm_read_byte(&f->ey);
if (pgm_read_byte(&f->yfirst)) {
const int8_t dir = ex > sx ? 1 : -1;
for (uint8_t y = sy; y != ey; ++y)

View File

@@ -49,7 +49,7 @@ void GcodeSuite::M421() {
hasQ = !hasZ && parser.seen('Q');
if (hasC) {
const mesh_index_pair location = ubl.find_closest_mesh_point_of_type(REAL, current_position[X_AXIS], current_position[Y_AXIS], USE_NOZZLE_AS_REFERENCE, NULL, false);
const mesh_index_pair location = ubl.find_closest_mesh_point_of_type(REAL, current_position[X_AXIS], current_position[Y_AXIS], USE_NOZZLE_AS_REFERENCE, NULL);
ix = location.x_index;
iy = location.y_index;
}

View File

@@ -161,7 +161,7 @@ void GcodeSuite::G33() {
return;
}
const bool towers_set = parser.boolval('T', true),
const bool towers_set = !parser.boolval('T'),
stow_after_each = parser.boolval('E'),
_0p_calibration = probe_points == 0,
_1p_calibration = probe_points == 1,

View File

@@ -137,13 +137,13 @@ void GcodeSuite::M48() {
for (uint8_t n = 0; n < n_samples; n++) {
if (n_legs) {
const int dir = (random(0, 10) > 5.0) ? -1 : 1; // clockwise or counter clockwise
float angle = random(0.0, 360.0);
float angle = random(0, 360);
const float radius = random(
#if ENABLED(DELTA)
0.1250000000 * (DELTA_PROBEABLE_RADIUS),
0.3333333333 * (DELTA_PROBEABLE_RADIUS)
(int) (0.1250000000 * (DELTA_PROBEABLE_RADIUS)),
(int) (0.3333333333 * (DELTA_PROBEABLE_RADIUS))
#else
5.0, 0.125 * min(X_BED_SIZE, Y_BED_SIZE)
(int) 5.0, (int) (0.125 * min(X_BED_SIZE, Y_BED_SIZE))
#endif
);

View File

@@ -51,7 +51,7 @@ void GcodeSuite::M502() {
* M503: print settings currently in memory
*/
void GcodeSuite::M503() {
(void)settings.report(!parser.boolval('S', true));
(void)settings.report(parser.boolval('S'));
}
#endif // !DISABLE_M503

View File

@@ -294,7 +294,7 @@ public:
// Provide simple value accessors with default option
FORCE_INLINE static float floatval(const char c, const float dval=0.0) { return seenval(c) ? value_float() : dval; }
FORCE_INLINE static bool boolval(const char c, const bool dval=false) { return seen(c) ? value_bool() : dval; }
FORCE_INLINE static bool boolval(const char c) { return seenval(c) ? value_bool() : seen(c); }
FORCE_INLINE static uint8_t byteval(const char c, const uint8_t dval=0) { return seenval(c) ? value_byte() : dval; }
FORCE_INLINE static int16_t intval(const char c, const int16_t dval=0) { return seenval(c) ? value_int() : dval; }
FORCE_INLINE static uint16_t ushortval(const char c, const uint16_t dval=0) { return seenval(c) ? value_ushort() : dval; }

View File

@@ -36,7 +36,7 @@
*
* X Probe X position (default current X)
* Y Probe Y position (default current Y)
* S0 Leave the probe deployed
* E Engage the probe for each probe
*/
void GcodeSuite::G30() {
const float xpos = parser.linearval('X', current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER),
@@ -51,7 +51,7 @@ void GcodeSuite::G30() {
setup_for_endstop_or_probe_move();
const float measured_z = probe_pt(xpos, ypos, parser.boolval('S', true), 1);
const float measured_z = probe_pt(xpos, ypos, parser.boolval('E'), 1);
if (!isnan(measured_z)) {
SERIAL_PROTOCOLPAIR("Bed X: ", FIXFLOAT(xpos));

View File

@@ -921,18 +921,11 @@
#define MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS)
#define MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS)
#else
// Boundaries for Cartesian probing based on set limits
#if ENABLED(BED_CENTER_AT_0_0)
#define MIN_PROBE_X (max(X_PROBE_OFFSET_FROM_EXTRUDER, 0) - (X_BED_SIZE) / 2)
#define MIN_PROBE_Y (max(Y_PROBE_OFFSET_FROM_EXTRUDER, 0) - (Y_BED_SIZE) / 2)
#define MAX_PROBE_X (min(X_BED_SIZE + X_PROBE_OFFSET_FROM_EXTRUDER, X_BED_SIZE) - (X_BED_SIZE) / 2)
#define MAX_PROBE_Y (min(Y_BED_SIZE + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_BED_SIZE) - (Y_BED_SIZE) / 2)
#else
#define MIN_PROBE_X (max(X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER, 0))
#define MIN_PROBE_Y (max(Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, 0))
#define MAX_PROBE_X (min(X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_BED_SIZE))
#define MAX_PROBE_Y (min(Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_BED_SIZE))
#endif
// Boundaries for Cartesian probing based on bed limits
#define MIN_PROBE_X (max(X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MIN_BED))
#define MIN_PROBE_Y (max(Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MIN_BED))
#define MAX_PROBE_X (min(X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MAX_BED))
#define MAX_PROBE_Y (min(Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MAX_BED))
#endif
// Stepper pulse duration, in cycles

View File

@@ -632,12 +632,12 @@ void MarlinSettings::postprocess() {
SERIAL_ECHOLNPGM(")");
#endif
}
EEPROM_FINISH();
#if ENABLED(UBL_SAVE_ACTIVE_ON_M500)
if (ubl.storage_slot >= 0)
store_mesh(ubl.storage_slot);
#endif
EEPROM_FINISH();
return !eeprom_error;
}
@@ -1073,13 +1073,20 @@ void MarlinSettings::postprocess() {
}
uint16_t crc = 0;
bool status;
int pos = meshes_end - (slot + 1) * sizeof(ubl.z_values);
HAL::PersistentStore::write_data(pos, (uint8_t *)&ubl.z_values, sizeof(ubl.z_values), &crc);
HAL::PersistentStore::access_start();
status = HAL::PersistentStore::write_data(pos, (uint8_t *)&ubl.z_values, sizeof(ubl.z_values), &crc);
HAL::PersistentStore::access_finish();
if (status)
SERIAL_PROTOCOL("?Unable to save mesh data.\n");
// Write crc to MAT along with other data, or just tack on to the beginning or end
#if ENABLED(EEPROM_CHITCHAT)
if (!status)
SERIAL_PROTOCOLLNPAIR("Mesh saved in slot ", slot);
#endif
@@ -1106,13 +1113,20 @@ void MarlinSettings::postprocess() {
uint16_t crc = 0;
int pos = meshes_end - (slot + 1) * sizeof(ubl.z_values);
uint8_t * const dest = into ? (uint8_t*)into : (uint8_t*)&ubl.z_values;
HAL::PersistentStore::read_data(pos, dest, sizeof(ubl.z_values), &crc);
uint16_t status;
// Compare crc with crc from MAT, or read from end
HAL::PersistentStore::access_start();
status = HAL::PersistentStore::read_data(pos, dest, sizeof(ubl.z_values), &crc);
HAL::PersistentStore::access_finish();
if (status)
SERIAL_PROTOCOL("?Unable to load mesh data.\n");
#if ENABLED(EEPROM_CHITCHAT)
else
SERIAL_PROTOCOLLNPAIR("Mesh loaded from slot ", slot);
#endif
EEPROM_FINISH();
#else