IDEX Mirror mode based on Formbot / Vivedino Symmetric mode (#13404)
This commit is contained in:
committed by
Scott Lahteine
parent
5c1aa5162d
commit
09eb30dc05
@ -853,8 +853,8 @@ void clean_up_after_endstop_or_probe_move() {
|
||||
#endif // !UBL_SEGMENTED
|
||||
|
||||
#if HAS_DUPLICATION_MODE
|
||||
bool extruder_duplication_enabled;
|
||||
//scaled_duplication_mode;
|
||||
bool extruder_duplication_enabled,
|
||||
mirrored_duplication_mode;
|
||||
#endif
|
||||
|
||||
#if ENABLED(MULTI_NOZZLE_DUPLICATION) && HOTENDS > 2
|
||||
@ -923,7 +923,7 @@ void clean_up_after_endstop_or_probe_move() {
|
||||
active_extruder_parked = false;
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Clear active_extruder_parked");
|
||||
break;
|
||||
case DXC_SCALED_DUPLICATION_MODE:
|
||||
case DXC_MIRRORED_MODE:
|
||||
case DXC_DUPLICATION_MODE:
|
||||
if (active_extruder == 0) {
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Set planner X", inactive_extruder_x_pos, " ... Line to X", current_position[X_AXIS] + duplicate_extruder_x_offset);
|
||||
|
@ -316,8 +316,8 @@ void homeaxis(const AxisEnum axis);
|
||||
* Duplication mode
|
||||
*/
|
||||
#if HAS_DUPLICATION_MODE
|
||||
extern bool extruder_duplication_enabled; // Used in Dual X mode 2
|
||||
//scaled_duplication_mode; // Used in Dual X mode 3
|
||||
extern bool extruder_duplication_enabled, // Used in Dual X mode 2
|
||||
mirrored_duplication_mode; // Used in Dual X mode 3
|
||||
#endif
|
||||
|
||||
#if ENABLED(MULTI_NOZZLE_DUPLICATION) && HOTENDS > 2
|
||||
@ -333,16 +333,16 @@ void homeaxis(const AxisEnum axis);
|
||||
DXC_FULL_CONTROL_MODE,
|
||||
DXC_AUTO_PARK_MODE,
|
||||
DXC_DUPLICATION_MODE,
|
||||
DXC_SCALED_DUPLICATION_MODE
|
||||
DXC_MIRRORED_MODE
|
||||
};
|
||||
|
||||
extern DualXMode dual_x_carriage_mode;
|
||||
extern float inactive_extruder_x_pos, // used in mode 0 & 1
|
||||
raised_parked_position[XYZE], // used in mode 1
|
||||
duplicate_extruder_x_offset; // used in mode 2 & 3
|
||||
extern bool active_extruder_parked; // used in mode 1, 2 & 3
|
||||
extern millis_t delayed_move_time; // used in mode 1
|
||||
extern int16_t duplicate_extruder_temp_offset; // used in mode 2 & 3
|
||||
extern float inactive_extruder_x_pos, // Used in mode 0 & 1
|
||||
raised_parked_position[XYZE], // Used in mode 1
|
||||
duplicate_extruder_x_offset; // Used in mode 2 & 3
|
||||
extern bool active_extruder_parked; // Used in mode 1, 2 & 3
|
||||
extern millis_t delayed_move_time; // Used in mode 1
|
||||
extern int16_t duplicate_extruder_temp_offset; // Used in mode 2 & 3
|
||||
|
||||
FORCE_INLINE bool dxc_is_duplicating() { return dual_x_carriage_mode >= DXC_DUPLICATION_MODE; }
|
||||
|
||||
|
@ -284,22 +284,14 @@ int8_t Stepper::count_direction[NUM_AXIS] = { 0, 0, 0, 0 };
|
||||
#define X_APPLY_STEP(v,Q) do{ X_STEP_WRITE(v); X2_STEP_WRITE(v); }while(0)
|
||||
#endif
|
||||
#elif ENABLED(DUAL_X_CARRIAGE)
|
||||
#define X_APPLY_DIR(v,ALWAYS) \
|
||||
if (extruder_duplication_enabled || ALWAYS) { \
|
||||
X_DIR_WRITE(v); \
|
||||
X2_DIR_WRITE(v); \
|
||||
} \
|
||||
else { \
|
||||
if (movement_extruder()) X2_DIR_WRITE(v); else X_DIR_WRITE(v); \
|
||||
}
|
||||
#define X_APPLY_STEP(v,ALWAYS) \
|
||||
if (extruder_duplication_enabled || ALWAYS) { \
|
||||
X_STEP_WRITE(v); \
|
||||
X2_STEP_WRITE(v); \
|
||||
} \
|
||||
else { \
|
||||
if (movement_extruder()) X2_STEP_WRITE(v); else X_STEP_WRITE(v); \
|
||||
}
|
||||
#define X_APPLY_DIR(v,ALWAYS) do{ \
|
||||
if (extruder_duplication_enabled || ALWAYS) { X_DIR_WRITE(v); X2_DIR_WRITE(mirrored_duplication_mode ? !(v) : v); } \
|
||||
else if (movement_extruder()) X2_DIR_WRITE(v); else X_DIR_WRITE(v); \
|
||||
}while(0)
|
||||
#define X_APPLY_STEP(v,ALWAYS) do{ \
|
||||
if (extruder_duplication_enabled || ALWAYS) { X_STEP_WRITE(v); X2_STEP_WRITE(v); } \
|
||||
else if (movement_extruder()) X2_STEP_WRITE(v); else X_STEP_WRITE(v); \
|
||||
}while(0)
|
||||
#else
|
||||
#define X_APPLY_DIR(v,Q) X_DIR_WRITE(v)
|
||||
#define X_APPLY_STEP(v,Q) X_STEP_WRITE(v)
|
||||
|
@ -505,10 +505,10 @@ inline void invalid_extruder_error(const uint8_t e) {
|
||||
if (DEBUGGING(LEVELING)) {
|
||||
DEBUG_ECHOPGM("Dual X Carriage Mode ");
|
||||
switch (dual_x_carriage_mode) {
|
||||
case DXC_FULL_CONTROL_MODE: DEBUG_ECHOLNPGM("DXC_FULL_CONTROL_MODE"); break;
|
||||
case DXC_AUTO_PARK_MODE: DEBUG_ECHOLNPGM("DXC_AUTO_PARK_MODE"); break;
|
||||
case DXC_DUPLICATION_MODE: DEBUG_ECHOLNPGM("DXC_DUPLICATION_MODE"); break;
|
||||
case DXC_SCALED_DUPLICATION_MODE: DEBUG_ECHOLNPGM("DXC_SCALED_DUPLICATION_MODE"); break;
|
||||
case DXC_FULL_CONTROL_MODE: DEBUG_ECHOLNPGM("FULL_CONTROL"); break;
|
||||
case DXC_AUTO_PARK_MODE: DEBUG_ECHOLNPGM("AUTO_PARK"); break;
|
||||
case DXC_DUPLICATION_MODE: DEBUG_ECHOLNPGM("DUPLICATION"); break;
|
||||
case DXC_MIRRORED_MODE: DEBUG_ECHOLNPGM("MIRRORED"); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -596,7 +596,7 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
|
||||
planner.synchronize();
|
||||
|
||||
#if ENABLED(DUAL_X_CARRIAGE) // Only T0 allowed if the Printer is in DXC_DUPLICATION_MODE or DXC_SCALED_DUPLICATION_MODE
|
||||
#if ENABLED(DUAL_X_CARRIAGE) // Only T0 allowed if the Printer is in DXC_DUPLICATION_MODE or DXC_MIRRORED_MODE
|
||||
if (tmp_extruder != 0 && dxc_is_duplicating())
|
||||
return invalid_extruder_error(tmp_extruder);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user