🧑💻 Axis macros parity with 2.1.x
This commit is contained in:
parent
25521cb9b2
commit
dc3322b639
|
@ -101,10 +101,10 @@ void print_bin(uint16_t val) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_pos(LINEAR_AXIS_ARGS(const_float_t), FSTR_P const prefix/*=nullptr*/, FSTR_P const suffix/*=nullptr*/) {
|
void print_pos(NUM_AXIS_ARGS(const_float_t), FSTR_P const prefix/*=nullptr*/, FSTR_P const suffix/*=nullptr*/) {
|
||||||
if (prefix) serial_print(prefix);
|
if (prefix) serial_print(prefix);
|
||||||
SERIAL_ECHOPGM_P(
|
SERIAL_ECHOPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
|
LIST_N(DOUBLE(NUM_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
|
||||||
);
|
);
|
||||||
if (suffix) serial_print(suffix); else SERIAL_EOL();
|
if (suffix) serial_print(suffix); else SERIAL_EOL();
|
||||||
}
|
}
|
||||||
|
|
|
@ -335,10 +335,10 @@ void serial_spaces(uint8_t count);
|
||||||
void serial_offset(const_float_t v, const uint8_t sp=0); // For v==0 draw space (sp==1) or plus (sp==2)
|
void serial_offset(const_float_t v, const uint8_t sp=0); // For v==0 draw space (sp==1) or plus (sp==2)
|
||||||
|
|
||||||
void print_bin(const uint16_t val);
|
void print_bin(const uint16_t val);
|
||||||
void print_pos(LINEAR_AXIS_ARGS(const_float_t), FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr);
|
void print_pos(NUM_AXIS_ARGS(const_float_t), FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr);
|
||||||
|
|
||||||
inline void print_pos(const xyz_pos_t &xyz, FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr) {
|
inline void print_pos(const xyz_pos_t &xyz, FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr) {
|
||||||
print_pos(LINEAR_AXIS_ELEM(xyz), prefix, suffix);
|
print_pos(NUM_AXIS_ELEM(xyz), prefix, suffix);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, F(" " STRINGIFY(VAR) "="), F(" : " SUFFIX "\n")); }while(0)
|
#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, F(" " STRINGIFY(VAR) "="), F(" : " SUFFIX "\n")); }while(0)
|
||||||
|
|
|
@ -36,25 +36,24 @@ struct IF { typedef R type; };
|
||||||
template <class L, class R>
|
template <class L, class R>
|
||||||
struct IF<true, L, R> { typedef L type; };
|
struct IF<true, L, R> { typedef L type; };
|
||||||
|
|
||||||
#define ALL_AXIS_NAMES X, X2, Y, Y2, Z, Z2, Z3, Z4, I, J, K, E0, E1, E2, E3, E4, E5, E6, E7
|
#define NUM_AXIS_GANG(V...) GANG_N(NUM_AXES, V)
|
||||||
|
#define NUM_AXIS_CODE(V...) CODE_N(NUM_AXES, V)
|
||||||
|
#define NUM_AXIS_LIST(V...) LIST_N(NUM_AXES, V)
|
||||||
|
#define NUM_AXIS_LIST_1(V) LIST_N_1(NUM_AXES, V)
|
||||||
|
#define NUM_AXIS_ARRAY(V...) { NUM_AXIS_LIST(V) }
|
||||||
|
#define NUM_AXIS_ARRAY_1(V) { NUM_AXIS_LIST_1(V) }
|
||||||
|
#define NUM_AXIS_ARGS(T...) NUM_AXIS_LIST(T x, T y, T z, T i, T j, T k)
|
||||||
|
#define NUM_AXIS_ELEM(O) NUM_AXIS_LIST(O.x, O.y, O.z, O.i, O.j, O.k)
|
||||||
|
#define NUM_AXIS_DEFS(T,V) NUM_AXIS_LIST(T x=V, T y=V, T z=V, T i=V, T j=V, T k=V)
|
||||||
|
|
||||||
#define LINEAR_AXIS_GANG(V...) GANG_N(LINEAR_AXES, V)
|
#define MAIN_AXIS_NAMES NUM_AXIS_LIST(X, Y, Z, I, J, K)
|
||||||
#define LINEAR_AXIS_CODE(V...) CODE_N(LINEAR_AXES, V)
|
|
||||||
#define LINEAR_AXIS_LIST(V...) LIST_N(LINEAR_AXES, V)
|
|
||||||
#define LINEAR_AXIS_LIST_1(V) LIST_N_1(LINEAR_AXES, V)
|
|
||||||
#define LINEAR_AXIS_ARRAY(V...) { LINEAR_AXIS_LIST(V) }
|
|
||||||
#define LINEAR_AXIS_ARRAY_1(V) { LINEAR_AXIS_LIST_1(V) }
|
|
||||||
#define LINEAR_AXIS_ARGS(T...) LINEAR_AXIS_LIST(T x, T y, T z, T i, T j, T k)
|
|
||||||
#define LINEAR_AXIS_ELEM(O) LINEAR_AXIS_LIST(O.x, O.y, O.z, O.i, O.j, O.k)
|
|
||||||
#define LINEAR_AXIS_DEFS(T,V) LINEAR_AXIS_LIST(T x=V, T y=V, T z=V, T i=V, T j=V, T k=V)
|
|
||||||
|
|
||||||
#define MAIN_AXIS_NAMES LINEAR_AXIS_LIST(X, Y, Z, I, J, K)
|
|
||||||
#define MAIN_AXIS_MAP(F) MAP(F, MAIN_AXIS_NAMES)
|
#define MAIN_AXIS_MAP(F) MAP(F, MAIN_AXIS_NAMES)
|
||||||
|
#define STR_AXES_MAIN NUM_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K)
|
||||||
|
|
||||||
#define LOGICAL_AXIS_GANG(E,V...) LINEAR_AXIS_GANG(V) GANG_ITEM_E(E)
|
#define LOGICAL_AXIS_GANG(E,V...) NUM_AXIS_GANG(V) GANG_ITEM_E(E)
|
||||||
#define LOGICAL_AXIS_CODE(E,V...) LINEAR_AXIS_CODE(V) CODE_ITEM_E(E)
|
#define LOGICAL_AXIS_CODE(E,V...) NUM_AXIS_CODE(V) CODE_ITEM_E(E)
|
||||||
#define LOGICAL_AXIS_LIST(E,V...) LINEAR_AXIS_LIST(V) LIST_ITEM_E(E)
|
#define LOGICAL_AXIS_LIST(E,V...) NUM_AXIS_LIST(V) LIST_ITEM_E(E)
|
||||||
#define LOGICAL_AXIS_LIST_1(V) LINEAR_AXIS_LIST_1(V) LIST_ITEM_E(V)
|
#define LOGICAL_AXIS_LIST_1(V) NUM_AXIS_LIST_1(V) LIST_ITEM_E(V)
|
||||||
#define LOGICAL_AXIS_ARRAY(E,V...) { LOGICAL_AXIS_LIST(E,V) }
|
#define LOGICAL_AXIS_ARRAY(E,V...) { LOGICAL_AXIS_LIST(E,V) }
|
||||||
#define LOGICAL_AXIS_ARRAY_1(V) { LOGICAL_AXIS_LIST_1(V) }
|
#define LOGICAL_AXIS_ARRAY_1(V) { LOGICAL_AXIS_LIST_1(V) }
|
||||||
#define LOGICAL_AXIS_ARGS(T...) LOGICAL_AXIS_LIST(T e, T x, T y, T z, T i, T j, T k)
|
#define LOGICAL_AXIS_ARGS(T...) LOGICAL_AXIS_LIST(T e, T x, T y, T z, T i, T j, T k)
|
||||||
|
@ -64,7 +63,7 @@ struct IF<true, L, R> { typedef L type; };
|
||||||
#define LOGICAL_AXIS_NAMES LOGICAL_AXIS_LIST(E, X, Y, Z, I, J, K)
|
#define LOGICAL_AXIS_NAMES LOGICAL_AXIS_LIST(E, X, Y, Z, I, J, K)
|
||||||
#define LOGICAL_AXIS_MAP(F) MAP(F, LOGICAL_AXIS_NAMES)
|
#define LOGICAL_AXIS_MAP(F) MAP(F, LOGICAL_AXIS_NAMES)
|
||||||
|
|
||||||
#define LOGICAL_AXES_STRING LOGICAL_AXIS_GANG("E", "X", "Y", "Z", STR_I, STR_J, STR_K)
|
#define STR_AXES_LOGICAL LOGICAL_AXIS_GANG("E", "X", "Y", "Z", STR_I, STR_J, STR_K)
|
||||||
|
|
||||||
#define XYZ_GANG(V...) GANG_N(PRIMARY_LINEAR_AXES, V)
|
#define XYZ_GANG(V...) GANG_N(PRIMARY_LINEAR_AXES, V)
|
||||||
#define XYZ_CODE(V...) CODE_N(PRIMARY_LINEAR_AXES, V)
|
#define XYZ_CODE(V...) CODE_N(PRIMARY_LINEAR_AXES, V)
|
||||||
|
@ -147,7 +146,7 @@ typedef struct AxisFlags {
|
||||||
enum AxisEnum : uint8_t {
|
enum AxisEnum : uint8_t {
|
||||||
|
|
||||||
// Linear axes may be controlled directly or indirectly
|
// Linear axes may be controlled directly or indirectly
|
||||||
LINEAR_AXIS_LIST(X_AXIS, Y_AXIS, Z_AXIS, I_AXIS, J_AXIS, K_AXIS)
|
NUM_AXIS_LIST(X_AXIS, Y_AXIS, Z_AXIS, I_AXIS, J_AXIS, K_AXIS)
|
||||||
|
|
||||||
// Extruder axes may be considered distinctly
|
// Extruder axes may be considered distinctly
|
||||||
#define _EN_ITEM(N) , E##N##_AXIS
|
#define _EN_ITEM(N) , E##N##_AXIS
|
||||||
|
@ -186,7 +185,7 @@ typedef IF<(NUM_AXIS_ENUMS > 8), uint16_t, uint8_t>::type axis_bits_t;
|
||||||
// Loop over axes
|
// Loop over axes
|
||||||
//
|
//
|
||||||
#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS)
|
#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS)
|
||||||
#define LOOP_LINEAR_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LINEAR_AXES)
|
#define LOOP_NUM_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, NUM_AXES)
|
||||||
#define LOOP_LOGICAL_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LOGICAL_AXES)
|
#define LOOP_LOGICAL_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LOGICAL_AXES)
|
||||||
#define LOOP_DISTINCT_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, DISTINCT_AXES)
|
#define LOOP_DISTINCT_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, DISTINCT_AXES)
|
||||||
#define LOOP_DISTINCT_E(VAR) LOOP_L_N(VAR, DISTINCT_E)
|
#define LOOP_DISTINCT_E(VAR) LOOP_L_N(VAR, DISTINCT_E)
|
||||||
|
@ -331,10 +330,10 @@ struct XYval {
|
||||||
FI void set(const T px, const T py) { x = px; y = py; }
|
FI void set(const T px, const T py) { x = px; y = py; }
|
||||||
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
||||||
#endif
|
#endif
|
||||||
#if LINEAR_AXES > XY
|
#if NUM_AXES > XY
|
||||||
FI void set(const T (&arr)[LINEAR_AXES]) { x = arr[0]; y = arr[1]; }
|
FI void set(const T (&arr)[NUM_AXES]) { x = arr[0]; y = arr[1]; }
|
||||||
#endif
|
#endif
|
||||||
#if LOGICAL_AXES > LINEAR_AXES
|
#if LOGICAL_AXES > NUM_AXES
|
||||||
FI void set(const T (&arr)[LOGICAL_AXES]) { x = arr[0]; y = arr[1]; }
|
FI void set(const T (&arr)[LOGICAL_AXES]) { x = arr[0]; y = arr[1]; }
|
||||||
#if DISTINCT_AXES > LOGICAL_AXES
|
#if DISTINCT_AXES > LOGICAL_AXES
|
||||||
FI void set(const T (&arr)[DISTINCT_AXES]) { x = arr[0]; y = arr[1]; }
|
FI void set(const T (&arr)[DISTINCT_AXES]) { x = arr[0]; y = arr[1]; }
|
||||||
|
@ -456,29 +455,29 @@ struct XYval {
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct XYZval {
|
struct XYZval {
|
||||||
union {
|
union {
|
||||||
struct { T LINEAR_AXIS_ARGS(); };
|
struct { T NUM_AXIS_ARGS(); };
|
||||||
struct { T LINEAR_AXIS_LIST(a, b, c, _i, _j, _k); };
|
struct { T NUM_AXIS_LIST(a, b, c, _i, _j, _k); };
|
||||||
T pos[LINEAR_AXES];
|
T pos[NUM_AXES];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Set all to 0
|
// Set all to 0
|
||||||
FI void reset() { LINEAR_AXIS_GANG(x =, y =, z =, i =, j =, k =) 0; }
|
FI void reset() { NUM_AXIS_GANG(x =, y =, z =, i =, j =, k =) 0; }
|
||||||
|
|
||||||
// Setters taking struct types and arrays
|
// Setters taking struct types and arrays
|
||||||
FI void set(const T px) { x = px; }
|
FI void set(const T px) { x = px; }
|
||||||
FI void set(const T px, const T py) { x = px; y = py; }
|
FI void set(const T px, const T py) { x = px; y = py; }
|
||||||
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
|
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
|
||||||
FI void set(const XYval<T> pxy, const T pz) { LINEAR_AXIS_CODE(x = pxy.x, y = pxy.y, z = pz, NOOP, NOOP, NOOP); }
|
FI void set(const XYval<T> pxy, const T pz) { NUM_AXIS_CODE(x = pxy.x, y = pxy.y, z = pz, NOOP, NOOP, NOOP); }
|
||||||
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
||||||
#if HAS_Z_AXIS
|
#if HAS_Z_AXIS
|
||||||
FI void set(const T (&arr)[LINEAR_AXES]) { LINEAR_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
FI void set(const T (&arr)[NUM_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
||||||
FI void set(LINEAR_AXIS_ARGS(const T)) { LINEAR_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
||||||
#endif
|
#endif
|
||||||
#if LOGICAL_AXES > LINEAR_AXES
|
#if LOGICAL_AXES > NUM_AXES
|
||||||
FI void set(const T (&arr)[LOGICAL_AXES]) { LINEAR_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
FI void set(const T (&arr)[LOGICAL_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
||||||
FI void set(LOGICAL_AXIS_ARGS(const T)) { LINEAR_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
FI void set(LOGICAL_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
||||||
#if DISTINCT_AXES > LOGICAL_AXES
|
#if DISTINCT_AXES > LOGICAL_AXES
|
||||||
FI void set(const T (&arr)[DISTINCT_AXES]) { LINEAR_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
FI void set(const T (&arr)[DISTINCT_AXES]) { NUM_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); }
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if HAS_I_AXIS
|
#if HAS_I_AXIS
|
||||||
|
@ -492,24 +491,24 @@ struct XYZval {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Length reduced to one dimension
|
// Length reduced to one dimension
|
||||||
FI T magnitude() const { return (T)sqrtf(LINEAR_AXIS_GANG(x*x, + y*y, + z*z, + i*i, + j*j, + k*k)); }
|
FI T magnitude() const { return (T)sqrtf(NUM_AXIS_GANG(x*x, + y*y, + z*z, + i*i, + j*j, + k*k)); }
|
||||||
// Pointer to the data as a simple array
|
// Pointer to the data as a simple array
|
||||||
FI operator T* () { return pos; }
|
FI operator T* () { return pos; }
|
||||||
// If any element is true then it's true
|
// If any element is true then it's true
|
||||||
FI operator bool() { return LINEAR_AXIS_GANG(x, || y, || z, || i, || j, || k); }
|
FI operator bool() { return NUM_AXIS_GANG(x, || y, || z, || i, || j, || k); }
|
||||||
|
|
||||||
// Explicit copy and copies with conversion
|
// Explicit copy and copies with conversion
|
||||||
FI XYZval<T> copy() const { XYZval<T> o = *this; return o; }
|
FI XYZval<T> copy() const { XYZval<T> o = *this; return o; }
|
||||||
FI XYZval<T> ABS() const { return LINEAR_AXIS_ARRAY(T(_ABS(x)), T(_ABS(y)), T(_ABS(z)), T(_ABS(i)), T(_ABS(j)), T(_ABS(k))); }
|
FI XYZval<T> ABS() const { return NUM_AXIS_ARRAY(T(_ABS(x)), T(_ABS(y)), T(_ABS(z)), T(_ABS(i)), T(_ABS(j)), T(_ABS(k))); }
|
||||||
FI XYZval<int16_t> asInt() { return LINEAR_AXIS_ARRAY(int16_t(x), int16_t(y), int16_t(z), int16_t(i), int16_t(j), int16_t(k)); }
|
FI XYZval<int16_t> asInt() { return NUM_AXIS_ARRAY(int16_t(x), int16_t(y), int16_t(z), int16_t(i), int16_t(j), int16_t(k)); }
|
||||||
FI XYZval<int16_t> asInt() const { return LINEAR_AXIS_ARRAY(int16_t(x), int16_t(y), int16_t(z), int16_t(i), int16_t(j), int16_t(k)); }
|
FI XYZval<int16_t> asInt() const { return NUM_AXIS_ARRAY(int16_t(x), int16_t(y), int16_t(z), int16_t(i), int16_t(j), int16_t(k)); }
|
||||||
FI XYZval<int32_t> asLong() { return LINEAR_AXIS_ARRAY(int32_t(x), int32_t(y), int32_t(z), int32_t(i), int32_t(j), int32_t(k)); }
|
FI XYZval<int32_t> asLong() { return NUM_AXIS_ARRAY(int32_t(x), int32_t(y), int32_t(z), int32_t(i), int32_t(j), int32_t(k)); }
|
||||||
FI XYZval<int32_t> asLong() const { return LINEAR_AXIS_ARRAY(int32_t(x), int32_t(y), int32_t(z), int32_t(i), int32_t(j), int32_t(k)); }
|
FI XYZval<int32_t> asLong() const { return NUM_AXIS_ARRAY(int32_t(x), int32_t(y), int32_t(z), int32_t(i), int32_t(j), int32_t(k)); }
|
||||||
FI XYZval<int32_t> ROUNDL() { return LINEAR_AXIS_ARRAY(int32_t(LROUND(x)), int32_t(LROUND(y)), int32_t(LROUND(z)), int32_t(LROUND(i)), int32_t(LROUND(j)), int32_t(LROUND(k))); }
|
FI XYZval<int32_t> ROUNDL() { return NUM_AXIS_ARRAY(int32_t(LROUND(x)), int32_t(LROUND(y)), int32_t(LROUND(z)), int32_t(LROUND(i)), int32_t(LROUND(j)), int32_t(LROUND(k))); }
|
||||||
FI XYZval<int32_t> ROUNDL() const { return LINEAR_AXIS_ARRAY(int32_t(LROUND(x)), int32_t(LROUND(y)), int32_t(LROUND(z)), int32_t(LROUND(i)), int32_t(LROUND(j)), int32_t(LROUND(k))); }
|
FI XYZval<int32_t> ROUNDL() const { return NUM_AXIS_ARRAY(int32_t(LROUND(x)), int32_t(LROUND(y)), int32_t(LROUND(z)), int32_t(LROUND(i)), int32_t(LROUND(j)), int32_t(LROUND(k))); }
|
||||||
FI XYZval<float> asFloat() { return LINEAR_AXIS_ARRAY(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(i), static_cast<float>(j), static_cast<float>(k)); }
|
FI XYZval<float> asFloat() { return NUM_AXIS_ARRAY(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(i), static_cast<float>(j), static_cast<float>(k)); }
|
||||||
FI XYZval<float> asFloat() const { return LINEAR_AXIS_ARRAY(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(i), static_cast<float>(j), static_cast<float>(k)); }
|
FI XYZval<float> asFloat() const { return NUM_AXIS_ARRAY(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z), static_cast<float>(i), static_cast<float>(j), static_cast<float>(k)); }
|
||||||
FI XYZval<float> reciprocal() const { return LINEAR_AXIS_ARRAY(_RECIP(x), _RECIP(y), _RECIP(z), _RECIP(i), _RECIP(j), _RECIP(k)); }
|
FI XYZval<float> reciprocal() const { return NUM_AXIS_ARRAY(_RECIP(x), _RECIP(y), _RECIP(z), _RECIP(i), _RECIP(j), _RECIP(k)); }
|
||||||
|
|
||||||
// Marlin workspace shifting is done with G92 and M206
|
// Marlin workspace shifting is done with G92 and M206
|
||||||
FI XYZval<float> asLogical() const { XYZval<float> o = asFloat(); toLogical(o); return o; }
|
FI XYZval<float> asLogical() const { XYZval<float> o = asFloat(); toLogical(o); return o; }
|
||||||
|
@ -520,78 +519,78 @@ struct XYZval {
|
||||||
FI operator const XYval<T>&() const { return *(const XYval<T>*)this; }
|
FI operator const XYval<T>&() const { return *(const XYval<T>*)this; }
|
||||||
|
|
||||||
// Cast to a type with more fields by making a new object
|
// Cast to a type with more fields by making a new object
|
||||||
FI operator XYZEval<T>() const { return LINEAR_AXIS_ARRAY(x, y, z, i, j, k); }
|
FI operator XYZEval<T>() const { return NUM_AXIS_ARRAY(x, y, z, i, j, k); }
|
||||||
|
|
||||||
// Accessor via an AxisEnum (or any integer) [index]
|
// Accessor via an AxisEnum (or any integer) [index]
|
||||||
FI T& operator[](const int n) { return pos[n]; }
|
FI T& operator[](const int n) { return pos[n]; }
|
||||||
FI const T& operator[](const int n) const { return pos[n]; }
|
FI const T& operator[](const int n) const { return pos[n]; }
|
||||||
|
|
||||||
// Assignment operator overrides do the expected thing
|
// Assignment operator overrides do the expected thing
|
||||||
FI XYZval<T>& operator= (const T v) { set(ARRAY_N_1(LINEAR_AXES, v)); return *this; }
|
FI XYZval<T>& operator= (const T v) { set(ARRAY_N_1(NUM_AXES, v)); return *this; }
|
||||||
FI XYZval<T>& operator= (const XYval<T> &rs) { set(rs.x, rs.y ); return *this; }
|
FI XYZval<T>& operator= (const XYval<T> &rs) { set(rs.x, rs.y ); return *this; }
|
||||||
FI XYZval<T>& operator= (const XYZEval<T> &rs) { set(LINEAR_AXIS_ELEM(rs)); return *this; }
|
FI XYZval<T>& operator= (const XYZEval<T> &rs) { set(NUM_AXIS_ELEM(rs)); return *this; }
|
||||||
|
|
||||||
// Override other operators to get intuitive behaviors
|
// Override other operators to get intuitive behaviors
|
||||||
FI XYZval<T> operator+ (const XYval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator+ (const XYval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator+ (const XYval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator+ (const XYval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator- (const XYval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator- (const XYval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator- (const XYval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator- (const XYval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator* (const XYval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator* (const XYval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator* (const XYval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator* (const XYval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator/ (const XYval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
FI XYZval<T> operator/ (const XYval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, NOOP , NOOP , NOOP , NOOP ); return ls; }
|
||||||
FI XYZval<T> operator+ (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZval<T> operator+ (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZval<T> operator+ (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZval<T> operator+ (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZval<T> operator- (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZval<T> operator- (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZval<T> operator- (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZval<T> operator- (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZval<T> operator* (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZval<T> operator* (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZval<T> operator* (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZval<T> operator* (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZval<T> operator/ (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZval<T> operator/ (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZval<T> operator+ (const XYZEval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZval<T> operator+ (const XYZEval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZval<T> operator+ (const XYZEval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZval<T> operator+ (const XYZEval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZval<T> operator- (const XYZEval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZval<T> operator- (const XYZEval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZval<T> operator- (const XYZEval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZval<T> operator- (const XYZEval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZval<T> operator* (const XYZEval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZval<T> operator* (const XYZEval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZval<T> operator* (const XYZEval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZval<T> operator* (const XYZEval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYZEval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZval<T> operator/ (const XYZEval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZval<T> operator/ (const XYZEval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZval<T> operator/ (const XYZEval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZval<T> operator* (const float &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
FI XYZval<T> operator* (const float &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
||||||
FI XYZval<T> operator* (const float &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
FI XYZval<T> operator* (const float &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
||||||
FI XYZval<T> operator* (const int &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
FI XYZval<T> operator* (const int &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
||||||
FI XYZval<T> operator* (const int &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
FI XYZval<T> operator* (const int &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= v, ls.y *= v, ls.z *= v, ls.i *= v, ls.j *= v, ls.k *= v ); return ls; }
|
||||||
FI XYZval<T> operator/ (const float &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
FI XYZval<T> operator/ (const float &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
||||||
FI XYZval<T> operator/ (const float &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
FI XYZval<T> operator/ (const float &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
||||||
FI XYZval<T> operator/ (const int &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
FI XYZval<T> operator/ (const int &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
||||||
FI XYZval<T> operator/ (const int &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
FI XYZval<T> operator/ (const int &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= v, ls.y /= v, ls.z /= v, ls.i /= v, ls.j /= v, ls.k /= v ); return ls; }
|
||||||
FI XYZval<T> operator>>(const int &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(_RS(ls.x), _RS(ls.y), _RS(ls.z), _RS(ls.i), _RS(ls.j), _RS(ls.k) ); return ls; }
|
FI XYZval<T> operator>>(const int &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(_RS(ls.x), _RS(ls.y), _RS(ls.z), _RS(ls.i), _RS(ls.j), _RS(ls.k) ); return ls; }
|
||||||
FI XYZval<T> operator>>(const int &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(_RS(ls.x), _RS(ls.y), _RS(ls.z), _RS(ls.i), _RS(ls.j), _RS(ls.k) ); return ls; }
|
FI XYZval<T> operator>>(const int &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(_RS(ls.x), _RS(ls.y), _RS(ls.z), _RS(ls.i), _RS(ls.j), _RS(ls.k) ); return ls; }
|
||||||
FI XYZval<T> operator<<(const int &v) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(_LS(ls.x), _LS(ls.y), _LS(ls.z), _LS(ls.i), _LS(ls.j), _LS(ls.k) ); return ls; }
|
FI XYZval<T> operator<<(const int &v) const { XYZval<T> ls = *this; NUM_AXIS_CODE(_LS(ls.x), _LS(ls.y), _LS(ls.z), _LS(ls.i), _LS(ls.j), _LS(ls.k) ); return ls; }
|
||||||
FI XYZval<T> operator<<(const int &v) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(_LS(ls.x), _LS(ls.y), _LS(ls.z), _LS(ls.i), _LS(ls.j), _LS(ls.k) ); return ls; }
|
FI XYZval<T> operator<<(const int &v) { XYZval<T> ls = *this; NUM_AXIS_CODE(_LS(ls.x), _LS(ls.y), _LS(ls.z), _LS(ls.i), _LS(ls.j), _LS(ls.k) ); return ls; }
|
||||||
FI const XYZval<T> operator-() const { XYZval<T> o = *this; LINEAR_AXIS_CODE(o.x = -x, o.y = -y, o.z = -z, o.i = -i, o.j = -j, o.k = -k); return o; }
|
FI const XYZval<T> operator-() const { XYZval<T> o = *this; NUM_AXIS_CODE(o.x = -x, o.y = -y, o.z = -z, o.i = -i, o.j = -j, o.k = -k); return o; }
|
||||||
FI XYZval<T> operator-() { XYZval<T> o = *this; LINEAR_AXIS_CODE(o.x = -x, o.y = -y, o.z = -z, o.i = -i, o.j = -j, o.k = -k); return o; }
|
FI XYZval<T> operator-() { XYZval<T> o = *this; NUM_AXIS_CODE(o.x = -x, o.y = -y, o.z = -z, o.i = -i, o.j = -j, o.k = -k); return o; }
|
||||||
|
|
||||||
// Modifier operators
|
// Modifier operators
|
||||||
FI XYZval<T>& operator+=(const XYval<T> &rs) { LINEAR_AXIS_CODE(x += rs.x, y += rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
FI XYZval<T>& operator+=(const XYval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
||||||
FI XYZval<T>& operator-=(const XYval<T> &rs) { LINEAR_AXIS_CODE(x -= rs.x, y -= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
FI XYZval<T>& operator-=(const XYval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
||||||
FI XYZval<T>& operator*=(const XYval<T> &rs) { LINEAR_AXIS_CODE(x *= rs.x, y *= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
FI XYZval<T>& operator*=(const XYval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
||||||
FI XYZval<T>& operator/=(const XYval<T> &rs) { LINEAR_AXIS_CODE(x /= rs.x, y /= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
FI XYZval<T>& operator/=(const XYval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y, NOOP, NOOP, NOOP, NOOP ); return *this; }
|
||||||
FI XYZval<T>& operator+=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
FI XYZval<T>& operator+=(const XYZval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
||||||
FI XYZval<T>& operator-=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
FI XYZval<T>& operator-=(const XYZval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator*=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
FI XYZval<T>& operator*=(const XYZval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator/=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
FI XYZval<T>& operator/=(const XYZval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator+=(const XYZEval<T> &rs) { LINEAR_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
FI XYZval<T>& operator+=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
||||||
FI XYZval<T>& operator-=(const XYZEval<T> &rs) { LINEAR_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
FI XYZval<T>& operator-=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator*=(const XYZEval<T> &rs) { LINEAR_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
FI XYZval<T>& operator*=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator/=(const XYZEval<T> &rs) { LINEAR_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
FI XYZval<T>& operator/=(const XYZEval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
||||||
FI XYZval<T>& operator*=(const float &v) { LINEAR_AXIS_CODE(x *= v, y *= v, z *= v, i *= v, j *= v, k *= v); return *this; }
|
FI XYZval<T>& operator*=(const float &v) { NUM_AXIS_CODE(x *= v, y *= v, z *= v, i *= v, j *= v, k *= v); return *this; }
|
||||||
FI XYZval<T>& operator*=(const int &v) { LINEAR_AXIS_CODE(x *= v, y *= v, z *= v, i *= v, j *= v, k *= v); return *this; }
|
FI XYZval<T>& operator*=(const int &v) { NUM_AXIS_CODE(x *= v, y *= v, z *= v, i *= v, j *= v, k *= v); return *this; }
|
||||||
FI XYZval<T>& operator>>=(const int &v) { LINEAR_AXIS_CODE(_RS(x), _RS(y), _RS(z), _RS(i), _RS(j), _RS(k)); return *this; }
|
FI XYZval<T>& operator>>=(const int &v) { NUM_AXIS_CODE(_RS(x), _RS(y), _RS(z), _RS(i), _RS(j), _RS(k)); return *this; }
|
||||||
FI XYZval<T>& operator<<=(const int &v) { LINEAR_AXIS_CODE(_LS(x), _LS(y), _LS(z), _LS(i), _LS(j), _LS(k)); return *this; }
|
FI XYZval<T>& operator<<=(const int &v) { NUM_AXIS_CODE(_LS(x), _LS(y), _LS(z), _LS(i), _LS(j), _LS(k)); return *this; }
|
||||||
|
|
||||||
// Exact comparisons. For floats a "NEAR" operation may be better.
|
// Exact comparisons. For floats a "NEAR" operation may be better.
|
||||||
FI bool operator==(const XYZEval<T> &rs) { return true LINEAR_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
FI bool operator==(const XYZEval<T> &rs) { return true NUM_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
||||||
FI bool operator==(const XYZEval<T> &rs) const { return true LINEAR_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
FI bool operator==(const XYZEval<T> &rs) const { return true NUM_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
||||||
FI bool operator!=(const XYZEval<T> &rs) { return !operator==(rs); }
|
FI bool operator!=(const XYZEval<T> &rs) { return !operator==(rs); }
|
||||||
FI bool operator!=(const XYZEval<T> &rs) const { return !operator==(rs); }
|
FI bool operator!=(const XYZEval<T> &rs) const { return !operator==(rs); }
|
||||||
};
|
};
|
||||||
|
@ -623,12 +622,12 @@ struct XYZEval {
|
||||||
#endif
|
#endif
|
||||||
// Setters taking struct types and arrays
|
// Setters taking struct types and arrays
|
||||||
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
|
FI void set(const XYval<T> pxy) { x = pxy.x; y = pxy.y; }
|
||||||
FI void set(const XYZval<T> pxyz) { set(LINEAR_AXIS_ELEM(pxyz)); }
|
FI void set(const XYZval<T> pxyz) { set(NUM_AXIS_ELEM(pxyz)); }
|
||||||
#if HAS_Z_AXIS
|
#if HAS_Z_AXIS
|
||||||
FI void set(LINEAR_AXIS_ARGS(const T)) { LINEAR_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
FI void set(NUM_AXIS_ARGS(const T)) { NUM_AXIS_CODE(a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
||||||
#endif
|
#endif
|
||||||
FI void set(const XYval<T> pxy, const T pz) { set(pxy); TERN_(HAS_Z_AXIS, z = pz); }
|
FI void set(const XYval<T> pxy, const T pz) { set(pxy); TERN_(HAS_Z_AXIS, z = pz); }
|
||||||
#if LOGICAL_AXES > LINEAR_AXES
|
#if LOGICAL_AXES > NUM_AXES
|
||||||
FI void set(const XYval<T> pxy, const T pz, const T pe) { set(pxy, pz); e = pe; }
|
FI void set(const XYval<T> pxy, const T pz, const T pe) { set(pxy, pz); e = pe; }
|
||||||
FI void set(const XYZval<T> pxyz, const T pe) { set(pxyz); e = pe; }
|
FI void set(const XYZval<T> pxyz, const T pe) { set(pxyz); e = pe; }
|
||||||
FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, _i = i, _j = j, _k = k); }
|
||||||
|
@ -669,9 +668,9 @@ struct XYZEval {
|
||||||
FI const T& operator[](const int n) const { return pos[n]; }
|
FI const T& operator[](const int n) const { return pos[n]; }
|
||||||
|
|
||||||
// Assignment operator overrides do the expected thing
|
// Assignment operator overrides do the expected thing
|
||||||
FI XYZEval<T>& operator= (const T v) { set(LIST_N_1(LINEAR_AXES, v)); return *this; }
|
FI XYZEval<T>& operator= (const T v) { set(LIST_N_1(NUM_AXES, v)); return *this; }
|
||||||
FI XYZEval<T>& operator= (const XYval<T> &rs) { set(rs.x, rs.y); return *this; }
|
FI XYZEval<T>& operator= (const XYval<T> &rs) { set(rs.x, rs.y); return *this; }
|
||||||
FI XYZEval<T>& operator= (const XYZval<T> &rs) { set(LINEAR_AXIS_ELEM(rs)); return *this; }
|
FI XYZEval<T>& operator= (const XYZval<T> &rs) { set(NUM_AXIS_ELEM(rs)); return *this; }
|
||||||
|
|
||||||
// Override other operators to get intuitive behaviors
|
// Override other operators to get intuitive behaviors
|
||||||
FI XYZEval<T> operator+ (const XYval<T> &rs) const { XYZEval<T> ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; }
|
FI XYZEval<T> operator+ (const XYval<T> &rs) const { XYZEval<T> ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; }
|
||||||
|
@ -682,14 +681,14 @@ struct XYZEval {
|
||||||
FI XYZEval<T> operator* (const XYval<T> &rs) { XYZEval<T> ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; }
|
FI XYZEval<T> operator* (const XYval<T> &rs) { XYZEval<T> ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; }
|
||||||
FI XYZEval<T> operator/ (const XYval<T> &rs) const { XYZEval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; }
|
FI XYZEval<T> operator/ (const XYval<T> &rs) const { XYZEval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; }
|
||||||
FI XYZEval<T> operator/ (const XYval<T> &rs) { XYZEval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; }
|
FI XYZEval<T> operator/ (const XYval<T> &rs) { XYZEval<T> ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; }
|
||||||
FI XYZEval<T> operator+ (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZEval<T> operator+ (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZEval<T> operator+ (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZEval<T> operator+ (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZEval<T> operator- (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZEval<T> operator- (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator- (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZEval<T> operator- (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator* (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZEval<T> operator* (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator* (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
FI XYZEval<T> operator* (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x *= rs.x, ls.y *= rs.y, ls.z *= rs.z, ls.i *= rs.i, ls.j *= rs.j, ls.k *= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator/ (const XYZval<T> &rs) const { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZEval<T> operator/ (const XYZval<T> &rs) const { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator/ (const XYZval<T> &rs) { XYZval<T> ls = *this; LINEAR_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
FI XYZEval<T> operator/ (const XYZval<T> &rs) { XYZval<T> ls = *this; NUM_AXIS_CODE(ls.x /= rs.x, ls.y /= rs.y, ls.z /= rs.z, ls.i /= rs.i, ls.j /= rs.j, ls.k /= rs.k); return ls; }
|
||||||
FI XYZEval<T> operator+ (const XYZEval<T> &rs) const { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e += rs.e, ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZEval<T> operator+ (const XYZEval<T> &rs) const { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e += rs.e, ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZEval<T> operator+ (const XYZEval<T> &rs) { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e += rs.e, ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
FI XYZEval<T> operator+ (const XYZEval<T> &rs) { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e += rs.e, ls.x += rs.x, ls.y += rs.y, ls.z += rs.z, ls.i += rs.i, ls.j += rs.j, ls.k += rs.k); return ls; }
|
||||||
FI XYZEval<T> operator- (const XYZEval<T> &rs) const { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e -= rs.e, ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
FI XYZEval<T> operator- (const XYZEval<T> &rs) const { XYZEval<T> ls = *this; LOGICAL_AXIS_CODE(ls.e -= rs.e, ls.x -= rs.x, ls.y -= rs.y, ls.z -= rs.z, ls.i -= rs.i, ls.j -= rs.j, ls.k -= rs.k); return ls; }
|
||||||
|
@ -718,10 +717,10 @@ struct XYZEval {
|
||||||
FI XYZEval<T>& operator-=(const XYval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
|
FI XYZEval<T>& operator-=(const XYval<T> &rs) { x -= rs.x; y -= rs.y; return *this; }
|
||||||
FI XYZEval<T>& operator*=(const XYval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
|
FI XYZEval<T>& operator*=(const XYval<T> &rs) { x *= rs.x; y *= rs.y; return *this; }
|
||||||
FI XYZEval<T>& operator/=(const XYval<T> &rs) { x /= rs.x; y /= rs.y; return *this; }
|
FI XYZEval<T>& operator/=(const XYval<T> &rs) { x /= rs.x; y /= rs.y; return *this; }
|
||||||
FI XYZEval<T>& operator+=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
FI XYZEval<T>& operator+=(const XYZval<T> &rs) { NUM_AXIS_CODE(x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator-=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
FI XYZEval<T>& operator-=(const XYZval<T> &rs) { NUM_AXIS_CODE(x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator*=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
FI XYZEval<T>& operator*=(const XYZval<T> &rs) { NUM_AXIS_CODE(x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator/=(const XYZval<T> &rs) { LINEAR_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
FI XYZEval<T>& operator/=(const XYZval<T> &rs) { NUM_AXIS_CODE(x /= rs.x, y /= rs.y, z /= rs.z, i /= rs.i, j /= rs.j, k /= rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator+=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e += rs.e, x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
FI XYZEval<T>& operator+=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e += rs.e, x += rs.x, y += rs.y, z += rs.z, i += rs.i, j += rs.j, k += rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator-=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e -= rs.e, x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
FI XYZEval<T>& operator-=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e -= rs.e, x -= rs.x, y -= rs.y, z -= rs.z, i -= rs.i, j -= rs.j, k -= rs.k); return *this; }
|
||||||
FI XYZEval<T>& operator*=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e *= rs.e, x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
FI XYZEval<T>& operator*=(const XYZEval<T> &rs) { LOGICAL_AXIS_CODE(e *= rs.e, x *= rs.x, y *= rs.y, z *= rs.z, i *= rs.i, j *= rs.j, k *= rs.k); return *this; }
|
||||||
|
@ -731,8 +730,8 @@ struct XYZEval {
|
||||||
FI XYZEval<T>& operator<<=(const int &v) { LOGICAL_AXIS_CODE(_LS(e), _LS(x), _LS(y), _LS(z), _LS(i), _LS(j), _LS(k)); return *this; }
|
FI XYZEval<T>& operator<<=(const int &v) { LOGICAL_AXIS_CODE(_LS(e), _LS(x), _LS(y), _LS(z), _LS(i), _LS(j), _LS(k)); return *this; }
|
||||||
|
|
||||||
// Exact comparisons. For floats a "NEAR" operation may be better.
|
// Exact comparisons. For floats a "NEAR" operation may be better.
|
||||||
FI bool operator==(const XYZval<T> &rs) { return true LINEAR_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
FI bool operator==(const XYZval<T> &rs) { return true NUM_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
||||||
FI bool operator==(const XYZval<T> &rs) const { return true LINEAR_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
FI bool operator==(const XYZval<T> &rs) const { return true NUM_AXIS_GANG(&& x == rs.x, && y == rs.y, && z == rs.z, && i == rs.i, && j == rs.j, && k == rs.k); }
|
||||||
FI bool operator!=(const XYZval<T> &rs) { return !operator==(rs); }
|
FI bool operator!=(const XYZval<T> &rs) { return !operator==(rs); }
|
||||||
FI bool operator!=(const XYZval<T> &rs) const { return !operator==(rs); }
|
FI bool operator!=(const XYZval<T> &rs) const { return !operator==(rs); }
|
||||||
};
|
};
|
||||||
|
|
|
@ -125,7 +125,7 @@ void safe_delay(millis_t ms) {
|
||||||
#endif
|
#endif
|
||||||
#if ABL_PLANAR
|
#if ABL_PLANAR
|
||||||
SERIAL_ECHOPGM("ABL Adjustment");
|
SERIAL_ECHOPGM("ABL Adjustment");
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]));
|
SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]));
|
||||||
serial_offset(planner.get_axis_position_mm(AxisEnum(a)) - current_position[a]);
|
serial_offset(planner.get_axis_position_mm(AxisEnum(a)) - current_position[a]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ constexpr uint8_t ui8_to_percent(const uint8_t i) { return (int(i) * 100 + 127)
|
||||||
|
|
||||||
// Axis names for G-code parsing, reports, etc.
|
// Axis names for G-code parsing, reports, etc.
|
||||||
const xyze_char_t axis_codes LOGICAL_AXIS_ARRAY('E', 'X', 'Y', 'Z', AXIS4_NAME, AXIS5_NAME, AXIS6_NAME);
|
const xyze_char_t axis_codes LOGICAL_AXIS_ARRAY('E', 'X', 'Y', 'Z', AXIS4_NAME, AXIS5_NAME, AXIS6_NAME);
|
||||||
#if LINEAR_AXES <= XYZ && !HAS_EXTRUDERS
|
#if NUM_AXES <= XYZ && !HAS_EXTRUDERS
|
||||||
#define AXIS_CHAR(A) ((char)('X' + A))
|
#define AXIS_CHAR(A) ((char)('X' + A))
|
||||||
#define IAXIS_CHAR AXIS_CHAR
|
#define IAXIS_CHAR AXIS_CHAR
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -97,7 +97,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const
|
||||||
|
|
||||||
const float f_corr = float(correction) / all_on;
|
const float f_corr = float(correction) / all_on;
|
||||||
|
|
||||||
LOOP_LINEAR_AXES(axis) {
|
LOOP_NUM_AXES(axis) {
|
||||||
if (distance_mm[axis]) {
|
if (distance_mm[axis]) {
|
||||||
const bool reverse = TEST(dm, axis);
|
const bool reverse = TEST(dm, axis);
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t Backlash::get_applied_steps(const AxisEnum axis) {
|
int32_t Backlash::get_applied_steps(const AxisEnum axis) {
|
||||||
if (axis >= LINEAR_AXES) return 0;
|
if (axis >= NUM_AXES) return 0;
|
||||||
|
|
||||||
const bool reverse = TEST(last_direction_bits, axis);
|
const bool reverse = TEST(last_direction_bits, axis);
|
||||||
|
|
||||||
|
@ -166,11 +166,11 @@ class Backlash::StepAdjuster {
|
||||||
xyz_long_t applied_steps;
|
xyz_long_t applied_steps;
|
||||||
public:
|
public:
|
||||||
StepAdjuster() {
|
StepAdjuster() {
|
||||||
LOOP_LINEAR_AXES(axis) applied_steps[axis] = backlash.get_applied_steps((AxisEnum)axis);
|
LOOP_NUM_AXES(axis) applied_steps[axis] = backlash.get_applied_steps((AxisEnum)axis);
|
||||||
}
|
}
|
||||||
~StepAdjuster() {
|
~StepAdjuster() {
|
||||||
// after backlash compensation parameter changes, ensure applied step count does not change
|
// after backlash compensation parameter changes, ensure applied step count does not change
|
||||||
LOOP_LINEAR_AXES(axis) residual_error[axis] += backlash.get_applied_steps((AxisEnum)axis) - applied_steps[axis];
|
LOOP_NUM_AXES(axis) residual_error[axis] += backlash.get_applied_steps((AxisEnum)axis) - applied_steps[axis];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -337,7 +337,7 @@ bool I2CPositionEncoder::test_axis() {
|
||||||
ec = false;
|
ec = false;
|
||||||
|
|
||||||
xyze_pos_t startCoord, endCoord;
|
xyze_pos_t startCoord, endCoord;
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||||
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||||
}
|
}
|
||||||
|
@ -395,7 +395,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) {
|
||||||
travelDistance = endDistance - startDistance;
|
travelDistance = endDistance - startDistance;
|
||||||
|
|
||||||
xyze_pos_t startCoord, endCoord;
|
xyze_pos_t startCoord, endCoord;
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||||
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,7 +163,7 @@ Joystick joystick;
|
||||||
// norm_jog values of [-1 .. 1] maps linearly to [-feedrate .. feedrate]
|
// norm_jog values of [-1 .. 1] maps linearly to [-feedrate .. feedrate]
|
||||||
xyz_float_t move_dist{0};
|
xyz_float_t move_dist{0};
|
||||||
float hypot2 = 0;
|
float hypot2 = 0;
|
||||||
LOOP_LINEAR_AXES(i) if (norm_jog[i]) {
|
LOOP_NUM_AXES(i) if (norm_jog[i]) {
|
||||||
move_dist[i] = seg_time * norm_jog[i] * TERN(EXTENSIBLE_UI, manual_feedrate_mm_s, planner.settings.max_feedrate_mm_s)[i];
|
move_dist[i] = seg_time * norm_jog[i] * TERN(EXTENSIBLE_UI, manual_feedrate_mm_s, planner.settings.max_feedrate_mm_s)[i];
|
||||||
hypot2 += sq(move_dist[i]);
|
hypot2 += sq(move_dist[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -567,7 +567,7 @@ void PrintJobRecovery::resume() {
|
||||||
TERN_(HAS_HOME_OFFSET, home_offset = info.home_offset);
|
TERN_(HAS_HOME_OFFSET, home_offset = info.home_offset);
|
||||||
TERN_(HAS_POSITION_SHIFT, position_shift = info.position_shift);
|
TERN_(HAS_POSITION_SHIFT, position_shift = info.position_shift);
|
||||||
#if HAS_HOME_OFFSET || HAS_POSITION_SHIFT
|
#if HAS_HOME_OFFSET || HAS_POSITION_SHIFT
|
||||||
LOOP_LINEAR_AXES(i) update_workspace_offset((AxisEnum)i);
|
LOOP_NUM_AXES(i) update_workspace_offset((AxisEnum)i);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Relative axis modes
|
// Relative axis modes
|
||||||
|
@ -617,7 +617,7 @@ void PrintJobRecovery::resume() {
|
||||||
|
|
||||||
#if HAS_HOME_OFFSET
|
#if HAS_HOME_OFFSET
|
||||||
DEBUG_ECHOPGM("home_offset: ");
|
DEBUG_ECHOPGM("home_offset: ");
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
if (i) DEBUG_CHAR(',');
|
if (i) DEBUG_CHAR(',');
|
||||||
DEBUG_DECIMAL(info.home_offset[i]);
|
DEBUG_DECIMAL(info.home_offset[i]);
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,7 @@ void PrintJobRecovery::resume() {
|
||||||
|
|
||||||
#if HAS_POSITION_SHIFT
|
#if HAS_POSITION_SHIFT
|
||||||
DEBUG_ECHOPGM("position_shift: ");
|
DEBUG_ECHOPGM("position_shift: ");
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
if (i) DEBUG_CHAR(',');
|
if (i) DEBUG_CHAR(',');
|
||||||
DEBUG_DECIMAL(info.position_shift[i]);
|
DEBUG_DECIMAL(info.position_shift[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -348,7 +348,7 @@ void test_tmc_connection(LOGICAL_AXIS_DECL(const bool, true));
|
||||||
#if USE_SENSORLESS
|
#if USE_SENSORLESS
|
||||||
|
|
||||||
// Track enabled status of stealthChop and only re-enable where applicable
|
// Track enabled status of stealthChop and only re-enable where applicable
|
||||||
struct sensorless_t { bool LINEAR_AXIS_ARGS(), x2, y2, z2, z3, z4; };
|
struct sensorless_t { bool NUM_AXIS_ARGS(), x2, y2, z2, z3, z4; };
|
||||||
|
|
||||||
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
|
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
|
||||||
extern millis_t sg_guard_period;
|
extern millis_t sg_guard_period;
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
|
|
||||||
#if ENABLED(SENSORLESS_HOMING)
|
#if ENABLED(SENSORLESS_HOMING)
|
||||||
sensorless_t stealth_states {
|
sensorless_t stealth_states {
|
||||||
LINEAR_AXIS_LIST(
|
NUM_AXIS_LIST(
|
||||||
TERN0(X_SENSORLESS, tmc_enable_stallguard(stepperX)),
|
TERN0(X_SENSORLESS, tmc_enable_stallguard(stepperX)),
|
||||||
TERN0(Y_SENSORLESS, tmc_enable_stallguard(stepperY)),
|
TERN0(Y_SENSORLESS, tmc_enable_stallguard(stepperY)),
|
||||||
false, false, false, false
|
false, false, false, false
|
||||||
|
@ -220,7 +220,7 @@ void GcodeSuite::G28() {
|
||||||
|
|
||||||
#if ENABLED(MARLIN_DEV_MODE)
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
if (parser.seen_test('S')) {
|
if (parser.seen_test('S')) {
|
||||||
LOOP_LINEAR_AXES(a) set_axis_is_at_home((AxisEnum)a);
|
LOOP_NUM_AXES(a) set_axis_is_at_home((AxisEnum)a);
|
||||||
sync_plan_position();
|
sync_plan_position();
|
||||||
SERIAL_ECHOLNPGM("Simulated Homing");
|
SERIAL_ECHOLNPGM("Simulated Homing");
|
||||||
report_current_position();
|
report_current_position();
|
||||||
|
@ -373,21 +373,21 @@ void GcodeSuite::G28() {
|
||||||
#define _UNSAFE(A) (homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(A##_AXIS))))
|
#define _UNSAFE(A) (homeZ && TERN0(Z_SAFE_HOMING, axes_should_home(_BV(A##_AXIS))))
|
||||||
|
|
||||||
const bool homeZ = TERN0(HAS_Z_AXIS, parser.seen_test('Z')),
|
const bool homeZ = TERN0(HAS_Z_AXIS, parser.seen_test('Z')),
|
||||||
LINEAR_AXIS_LIST( // Other axes should be homed before Z safe-homing
|
NUM_AXIS_LIST( // Other axes should be homed before Z safe-homing
|
||||||
needX = _UNSAFE(X), needY = _UNSAFE(Y), needZ = false, // UNUSED
|
needX = _UNSAFE(X), needY = _UNSAFE(Y), needZ = false, // UNUSED
|
||||||
needI = _UNSAFE(I), needJ = _UNSAFE(J), needK = _UNSAFE(K)
|
needI = _UNSAFE(I), needJ = _UNSAFE(J), needK = _UNSAFE(K)
|
||||||
),
|
),
|
||||||
LINEAR_AXIS_LIST( // Home each axis if needed or flagged
|
NUM_AXIS_LIST( // Home each axis if needed or flagged
|
||||||
homeX = needX || parser.seen_test('X'),
|
homeX = needX || parser.seen_test('X'),
|
||||||
homeY = needY || parser.seen_test('Y'),
|
homeY = needY || parser.seen_test('Y'),
|
||||||
homeZZ = homeZ,
|
homeZZ = homeZ,
|
||||||
homeI = needI || parser.seen_test(AXIS4_NAME), homeJ = needJ || parser.seen_test(AXIS5_NAME), homeK = needK || parser.seen_test(AXIS6_NAME)
|
homeI = needI || parser.seen_test(AXIS4_NAME), homeJ = needJ || parser.seen_test(AXIS5_NAME), homeK = needK || parser.seen_test(AXIS6_NAME)
|
||||||
),
|
),
|
||||||
home_all = LINEAR_AXIS_GANG( // Home-all if all or none are flagged
|
home_all = NUM_AXIS_GANG( // Home-all if all or none are flagged
|
||||||
homeX == homeX, && homeY == homeX, && homeZ == homeX,
|
homeX == homeX, && homeY == homeX, && homeZ == homeX,
|
||||||
&& homeI == homeX, && homeJ == homeX, && homeK == homeX
|
&& homeI == homeX, && homeJ == homeX, && homeK == homeX
|
||||||
),
|
),
|
||||||
LINEAR_AXIS_LIST(
|
NUM_AXIS_LIST(
|
||||||
doX = home_all || homeX, doY = home_all || homeY, doZ = home_all || homeZ,
|
doX = home_all || homeX, doY = home_all || homeY, doZ = home_all || homeZ,
|
||||||
doI = home_all || homeI, doJ = home_all || homeJ, doK = home_all || homeK
|
doI = home_all || homeI, doJ = home_all || homeJ, doK = home_all || homeK
|
||||||
);
|
);
|
||||||
|
@ -403,7 +403,7 @@ void GcodeSuite::G28() {
|
||||||
const bool seenR = parser.seenval('R');
|
const bool seenR = parser.seenval('R');
|
||||||
const float z_homing_height = seenR ? parser.value_linear_units() : Z_HOMING_HEIGHT;
|
const float z_homing_height = seenR ? parser.value_linear_units() : Z_HOMING_HEIGHT;
|
||||||
|
|
||||||
if (z_homing_height && (seenR || LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) {
|
if (z_homing_height && (seenR || NUM_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) {
|
||||||
// Raise Z before homing any other axes and z is not already high enough (never lower z)
|
// Raise Z before homing any other axes and z is not already high enough (never lower z)
|
||||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height);
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height);
|
||||||
do_z_clearance(z_homing_height);
|
do_z_clearance(z_homing_height);
|
||||||
|
@ -576,7 +576,7 @@ void GcodeSuite::G28() {
|
||||||
// If not, this will need a PROGMEM directive and an accessor.
|
// If not, this will need a PROGMEM directive and an accessor.
|
||||||
#define _EN_ITEM(N) , E_AXIS
|
#define _EN_ITEM(N) , E_AXIS
|
||||||
static constexpr AxisEnum L64XX_axis_xref[MAX_L64XX] = {
|
static constexpr AxisEnum L64XX_axis_xref[MAX_L64XX] = {
|
||||||
LINEAR_AXIS_LIST(X_AXIS, Y_AXIS, Z_AXIS, I_AXIS, J_AXIS, K_AXIS),
|
NUM_AXIS_LIST(X_AXIS, Y_AXIS, Z_AXIS, I_AXIS, J_AXIS, K_AXIS),
|
||||||
X_AXIS, Y_AXIS, Z_AXIS, Z_AXIS, Z_AXIS
|
X_AXIS, Y_AXIS, Z_AXIS, Z_AXIS, Z_AXIS
|
||||||
REPEAT(E_STEPPERS, _EN_ITEM)
|
REPEAT(E_STEPPERS, _EN_ITEM)
|
||||||
};
|
};
|
||||||
|
|
|
@ -343,7 +343,7 @@ static float auto_tune_a(const float dcr) {
|
||||||
abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f };
|
abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f };
|
||||||
|
|
||||||
delta_t.reset();
|
delta_t.reset();
|
||||||
LOOP_LINEAR_AXES(axis) {
|
LOOP_NUM_AXES(axis) {
|
||||||
delta_t[axis] = diff;
|
delta_t[axis] = diff;
|
||||||
calc_kinematics_diff_probe_points(z_pt, dcr, delta_e, delta_r, delta_t);
|
calc_kinematics_diff_probe_points(z_pt, dcr, delta_e, delta_r, delta_t);
|
||||||
delta_t[axis] = 0;
|
delta_t[axis] = 0;
|
||||||
|
@ -557,7 +557,7 @@ void GcodeSuite::G33() {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
test_precision = 0.0f; // forced end
|
test_precision = 0.0f; // forced end
|
||||||
LOOP_LINEAR_AXES(axis) e_delta[axis] = +Z4(CEN);
|
LOOP_NUM_AXES(axis) e_delta[axis] = +Z4(CEN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -605,14 +605,14 @@ void GcodeSuite::G33() {
|
||||||
// Normalize angles to least-squares
|
// Normalize angles to least-squares
|
||||||
if (_angle_results) {
|
if (_angle_results) {
|
||||||
float a_sum = 0.0f;
|
float a_sum = 0.0f;
|
||||||
LOOP_LINEAR_AXES(axis) a_sum += delta_tower_angle_trim[axis];
|
LOOP_NUM_AXES(axis) a_sum += delta_tower_angle_trim[axis];
|
||||||
LOOP_LINEAR_AXES(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0f;
|
LOOP_NUM_AXES(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust delta_height and endstops by the max amount
|
// adjust delta_height and endstops by the max amount
|
||||||
const float z_temp = _MAX(delta_endstop_adj.a, delta_endstop_adj.b, delta_endstop_adj.c);
|
const float z_temp = _MAX(delta_endstop_adj.a, delta_endstop_adj.b, delta_endstop_adj.c);
|
||||||
delta_height -= z_temp;
|
delta_height -= z_temp;
|
||||||
LOOP_LINEAR_AXES(axis) delta_endstop_adj[axis] -= z_temp;
|
LOOP_NUM_AXES(axis) delta_endstop_adj[axis] -= z_temp;
|
||||||
}
|
}
|
||||||
recalc_delta_settings();
|
recalc_delta_settings();
|
||||||
NOMORE(zero_std_dev_min, zero_std_dev);
|
NOMORE(zero_std_dev_min, zero_std_dev);
|
||||||
|
|
|
@ -352,7 +352,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
|
||||||
|
|
||||||
// The difference between the known and the measured location
|
// The difference between the known and the measured location
|
||||||
// of the calibration object is the positional error
|
// of the calibration object is the positional error
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
m.pos_error.x = TERN0(HAS_X_CENTER, true_center.x - m.obj_center.x),
|
m.pos_error.x = TERN0(HAS_X_CENTER, true_center.x - m.obj_center.x),
|
||||||
m.pos_error.y = TERN0(HAS_Y_CENTER, true_center.y - m.obj_center.y),
|
m.pos_error.y = TERN0(HAS_Y_CENTER, true_center.y - m.obj_center.y),
|
||||||
m.pos_error.z = true_center.z - m.obj_center.z,
|
m.pos_error.z = true_center.z - m.obj_center.z,
|
||||||
|
@ -597,7 +597,7 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) {
|
||||||
// New scope for TEMPORARY_BACKLASH_CORRECTION
|
// New scope for TEMPORARY_BACKLASH_CORRECTION
|
||||||
TEMPORARY_BACKLASH_CORRECTION(backlash.all_on);
|
TEMPORARY_BACKLASH_CORRECTION(backlash.all_on);
|
||||||
TEMPORARY_BACKLASH_SMOOTHING(0.0f);
|
TEMPORARY_BACKLASH_SMOOTHING(0.0f);
|
||||||
const xyz_float_t move = LINEAR_AXIS_ARRAY(
|
const xyz_float_t move = NUM_AXIS_ARRAY(
|
||||||
AXIS_CAN_CALIBRATE(X) * 3, AXIS_CAN_CALIBRATE(Y) * 3, AXIS_CAN_CALIBRATE(Z) * 3,
|
AXIS_CAN_CALIBRATE(X) * 3, AXIS_CAN_CALIBRATE(Y) * 3, AXIS_CAN_CALIBRATE(Z) * 3,
|
||||||
AXIS_CAN_CALIBRATE(I) * 3, AXIS_CAN_CALIBRATE(J) * 3, AXIS_CAN_CALIBRATE(K) * 3
|
AXIS_CAN_CALIBRATE(I) * 3, AXIS_CAN_CALIBRATE(J) * 3, AXIS_CAN_CALIBRATE(K) * 3
|
||||||
);
|
);
|
||||||
|
|
|
@ -54,7 +54,7 @@ void GcodeSuite::M425() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
if (axis_can_calibrate(a) && parser.seen(AXIS_CHAR(a))) {
|
if (axis_can_calibrate(a) && parser.seen(AXIS_CHAR(a))) {
|
||||||
planner.synchronize();
|
planner.synchronize();
|
||||||
backlash.set_distance_mm((AxisEnum)a, parser.has_value() ? parser.value_axis_units((AxisEnum)a) : backlash.get_measurement((AxisEnum)a));
|
backlash.set_distance_mm((AxisEnum)a, parser.has_value() ? parser.value_axis_units((AxisEnum)a) : backlash.get_measurement((AxisEnum)a));
|
||||||
|
@ -82,7 +82,7 @@ void GcodeSuite::M425() {
|
||||||
SERIAL_ECHOLNPGM("active:");
|
SERIAL_ECHOLNPGM("active:");
|
||||||
SERIAL_ECHOLNPGM(" Correction Amount/Fade-out: F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
|
SERIAL_ECHOLNPGM(" Correction Amount/Fade-out: F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
|
||||||
SERIAL_ECHOPGM(" Backlash Distance (mm): ");
|
SERIAL_ECHOPGM(" Backlash Distance (mm): ");
|
||||||
LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) {
|
LOOP_NUM_AXES(a) if (axis_can_calibrate(a)) {
|
||||||
SERIAL_ECHOLNPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]), backlash.get_distance_mm((AxisEnum)a));
|
SERIAL_ECHOLNPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]), backlash.get_distance_mm((AxisEnum)a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ void GcodeSuite::M425() {
|
||||||
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
|
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
|
||||||
SERIAL_ECHOPGM(" Average measured backlash (mm):");
|
SERIAL_ECHOPGM(" Average measured backlash (mm):");
|
||||||
if (backlash.has_any_measurement()) {
|
if (backlash.has_any_measurement()) {
|
||||||
LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a) && backlash.has_measurement(AxisEnum(a))) {
|
LOOP_NUM_AXES(a) if (axis_can_calibrate(a) && backlash.has_measurement(AxisEnum(a))) {
|
||||||
SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]), backlash.get_measurement((AxisEnum)a));
|
SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]), backlash.get_measurement((AxisEnum)a));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ void GcodeSuite::M425_report(const bool forReplay/*=true*/) {
|
||||||
#ifdef BACKLASH_SMOOTHING_MM
|
#ifdef BACKLASH_SMOOTHING_MM
|
||||||
, PSTR(" S"), LINEAR_UNIT(backlash.get_smoothing_mm())
|
, PSTR(" S"), LINEAR_UNIT(backlash.get_smoothing_mm())
|
||||||
#endif
|
#endif
|
||||||
, LIST_N(DOUBLE(LINEAR_AXES),
|
, LIST_N(DOUBLE(NUM_AXES),
|
||||||
SP_X_STR, LINEAR_UNIT(backlash.get_distance_mm(X_AXIS)),
|
SP_X_STR, LINEAR_UNIT(backlash.get_distance_mm(X_AXIS)),
|
||||||
SP_Y_STR, LINEAR_UNIT(backlash.get_distance_mm(Y_AXIS)),
|
SP_Y_STR, LINEAR_UNIT(backlash.get_distance_mm(Y_AXIS)),
|
||||||
SP_Z_STR, LINEAR_UNIT(backlash.get_distance_mm(Z_AXIS)),
|
SP_Z_STR, LINEAR_UNIT(backlash.get_distance_mm(Z_AXIS)),
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
void GcodeSuite::M666() {
|
void GcodeSuite::M666() {
|
||||||
DEBUG_SECTION(log_M666, "M666", DEBUGGING(LEVELING));
|
DEBUG_SECTION(log_M666, "M666", DEBUGGING(LEVELING));
|
||||||
bool is_err = false, is_set = false;
|
bool is_err = false, is_set = false;
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
if (parser.seenval(AXIS_CHAR(i))) {
|
if (parser.seenval(AXIS_CHAR(i))) {
|
||||||
is_set = true;
|
is_set = true;
|
||||||
const float v = parser.value_linear_units();
|
const float v = parser.value_linear_units();
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
* S<percent> : Speed factor percentage.
|
* S<percent> : Speed factor percentage.
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M201() {
|
void GcodeSuite::M201() {
|
||||||
if (!parser.seen("T" LOGICAL_AXES_STRING TERN_(XY_FREQUENCY_LIMIT, "FS")))
|
if (!parser.seen("T" STR_AXES_LOGICAL TERN_(XY_FREQUENCY_LIMIT, "FS")))
|
||||||
return M201_report();
|
return M201_report();
|
||||||
|
|
||||||
const int8_t target_extruder = get_target_extruder_from_command();
|
const int8_t target_extruder = get_target_extruder_from_command();
|
||||||
|
@ -144,7 +144,7 @@ void GcodeSuite::M201() {
|
||||||
void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
|
void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
|
||||||
report_heading_etc(forReplay, F(STR_MAX_ACCELERATION));
|
report_heading_etc(forReplay, F(STR_MAX_ACCELERATION));
|
||||||
SERIAL_ECHOLNPGM_P(
|
SERIAL_ECHOLNPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
PSTR(" M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
|
PSTR(" M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
|
||||||
SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]),
|
SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]),
|
||||||
SP_Z_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Z_AXIS]),
|
SP_Z_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Z_AXIS]),
|
||||||
|
@ -173,7 +173,7 @@ void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
|
||||||
* With multiple extruders use T to specify which one.
|
* With multiple extruders use T to specify which one.
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M203() {
|
void GcodeSuite::M203() {
|
||||||
if (!parser.seen("T" LOGICAL_AXES_STRING))
|
if (!parser.seen("T" STR_AXES_LOGICAL))
|
||||||
return M203_report();
|
return M203_report();
|
||||||
|
|
||||||
const int8_t target_extruder = get_target_extruder_from_command();
|
const int8_t target_extruder = get_target_extruder_from_command();
|
||||||
|
@ -189,7 +189,7 @@ void GcodeSuite::M203() {
|
||||||
void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
|
void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
|
||||||
report_heading_etc(forReplay, F(STR_MAX_FEEDRATES));
|
report_heading_etc(forReplay, F(STR_MAX_FEEDRATES));
|
||||||
SERIAL_ECHOLNPGM_P(
|
SERIAL_ECHOLNPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
PSTR(" M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
|
PSTR(" M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
|
||||||
SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]),
|
SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]),
|
||||||
SP_Z_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Z_AXIS]),
|
SP_Z_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Z_AXIS]),
|
||||||
|
@ -298,7 +298,7 @@ void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
|
||||||
"Advanced (B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate>"
|
"Advanced (B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate>"
|
||||||
TERN_(HAS_JUNCTION_DEVIATION, " J<junc_dev>")
|
TERN_(HAS_JUNCTION_DEVIATION, " J<junc_dev>")
|
||||||
#if HAS_CLASSIC_JERK
|
#if HAS_CLASSIC_JERK
|
||||||
LINEAR_AXIS_GANG(
|
NUM_AXIS_GANG(
|
||||||
" X<max_jerk>", " Y<max_jerk>", " Z<max_jerk>",
|
" X<max_jerk>", " Y<max_jerk>", " Z<max_jerk>",
|
||||||
" " STR_I "<max_jerk>", " " STR_J "<max_jerk>", " " STR_K "<max_jerk>"
|
" " STR_I "<max_jerk>", " " STR_J "<max_jerk>", " " STR_K "<max_jerk>"
|
||||||
)
|
)
|
||||||
|
@ -314,7 +314,7 @@ void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
|
||||||
, PSTR(" J"), LINEAR_UNIT(planner.junction_deviation_mm)
|
, PSTR(" J"), LINEAR_UNIT(planner.junction_deviation_mm)
|
||||||
#endif
|
#endif
|
||||||
#if HAS_CLASSIC_JERK
|
#if HAS_CLASSIC_JERK
|
||||||
, LIST_N(DOUBLE(LINEAR_AXES),
|
, LIST_N(DOUBLE(NUM_AXES),
|
||||||
SP_X_STR, LINEAR_UNIT(planner.max_jerk.x),
|
SP_X_STR, LINEAR_UNIT(planner.max_jerk.x),
|
||||||
SP_Y_STR, LINEAR_UNIT(planner.max_jerk.y),
|
SP_Y_STR, LINEAR_UNIT(planner.max_jerk.y),
|
||||||
SP_Z_STR, LINEAR_UNIT(planner.max_jerk.z),
|
SP_Z_STR, LINEAR_UNIT(planner.max_jerk.z),
|
||||||
|
|
|
@ -50,9 +50,9 @@
|
||||||
* W[linear] 0/1 Enable park & Z Raise
|
* W[linear] 0/1 Enable park & Z Raise
|
||||||
* X[linear] Park X (Requires TOOLCHANGE_PARK)
|
* X[linear] Park X (Requires TOOLCHANGE_PARK)
|
||||||
* Y[linear] Park Y (Requires TOOLCHANGE_PARK)
|
* Y[linear] Park Y (Requires TOOLCHANGE_PARK)
|
||||||
* I[linear] Park I (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 4)
|
* I[linear] Park I (Requires TOOLCHANGE_PARK and NUM_AXES >= 4)
|
||||||
* J[linear] Park J (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 5)
|
* J[linear] Park J (Requires TOOLCHANGE_PARK and NUM_AXES >= 5)
|
||||||
* K[linear] Park K (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 6)
|
* K[linear] Park K (Requires TOOLCHANGE_PARK and NUM_AXES >= 6)
|
||||||
* Z[linear] Z Raise
|
* Z[linear] Z Raise
|
||||||
* F[speed] Fan Speed 0-255
|
* F[speed] Fan Speed 0-255
|
||||||
* D[seconds] Fan time
|
* D[seconds] Fan time
|
||||||
|
|
|
@ -43,7 +43,7 @@ void GcodeSuite::M92() {
|
||||||
if (target_extruder < 0) return;
|
if (target_extruder < 0) return;
|
||||||
|
|
||||||
// No arguments? Show M92 report.
|
// No arguments? Show M92 report.
|
||||||
if (!parser.seen(LOGICAL_AXES_STRING TERN_(MAGIC_NUMBERS_GCODE, "HL")))
|
if (!parser.seen(STR_AXES_LOGICAL TERN_(MAGIC_NUMBERS_GCODE, "HL")))
|
||||||
return M92_report(true, target_extruder);
|
return M92_report(true, target_extruder);
|
||||||
|
|
||||||
LOOP_LOGICAL_AXES(i) {
|
LOOP_LOGICAL_AXES(i) {
|
||||||
|
@ -92,7 +92,7 @@ void GcodeSuite::M92() {
|
||||||
|
|
||||||
void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
|
void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
|
||||||
report_heading_etc(forReplay, F(STR_STEPS_PER_UNIT));
|
report_heading_etc(forReplay, F(STR_STEPS_PER_UNIT));
|
||||||
SERIAL_ECHOPGM_P(LIST_N(DOUBLE(LINEAR_AXES),
|
SERIAL_ECHOPGM_P(LIST_N(DOUBLE(NUM_AXES),
|
||||||
PSTR(" M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
|
PSTR(" M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
|
||||||
SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
|
SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
|
||||||
SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]),
|
SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]),
|
||||||
|
|
|
@ -48,7 +48,7 @@ inline stepper_flags_t selected_axis_bits() {
|
||||||
selected.bits = e_axis_mask;
|
selected.bits = e_axis_mask;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
selected.bits |= LINEAR_AXIS_GANG(
|
selected.bits |= NUM_AXIS_GANG(
|
||||||
(parser.seen_test('X') << X_AXIS),
|
(parser.seen_test('X') << X_AXIS),
|
||||||
| (parser.seen_test('Y') << Y_AXIS),
|
| (parser.seen_test('Y') << Y_AXIS),
|
||||||
| (parser.seen_test('Z') << Z_AXIS),
|
| (parser.seen_test('Z') << Z_AXIS),
|
||||||
|
@ -71,7 +71,7 @@ void do_enable(const stepper_flags_t to_enable) {
|
||||||
ena_mask_t also_enabled = 0; // Track steppers enabled due to overlap
|
ena_mask_t also_enabled = 0; // Track steppers enabled due to overlap
|
||||||
|
|
||||||
// Enable all flagged axes
|
// Enable all flagged axes
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
if (TEST(shall_enable, a)) {
|
if (TEST(shall_enable, a)) {
|
||||||
stepper.enable_axis(AxisEnum(a)); // Mark and enable the requested axis
|
stepper.enable_axis(AxisEnum(a)); // Mark and enable the requested axis
|
||||||
DEBUG_ECHOLNPGM("Enabled ", AXIS_CHAR(a), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... Enabled: ", hex_word(stepper.axis_enabled.bits));
|
DEBUG_ECHOLNPGM("Enabled ", AXIS_CHAR(a), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... Enabled: ", hex_word(stepper.axis_enabled.bits));
|
||||||
|
@ -91,7 +91,7 @@ void do_enable(const stepper_flags_t to_enable) {
|
||||||
|
|
||||||
if ((also_enabled &= ~(shall_enable | was_enabled))) {
|
if ((also_enabled &= ~(shall_enable | was_enabled))) {
|
||||||
SERIAL_CHAR('(');
|
SERIAL_CHAR('(');
|
||||||
LOOP_LINEAR_AXES(a) if (TEST(also_enabled, a)) SERIAL_CHAR(AXIS_CHAR(a), ' ');
|
LOOP_NUM_AXES(a) if (TEST(also_enabled, a)) SERIAL_CHAR(AXIS_CHAR(a), ' ');
|
||||||
#if HAS_EXTRUDERS
|
#if HAS_EXTRUDERS
|
||||||
#define _EN_ALSO(N) if (TEST(also_enabled, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR('E', '0' + N, ' ');
|
#define _EN_ALSO(N) if (TEST(also_enabled, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR('E', '0' + N, ' ');
|
||||||
REPEAT(EXTRUDERS, _EN_ALSO)
|
REPEAT(EXTRUDERS, _EN_ALSO)
|
||||||
|
@ -127,7 +127,7 @@ void GcodeSuite::M17() {
|
||||||
stepper.enable_e_steppers();
|
stepper.enable_e_steppers();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
if (parser.seen_test(AXIS_CHAR(a))) stepper.enable_axis((AxisEnum)a);
|
if (parser.seen_test(AXIS_CHAR(a))) stepper.enable_axis((AxisEnum)a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ void try_to_disable(const stepper_flags_t to_disable) {
|
||||||
if (!still_enabled) return;
|
if (!still_enabled) return;
|
||||||
|
|
||||||
// Attempt to disable all flagged axes
|
// Attempt to disable all flagged axes
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
if (TEST(to_disable.bits, a)) {
|
if (TEST(to_disable.bits, a)) {
|
||||||
DEBUG_ECHOPGM("Try to disable ", AXIS_CHAR(a), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... ");
|
DEBUG_ECHOPGM("Try to disable ", AXIS_CHAR(a), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... ");
|
||||||
if (stepper.disable_axis(AxisEnum(a))) { // Mark the requested axis and request to disable
|
if (stepper.disable_axis(AxisEnum(a))) { // Mark the requested axis and request to disable
|
||||||
|
@ -174,7 +174,7 @@ void try_to_disable(const stepper_flags_t to_disable) {
|
||||||
|
|
||||||
auto overlap_warning = [](const ena_mask_t axis_bits) {
|
auto overlap_warning = [](const ena_mask_t axis_bits) {
|
||||||
SERIAL_ECHOPGM(" not disabled. Shared with");
|
SERIAL_ECHOPGM(" not disabled. Shared with");
|
||||||
LOOP_LINEAR_AXES(a) if (TEST(axis_bits, a)) SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]));
|
LOOP_NUM_AXES(a) if (TEST(axis_bits, a)) SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_STR[a]));
|
||||||
#if HAS_EXTRUDERS
|
#if HAS_EXTRUDERS
|
||||||
#define _EN_STILLON(N) if (TEST(axis_bits, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR(' ', 'E', '0' + N);
|
#define _EN_STILLON(N) if (TEST(axis_bits, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR(' ', 'E', '0' + N);
|
||||||
REPEAT(EXTRUDERS, _EN_STILLON)
|
REPEAT(EXTRUDERS, _EN_STILLON)
|
||||||
|
@ -183,7 +183,7 @@ void try_to_disable(const stepper_flags_t to_disable) {
|
||||||
};
|
};
|
||||||
|
|
||||||
// If any of the requested axes are still enabled, give a warning
|
// If any of the requested axes are still enabled, give a warning
|
||||||
LOOP_LINEAR_AXES(a) {
|
LOOP_NUM_AXES(a) {
|
||||||
if (TEST(still_enabled, a)) {
|
if (TEST(still_enabled, a)) {
|
||||||
SERIAL_CHAR(AXIS_CHAR(a));
|
SERIAL_CHAR(AXIS_CHAR(a));
|
||||||
overlap_warning(stepper.axis_enabled.bits & enable_overlap[a]);
|
overlap_warning(stepper.axis_enabled.bits & enable_overlap[a]);
|
||||||
|
@ -234,7 +234,7 @@ void GcodeSuite::M18_M84() {
|
||||||
stepper.disable_e_steppers();
|
stepper.disable_e_steppers();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
if (parser.seen_test(AXIS_CHAR(a))) stepper.disable_axis((AxisEnum)a);
|
if (parser.seen_test(AXIS_CHAR(a))) stepper.disable_axis((AxisEnum)a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include "../gcode.h"
|
#include "../gcode.h"
|
||||||
#include "../../module/stepper.h"
|
#include "../../module/stepper.h"
|
||||||
|
|
||||||
#if LINEAR_AXES == XYZ && EXTRUDERS >= 1
|
#if NUM_AXES == XYZ && EXTRUDERS >= 1
|
||||||
#define HAS_M350_B_PARAM 1 // "5th axis" (after E0) for an original XYZEB setup.
|
#define HAS_M350_B_PARAM 1 // "5th axis" (after E0) for an original XYZEB setup.
|
||||||
#if AXIS_COLLISION('B')
|
#if AXIS_COLLISION('B')
|
||||||
#error "M350 parameter 'B' collision with axis name."
|
#error "M350 parameter 'B' collision with axis name."
|
||||||
|
|
|
@ -145,7 +145,7 @@
|
||||||
|
|
||||||
HOTEND_LOOP() {
|
HOTEND_LOOP() {
|
||||||
DEBUG_ECHOPGM_P(SP_T_STR, e);
|
DEBUG_ECHOPGM_P(SP_T_STR, e);
|
||||||
LOOP_LINEAR_AXES(a) DEBUG_ECHOPGM(" hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
|
LOOP_NUM_AXES(a) DEBUG_ECHOPGM(" hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
|
||||||
DEBUG_EOL();
|
DEBUG_EOL();
|
||||||
}
|
}
|
||||||
DEBUG_EOL();
|
DEBUG_EOL();
|
||||||
|
|
|
@ -48,11 +48,11 @@
|
||||||
void GcodeSuite::M907() {
|
void GcodeSuite::M907() {
|
||||||
#if HAS_MOTOR_CURRENT_SPI
|
#if HAS_MOTOR_CURRENT_SPI
|
||||||
|
|
||||||
if (!parser.seen("BS" LOGICAL_AXES_STRING))
|
if (!parser.seen("BS" STR_AXES_LOGICAL))
|
||||||
return M907_report();
|
return M907_report();
|
||||||
|
|
||||||
if (parser.seenval('S')) LOOP_L_N(i, MOTOR_CURRENT_COUNT) stepper.set_digipot_current(i, parser.value_int());
|
if (parser.seenval('S')) LOOP_L_N(i, MOTOR_CURRENT_COUNT) stepper.set_digipot_current(i, parser.value_int());
|
||||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) stepper.set_digipot_current(i, parser.value_int()); // X Y Z (I J K) E (map to drivers according to DIGIPOT_CHANNELS. Default with LINEAR_AXES 3: map X Y Z E to X Y Z E0)
|
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) stepper.set_digipot_current(i, parser.value_int()); // X Y Z (I J K) E (map to drivers according to DIGIPOT_CHANNELS. Default with NUM_AXES 3: map X Y Z E to X Y Z E0)
|
||||||
// Additional extruders use B,C.
|
// Additional extruders use B,C.
|
||||||
// TODO: Change these parameters because 'E' is used and D should be reserved for debugging. B<index>?
|
// TODO: Change these parameters because 'E' is used and D should be reserved for debugging. B<index>?
|
||||||
#if E_STEPPERS >= 2
|
#if E_STEPPERS >= 2
|
||||||
|
@ -85,7 +85,7 @@ void GcodeSuite::M907() {
|
||||||
if (parser.seenval('S')) LOOP_L_N(a, MOTOR_CURRENT_COUNT) stepper.set_digipot_current(a, parser.value_int());
|
if (parser.seenval('S')) LOOP_L_N(a, MOTOR_CURRENT_COUNT) stepper.set_digipot_current(a, parser.value_int());
|
||||||
|
|
||||||
#if HAS_X_Y_XY_I_J_K
|
#if HAS_X_Y_XY_I_J_K
|
||||||
if (LINEAR_AXIS_GANG(
|
if (NUM_AXIS_GANG(
|
||||||
parser.seenval('X'), || parser.seenval('Y'), || false,
|
parser.seenval('X'), || parser.seenval('Y'), || false,
|
||||||
|| parser.seenval('I'), || parser.seenval('J'), || parser.seenval('K')
|
|| parser.seenval('I'), || parser.seenval('J'), || parser.seenval('K')
|
||||||
)) stepper.set_digipot_current(0, parser.value_int());
|
)) stepper.set_digipot_current(0, parser.value_int());
|
||||||
|
@ -104,11 +104,11 @@ void GcodeSuite::M907() {
|
||||||
#if HAS_MOTOR_CURRENT_I2C
|
#if HAS_MOTOR_CURRENT_I2C
|
||||||
// this one uses actual amps in floating point
|
// this one uses actual amps in floating point
|
||||||
if (parser.seenval('S')) LOOP_L_N(q, DIGIPOT_I2C_NUM_CHANNELS) digipot_i2c.set_current(q, parser.value_float());
|
if (parser.seenval('S')) LOOP_L_N(q, DIGIPOT_I2C_NUM_CHANNELS) digipot_i2c.set_current(q, parser.value_float());
|
||||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) digipot_i2c.set_current(i, parser.value_float()); // X Y Z (I J K) E (map to drivers according to pots adresses. Default with LINEAR_AXES 3 X Y Z E: map to X Y Z E0)
|
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) digipot_i2c.set_current(i, parser.value_float()); // X Y Z (I J K) E (map to drivers according to pots adresses. Default with NUM_AXES 3 X Y Z E: map to X Y Z E0)
|
||||||
// Additional extruders use B,C,D.
|
// Additional extruders use B,C,D.
|
||||||
// TODO: Change these parameters because 'E' is used and because 'D' should be reserved for debugging. B<index>?
|
// TODO: Change these parameters because 'E' is used and because 'D' should be reserved for debugging. B<index>?
|
||||||
#if E_STEPPERS >= 2
|
#if E_STEPPERS >= 2
|
||||||
for (uint8_t i = E_AXIS + 1; i < _MAX(DIGIPOT_I2C_NUM_CHANNELS, (LINEAR_AXES + 3)); i++)
|
for (uint8_t i = E_AXIS + 1; i < _MAX(DIGIPOT_I2C_NUM_CHANNELS, (NUM_AXES + 3)); i++)
|
||||||
if (parser.seenval('B' + i - (E_AXIS + 1))) digipot_i2c.set_current(i, parser.value_float());
|
if (parser.seenval('B' + i - (E_AXIS + 1))) digipot_i2c.set_current(i, parser.value_float());
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -118,7 +118,7 @@ void GcodeSuite::M907() {
|
||||||
const float dac_percent = parser.value_float();
|
const float dac_percent = parser.value_float();
|
||||||
LOOP_LOGICAL_AXES(i) stepper_dac.set_current_percent(i, dac_percent);
|
LOOP_LOGICAL_AXES(i) stepper_dac.set_current_percent(i, dac_percent);
|
||||||
}
|
}
|
||||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) stepper_dac.set_current_percent(i, parser.value_float()); // X Y Z (I J K) E (map to drivers according to DAC_STEPPER_ORDER. Default with LINEAR_AXES 3: X Y Z E map to X Y Z E0)
|
LOOP_LOGICAL_AXES(i) if (parser.seenval(IAXIS_CHAR(i))) stepper_dac.set_current_percent(i, parser.value_float()); // X Y Z (I J K) E (map to drivers according to DAC_STEPPER_ORDER. Default with NUM_AXES 3: X Y Z E map to X Y Z E0)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ void GcodeSuite::M907() {
|
||||||
SERIAL_ECHO(stepper.motor_current_setting[q]);
|
SERIAL_ECHO(stepper.motor_current_setting[q]);
|
||||||
}
|
}
|
||||||
#if E_STEPPERS >= 2
|
#if E_STEPPERS >= 2
|
||||||
SERIAL_ECHOPGM_P(PSTR(" B"), stepper.motor_current_setting[E_AXIS + 1] // B (maps to E1 with LINEAR_AXES 3 according to DIGIPOT_CHANNELS)
|
SERIAL_ECHOPGM_P(PSTR(" B"), stepper.motor_current_setting[E_AXIS + 1] // B (maps to E1 with NUM_AXES 3 according to DIGIPOT_CHANNELS)
|
||||||
#if E_STEPPERS >= 3
|
#if E_STEPPERS >= 3
|
||||||
, PSTR(" C"), stepper.motor_current_setting[E_AXIS + 2] // C (mapping to E2 must be defined by DIGIPOT_CHANNELS)
|
, PSTR(" C"), stepper.motor_current_setting[E_AXIS + 2] // C (mapping to E2 must be defined by DIGIPOT_CHANNELS)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -51,7 +51,7 @@ void GcodeSuite::G60() {
|
||||||
const xyze_pos_t &pos = stored_position[slot];
|
const xyze_pos_t &pos = stored_position[slot];
|
||||||
DEBUG_ECHOPGM(STR_SAVED_POS " S", slot, " :");
|
DEBUG_ECHOPGM(STR_SAVED_POS " S", slot, " :");
|
||||||
DEBUG_ECHOLNPGM_P(
|
DEBUG_ECHOLNPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
SP_X_LBL, pos.x, SP_Y_LBL, pos.y, SP_Z_LBL, pos.z,
|
SP_X_LBL, pos.x, SP_Y_LBL, pos.y, SP_Z_LBL, pos.z,
|
||||||
SP_I_LBL, pos.i, SP_J_LBL, pos.j, SP_K_LBL, pos.k
|
SP_I_LBL, pos.i, SP_J_LBL, pos.j, SP_K_LBL, pos.k
|
||||||
)
|
)
|
||||||
|
|
|
@ -68,9 +68,9 @@ void GcodeSuite::G61() {
|
||||||
SYNC_E(stored_position[slot].e);
|
SYNC_E(stored_position[slot].e);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K))) {
|
if (parser.seen(STR_AXES_MAIN)) {
|
||||||
DEBUG_ECHOPGM(STR_RESTORING_POS " S", slot);
|
DEBUG_ECHOPGM(STR_RESTORING_POS " S", slot);
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
destination[i] = parser.seenval(AXIS_CHAR(i))
|
destination[i] = parser.seenval(AXIS_CHAR(i))
|
||||||
? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
|
? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
|
||||||
: current_position[i];
|
: current_position[i];
|
||||||
|
|
|
@ -64,7 +64,7 @@ void GcodeSuite::M125() {
|
||||||
xyz_pos_t park_point = NOZZLE_PARK_POINT;
|
xyz_pos_t park_point = NOZZLE_PARK_POINT;
|
||||||
|
|
||||||
// Move to filament change position or given position
|
// Move to filament change position or given position
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (parser.seenval('X')) park_point.x = RAW_X_POSITION(parser.linearval('X')),
|
if (parser.seenval('X')) park_point.x = RAW_X_POSITION(parser.linearval('X')),
|
||||||
if (parser.seenval('Y')) park_point.y = RAW_Y_POSITION(parser.linearval('Y')),
|
if (parser.seenval('Y')) park_point.y = RAW_Y_POSITION(parser.linearval('Y')),
|
||||||
NOOP,
|
NOOP,
|
||||||
|
|
|
@ -120,7 +120,7 @@ void GcodeSuite::M600() {
|
||||||
xyz_pos_t park_point NOZZLE_PARK_POINT;
|
xyz_pos_t park_point NOZZLE_PARK_POINT;
|
||||||
|
|
||||||
// Move XY axes to filament change position or given position
|
// Move XY axes to filament change position or given position
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (parser.seenval('X')) park_point.x = parser.linearval('X'),
|
if (parser.seenval('X')) park_point.x = parser.linearval('X'),
|
||||||
if (parser.seenval('Y')) park_point.y = parser.linearval('Y'),
|
if (parser.seenval('Y')) park_point.y = parser.linearval('Y'),
|
||||||
if (parser.seenval('Z')) park_point.z = parser.linearval('Z'), // Lift Z axis
|
if (parser.seenval('Z')) park_point.z = parser.linearval('Z'), // Lift Z axis
|
||||||
|
|
|
@ -161,7 +161,7 @@ void GcodeSuite::M569_report(const bool forReplay/*=true*/) {
|
||||||
|
|
||||||
if (chop_x || chop_y || chop_z || chop_i || chop_j || chop_k) {
|
if (chop_x || chop_y || chop_z || chop_i || chop_j || chop_k) {
|
||||||
say_M569(forReplay);
|
say_M569(forReplay);
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (chop_x) SERIAL_ECHOPGM_P(SP_X_STR),
|
if (chop_x) SERIAL_ECHOPGM_P(SP_X_STR),
|
||||||
if (chop_y) SERIAL_ECHOPGM_P(SP_Y_STR),
|
if (chop_y) SERIAL_ECHOPGM_P(SP_Y_STR),
|
||||||
if (chop_z) SERIAL_ECHOPGM_P(SP_Z_STR),
|
if (chop_z) SERIAL_ECHOPGM_P(SP_Z_STR),
|
||||||
|
|
|
@ -451,7 +451,7 @@
|
||||||
|
|
||||||
bool report = true;
|
bool report = true;
|
||||||
const uint8_t index = parser.byteval('I');
|
const uint8_t index = parser.byteval('I');
|
||||||
LOOP_LINEAR_AXES(i) if (parser.seen(AXIS_CHAR(i))) {
|
LOOP_NUM_AXES(i) if (parser.seen(AXIS_CHAR(i))) {
|
||||||
const int16_t value = parser.value_int();
|
const int16_t value = parser.value_int();
|
||||||
report = false;
|
report = false;
|
||||||
switch (i) {
|
switch (i) {
|
||||||
|
|
|
@ -179,7 +179,7 @@ void GcodeSuite::get_destination_from_command() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Get new XYZ position, whether absolute or relative
|
// Get new XYZ position, whether absolute or relative
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
if ( (seen[i] = parser.seenval(AXIS_CHAR(i))) ) {
|
if ( (seen[i] = parser.seenval(AXIS_CHAR(i))) ) {
|
||||||
const float v = parser.value_axis_units((AxisEnum)i);
|
const float v = parser.value_axis_units((AxisEnum)i);
|
||||||
if (skip_move)
|
if (skip_move)
|
||||||
|
|
|
@ -37,7 +37,7 @@ bool GcodeSuite::select_coordinate_system(const int8_t _new) {
|
||||||
xyz_float_t new_offset{0};
|
xyz_float_t new_offset{0};
|
||||||
if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1))
|
if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1))
|
||||||
new_offset = coordinate_system[_new];
|
new_offset = coordinate_system[_new];
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
if (position_shift[i] != new_offset[i]) {
|
if (position_shift[i] != new_offset[i]) {
|
||||||
position_shift[i] = new_offset[i];
|
position_shift[i] = new_offset[i];
|
||||||
update_workspace_offset((AxisEnum)i);
|
update_workspace_offset((AxisEnum)i);
|
||||||
|
|
|
@ -63,7 +63,7 @@ void GcodeSuite::G92() {
|
||||||
|
|
||||||
#if ENABLED(CNC_COORDINATE_SYSTEMS) && !IS_SCARA
|
#if ENABLED(CNC_COORDINATE_SYSTEMS) && !IS_SCARA
|
||||||
case 1: // G92.1 - Zero the Workspace Offset
|
case 1: // G92.1 - Zero the Workspace Offset
|
||||||
LOOP_LINEAR_AXES(i) if (position_shift[i]) {
|
LOOP_NUM_AXES(i) if (position_shift[i]) {
|
||||||
position_shift[i] = 0;
|
position_shift[i] = 0;
|
||||||
update_workspace_offset((AxisEnum)i);
|
update_workspace_offset((AxisEnum)i);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M206() {
|
void GcodeSuite::M206() {
|
||||||
if (!parser.seen_any()) return M206_report();
|
if (!parser.seen_any()) return M206_report();
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
if (parser.seenval(AXIS_CHAR(a))) set_home_offset((AxisEnum)a, parser.value_axis_units((AxisEnum)a));
|
if (parser.seenval(AXIS_CHAR(a))) set_home_offset((AxisEnum)a, parser.value_axis_units((AxisEnum)a));
|
||||||
#if ENABLED(MORGAN_SCARA)
|
#if ENABLED(MORGAN_SCARA)
|
||||||
if (parser.seenval('T')) set_home_offset(A_AXIS, parser.value_float()); // Theta
|
if (parser.seenval('T')) set_home_offset(A_AXIS, parser.value_float()); // Theta
|
||||||
|
@ -53,7 +53,7 @@ void GcodeSuite::M206_report(const bool forReplay/*=true*/) {
|
||||||
report_heading_etc(forReplay, F(STR_HOME_OFFSET));
|
report_heading_etc(forReplay, F(STR_HOME_OFFSET));
|
||||||
SERIAL_ECHOLNPGM_P(
|
SERIAL_ECHOLNPGM_P(
|
||||||
#if IS_CARTESIAN
|
#if IS_CARTESIAN
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
PSTR(" M206 X"), LINEAR_UNIT(home_offset.x),
|
PSTR(" M206 X"), LINEAR_UNIT(home_offset.x),
|
||||||
SP_Y_STR, LINEAR_UNIT(home_offset.y),
|
SP_Y_STR, LINEAR_UNIT(home_offset.y),
|
||||||
SP_Z_STR, LINEAR_UNIT(home_offset.z),
|
SP_Z_STR, LINEAR_UNIT(home_offset.z),
|
||||||
|
@ -82,7 +82,7 @@ void GcodeSuite::M428() {
|
||||||
if (homing_needed_error()) return;
|
if (homing_needed_error()) return;
|
||||||
|
|
||||||
xyz_float_t diff;
|
xyz_float_t diff;
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
diff[i] = base_home_pos((AxisEnum)i) - current_position[i];
|
diff[i] = base_home_pos((AxisEnum)i) - current_position[i];
|
||||||
if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
|
if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
|
||||||
diff[i] = -current_position[i];
|
diff[i] = -current_position[i];
|
||||||
|
@ -94,7 +94,7 @@ void GcodeSuite::M428() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOOP_LINEAR_AXES(i) set_home_offset((AxisEnum)i, diff[i]);
|
LOOP_NUM_AXES(i) set_home_offset((AxisEnum)i, diff[i]);
|
||||||
report_current_position();
|
report_current_position();
|
||||||
LCD_MESSAGE(MSG_HOME_OFFSETS_APPLIED);
|
LCD_MESSAGE(MSG_HOME_OFFSETS_APPLIED);
|
||||||
OKAY_BUZZ();
|
OKAY_BUZZ();
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
void report_linear_axis_pos(const xyz_pos_t &pos, const uint8_t precision=3) {
|
void report_linear_axis_pos(const xyz_pos_t &pos, const uint8_t precision=3) {
|
||||||
char str[12];
|
char str[12];
|
||||||
LOOP_LINEAR_AXES(a) SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_LBL[a]), dtostrf(pos[a], 1, precision, str));
|
LOOP_NUM_AXES(a) SERIAL_ECHOPGM_P((PGM_P)pgm_read_ptr(&SP_AXIS_LBL[a]), dtostrf(pos[a], 1, precision, str));
|
||||||
SERIAL_EOL();
|
SERIAL_EOL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@ void GcodeSuite::M115() {
|
||||||
"PROTOCOL_VERSION:" PROTOCOL_VERSION " "
|
"PROTOCOL_VERSION:" PROTOCOL_VERSION " "
|
||||||
"MACHINE_TYPE:" MACHINE_NAME " "
|
"MACHINE_TYPE:" MACHINE_NAME " "
|
||||||
"EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " "
|
"EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " "
|
||||||
#if LINEAR_AXES != XYZ
|
#if NUM_AXES != XYZ
|
||||||
"AXIS_COUNT:" STRINGIFY(LINEAR_AXES) " "
|
"AXIS_COUNT:" STRINGIFY(NUM_AXES) " "
|
||||||
#endif
|
#endif
|
||||||
#ifdef MACHINE_UUID
|
#ifdef MACHINE_UUID
|
||||||
"UUID:" MACHINE_UUID
|
"UUID:" MACHINE_UUID
|
||||||
|
|
|
@ -49,7 +49,7 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) {
|
||||||
if (IsRunning()
|
if (IsRunning()
|
||||||
#if ENABLED(NO_MOTION_BEFORE_HOMING)
|
#if ENABLED(NO_MOTION_BEFORE_HOMING)
|
||||||
&& !homing_needed_error(
|
&& !homing_needed_error(
|
||||||
LINEAR_AXIS_GANG(
|
NUM_AXIS_GANG(
|
||||||
(parser.seen_test('X') ? _BV(X_AXIS) : 0),
|
(parser.seen_test('X') ? _BV(X_AXIS) : 0),
|
||||||
| (parser.seen_test('Y') ? _BV(Y_AXIS) : 0),
|
| (parser.seen_test('Y') ? _BV(Y_AXIS) : 0),
|
||||||
| (parser.seen_test('Z') ? _BV(Z_AXIS) : 0),
|
| (parser.seen_test('Z') ? _BV(Z_AXIS) : 0),
|
||||||
|
@ -89,7 +89,7 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) {
|
||||||
if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
|
if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
|
||||||
// When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves
|
// When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves
|
||||||
if (fwretract.autoretract_enabled && parser.seen_test('E')
|
if (fwretract.autoretract_enabled && parser.seen_test('E')
|
||||||
&& !parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K))
|
&& !parser.seen(STR_AXES_MAIN)
|
||||||
) {
|
) {
|
||||||
const float echange = destination.e - current_position.e;
|
const float echange = destination.e - current_position.e;
|
||||||
// Is this a retract or recover move?
|
// Is this a retract or recover move?
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#define MIN_ARC_SEGMENT_MM MAX_ARC_SEGMENT_MM
|
#define MIN_ARC_SEGMENT_MM MAX_ARC_SEGMENT_MM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ARC_LIJK_CODE(L,I,J,K) CODE_N(SUB2(LINEAR_AXES),L,I,J,K)
|
#define ARC_LIJK_CODE(L,I,J,K) CODE_N(SUB2(NUM_AXES),L,I,J,K)
|
||||||
#define ARC_LIJKE_CODE(L,I,J,K,E) ARC_LIJK_CODE(L,I,J,K); CODE_ITEM_E(E)
|
#define ARC_LIJKE_CODE(L,I,J,K,E) ARC_LIJK_CODE(L,I,J,K); CODE_ITEM_E(E)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,7 +168,7 @@ void plan_arc(
|
||||||
|
|
||||||
// Return if the move is near zero
|
// Return if the move is near zero
|
||||||
if (flat_mm < 0.0001f
|
if (flat_mm < 0.0001f
|
||||||
GANG_N(SUB2(LINEAR_AXES), && travel_L < 0.0001f, && travel_I < 0.0001f, && travel_J < 0.0001f, && travel_K < 0.0001f)
|
GANG_N(SUB2(NUM_AXES), && travel_L < 0.0001f, && travel_I < 0.0001f, && travel_J < 0.0001f, && travel_K < 0.0001f)
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
// Feedrate for the move, scaled by the feedrate multiplier
|
// Feedrate for the move, scaled by the feedrate multiplier
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M290() {
|
void GcodeSuite::M290() {
|
||||||
#if ENABLED(BABYSTEP_XY)
|
#if ENABLED(BABYSTEP_XY)
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
if (parser.seenval(AXIS_CHAR(a)) || (a == Z_AXIS && parser.seenval('S'))) {
|
if (parser.seenval(AXIS_CHAR(a)) || (a == Z_AXIS && parser.seenval('S'))) {
|
||||||
const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2);
|
const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2);
|
||||||
babystep.add_mm((AxisEnum)a, offs);
|
babystep.add_mm((AxisEnum)a, offs);
|
||||||
|
@ -87,7 +87,7 @@ void GcodeSuite::M290() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K)) || parser.seen('R')) {
|
if (!parser.seen(STR_AXES_MAIN) || parser.seen('R')) {
|
||||||
SERIAL_ECHO_START();
|
SERIAL_ECHO_START();
|
||||||
|
|
||||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||||
|
|
|
@ -225,7 +225,7 @@ public:
|
||||||
#endif // !FASTER_GCODE_PARSER
|
#endif // !FASTER_GCODE_PARSER
|
||||||
|
|
||||||
// Seen any axis parameter
|
// Seen any axis parameter
|
||||||
static bool seen_axis() { return seen(LOGICAL_AXES_STRING); }
|
static bool seen_axis() { return seen(STR_AXES_LOGICAL); }
|
||||||
|
|
||||||
#if ENABLED(GCODE_QUOTED_STRINGS)
|
#if ENABLED(GCODE_QUOTED_STRINGS)
|
||||||
static char* unescape_string(char* &src);
|
static char* unescape_string(char* &src);
|
||||||
|
|
|
@ -49,7 +49,7 @@ inline bool G38_run_probe() {
|
||||||
#if MULTIPLE_PROBING > 1
|
#if MULTIPLE_PROBING > 1
|
||||||
// Get direction of move and retract
|
// Get direction of move and retract
|
||||||
xyz_float_t retract_mm;
|
xyz_float_t retract_mm;
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
const float dist = destination[i] - current_position[i];
|
const float dist = destination[i] - current_position[i];
|
||||||
retract_mm[i] = ABS(dist) < G38_MINIMUM_MOVE ? 0 : home_bump_mm((AxisEnum)i) * (dist > 0 ? -1 : 1);
|
retract_mm[i] = ABS(dist) < G38_MINIMUM_MOVE ? 0 : home_bump_mm((AxisEnum)i) * (dist > 0 ? -1 : 1);
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ void GcodeSuite::G38(const int8_t subcode) {
|
||||||
;
|
;
|
||||||
|
|
||||||
// If any axis has enough movement, do the move
|
// If any axis has enough movement, do the move
|
||||||
LOOP_LINEAR_AXES(i)
|
LOOP_NUM_AXES(i)
|
||||||
if (ABS(destination[i] - current_position[i]) >= G38_MINIMUM_MOVE) {
|
if (ABS(destination[i] - current_position[i]) >= G38_MINIMUM_MOVE) {
|
||||||
if (!parser.seenval('F')) feedrate_mm_s = homing_feedrate((AxisEnum)i);
|
if (!parser.seenval('F')) feedrate_mm_s = homing_feedrate((AxisEnum)i);
|
||||||
// If G38.2 fails throw an error
|
// If G38.2 fails throw an error
|
||||||
|
|
|
@ -675,21 +675,21 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef K_DRIVER_TYPE
|
#ifdef K_DRIVER_TYPE
|
||||||
#define LINEAR_AXES 6
|
#define NUM_AXES 6
|
||||||
#elif defined(J_DRIVER_TYPE)
|
#elif defined(J_DRIVER_TYPE)
|
||||||
#define LINEAR_AXES 5
|
#define NUM_AXES 5
|
||||||
#elif defined(I_DRIVER_TYPE)
|
#elif defined(I_DRIVER_TYPE)
|
||||||
#define LINEAR_AXES 4
|
#define NUM_AXES 4
|
||||||
#elif defined(Z_DRIVER_TYPE)
|
#elif defined(Z_DRIVER_TYPE)
|
||||||
#define LINEAR_AXES 3
|
#define NUM_AXES 3
|
||||||
#elif defined(Y_DRIVER_TYPE)
|
#elif defined(Y_DRIVER_TYPE)
|
||||||
#define LINEAR_AXES 2
|
#define NUM_AXES 2
|
||||||
#else
|
#else
|
||||||
#define LINEAR_AXES 1
|
#define NUM_AXES 1
|
||||||
#endif
|
#endif
|
||||||
#if LINEAR_AXES >= XY
|
#if NUM_AXES >= XY
|
||||||
#define HAS_Y_AXIS 1
|
#define HAS_Y_AXIS 1
|
||||||
#if LINEAR_AXES >= XYZ
|
#if NUM_AXES >= XYZ
|
||||||
#define HAS_Z_AXIS 1
|
#define HAS_Z_AXIS 1
|
||||||
#ifdef Z4_DRIVER_TYPE
|
#ifdef Z4_DRIVER_TYPE
|
||||||
#define NUM_Z_STEPPERS 4
|
#define NUM_Z_STEPPERS 4
|
||||||
|
@ -700,11 +700,11 @@
|
||||||
#else
|
#else
|
||||||
#define NUM_Z_STEPPERS 1
|
#define NUM_Z_STEPPERS 1
|
||||||
#endif
|
#endif
|
||||||
#if LINEAR_AXES >= 4
|
#if NUM_AXES >= 4
|
||||||
#define HAS_I_AXIS 1
|
#define HAS_I_AXIS 1
|
||||||
#if LINEAR_AXES >= 5
|
#if NUM_AXES >= 5
|
||||||
#define HAS_J_AXIS 1
|
#define HAS_J_AXIS 1
|
||||||
#if LINEAR_AXES >= 6
|
#if NUM_AXES >= 6
|
||||||
#define HAS_K_AXIS 1
|
#define HAS_K_AXIS 1
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -824,17 +824,17 @@
|
||||||
* Number of Primary Linear Axes (e.g., XYZ)
|
* Number of Primary Linear Axes (e.g., XYZ)
|
||||||
* X, XY, or XYZ axes. Excluding duplicate axes (X2, Y2. Z2. Z3, Z4)
|
* X, XY, or XYZ axes. Excluding duplicate axes (X2, Y2. Z2. Z3, Z4)
|
||||||
*/
|
*/
|
||||||
#if LINEAR_AXES >= 3
|
#if NUM_AXES >= 3
|
||||||
#define PRIMARY_LINEAR_AXES 3
|
#define PRIMARY_LINEAR_AXES 3
|
||||||
#else
|
#else
|
||||||
#define PRIMARY_LINEAR_AXES LINEAR_AXES
|
#define PRIMARY_LINEAR_AXES NUM_AXES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of Secondary Axes (e.g., IJK)
|
* Number of Secondary Axes (e.g., IJK)
|
||||||
* All linear/rotational axes between XYZ and E.
|
* All linear/rotational axes between XYZ and E.
|
||||||
*/
|
*/
|
||||||
#define SECONDARY_AXES SUB3(LINEAR_AXES)
|
#define SECONDARY_AXES SUB3(NUM_AXES)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of Logical Axes (e.g., XYZIJKE)
|
* Number of Logical Axes (e.g., XYZIJKE)
|
||||||
|
@ -842,9 +842,9 @@
|
||||||
* Delta maps stepper-specific values to ABC steppers.
|
* Delta maps stepper-specific values to ABC steppers.
|
||||||
*/
|
*/
|
||||||
#if HAS_EXTRUDERS
|
#if HAS_EXTRUDERS
|
||||||
#define LOGICAL_AXES INCREMENT(LINEAR_AXES)
|
#define LOGICAL_AXES INCREMENT(NUM_AXES)
|
||||||
#else
|
#else
|
||||||
#define LOGICAL_AXES LINEAR_AXES
|
#define LOGICAL_AXES NUM_AXES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -862,7 +862,7 @@
|
||||||
* distinguished.
|
* distinguished.
|
||||||
*/
|
*/
|
||||||
#if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
|
#if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
|
||||||
#define DISTINCT_AXES (LINEAR_AXES + E_STEPPERS)
|
#define DISTINCT_AXES (NUM_AXES + E_STEPPERS)
|
||||||
#define DISTINCT_E E_STEPPERS
|
#define DISTINCT_E E_STEPPERS
|
||||||
#define E_INDEX_N(E) (E)
|
#define E_INDEX_N(E) (E)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -905,19 +905,19 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Remove unused STEALTHCHOP flags
|
// Remove unused STEALTHCHOP flags
|
||||||
#if LINEAR_AXES < 6
|
#if NUM_AXES < 6
|
||||||
#undef STEALTHCHOP_K
|
#undef STEALTHCHOP_K
|
||||||
#undef CALIBRATION_MEASURE_KMIN
|
#undef CALIBRATION_MEASURE_KMIN
|
||||||
#undef CALIBRATION_MEASURE_KMAX
|
#undef CALIBRATION_MEASURE_KMAX
|
||||||
#if LINEAR_AXES < 5
|
#if NUM_AXES < 5
|
||||||
#undef STEALTHCHOP_J
|
#undef STEALTHCHOP_J
|
||||||
#undef CALIBRATION_MEASURE_JMIN
|
#undef CALIBRATION_MEASURE_JMIN
|
||||||
#undef CALIBRATION_MEASURE_JMAX
|
#undef CALIBRATION_MEASURE_JMAX
|
||||||
#if LINEAR_AXES < 4
|
#if NUM_AXES < 4
|
||||||
#undef STEALTHCHOP_I
|
#undef STEALTHCHOP_I
|
||||||
#undef CALIBRATION_MEASURE_IMIN
|
#undef CALIBRATION_MEASURE_IMIN
|
||||||
#undef CALIBRATION_MEASURE_IMAX
|
#undef CALIBRATION_MEASURE_IMAX
|
||||||
#if LINEAR_AXES < 3
|
#if NUM_AXES < 3
|
||||||
#undef Z_IDLE_HEIGHT
|
#undef Z_IDLE_HEIGHT
|
||||||
#undef STEALTHCHOP_Z
|
#undef STEALTHCHOP_Z
|
||||||
#undef Z_PROBE_SLED
|
#undef Z_PROBE_SLED
|
||||||
|
@ -927,7 +927,7 @@
|
||||||
#undef ENABLE_LEVELING_FADE_HEIGHT
|
#undef ENABLE_LEVELING_FADE_HEIGHT
|
||||||
#undef NUM_Z_STEPPERS
|
#undef NUM_Z_STEPPERS
|
||||||
#undef CNC_WORKSPACE_PLANES
|
#undef CNC_WORKSPACE_PLANES
|
||||||
#if LINEAR_AXES < 2
|
#if NUM_AXES < 2
|
||||||
#undef STEALTHCHOP_Y
|
#undef STEALTHCHOP_Y
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Strings for sanity check messages
|
// Strings for sanity check messages
|
||||||
#define _LINEAR_AXES_STR LINEAR_AXIS_GANG("X ", "Y ", "Z ", "I ", "J ", "K ")
|
#define _NUM_AXES_STR NUM_AXIS_GANG("X ", "Y ", "Z ", "I ", "J ", "K ")
|
||||||
#define _LOGICAL_AXES_STR LOGICAL_AXIS_GANG("E ", "X ", "Y ", "Z ", "I ", "J ", "K ")
|
#define _LOGICAL_AXES_STR LOGICAL_AXIS_GANG("E ", "X ", "Y ", "Z ", "I ", "J ", "K ")
|
||||||
|
|
||||||
// Make sure macros aren't borked
|
// Make sure macros aren't borked
|
||||||
|
@ -631,6 +631,8 @@
|
||||||
#error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS is now just Z_STEPPER_ALIGN_STEPPER_XY."
|
#error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS is now just Z_STEPPER_ALIGN_STEPPER_XY."
|
||||||
#elif defined(DWIN_CREALITY_LCD_ENHANCED)
|
#elif defined(DWIN_CREALITY_LCD_ENHANCED)
|
||||||
#error "DWIN_CREALITY_LCD_ENHANCED is now DWIN_LCD_PROUI."
|
#error "DWIN_CREALITY_LCD_ENHANCED is now DWIN_LCD_PROUI."
|
||||||
|
#elif defined(LINEAR_AXES)
|
||||||
|
#error "LINEAR_AXES is now NUM_AXES."
|
||||||
#elif defined(X_DUAL_STEPPER_DRIVERS)
|
#elif defined(X_DUAL_STEPPER_DRIVERS)
|
||||||
#error "X_DUAL_STEPPER_DRIVERS is no longer needed and should be removed."
|
#error "X_DUAL_STEPPER_DRIVERS is no longer needed and should be removed."
|
||||||
#elif defined(Y_DUAL_STEPPER_DRIVERS)
|
#elif defined(Y_DUAL_STEPPER_DRIVERS)
|
||||||
|
@ -1482,16 +1484,16 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Features that require a min/max/specific LINEAR_AXES
|
* Features that require a min/max/specific NUM_AXES
|
||||||
*/
|
*/
|
||||||
#if HAS_LEVELING && !HAS_Z_AXIS
|
#if HAS_LEVELING && !HAS_Z_AXIS
|
||||||
#error "Leveling in Marlin requires three or more axes, with Z as the vertical axis."
|
#error "Leveling in Marlin requires three or more axes, with Z as the vertical axis."
|
||||||
#elif ENABLED(CNC_WORKSPACE_PLANES) && !HAS_Z_AXIS
|
#elif ENABLED(CNC_WORKSPACE_PLANES) && !HAS_Z_AXIS
|
||||||
#error "CNC_WORKSPACE_PLANES currently requires LINEAR_AXES >= 3"
|
#error "CNC_WORKSPACE_PLANES currently requires NUM_AXES >= 3"
|
||||||
#elif ENABLED(DIRECT_STEPPING) && LINEAR_AXES > XYZ
|
#elif ENABLED(DIRECT_STEPPING) && NUM_AXES > XYZ
|
||||||
#error "DIRECT_STEPPING currently requires LINEAR_AXES 3"
|
#error "DIRECT_STEPPING currently requires NUM_AXES 3"
|
||||||
#elif ENABLED(LINEAR_ADVANCE) && HAS_I_AXIS
|
#elif ENABLED(LINEAR_ADVANCE) && HAS_I_AXIS
|
||||||
#error "LINEAR_ADVANCE currently requires LINEAR_AXES <= 3."
|
#error "LINEAR_ADVANCE currently requires NUM_AXES <= 3."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1499,33 +1501,33 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
*/
|
*/
|
||||||
#if HAS_I_AXIS
|
#if HAS_I_AXIS
|
||||||
#if !defined(I_MIN_POS) || !defined(I_MAX_POS)
|
#if !defined(I_MIN_POS) || !defined(I_MAX_POS)
|
||||||
#error "I_MIN_POS and I_MAX_POS are required with LINEAR_AXES >= 4."
|
#error "I_MIN_POS and I_MAX_POS are required with NUM_AXES >= 4."
|
||||||
#elif !defined(I_HOME_DIR)
|
#elif !defined(I_HOME_DIR)
|
||||||
#error "I_HOME_DIR is required with LINEAR_AXES >= 4."
|
#error "I_HOME_DIR is required with NUM_AXES >= 4."
|
||||||
#elif HAS_I_ENABLE && !defined(I_ENABLE_ON)
|
#elif HAS_I_ENABLE && !defined(I_ENABLE_ON)
|
||||||
#error "I_ENABLE_ON is required for your I driver with LINEAR_AXES >= 4."
|
#error "I_ENABLE_ON is required for your I driver with NUM_AXES >= 4."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if HAS_J_AXIS
|
#if HAS_J_AXIS
|
||||||
#if AXIS5_NAME == AXIS4_NAME
|
#if AXIS5_NAME == AXIS4_NAME
|
||||||
#error "AXIS5_NAME must be unique."
|
#error "AXIS5_NAME must be unique."
|
||||||
#elif !defined(J_MIN_POS) || !defined(J_MAX_POS)
|
#elif !defined(J_MIN_POS) || !defined(J_MAX_POS)
|
||||||
#error "J_MIN_POS and J_MAX_POS are required with LINEAR_AXES >= 5."
|
#error "J_MIN_POS and J_MAX_POS are required with NUM_AXES >= 5."
|
||||||
#elif !defined(J_HOME_DIR)
|
#elif !defined(J_HOME_DIR)
|
||||||
#error "J_HOME_DIR is required with LINEAR_AXES >= 5."
|
#error "J_HOME_DIR is required with NUM_AXES >= 5."
|
||||||
#elif HAS_J_ENABLE && !defined(J_ENABLE_ON)
|
#elif HAS_J_ENABLE && !defined(J_ENABLE_ON)
|
||||||
#error "J_ENABLE_ON is required for your J driver with LINEAR_AXES >= 5."
|
#error "J_ENABLE_ON is required for your J driver with NUM_AXES >= 5."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if HAS_K_AXIS
|
#if HAS_K_AXIS
|
||||||
#if AXIS6_NAME == AXIS5_NAME || AXIS6_NAME == AXIS4_NAME
|
#if AXIS6_NAME == AXIS5_NAME || AXIS6_NAME == AXIS4_NAME
|
||||||
#error "AXIS6_NAME must be unique."
|
#error "AXIS6_NAME must be unique."
|
||||||
#elif !defined(K_MIN_POS) || !defined(K_MAX_POS)
|
#elif !defined(K_MIN_POS) || !defined(K_MAX_POS)
|
||||||
#error "K_MIN_POS and K_MAX_POS are required with LINEAR_AXES >= 6."
|
#error "K_MIN_POS and K_MAX_POS are required with NUM_AXES >= 6."
|
||||||
#elif !defined(K_HOME_DIR)
|
#elif !defined(K_HOME_DIR)
|
||||||
#error "K_HOME_DIR is required with LINEAR_AXES >= 6."
|
#error "K_HOME_DIR is required with NUM_AXES >= 6."
|
||||||
#elif HAS_K_ENABLE && !defined(K_ENABLE_ON)
|
#elif HAS_K_ENABLE && !defined(K_ENABLE_ON)
|
||||||
#error "K_ENABLE_ON is required for your K driver with LINEAR_AXES >= 6."
|
#error "K_ENABLE_ON is required for your K driver with NUM_AXES >= 6."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1915,8 +1917,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
#error "Required setting HOMING_BUMP_DIVISOR is missing!"
|
#error "Required setting HOMING_BUMP_DIVISOR is missing!"
|
||||||
#else
|
#else
|
||||||
constexpr float hbm[] = HOMING_BUMP_MM, hbd[] = HOMING_BUMP_DIVISOR;
|
constexpr float hbm[] = HOMING_BUMP_MM, hbd[] = HOMING_BUMP_DIVISOR;
|
||||||
static_assert(COUNT(hbm) == LINEAR_AXES, "HOMING_BUMP_MM must have " _LINEAR_AXES_STR "elements (and no others).");
|
static_assert(COUNT(hbm) == NUM_AXES, "HOMING_BUMP_MM must have " _NUM_AXES_STR "elements (and no others).");
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
static_assert(hbm[X_AXIS] >= 0, "HOMING_BUMP_MM.X must be greater than or equal to 0."),
|
static_assert(hbm[X_AXIS] >= 0, "HOMING_BUMP_MM.X must be greater than or equal to 0."),
|
||||||
static_assert(hbm[Y_AXIS] >= 0, "HOMING_BUMP_MM.Y must be greater than or equal to 0."),
|
static_assert(hbm[Y_AXIS] >= 0, "HOMING_BUMP_MM.Y must be greater than or equal to 0."),
|
||||||
static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal to 0."),
|
static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal to 0."),
|
||||||
|
@ -1924,8 +1926,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
static_assert(hbm[J_AXIS] >= 0, "HOMING_BUMP_MM.J must be greater than or equal to 0."),
|
static_assert(hbm[J_AXIS] >= 0, "HOMING_BUMP_MM.J must be greater than or equal to 0."),
|
||||||
static_assert(hbm[K_AXIS] >= 0, "HOMING_BUMP_MM.K must be greater than or equal to 0.")
|
static_assert(hbm[K_AXIS] >= 0, "HOMING_BUMP_MM.K must be greater than or equal to 0.")
|
||||||
);
|
);
|
||||||
static_assert(COUNT(hbd) == LINEAR_AXES, "HOMING_BUMP_DIVISOR must have " _LINEAR_AXES_STR "elements (and no others).");
|
static_assert(COUNT(hbd) == NUM_AXES, "HOMING_BUMP_DIVISOR must have " _NUM_AXES_STR "elements (and no others).");
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
static_assert(hbd[X_AXIS] >= 1, "HOMING_BUMP_DIVISOR.X must be greater than or equal to 1."),
|
static_assert(hbd[X_AXIS] >= 1, "HOMING_BUMP_DIVISOR.X must be greater than or equal to 1."),
|
||||||
static_assert(hbd[Y_AXIS] >= 1, "HOMING_BUMP_DIVISOR.Y must be greater than or equal to 1."),
|
static_assert(hbd[Y_AXIS] >= 1, "HOMING_BUMP_DIVISOR.Y must be greater than or equal to 1."),
|
||||||
static_assert(hbd[Z_AXIS] >= 1, "HOMING_BUMP_DIVISOR.Z must be greater than or equal to 1."),
|
static_assert(hbd[Z_AXIS] >= 1, "HOMING_BUMP_DIVISOR.Z must be greater than or equal to 1."),
|
||||||
|
@ -1937,8 +1939,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
|
|
||||||
#ifdef HOMING_BACKOFF_POST_MM
|
#ifdef HOMING_BACKOFF_POST_MM
|
||||||
constexpr float hbp[] = HOMING_BACKOFF_POST_MM;
|
constexpr float hbp[] = HOMING_BACKOFF_POST_MM;
|
||||||
static_assert(COUNT(hbp) == LINEAR_AXES, "HOMING_BACKOFF_POST_MM must have " _LINEAR_AXES_STR "elements (and no others).");
|
static_assert(COUNT(hbp) == NUM_AXES, "HOMING_BACKOFF_POST_MM must have " _NUM_AXES_STR "elements (and no others).");
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
static_assert(hbp[X_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.X must be greater than or equal to 0."),
|
static_assert(hbp[X_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.X must be greater than or equal to 0."),
|
||||||
static_assert(hbp[Y_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.Y must be greater than or equal to 0."),
|
static_assert(hbp[Y_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.Y must be greater than or equal to 0."),
|
||||||
static_assert(hbp[Z_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.Z must be greater than or equal to 0."),
|
static_assert(hbp[Z_AXIS] >= 0, "HOMING_BACKOFF_POST_MM.Z must be greater than or equal to 0."),
|
||||||
|
@ -1950,8 +1952,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
|
|
||||||
#ifdef SENSORLESS_BACKOFF_MM
|
#ifdef SENSORLESS_BACKOFF_MM
|
||||||
constexpr float sbm[] = SENSORLESS_BACKOFF_MM;
|
constexpr float sbm[] = SENSORLESS_BACKOFF_MM;
|
||||||
static_assert(COUNT(sbm) == LINEAR_AXES, "SENSORLESS_BACKOFF_MM must have " _LINEAR_AXES_STR "elements (and no others).");
|
static_assert(COUNT(sbm) == NUM_AXES, "SENSORLESS_BACKOFF_MM must have " _NUM_AXES_STR "elements (and no others).");
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
static_assert(sbm[X_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.X must be greater than or equal to 0."),
|
static_assert(sbm[X_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.X must be greater than or equal to 0."),
|
||||||
static_assert(sbm[Y_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.Y must be greater than or equal to 0."),
|
static_assert(sbm[Y_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.Y must be greater than or equal to 0."),
|
||||||
static_assert(sbm[Z_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.Z must be greater than or equal to 0."),
|
static_assert(sbm[Z_AXIS] >= 0, "SENSORLESS_BACKOFF_MM.Z must be greater than or equal to 0."),
|
||||||
|
@ -2482,7 +2484,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
#define _PLUG_UNUSED_TEST(A,P) (DISABLED(USE_##P##MIN_PLUG, USE_##P##MAX_PLUG) \
|
#define _PLUG_UNUSED_TEST(A,P) (DISABLED(USE_##P##MIN_PLUG, USE_##P##MAX_PLUG) \
|
||||||
&& !(ENABLED(A##_DUAL_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) \
|
&& !(ENABLED(A##_DUAL_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) \
|
||||||
&& !(ENABLED(A##_MULTI_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) )
|
&& !(ENABLED(A##_MULTI_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) )
|
||||||
#define _AXIS_PLUG_UNUSED_TEST(A) (1 LINEAR_AXIS_GANG(&& _PLUG_UNUSED_TEST(A,X), && _PLUG_UNUSED_TEST(A,Y), && _PLUG_UNUSED_TEST(A,Z), && _PLUG_UNUSED_TEST(A,I), && _PLUG_UNUSED_TEST(A,J), && _PLUG_UNUSED_TEST(A,K) ) )
|
#define _AXIS_PLUG_UNUSED_TEST(A) (1 NUM_AXIS_GANG(&& _PLUG_UNUSED_TEST(A,X), && _PLUG_UNUSED_TEST(A,Y), && _PLUG_UNUSED_TEST(A,Z), && _PLUG_UNUSED_TEST(A,I), && _PLUG_UNUSED_TEST(A,J), && _PLUG_UNUSED_TEST(A,K) ) )
|
||||||
|
|
||||||
// A machine with endstops must have a minimum of 3
|
// A machine with endstops must have a minimum of 3
|
||||||
#if HAS_ENDSTOPS
|
#if HAS_ENDSTOPS
|
||||||
|
@ -3412,7 +3414,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
* L64XX requirement
|
* L64XX requirement
|
||||||
*/
|
*/
|
||||||
#if HAS_L64XX && HAS_I_AXIS
|
#if HAS_L64XX && HAS_I_AXIS
|
||||||
#error "L64XX requires LINEAR_AXES <= 3. Homing with L64XX is not yet implemented for LINEAR_AXES > 3."
|
#error "L64XX requires NUM_AXES <= 3. Homing with L64XX is not yet implemented for NUM_AXES > 3."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3436,7 +3438,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||||
#if HAS_MULTI_EXTRUDER
|
#if HAS_MULTI_EXTRUDER
|
||||||
#define _EXTRA_NOTE " (Did you forget to enable DISTINCT_E_FACTORS?)"
|
#define _EXTRA_NOTE " (Did you forget to enable DISTINCT_E_FACTORS?)"
|
||||||
#else
|
#else
|
||||||
#define _EXTRA_NOTE " (Should be " STRINGIFY(LINEAR_AXES) "+" STRINGIFY(E_STEPPERS) ")"
|
#define _EXTRA_NOTE " (Should be " STRINGIFY(NUM_AXES) "+" STRINGIFY(E_STEPPERS) ")"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
|
constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
|
||||||
|
@ -3455,7 +3457,7 @@ static_assert(COUNT(sanity_arr_3) <= DISTINCT_AXES, "DEFAULT_MAX_ACCELERATION ha
|
||||||
static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive.");
|
static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive.");
|
||||||
|
|
||||||
constexpr float sanity_arr_4[] = HOMING_FEEDRATE_MM_M;
|
constexpr float sanity_arr_4[] = HOMING_FEEDRATE_MM_M;
|
||||||
static_assert(COUNT(sanity_arr_4) == LINEAR_AXES, "HOMING_FEEDRATE_MM_M requires " _LINEAR_AXES_STR "elements (and no others).");
|
static_assert(COUNT(sanity_arr_4) == NUM_AXES, "HOMING_FEEDRATE_MM_M requires " _NUM_AXES_STR "elements (and no others).");
|
||||||
static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
|
static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
|
||||||
|
|
||||||
#ifdef MAX_ACCEL_EDIT_VALUES
|
#ifdef MAX_ACCEL_EDIT_VALUES
|
||||||
|
@ -3962,7 +3964,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
|
||||||
|
|
||||||
// Misc. Cleanup
|
// Misc. Cleanup
|
||||||
#undef _TEST_PWM
|
#undef _TEST_PWM
|
||||||
#undef _LINEAR_AXES_STR
|
#undef _NUM_AXES_STR
|
||||||
#undef _LOGICAL_AXES_STR
|
#undef _LOGICAL_AXES_STR
|
||||||
|
|
||||||
// JTAG support in the HAL
|
// JTAG support in the HAL
|
||||||
|
|
|
@ -286,7 +286,7 @@ void DGUSTxHandler::TempMax(DGUS_VP &vp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DGUSTxHandler::StepperStatus(DGUS_VP &vp) {
|
void DGUSTxHandler::StepperStatus(DGUS_VP &vp) {
|
||||||
const bool motor_on = stepper.axis_enabled.bits & (_BV(LINEAR_AXES) - 1);
|
const bool motor_on = stepper.axis_enabled.bits & (_BV(NUM_AXES) - 1);
|
||||||
dgus_display.Write((uint16_t)vp.addr, Swap16(uint16_t(motor_on ? DGUS_Data::Status::ENABLED : DGUS_Data::Status::DISABLED)));
|
dgus_display.Write((uint16_t)vp.addr, Swap16(uint16_t(motor_on ? DGUS_Data::Status::ENABLED : DGUS_Data::Status::DISABLED)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -429,7 +429,7 @@ void menu_backlash();
|
||||||
START_MENU();
|
START_MENU();
|
||||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||||
|
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
EDIT_ITEM_FAST_N(float5, a, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[a], 1, max_fr_edit_scaled[a]);
|
EDIT_ITEM_FAST_N(float5, a, MSG_VMAX_N, &planner.settings.max_feedrate_mm_s[a], 1, max_fr_edit_scaled[a]);
|
||||||
|
|
||||||
#if E_STEPPERS
|
#if E_STEPPERS
|
||||||
|
@ -484,7 +484,7 @@ void menu_backlash();
|
||||||
EDIT_ITEM_FAST(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel);
|
EDIT_ITEM_FAST(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel);
|
||||||
|
|
||||||
#define EDIT_AMAX(Q,L) EDIT_ITEM_FAST_N(long5_25, _AXIS(Q), MSG_AMAX_N, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], []{ planner.refresh_acceleration_rates(); })
|
#define EDIT_AMAX(Q,L) EDIT_ITEM_FAST_N(long5_25, _AXIS(Q), MSG_AMAX_N, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], []{ planner.refresh_acceleration_rates(); })
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
EDIT_AMAX(A, 100), EDIT_AMAX(B, 100), EDIT_AMAX(C, 10),
|
EDIT_AMAX(A, 100), EDIT_AMAX(B, 100), EDIT_AMAX(C, 10),
|
||||||
EDIT_AMAX(I, 10), EDIT_AMAX(J, 10), EDIT_AMAX(K, 10)
|
EDIT_AMAX(I, 10), EDIT_AMAX(J, 10), EDIT_AMAX(K, 10)
|
||||||
);
|
);
|
||||||
|
@ -574,7 +574,7 @@ void menu_advanced_steps_per_mm() {
|
||||||
START_MENU();
|
START_MENU();
|
||||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||||
|
|
||||||
LOOP_LINEAR_AXES(a)
|
LOOP_NUM_AXES(a)
|
||||||
EDIT_ITEM_FAST_N(float61, a, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[a], 5, 9999, []{ planner.refresh_positioning(); });
|
EDIT_ITEM_FAST_N(float61, a, MSG_N_STEPS, &planner.settings.axis_steps_per_mm[a], 5, 9999, []{ planner.refresh_positioning(); });
|
||||||
|
|
||||||
#if ENABLED(DISTINCT_E_FACTORS)
|
#if ENABLED(DISTINCT_E_FACTORS)
|
||||||
|
|
|
@ -144,7 +144,7 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
|
||||||
START_MENU();
|
START_MENU();
|
||||||
|
|
||||||
if (LCD_HEIGHT >= 4) {
|
if (LCD_HEIGHT >= 4) {
|
||||||
if (axis < LINEAR_AXES)
|
if (axis < NUM_AXES)
|
||||||
STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT);
|
STATIC_ITEM_N(axis, MSG_MOVE_N, SS_DEFAULT|SS_INVERT);
|
||||||
else {
|
else {
|
||||||
TERN_(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin = current_position.e);
|
TERN_(MANUAL_E_MOVES_RELATIVE, ui.manual_move.e_origin = current_position.e);
|
||||||
|
@ -218,7 +218,7 @@ void menu_move() {
|
||||||
}
|
}
|
||||||
#if HAS_Z_AXIS
|
#if HAS_Z_AXIS
|
||||||
#define _AXIS_MOVE(N) SUBMENU_N(N, MSG_MOVE_N, []{ _menu_move_distance(AxisEnum(N), []{ lcd_move_axis(AxisEnum(N)); }); });
|
#define _AXIS_MOVE(N) SUBMENU_N(N, MSG_MOVE_N, []{ _menu_move_distance(AxisEnum(N), []{ lcd_move_axis(AxisEnum(N)); }); });
|
||||||
REPEAT_S(2, LINEAR_AXES, _AXIS_MOVE);
|
REPEAT_S(2, NUM_AXES, _AXIS_MOVE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -37,7 +37,7 @@ L64XX_Marlin L64xxManager;
|
||||||
#include "../../module/planner.h"
|
#include "../../module/planner.h"
|
||||||
#include "../../HAL/shared/Delay.h"
|
#include "../../HAL/shared/Delay.h"
|
||||||
|
|
||||||
static const char LINEAR_AXIS_LIST(
|
static const char NUM_AXIS_LIST(
|
||||||
str_X[] PROGMEM = "X ", str_Y[] PROGMEM = "Y ", str_Z[] PROGMEM = "Z ",
|
str_X[] PROGMEM = "X ", str_Y[] PROGMEM = "Y ", str_Z[] PROGMEM = "Z ",
|
||||||
str_I[] PROGMEM = STR_I " ", str_J[] PROGMEM = STR_J " ", str_K[] PROGMEM = STR_K " "
|
str_I[] PROGMEM = STR_I " ", str_J[] PROGMEM = STR_J " ", str_K[] PROGMEM = STR_K " "
|
||||||
),
|
),
|
||||||
|
@ -53,7 +53,7 @@ static const char LINEAR_AXIS_LIST(
|
||||||
|
|
||||||
#define _EN_ITEM(N) , str_E##N
|
#define _EN_ITEM(N) , str_E##N
|
||||||
PGM_P const L64XX_Marlin::index_to_axis[] PROGMEM = {
|
PGM_P const L64XX_Marlin::index_to_axis[] PROGMEM = {
|
||||||
LINEAR_AXIS_LIST(str_X, str_Y, str_Z, str_I, str_J, str_K),
|
NUM_AXIS_LIST(str_X, str_Y, str_Z, str_I, str_J, str_K),
|
||||||
str_X2, str_Y2, str_Z2, str_Z3, str_Z4
|
str_X2, str_Y2, str_Z2, str_Z3, str_Z4
|
||||||
REPEAT(E_STEPPERS, _EN_ITEM)
|
REPEAT(E_STEPPERS, _EN_ITEM)
|
||||||
};
|
};
|
||||||
|
@ -68,7 +68,7 @@ uint8_t L64XX_Marlin::dir_commands[MAX_L64XX]; // array to hold direction comma
|
||||||
|
|
||||||
#define _EN_ITEM(N) , ENABLED(INVERT_E##N##_DIR)
|
#define _EN_ITEM(N) , ENABLED(INVERT_E##N##_DIR)
|
||||||
const uint8_t L64XX_Marlin::index_to_dir[MAX_L64XX] = {
|
const uint8_t L64XX_Marlin::index_to_dir[MAX_L64XX] = {
|
||||||
LINEAR_AXIS_LIST(ENABLED(INVERT_X_DIR), ENABLED(INVERT_Y_DIR), ENABLED(INVERT_Z_DIR), ENABLED(INVERT_I_DIR), ENABLED(INVERT_J_DIR), ENABLED(INVERT_K_DIR))
|
NUM_AXIS_LIST(ENABLED(INVERT_X_DIR), ENABLED(INVERT_Y_DIR), ENABLED(INVERT_Z_DIR), ENABLED(INVERT_I_DIR), ENABLED(INVERT_J_DIR), ENABLED(INVERT_K_DIR))
|
||||||
, ENABLED(INVERT_X_DIR) ^ BOTH(HAS_DUAL_X_STEPPERS, INVERT_X2_VS_X_DIR) // X2
|
, ENABLED(INVERT_X_DIR) ^ BOTH(HAS_DUAL_X_STEPPERS, INVERT_X2_VS_X_DIR) // X2
|
||||||
, ENABLED(INVERT_Y_DIR) ^ BOTH(HAS_DUAL_Y_STEPPERS, INVERT_Y2_VS_Y_DIR) // Y2
|
, ENABLED(INVERT_Y_DIR) ^ BOTH(HAS_DUAL_Y_STEPPERS, INVERT_Y2_VS_Y_DIR) // Y2
|
||||||
, ENABLED(INVERT_Z_DIR) ^ ENABLED(INVERT_Z2_VS_Z_DIR) // Z2
|
, ENABLED(INVERT_Z_DIR) ^ ENABLED(INVERT_Z2_VS_Z_DIR) // Z2
|
||||||
|
|
|
@ -427,7 +427,7 @@ void Endstops::event_handler() {
|
||||||
prev_hit_state = hit_state;
|
prev_hit_state = hit_state;
|
||||||
if (hit_state) {
|
if (hit_state) {
|
||||||
#if HAS_STATUS_MESSAGE
|
#if HAS_STATUS_MESSAGE
|
||||||
char LINEAR_AXIS_LIST(chrX = ' ', chrY = ' ', chrZ = ' ', chrI = ' ', chrJ = ' ', chrK = ' '),
|
char NUM_AXIS_LIST(chrX = ' ', chrY = ' ', chrZ = ' ', chrI = ' ', chrJ = ' ', chrK = ' '),
|
||||||
chrP = ' ';
|
chrP = ' ';
|
||||||
#define _SET_STOP_CHAR(A,C) (chr## A = C)
|
#define _SET_STOP_CHAR(A,C) (chr## A = C)
|
||||||
#else
|
#else
|
||||||
|
@ -450,7 +450,7 @@ void Endstops::event_handler() {
|
||||||
|
|
||||||
SERIAL_ECHO_START();
|
SERIAL_ECHO_START();
|
||||||
SERIAL_ECHOPGM(STR_ENDSTOPS_HIT);
|
SERIAL_ECHOPGM(STR_ENDSTOPS_HIT);
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
ENDSTOP_HIT_TEST_X(),
|
ENDSTOP_HIT_TEST_X(),
|
||||||
ENDSTOP_HIT_TEST_Y(),
|
ENDSTOP_HIT_TEST_Y(),
|
||||||
ENDSTOP_HIT_TEST_Z(),
|
ENDSTOP_HIT_TEST_Z(),
|
||||||
|
@ -467,9 +467,9 @@ void Endstops::event_handler() {
|
||||||
|
|
||||||
TERN_(HAS_STATUS_MESSAGE,
|
TERN_(HAS_STATUS_MESSAGE,
|
||||||
ui.status_printf(0,
|
ui.status_printf(0,
|
||||||
F(S_FMT GANG_N_1(LINEAR_AXES, " %c") " %c"),
|
F(S_FMT GANG_N_1(NUM_AXES, " %c") " %c"),
|
||||||
GET_TEXT(MSG_LCD_ENDSTOPS),
|
GET_TEXT(MSG_LCD_ENDSTOPS),
|
||||||
LINEAR_AXIS_LIST(chrX, chrY, chrZ, chrI, chrJ, chrK), chrP
|
NUM_AXIS_LIST(chrX, chrY, chrZ, chrI, chrJ, chrK), chrP
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ class Endstops {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
union {
|
union {
|
||||||
bool any;
|
bool any;
|
||||||
struct { bool LINEAR_AXIS_LIST(x:1, y:1, z:1, i:1, j:1, k:1); };
|
struct { bool NUM_AXIS_LIST(x:1, y:1, z:1, i:1, j:1, k:1); };
|
||||||
};
|
};
|
||||||
} tmc_spi_homing_t;
|
} tmc_spi_homing_t;
|
||||||
static tmc_spi_homing_t tmc_spi_homing;
|
static tmc_spi_homing_t tmc_spi_homing;
|
||||||
|
|
|
@ -189,7 +189,7 @@ inline void report_more_positions() {
|
||||||
inline void report_logical_position(const xyze_pos_t &rpos) {
|
inline void report_logical_position(const xyze_pos_t &rpos) {
|
||||||
const xyze_pos_t lpos = rpos.asLogical();
|
const xyze_pos_t lpos = rpos.asLogical();
|
||||||
SERIAL_ECHOPGM_P(
|
SERIAL_ECHOPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
X_LBL, lpos.x,
|
X_LBL, lpos.x,
|
||||||
SP_Y_LBL, lpos.y,
|
SP_Y_LBL, lpos.y,
|
||||||
SP_Z_LBL, lpos.z,
|
SP_Z_LBL, lpos.z,
|
||||||
|
@ -257,7 +257,7 @@ void report_current_position_projected() {
|
||||||
const xyz_pos_t lpos = cartes.asLogical();
|
const xyz_pos_t lpos = cartes.asLogical();
|
||||||
|
|
||||||
SERIAL_ECHOPGM_P(
|
SERIAL_ECHOPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
X_LBL, lpos.x,
|
X_LBL, lpos.x,
|
||||||
SP_Y_LBL, lpos.y,
|
SP_Y_LBL, lpos.y,
|
||||||
SP_Z_LBL, lpos.z,
|
SP_Z_LBL, lpos.z,
|
||||||
|
@ -421,7 +421,7 @@ void get_cartesian_from_steppers() {
|
||||||
);
|
);
|
||||||
cartes.z = planner.get_axis_position_mm(Z_AXIS);
|
cartes.z = planner.get_axis_position_mm(Z_AXIS);
|
||||||
#else
|
#else
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
cartes.x = planner.get_axis_position_mm(X_AXIS),
|
cartes.x = planner.get_axis_position_mm(X_AXIS),
|
||||||
cartes.y = planner.get_axis_position_mm(Y_AXIS),
|
cartes.y = planner.get_axis_position_mm(Y_AXIS),
|
||||||
cartes.z = planner.get_axis_position_mm(Z_AXIS),
|
cartes.z = planner.get_axis_position_mm(Z_AXIS),
|
||||||
|
@ -534,9 +534,9 @@ void _internal_move_to_destination(const_feedRate_t fr_mm_s/*=0.0f*/
|
||||||
* - Delta may lower Z first to get into the free motion zone.
|
* - Delta may lower Z first to get into the free motion zone.
|
||||||
* - Before returning, wait for the planner buffer to empty.
|
* - Before returning, wait for the planner buffer to empty.
|
||||||
*/
|
*/
|
||||||
void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to(NUM_AXIS_ARGS(const float), const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
DEBUG_SECTION(log_move, "do_blocking_move_to", DEBUGGING(LEVELING));
|
DEBUG_SECTION(log_move, "do_blocking_move_to", DEBUGGING(LEVELING));
|
||||||
if (DEBUGGING(LEVELING)) DEBUG_XYZ("> ", LINEAR_AXIS_ARGS());
|
if (DEBUGGING(LEVELING)) DEBUG_XYZ("> ", NUM_AXIS_ARGS());
|
||||||
|
|
||||||
const feedRate_t xy_feedrate = fr_mm_s ?: feedRate_t(XY_PROBE_FEEDRATE_MM_S);
|
const feedRate_t xy_feedrate = fr_mm_s ?: feedRate_t(XY_PROBE_FEEDRATE_MM_S);
|
||||||
|
|
||||||
|
@ -626,17 +626,17 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_blocking_move_to(const xy_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to(const xy_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(LINEAR_AXIS_LIST(raw.x, raw.y, current_position.z, current_position.i, current_position.j, current_position.k), fr_mm_s);
|
do_blocking_move_to(NUM_AXIS_LIST(raw.x, raw.y, current_position.z, current_position.i, current_position.j, current_position.k), fr_mm_s);
|
||||||
}
|
}
|
||||||
void do_blocking_move_to(const xyz_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to(const xyz_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(LINEAR_AXIS_ELEM(raw), fr_mm_s);
|
do_blocking_move_to(NUM_AXIS_ELEM(raw), fr_mm_s);
|
||||||
}
|
}
|
||||||
void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(LINEAR_AXIS_ELEM(raw), fr_mm_s);
|
do_blocking_move_to(NUM_AXIS_ELEM(raw), fr_mm_s);
|
||||||
}
|
}
|
||||||
void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(rx, current_position.y, current_position.z, current_position.i, current_position.j, current_position.k),
|
NUM_AXIS_LIST(rx, current_position.y, current_position.z, current_position.i, current_position.j, current_position.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -644,7 +644,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
#if HAS_Y_AXIS
|
#if HAS_Y_AXIS
|
||||||
void do_blocking_move_to_y(const_float_t ry, const_feedRate_t fr_mm_s/*=0.0*/) {
|
void do_blocking_move_to_y(const_float_t ry, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(current_position.x, ry, current_position.z, current_position.i, current_position.j, current_position.k),
|
NUM_AXIS_LIST(current_position.x, ry, current_position.z, current_position.i, current_position.j, current_position.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -662,7 +662,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
}
|
}
|
||||||
void do_blocking_move_to_xyz_i(const xyze_pos_t &raw, const_float_t i, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to_xyz_i(const xyze_pos_t &raw, const_float_t i, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(raw.x, raw.y, raw.z, i, raw.j, raw.k),
|
NUM_AXIS_LIST(raw.x, raw.y, raw.z, i, raw.j, raw.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -674,7 +674,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
}
|
}
|
||||||
void do_blocking_move_to_xyzi_j(const xyze_pos_t &raw, const_float_t j, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to_xyzi_j(const xyze_pos_t &raw, const_float_t j, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(raw.x, raw.y, raw.z, raw.i, j, raw.k),
|
NUM_AXIS_LIST(raw.x, raw.y, raw.z, raw.i, j, raw.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -686,7 +686,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
}
|
}
|
||||||
void do_blocking_move_to_xyzij_k(const xyze_pos_t &raw, const_float_t k, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to_xyzij_k(const xyze_pos_t &raw, const_float_t k, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(raw.x, raw.y, raw.z, raw.i, raw.j, k),
|
NUM_AXIS_LIST(raw.x, raw.y, raw.z, raw.i, raw.j, k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -695,7 +695,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
#if HAS_Y_AXIS
|
#if HAS_Y_AXIS
|
||||||
void do_blocking_move_to_xy(const_float_t rx, const_float_t ry, const_feedRate_t fr_mm_s/*=0.0*/) {
|
void do_blocking_move_to_xy(const_float_t rx, const_float_t ry, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(rx, ry, current_position.z, current_position.i, current_position.j, current_position.k),
|
NUM_AXIS_LIST(rx, ry, current_position.z, current_position.i, current_position.j, current_position.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -707,7 +707,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) {
|
||||||
#if HAS_Z_AXIS
|
#if HAS_Z_AXIS
|
||||||
void do_blocking_move_to_xy_z(const xy_pos_t &raw, const_float_t z, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
void do_blocking_move_to_xy_z(const xy_pos_t &raw, const_float_t z, const_feedRate_t fr_mm_s/*=0.0f*/) {
|
||||||
do_blocking_move_to(
|
do_blocking_move_to(
|
||||||
LINEAR_AXIS_LIST(raw.x, raw.y, z, current_position.i, current_position.j, current_position.k),
|
NUM_AXIS_LIST(raw.x, raw.y, z, current_position.i, current_position.j, current_position.k),
|
||||||
fr_mm_s
|
fr_mm_s
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1362,7 +1362,7 @@ void prepare_line_to_destination() {
|
||||||
CBI(b, a);
|
CBI(b, a);
|
||||||
};
|
};
|
||||||
// Clear test bits that are trusted
|
// Clear test bits that are trusted
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
set_should(axis_bits, X_AXIS), set_should(axis_bits, Y_AXIS), set_should(axis_bits, Z_AXIS),
|
set_should(axis_bits, X_AXIS), set_should(axis_bits, Y_AXIS), set_should(axis_bits, Z_AXIS),
|
||||||
set_should(axis_bits, I_AXIS), set_should(axis_bits, J_AXIS), set_should(axis_bits, K_AXIS)
|
set_should(axis_bits, I_AXIS), set_should(axis_bits, J_AXIS), set_should(axis_bits, K_AXIS)
|
||||||
);
|
);
|
||||||
|
|
|
@ -77,7 +77,7 @@ constexpr xyz_feedrate_t homing_feedrate_mm_m = HOMING_FEEDRATE_MM_M;
|
||||||
FORCE_INLINE feedRate_t homing_feedrate(const AxisEnum a) {
|
FORCE_INLINE feedRate_t homing_feedrate(const AxisEnum a) {
|
||||||
float v = TERN0(HAS_Z_AXIS, homing_feedrate_mm_m.z);
|
float v = TERN0(HAS_Z_AXIS, homing_feedrate_mm_m.z);
|
||||||
#if DISABLED(DELTA)
|
#if DISABLED(DELTA)
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (a == X_AXIS) v = homing_feedrate_mm_m.x,
|
if (a == X_AXIS) v = homing_feedrate_mm_m.x,
|
||||||
else if (a == Y_AXIS) v = homing_feedrate_mm_m.y,
|
else if (a == Y_AXIS) v = homing_feedrate_mm_m.y,
|
||||||
else if (a == Z_AXIS) v = homing_feedrate_mm_m.z,
|
else if (a == Z_AXIS) v = homing_feedrate_mm_m.z,
|
||||||
|
@ -124,7 +124,7 @@ inline int8_t pgm_read_any(const int8_t *p) { return TERN(__IMXRT1062__, *p, pgm
|
||||||
|
|
||||||
#define XYZ_DEFS(T, NAME, OPT) \
|
#define XYZ_DEFS(T, NAME, OPT) \
|
||||||
inline T NAME(const AxisEnum axis) { \
|
inline T NAME(const AxisEnum axis) { \
|
||||||
static const XYZval<T> NAME##_P DEFS_PROGMEM = LINEAR_AXIS_ARRAY(X_##OPT, Y_##OPT, Z_##OPT, I_##OPT, J_##OPT, K_##OPT); \
|
static const XYZval<T> NAME##_P DEFS_PROGMEM = NUM_AXIS_ARRAY(X_##OPT, Y_##OPT, Z_##OPT, I_##OPT, J_##OPT, K_##OPT); \
|
||||||
return pgm_read_any(&NAME##_P[axis]); \
|
return pgm_read_any(&NAME##_P[axis]); \
|
||||||
}
|
}
|
||||||
XYZ_DEFS(float, base_min_pos, MIN_POS);
|
XYZ_DEFS(float, base_min_pos, MIN_POS);
|
||||||
|
@ -323,7 +323,7 @@ inline void prepare_internal_move_to_destination(const_feedRate_t fr_mm_s=0.0f)
|
||||||
/**
|
/**
|
||||||
* Blocking movement and shorthand functions
|
* Blocking movement and shorthand functions
|
||||||
*/
|
*/
|
||||||
void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s=0.0f);
|
void do_blocking_move_to(NUM_AXIS_ARGS(const float), const_feedRate_t fr_mm_s=0.0f);
|
||||||
void do_blocking_move_to(const xy_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
void do_blocking_move_to(const xy_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
||||||
void do_blocking_move_to(const xyz_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
void do_blocking_move_to(const xyz_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
||||||
void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
|
||||||
|
@ -374,11 +374,11 @@ void restore_feedrate_and_scaling();
|
||||||
/**
|
/**
|
||||||
* Homing and Trusted Axes
|
* Homing and Trusted Axes
|
||||||
*/
|
*/
|
||||||
typedef IF<(LINEAR_AXES > 8), uint16_t, uint8_t>::type main_axes_bits_t;
|
typedef IF<(NUM_AXES > 8), uint16_t, uint8_t>::type main_axes_bits_t;
|
||||||
constexpr main_axes_bits_t main_axes_mask = _BV(LINEAR_AXES) - 1;
|
constexpr main_axes_bits_t main_axes_mask = _BV(NUM_AXES) - 1;
|
||||||
|
|
||||||
typedef IF<(LINEAR_AXES + EXTRUDERS > 8), uint16_t, uint8_t>::type e_axis_bits_t;
|
typedef IF<(NUM_AXES + EXTRUDERS > 8), uint16_t, uint8_t>::type e_axis_bits_t;
|
||||||
constexpr e_axis_bits_t e_axis_mask = (_BV(EXTRUDERS) - 1) << LINEAR_AXES;
|
constexpr e_axis_bits_t e_axis_mask = (_BV(EXTRUDERS) - 1) << NUM_AXES;
|
||||||
|
|
||||||
void set_axis_is_at_home(const AxisEnum axis);
|
void set_axis_is_at_home(const AxisEnum axis);
|
||||||
|
|
||||||
|
|
|
@ -1482,7 +1482,7 @@ void Planner::check_axes_activity() {
|
||||||
float high = 0.0f;
|
float high = 0.0f;
|
||||||
for (uint8_t b = block_buffer_tail; b != block_buffer_head; b = next_block_index(b)) {
|
for (uint8_t b = block_buffer_tail; b != block_buffer_head; b = next_block_index(b)) {
|
||||||
const block_t * const block = &block_buffer[b];
|
const block_t * const block = &block_buffer[b];
|
||||||
if (LINEAR_AXIS_GANG(block->steps.x, || block->steps.y, || block->steps.z, || block->steps.i, || block->steps.j, || block->steps.k)) {
|
if (NUM_AXIS_GANG(block->steps.x, || block->steps.y, || block->steps.z, || block->steps.i, || block->steps.j, || block->steps.k)) {
|
||||||
const float se = float(block->steps.e) / block->step_event_count * block->nominal_speed; // mm/sec
|
const float se = float(block->steps.e) / block->step_event_count * block->nominal_speed; // mm/sec
|
||||||
NOLESS(high, se);
|
NOLESS(high, se);
|
||||||
}
|
}
|
||||||
|
@ -2030,7 +2030,7 @@ bool Planner::_populate_block(
|
||||||
|
|
||||||
// Number of steps for each axis
|
// Number of steps for each axis
|
||||||
// See https://www.corexy.com/theory.html
|
// See https://www.corexy.com/theory.html
|
||||||
block->steps.set(LINEAR_AXIS_LIST(
|
block->steps.set(NUM_AXIS_LIST(
|
||||||
#if CORE_IS_XY
|
#if CORE_IS_XY
|
||||||
ABS(da + db), ABS(da - db), ABS(dc)
|
ABS(da + db), ABS(da - db), ABS(dc)
|
||||||
#elif CORE_IS_XZ
|
#elif CORE_IS_XZ
|
||||||
|
@ -2109,7 +2109,7 @@ bool Planner::_populate_block(
|
||||||
|
|
||||||
TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator += steps_dist_mm.e);
|
TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator += steps_dist_mm.e);
|
||||||
|
|
||||||
if (true LINEAR_AXIS_GANG(
|
if (true NUM_AXIS_GANG(
|
||||||
&& block->steps.a < MIN_STEPS_PER_SEGMENT,
|
&& block->steps.a < MIN_STEPS_PER_SEGMENT,
|
||||||
&& block->steps.b < MIN_STEPS_PER_SEGMENT,
|
&& block->steps.b < MIN_STEPS_PER_SEGMENT,
|
||||||
&& block->steps.c < MIN_STEPS_PER_SEGMENT,
|
&& block->steps.c < MIN_STEPS_PER_SEGMENT,
|
||||||
|
@ -2199,7 +2199,7 @@ bool Planner::_populate_block(
|
||||||
E_TERN_(block->extruder = extruder);
|
E_TERN_(block->extruder = extruder);
|
||||||
|
|
||||||
#if ENABLED(AUTO_POWER_CONTROL)
|
#if ENABLED(AUTO_POWER_CONTROL)
|
||||||
if (LINEAR_AXIS_GANG(
|
if (NUM_AXIS_GANG(
|
||||||
block->steps.x, || block->steps.y, || block->steps.z,
|
block->steps.x, || block->steps.y, || block->steps.z,
|
||||||
|| block->steps.i, || block->steps.j, || block->steps.k
|
|| block->steps.i, || block->steps.j, || block->steps.k
|
||||||
)) powerManager.power_on();
|
)) powerManager.power_on();
|
||||||
|
@ -2227,7 +2227,7 @@ bool Planner::_populate_block(
|
||||||
}
|
}
|
||||||
if (block->steps.x) stepper.enable_axis(X_AXIS);
|
if (block->steps.x) stepper.enable_axis(X_AXIS);
|
||||||
#else
|
#else
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (block->steps.x) stepper.enable_axis(X_AXIS),
|
if (block->steps.x) stepper.enable_axis(X_AXIS),
|
||||||
if (block->steps.y) stepper.enable_axis(Y_AXIS),
|
if (block->steps.y) stepper.enable_axis(Y_AXIS),
|
||||||
if (TERN(Z_LATE_ENABLE, 0, block->steps.z)) stepper.enable_axis(Z_AXIS),
|
if (TERN(Z_LATE_ENABLE, 0, block->steps.z)) stepper.enable_axis(Z_AXIS),
|
||||||
|
@ -2342,7 +2342,7 @@ bool Planner::_populate_block(
|
||||||
float speed_factor = 1.0f; // factor <1 decreases speed
|
float speed_factor = 1.0f; // factor <1 decreases speed
|
||||||
|
|
||||||
// Linear axes first with less logic
|
// Linear axes first with less logic
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
current_speed[i] = steps_dist_mm[i] * inverse_secs;
|
current_speed[i] = steps_dist_mm[i] * inverse_secs;
|
||||||
const feedRate_t cs = ABS(current_speed[i]),
|
const feedRate_t cs = ABS(current_speed[i]),
|
||||||
max_fr = settings.max_feedrate_mm_s[i];
|
max_fr = settings.max_feedrate_mm_s[i];
|
||||||
|
@ -2430,7 +2430,7 @@ bool Planner::_populate_block(
|
||||||
// Compute and limit the acceleration rate for the trapezoid generator.
|
// Compute and limit the acceleration rate for the trapezoid generator.
|
||||||
const float steps_per_mm = block->step_event_count * inverse_millimeters;
|
const float steps_per_mm = block->step_event_count * inverse_millimeters;
|
||||||
uint32_t accel;
|
uint32_t accel;
|
||||||
if (LINEAR_AXIS_GANG(
|
if (NUM_AXIS_GANG(
|
||||||
!block->steps.a, && !block->steps.b, && !block->steps.c,
|
!block->steps.a, && !block->steps.b, && !block->steps.c,
|
||||||
&& !block->steps.i, && !block->steps.j, && !block->steps.k)
|
&& !block->steps.i, && !block->steps.j, && !block->steps.k)
|
||||||
) { // Is this a retract / recover move?
|
) { // Is this a retract / recover move?
|
||||||
|
@ -2742,7 +2742,7 @@ bool Planner::_populate_block(
|
||||||
const float extra_xyjerk = TERN0(HAS_EXTRUDERS, de <= 0) ? TRAVEL_EXTRA_XYJERK : 0;
|
const float extra_xyjerk = TERN0(HAS_EXTRUDERS, de <= 0) ? TRAVEL_EXTRA_XYJERK : 0;
|
||||||
|
|
||||||
uint8_t limited = 0;
|
uint8_t limited = 0;
|
||||||
TERN(HAS_LINEAR_E_JERK, LOOP_LINEAR_AXES, LOOP_LOGICAL_AXES)(i) {
|
TERN(HAS_LINEAR_E_JERK, LOOP_NUM_AXES, LOOP_LOGICAL_AXES)(i) {
|
||||||
const float jerk = ABS(current_speed[i]), // cs : Starting from zero, change in speed for this axis
|
const float jerk = ABS(current_speed[i]), // cs : Starting from zero, change in speed for this axis
|
||||||
maxj = (max_jerk[i] + (i == X_AXIS || i == Y_AXIS ? extra_xyjerk : 0.0f)); // mj : The max jerk setting for this axis
|
maxj = (max_jerk[i] + (i == X_AXIS || i == Y_AXIS ? extra_xyjerk : 0.0f)); // mj : The max jerk setting for this axis
|
||||||
if (jerk > maxj) { // cs > mj : New current speed too fast?
|
if (jerk > maxj) { // cs > mj : New current speed too fast?
|
||||||
|
@ -2778,7 +2778,7 @@ bool Planner::_populate_block(
|
||||||
vmax_junction = previous_nominal_speed;
|
vmax_junction = previous_nominal_speed;
|
||||||
|
|
||||||
// Now limit the jerk in all axes.
|
// Now limit the jerk in all axes.
|
||||||
TERN(HAS_LINEAR_E_JERK, LOOP_LINEAR_AXES, LOOP_LOGICAL_AXES)(axis) {
|
TERN(HAS_LINEAR_E_JERK, LOOP_NUM_AXES, LOOP_LOGICAL_AXES)(axis) {
|
||||||
// Limit an axis. We have to differentiate: coasting, reversal of an axis, full stop.
|
// Limit an axis. We have to differentiate: coasting, reversal of an axis, full stop.
|
||||||
float v_exit = previous_speed[axis] * smaller_speed_factor,
|
float v_exit = previous_speed[axis] * smaller_speed_factor,
|
||||||
v_entry = current_speed[axis];
|
v_entry = current_speed[axis];
|
||||||
|
@ -2876,7 +2876,7 @@ void Planner::buffer_sync_block(const BlockFlagBit sync_flag/*=BLOCK_BIT_SYNC_PO
|
||||||
|
|
||||||
block->position = position;
|
block->position = position;
|
||||||
#if ENABLED(BACKLASH_COMPENSATION)
|
#if ENABLED(BACKLASH_COMPENSATION)
|
||||||
LOOP_LINEAR_AXES(axis) block->position[axis] += backlash.get_applied_steps((AxisEnum)axis);
|
LOOP_NUM_AXES(axis) block->position[axis] += backlash.get_applied_steps((AxisEnum)axis);
|
||||||
#endif
|
#endif
|
||||||
#if BOTH(HAS_FAN, LASER_SYNCHRONOUS_M106_M107)
|
#if BOTH(HAS_FAN, LASER_SYNCHRONOUS_M106_M107)
|
||||||
FANS_LOOP(i) block->fan_speed[i] = thermalManager.fan_speed[i];
|
FANS_LOOP(i) block->fan_speed[i] = thermalManager.fan_speed[i];
|
||||||
|
@ -3042,7 +3042,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s
|
||||||
cart.i - position_cart.i, cart.j - position_cart.j, cart.k - position_cart.k
|
cart.i - position_cart.i, cart.j - position_cart.j, cart.k - position_cart.k
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
const xyz_pos_t cart_dist_mm = LINEAR_AXIS_ARRAY(
|
const xyz_pos_t cart_dist_mm = NUM_AXIS_ARRAY(
|
||||||
cart.x - position_cart.x, cart.y - position_cart.y, cart.z - position_cart.z,
|
cart.x - position_cart.x, cart.y - position_cart.y, cart.z - position_cart.z,
|
||||||
cart.i - position_cart.i, cart.j - position_cart.j, cart.k - position_cart.k
|
cart.i - position_cart.i, cart.j - position_cart.j, cart.k - position_cart.k
|
||||||
);
|
);
|
||||||
|
@ -3163,7 +3163,7 @@ void Planner::set_machine_position_mm(const abce_pos_t &abce) {
|
||||||
else {
|
else {
|
||||||
#if ENABLED(BACKLASH_COMPENSATION)
|
#if ENABLED(BACKLASH_COMPENSATION)
|
||||||
abce_long_t stepper_pos = position;
|
abce_long_t stepper_pos = position;
|
||||||
LOOP_LINEAR_AXES(axis) stepper_pos[axis] += backlash.get_applied_steps((AxisEnum)axis);
|
LOOP_NUM_AXES(axis) stepper_pos[axis] += backlash.get_applied_steps((AxisEnum)axis);
|
||||||
stepper.set_position(stepper_pos);
|
stepper.set_position(stepper_pos);
|
||||||
#else
|
#else
|
||||||
stepper.set_position(position);
|
stepper.set_position(position);
|
||||||
|
|
|
@ -809,7 +809,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// On delta keep Z below clip height or do_blocking_move_to will abort
|
// On delta keep Z below clip height or do_blocking_move_to will abort
|
||||||
xyz_pos_t npos = LINEAR_AXIS_ARRAY(
|
xyz_pos_t npos = NUM_AXIS_ARRAY(
|
||||||
rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z),
|
rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z),
|
||||||
current_position.i, current_position.j, current_position.k
|
current_position.i, current_position.j, current_position.k
|
||||||
);
|
);
|
||||||
|
|
|
@ -146,7 +146,7 @@ public:
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static constexpr xyz_pos_t offset = xyz_pos_t(LINEAR_AXIS_ARRAY(0, 0, 0, 0, 0, 0)); // See #16767
|
static constexpr xyz_pos_t offset = xyz_pos_t(NUM_AXIS_ARRAY(0, 0, 0, 0, 0, 0)); // See #16767
|
||||||
|
|
||||||
static bool set_deployed(const bool) { return false; }
|
static bool set_deployed(const bool) { return false; }
|
||||||
|
|
||||||
|
|
|
@ -254,7 +254,7 @@ float segments_per_second = TERN(AXEL_TPARA, TPARA_SEGMENTS_PER_SECOND, SCARA_SE
|
||||||
// Do this here all at once for Delta, because
|
// Do this here all at once for Delta, because
|
||||||
// XYZ isn't ABC. Applying this per-tower would
|
// XYZ isn't ABC. Applying this per-tower would
|
||||||
// give the impression that they are the same.
|
// give the impression that they are the same.
|
||||||
LOOP_LINEAR_AXES(i) set_axis_is_at_home((AxisEnum)i);
|
LOOP_NUM_AXES(i) set_axis_is_at_home((AxisEnum)i);
|
||||||
|
|
||||||
sync_plan_position();
|
sync_plan_position();
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@
|
||||||
typedef struct { uint16_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4 REPEAT(E_STEPPERS, _EN_ITEM); } per_stepper_uint16_t;
|
typedef struct { uint16_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4 REPEAT(E_STEPPERS, _EN_ITEM); } per_stepper_uint16_t;
|
||||||
typedef struct { uint32_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4 REPEAT(E_STEPPERS, _EN_ITEM); } per_stepper_uint32_t;
|
typedef struct { uint32_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4 REPEAT(E_STEPPERS, _EN_ITEM); } per_stepper_uint32_t;
|
||||||
typedef struct { int16_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4; } mot_stepper_int16_t;
|
typedef struct { int16_t MAIN_AXIS_NAMES, X2, Y2, Z2, Z3, Z4; } mot_stepper_int16_t;
|
||||||
typedef struct { bool LINEAR_AXIS_LIST(X:1, Y:1, Z:1, I:1, J:1, K:1), X2:1, Y2:1, Z2:1, Z3:1, Z4:1 REPEAT(E_STEPPERS, _EN1_ITEM); } per_stepper_bool_t;
|
typedef struct { bool NUM_AXIS_LIST(X:1, Y:1, Z:1, I:1, J:1, K:1), X2:1, Y2:1, Z2:1, Z3:1, Z4:1 REPEAT(E_STEPPERS, _EN1_ITEM); } per_stepper_bool_t;
|
||||||
|
|
||||||
#undef _EN_ITEM
|
#undef _EN_ITEM
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ typedef struct SettingsDataStruct {
|
||||||
//
|
//
|
||||||
// DISTINCT_E_FACTORS
|
// DISTINCT_E_FACTORS
|
||||||
//
|
//
|
||||||
uint8_t e_factors; // DISTINCT_AXES - LINEAR_AXES
|
uint8_t e_factors; // DISTINCT_AXES - NUM_AXES
|
||||||
|
|
||||||
//
|
//
|
||||||
// Planner settings
|
// Planner settings
|
||||||
|
@ -609,7 +609,7 @@ void MarlinSettings::postprocess() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Software endstops depend on home_offset
|
// Software endstops depend on home_offset
|
||||||
LOOP_LINEAR_AXES(i) {
|
LOOP_NUM_AXES(i) {
|
||||||
update_workspace_offset((AxisEnum)i);
|
update_workspace_offset((AxisEnum)i);
|
||||||
update_software_endstops((AxisEnum)i);
|
update_software_endstops((AxisEnum)i);
|
||||||
}
|
}
|
||||||
|
@ -759,7 +759,7 @@ void MarlinSettings::postprocess() {
|
||||||
|
|
||||||
working_crc = 0; // clear before first "real data"
|
working_crc = 0; // clear before first "real data"
|
||||||
|
|
||||||
const uint8_t e_factors = DISTINCT_AXES - (LINEAR_AXES);
|
const uint8_t e_factors = DISTINCT_AXES - (NUM_AXES);
|
||||||
_FIELD_TEST(e_factors);
|
_FIELD_TEST(e_factors);
|
||||||
EEPROM_WRITE(e_factors);
|
EEPROM_WRITE(e_factors);
|
||||||
|
|
||||||
|
@ -1330,7 +1330,7 @@ void MarlinSettings::postprocess() {
|
||||||
#else
|
#else
|
||||||
#define _EN_ITEM(N) , .E##N = 30
|
#define _EN_ITEM(N) , .E##N = 30
|
||||||
const per_stepper_uint32_t tmc_hybrid_threshold = {
|
const per_stepper_uint32_t tmc_hybrid_threshold = {
|
||||||
LINEAR_AXIS_LIST(.X = 100, .Y = 100, .Z = 3, .I = 3, .J = 3, .K = 3),
|
NUM_AXIS_LIST(.X = 100, .Y = 100, .Z = 3, .I = 3, .J = 3, .K = 3),
|
||||||
.X2 = 100, .Y2 = 100, .Z2 = 3, .Z3 = 3, .Z4 = 3
|
.X2 = 100, .Y2 = 100, .Z2 = 3, .Z3 = 3, .Z4 = 3
|
||||||
REPEAT(E_STEPPERS, _EN_ITEM)
|
REPEAT(E_STEPPERS, _EN_ITEM)
|
||||||
};
|
};
|
||||||
|
@ -1345,7 +1345,7 @@ void MarlinSettings::postprocess() {
|
||||||
{
|
{
|
||||||
mot_stepper_int16_t tmc_sgt{0};
|
mot_stepper_int16_t tmc_sgt{0};
|
||||||
#if USE_SENSORLESS
|
#if USE_SENSORLESS
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
TERN_(X_SENSORLESS, tmc_sgt.X = stepperX.homing_threshold()),
|
TERN_(X_SENSORLESS, tmc_sgt.X = stepperX.homing_threshold()),
|
||||||
TERN_(Y_SENSORLESS, tmc_sgt.Y = stepperY.homing_threshold()),
|
TERN_(Y_SENSORLESS, tmc_sgt.Y = stepperY.homing_threshold()),
|
||||||
TERN_(Z_SENSORLESS, tmc_sgt.Z = stepperZ.homing_threshold()),
|
TERN_(Z_SENSORLESS, tmc_sgt.Z = stepperZ.homing_threshold()),
|
||||||
|
@ -1464,7 +1464,7 @@ void MarlinSettings::postprocess() {
|
||||||
{
|
{
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
xyz_float_t backlash_distance_mm;
|
xyz_float_t backlash_distance_mm;
|
||||||
LOOP_LINEAR_AXES(axis) backlash_distance_mm[axis] = backlash.get_distance_mm((AxisEnum)axis);
|
LOOP_NUM_AXES(axis) backlash_distance_mm[axis] = backlash.get_distance_mm((AxisEnum)axis);
|
||||||
const uint8_t backlash_correction = backlash.get_correction_uint8();
|
const uint8_t backlash_correction = backlash.get_correction_uint8();
|
||||||
#else
|
#else
|
||||||
const xyz_float_t backlash_distance_mm{0};
|
const xyz_float_t backlash_distance_mm{0};
|
||||||
|
@ -1684,16 +1684,16 @@ void MarlinSettings::postprocess() {
|
||||||
{
|
{
|
||||||
// Get only the number of E stepper parameters previously stored
|
// Get only the number of E stepper parameters previously stored
|
||||||
// Any steppers added later are set to their defaults
|
// Any steppers added later are set to their defaults
|
||||||
uint32_t tmp1[LINEAR_AXES + e_factors];
|
uint32_t tmp1[NUM_AXES + e_factors];
|
||||||
float tmp2[LINEAR_AXES + e_factors];
|
float tmp2[NUM_AXES + e_factors];
|
||||||
feedRate_t tmp3[LINEAR_AXES + e_factors];
|
feedRate_t tmp3[NUM_AXES + e_factors];
|
||||||
EEPROM_READ((uint8_t *)tmp1, sizeof(tmp1)); // max_acceleration_mm_per_s2
|
EEPROM_READ((uint8_t *)tmp1, sizeof(tmp1)); // max_acceleration_mm_per_s2
|
||||||
EEPROM_READ(planner.settings.min_segment_time_us);
|
EEPROM_READ(planner.settings.min_segment_time_us);
|
||||||
EEPROM_READ((uint8_t *)tmp2, sizeof(tmp2)); // axis_steps_per_mm
|
EEPROM_READ((uint8_t *)tmp2, sizeof(tmp2)); // axis_steps_per_mm
|
||||||
EEPROM_READ((uint8_t *)tmp3, sizeof(tmp3)); // max_feedrate_mm_s
|
EEPROM_READ((uint8_t *)tmp3, sizeof(tmp3)); // max_feedrate_mm_s
|
||||||
|
|
||||||
if (!validating) LOOP_DISTINCT_AXES(i) {
|
if (!validating) LOOP_DISTINCT_AXES(i) {
|
||||||
const bool in = (i < e_factors + LINEAR_AXES);
|
const bool in = (i < e_factors + NUM_AXES);
|
||||||
planner.settings.max_acceleration_mm_per_s2[i] = in ? tmp1[i] : pgm_read_dword(&_DMA[ALIM(i, _DMA)]);
|
planner.settings.max_acceleration_mm_per_s2[i] = in ? tmp1[i] : pgm_read_dword(&_DMA[ALIM(i, _DMA)]);
|
||||||
planner.settings.axis_steps_per_mm[i] = in ? tmp2[i] : pgm_read_float(&_DASU[ALIM(i, _DASU)]);
|
planner.settings.axis_steps_per_mm[i] = in ? tmp2[i] : pgm_read_float(&_DASU[ALIM(i, _DASU)]);
|
||||||
planner.settings.max_feedrate_mm_s[i] = in ? tmp3[i] : pgm_read_float(&_DMF[ALIM(i, _DMF)]);
|
planner.settings.max_feedrate_mm_s[i] = in ? tmp3[i] : pgm_read_float(&_DMF[ALIM(i, _DMF)]);
|
||||||
|
@ -2276,7 +2276,7 @@ void MarlinSettings::postprocess() {
|
||||||
EEPROM_READ(tmc_sgt);
|
EEPROM_READ(tmc_sgt);
|
||||||
#if USE_SENSORLESS
|
#if USE_SENSORLESS
|
||||||
if (!validating) {
|
if (!validating) {
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
TERN_(X_SENSORLESS, stepperX.homing_threshold(tmc_sgt.X)),
|
TERN_(X_SENSORLESS, stepperX.homing_threshold(tmc_sgt.X)),
|
||||||
TERN_(Y_SENSORLESS, stepperY.homing_threshold(tmc_sgt.Y)),
|
TERN_(Y_SENSORLESS, stepperY.homing_threshold(tmc_sgt.Y)),
|
||||||
TERN_(Z_SENSORLESS, stepperZ.homing_threshold(tmc_sgt.Z)),
|
TERN_(Z_SENSORLESS, stepperZ.homing_threshold(tmc_sgt.Z)),
|
||||||
|
@ -2430,7 +2430,7 @@ void MarlinSettings::postprocess() {
|
||||||
EEPROM_READ(backlash_smoothing_mm);
|
EEPROM_READ(backlash_smoothing_mm);
|
||||||
|
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
LOOP_LINEAR_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, backlash_distance_mm[axis]);
|
LOOP_NUM_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, backlash_distance_mm[axis]);
|
||||||
backlash.set_correction_uint8(backlash_correction);
|
backlash.set_correction_uint8(backlash_correction);
|
||||||
#ifdef BACKLASH_SMOOTHING_MM
|
#ifdef BACKLASH_SMOOTHING_MM
|
||||||
backlash.set_smoothing_mm(backlash_smoothing_mm);
|
backlash.set_smoothing_mm(backlash_smoothing_mm);
|
||||||
|
@ -2827,7 +2827,7 @@ void MarlinSettings::reset() {
|
||||||
#define DEFAULT_KJERK 0
|
#define DEFAULT_KJERK 0
|
||||||
#endif
|
#endif
|
||||||
planner.max_jerk.set(
|
planner.max_jerk.set(
|
||||||
LINEAR_AXIS_LIST(DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_IJERK, DEFAULT_JJERK, DEFAULT_KJERK)
|
NUM_AXIS_LIST(DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_IJERK, DEFAULT_JJERK, DEFAULT_KJERK)
|
||||||
);
|
);
|
||||||
TERN_(HAS_CLASSIC_E_JERK, planner.max_jerk.e = DEFAULT_EJERK);
|
TERN_(HAS_CLASSIC_E_JERK, planner.max_jerk.e = DEFAULT_EJERK);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2889,7 +2889,7 @@ void MarlinSettings::reset() {
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
backlash.set_correction(BACKLASH_CORRECTION);
|
backlash.set_correction(BACKLASH_CORRECTION);
|
||||||
constexpr xyz_float_t tmp = BACKLASH_DISTANCE_MM;
|
constexpr xyz_float_t tmp = BACKLASH_DISTANCE_MM;
|
||||||
LOOP_LINEAR_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, tmp[axis]);
|
LOOP_NUM_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, tmp[axis]);
|
||||||
#ifdef BACKLASH_SMOOTHING_MM
|
#ifdef BACKLASH_SMOOTHING_MM
|
||||||
backlash.set_smoothing_mm(BACKLASH_SMOOTHING_MM);
|
backlash.set_smoothing_mm(BACKLASH_SMOOTHING_MM);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2935,11 +2935,11 @@ void MarlinSettings::reset() {
|
||||||
//
|
//
|
||||||
#if HAS_BED_PROBE
|
#if HAS_BED_PROBE
|
||||||
constexpr float dpo[] = NOZZLE_TO_PROBE_OFFSET;
|
constexpr float dpo[] = NOZZLE_TO_PROBE_OFFSET;
|
||||||
static_assert(COUNT(dpo) == LINEAR_AXES, "NOZZLE_TO_PROBE_OFFSET must contain offsets for each linear axis X, Y, Z....");
|
static_assert(COUNT(dpo) == NUM_AXES, "NOZZLE_TO_PROBE_OFFSET must contain offsets for each linear axis X, Y, Z....");
|
||||||
#if HAS_PROBE_XY_OFFSET
|
#if HAS_PROBE_XY_OFFSET
|
||||||
LOOP_LINEAR_AXES(a) probe.offset[a] = dpo[a];
|
LOOP_NUM_AXES(a) probe.offset[a] = dpo[a];
|
||||||
#else
|
#else
|
||||||
probe.offset.set(LINEAR_AXIS_LIST(0, 0, dpo[Z_AXIS], 0, 0, 0));
|
probe.offset.set(NUM_AXIS_LIST(0, 0, dpo[Z_AXIS], 0, 0, 0));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,7 @@ bool Stepper::disable_axis(const AxisEnum axis) {
|
||||||
|
|
||||||
void Stepper::enable_all_steppers() {
|
void Stepper::enable_all_steppers() {
|
||||||
TERN_(AUTO_POWER_CONTROL, powerManager.power_on());
|
TERN_(AUTO_POWER_CONTROL, powerManager.power_on());
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
|
enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
|
||||||
enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
|
enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
|
||||||
);
|
);
|
||||||
|
@ -540,7 +540,7 @@ void Stepper::enable_all_steppers() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stepper::disable_all_steppers() {
|
void Stepper::disable_all_steppers() {
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
disable_axis(X_AXIS), disable_axis(Y_AXIS), disable_axis(Z_AXIS),
|
disable_axis(X_AXIS), disable_axis(Y_AXIS), disable_axis(Z_AXIS),
|
||||||
disable_axis(I_AXIS), disable_axis(J_AXIS), disable_axis(K_AXIS)
|
disable_axis(I_AXIS), disable_axis(J_AXIS), disable_axis(K_AXIS)
|
||||||
);
|
);
|
||||||
|
@ -2236,7 +2236,7 @@ uint32_t Stepper::block_phase_isr() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
axis_bits_t axis_bits = 0;
|
axis_bits_t axis_bits = 0;
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
if (X_MOVE_TEST) SBI(axis_bits, A_AXIS),
|
if (X_MOVE_TEST) SBI(axis_bits, A_AXIS),
|
||||||
if (Y_MOVE_TEST) SBI(axis_bits, B_AXIS),
|
if (Y_MOVE_TEST) SBI(axis_bits, B_AXIS),
|
||||||
if (Z_MOVE_TEST) SBI(axis_bits, C_AXIS),
|
if (Z_MOVE_TEST) SBI(axis_bits, C_AXIS),
|
||||||
|
@ -2742,7 +2742,7 @@ void Stepper::init() {
|
||||||
|
|
||||||
// Init direction bits for first moves
|
// Init direction bits for first moves
|
||||||
set_directions(0
|
set_directions(0
|
||||||
LINEAR_AXIS_GANG(
|
NUM_AXIS_GANG(
|
||||||
| TERN0(INVERT_X_DIR, _BV(X_AXIS)),
|
| TERN0(INVERT_X_DIR, _BV(X_AXIS)),
|
||||||
| TERN0(INVERT_Y_DIR, _BV(Y_AXIS)),
|
| TERN0(INVERT_Y_DIR, _BV(Y_AXIS)),
|
||||||
| TERN0(INVERT_Z_DIR, _BV(Z_AXIS)),
|
| TERN0(INVERT_Z_DIR, _BV(Z_AXIS)),
|
||||||
|
@ -2899,7 +2899,7 @@ int32_t Stepper::triggered_position(const AxisEnum axis) {
|
||||||
|
|
||||||
void Stepper::report_a_position(const xyz_long_t &pos) {
|
void Stepper::report_a_position(const xyz_long_t &pos) {
|
||||||
SERIAL_ECHOLNPGM_P(
|
SERIAL_ECHOLNPGM_P(
|
||||||
LIST_N(DOUBLE(LINEAR_AXES),
|
LIST_N(DOUBLE(NUM_AXES),
|
||||||
TERN(SAYS_A, PSTR(STR_COUNT_A), PSTR(STR_COUNT_X)), pos.x,
|
TERN(SAYS_A, PSTR(STR_COUNT_A), PSTR(STR_COUNT_X)), pos.x,
|
||||||
TERN(SAYS_B, PSTR("B:"), SP_Y_LBL), pos.y,
|
TERN(SAYS_B, PSTR("B:"), SP_Y_LBL), pos.y,
|
||||||
TERN(SAYS_C, PSTR("C:"), SP_Z_LBL), pos.z,
|
TERN(SAYS_C, PSTR("C:"), SP_Z_LBL), pos.z,
|
||||||
|
@ -3061,14 +3061,14 @@ void Stepper::report_positions() {
|
||||||
|
|
||||||
const bool z_direction = direction ^ BABYSTEP_INVERT_Z;
|
const bool z_direction = direction ^ BABYSTEP_INVERT_Z;
|
||||||
|
|
||||||
LINEAR_AXIS_CODE(
|
NUM_AXIS_CODE(
|
||||||
enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
|
enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
|
||||||
enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
|
enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
|
||||||
);
|
);
|
||||||
|
|
||||||
DIR_WAIT_BEFORE();
|
DIR_WAIT_BEFORE();
|
||||||
|
|
||||||
const xyz_byte_t old_dir = LINEAR_AXIS_ARRAY(
|
const xyz_byte_t old_dir = NUM_AXIS_ARRAY(
|
||||||
X_DIR_READ(), Y_DIR_READ(), Z_DIR_READ(),
|
X_DIR_READ(), Y_DIR_READ(), Z_DIR_READ(),
|
||||||
I_DIR_READ(), J_DIR_READ(), K_DIR_READ()
|
I_DIR_READ(), J_DIR_READ(), K_DIR_READ()
|
||||||
);
|
);
|
||||||
|
|
|
@ -236,7 +236,7 @@
|
||||||
// Perhaps DISABLE_MULTI_STEPPING should be required with ADAPTIVE_STEP_SMOOTHING.
|
// Perhaps DISABLE_MULTI_STEPPING should be required with ADAPTIVE_STEP_SMOOTHING.
|
||||||
#define MIN_STEP_ISR_FREQUENCY (MAX_STEP_ISR_FREQUENCY_1X / 2)
|
#define MIN_STEP_ISR_FREQUENCY (MAX_STEP_ISR_FREQUENCY_1X / 2)
|
||||||
|
|
||||||
#define ENABLE_COUNT (LINEAR_AXES + E_STEPPERS)
|
#define ENABLE_COUNT (NUM_AXES + E_STEPPERS)
|
||||||
typedef IF<(ENABLE_COUNT > 8), uint16_t, uint8_t>::type ena_mask_t;
|
typedef IF<(ENABLE_COUNT > 8), uint16_t, uint8_t>::type ena_mask_t;
|
||||||
|
|
||||||
// Axis flags type, for enabled state or other simple state
|
// Axis flags type, for enabled state or other simple state
|
||||||
|
@ -244,7 +244,7 @@ typedef struct {
|
||||||
union {
|
union {
|
||||||
ena_mask_t bits;
|
ena_mask_t bits;
|
||||||
struct {
|
struct {
|
||||||
bool LINEAR_AXIS_LIST(X:1, Y:1, Z:1, I:1, J:1, K:1);
|
bool NUM_AXIS_LIST(X:1, Y:1, Z:1, I:1, J:1, K:1);
|
||||||
#if HAS_EXTRUDERS
|
#if HAS_EXTRUDERS
|
||||||
bool LIST_N(EXTRUDERS, E0:1, E1:1, E2:1, E3:1, E4:1, E5:1, E6:1, E7:1);
|
bool LIST_N(EXTRUDERS, E0:1, E1:1, E2:1, E3:1, E4:1, E5:1, E6:1, E7:1);
|
||||||
#endif
|
#endif
|
||||||
|
@ -254,13 +254,13 @@ typedef struct {
|
||||||
|
|
||||||
// All the stepper enable pins
|
// All the stepper enable pins
|
||||||
constexpr pin_t ena_pins[] = {
|
constexpr pin_t ena_pins[] = {
|
||||||
LINEAR_AXIS_LIST(X_ENABLE_PIN, Y_ENABLE_PIN, Z_ENABLE_PIN, I_ENABLE_PIN, J_ENABLE_PIN, K_ENABLE_PIN),
|
NUM_AXIS_LIST(X_ENABLE_PIN, Y_ENABLE_PIN, Z_ENABLE_PIN, I_ENABLE_PIN, J_ENABLE_PIN, K_ENABLE_PIN),
|
||||||
LIST_N(E_STEPPERS, E0_ENABLE_PIN, E1_ENABLE_PIN, E2_ENABLE_PIN, E3_ENABLE_PIN, E4_ENABLE_PIN, E5_ENABLE_PIN, E6_ENABLE_PIN, E7_ENABLE_PIN)
|
LIST_N(E_STEPPERS, E0_ENABLE_PIN, E1_ENABLE_PIN, E2_ENABLE_PIN, E3_ENABLE_PIN, E4_ENABLE_PIN, E5_ENABLE_PIN, E6_ENABLE_PIN, E7_ENABLE_PIN)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Index of the axis or extruder element in a combined array
|
// Index of the axis or extruder element in a combined array
|
||||||
constexpr uint8_t index_of_axis(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
constexpr uint8_t index_of_axis(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
||||||
return uint8_t(axis) + (E_TERN0(axis < LINEAR_AXES ? 0 : eindex));
|
return uint8_t(axis) + (E_TERN0(axis < NUM_AXES ? 0 : eindex));
|
||||||
}
|
}
|
||||||
//#define __IAX_N(N,V...) _IAX_##N(V)
|
//#define __IAX_N(N,V...) _IAX_##N(V)
|
||||||
//#define _IAX_N(N,V...) __IAX_N(N,V)
|
//#define _IAX_N(N,V...) __IAX_N(N,V)
|
||||||
|
@ -290,7 +290,7 @@ constexpr bool any_enable_overlap(const uint8_t a=0) {
|
||||||
// (e.g., CoreXY, Dual XYZ, or E with multiple steppers, etc.).
|
// (e.g., CoreXY, Dual XYZ, or E with multiple steppers, etc.).
|
||||||
constexpr ena_mask_t enable_overlap[] = {
|
constexpr ena_mask_t enable_overlap[] = {
|
||||||
#define _OVERLAP(N) ena_overlap(INDEX_OF_AXIS(AxisEnum(N))),
|
#define _OVERLAP(N) ena_overlap(INDEX_OF_AXIS(AxisEnum(N))),
|
||||||
REPEAT(LINEAR_AXES, _OVERLAP)
|
REPEAT(NUM_AXES, _OVERLAP)
|
||||||
#if HAS_EXTRUDERS
|
#if HAS_EXTRUDERS
|
||||||
#define _E_OVERLAP(N) ena_overlap(INDEX_OF_AXIS(E_AXIS, N)),
|
#define _E_OVERLAP(N) ena_overlap(INDEX_OF_AXIS(E_AXIS, N)),
|
||||||
REPEAT(E_STEPPERS, _E_OVERLAP)
|
REPEAT(E_STEPPERS, _E_OVERLAP)
|
||||||
|
|
|
@ -936,6 +936,8 @@ void reset_trinamic_drivers() {
|
||||||
// 2. For each axis in use, static_assert using a constexpr function, which counts the
|
// 2. For each axis in use, static_assert using a constexpr function, which counts the
|
||||||
// number of matching/conflicting axis. If the value is not exactly 1, fail.
|
// number of matching/conflicting axis. If the value is not exactly 1, fail.
|
||||||
|
|
||||||
|
#define ALL_AXIS_NAMES X, X2, Y, Y2, Z, Z2, Z3, Z4, I, J, K, E0, E1, E2, E3, E4, E5, E6, E7
|
||||||
|
|
||||||
#if ANY_AXIS_HAS(HW_SERIAL)
|
#if ANY_AXIS_HAS(HW_SERIAL)
|
||||||
// Hardware serial names are compared as strings, since actually resolving them cannot occur in a constexpr.
|
// Hardware serial names are compared as strings, since actually resolving them cannot occur in a constexpr.
|
||||||
// Using a fixed-length character array for the port name allows this to be constexpr compatible.
|
// Using a fixed-length character array for the port name allows this to be constexpr compatible.
|
||||||
|
|
|
@ -1295,7 +1295,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
|
||||||
sync_plan_position();
|
sync_plan_position();
|
||||||
|
|
||||||
#if ENABLED(DELTA)
|
#if ENABLED(DELTA)
|
||||||
//LOOP_LINEAR_AXES(i) update_software_endstops(i); // or modify the constrain function
|
//LOOP_NUM_AXES(i) update_software_endstops(i); // or modify the constrain function
|
||||||
const bool safe_to_move = current_position.z < delta_clip_start_height - 1;
|
const bool safe_to_move = current_position.z < delta_clip_start_height - 1;
|
||||||
#else
|
#else
|
||||||
constexpr bool safe_to_move = true;
|
constexpr bool safe_to_move = true;
|
||||||
|
|
Loading…
Reference in a new issue