mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-26 16:13:58 -06:00
Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into et_reload_from_disk
This commit is contained in:
commit
3835257ec2
4 changed files with 34 additions and 6 deletions
|
@ -806,6 +806,11 @@ void GCode::_do_export(Print &print, FILE *file)
|
||||||
}
|
}
|
||||||
m_analyzer.set_extruder_offsets(extruder_offsets);
|
m_analyzer.set_extruder_offsets(extruder_offsets);
|
||||||
|
|
||||||
|
// send extruders count to analyzer to allow it to detect invalid extruder idxs
|
||||||
|
const ConfigOptionStrings* extruders_opt = dynamic_cast<const ConfigOptionStrings*>(print.config().option("extruder_colour"));
|
||||||
|
const ConfigOptionStrings* filamemts_opt = dynamic_cast<const ConfigOptionStrings*>(print.config().option("filament_colour"));
|
||||||
|
m_analyzer.set_extruders_count(std::max((unsigned int)extruders_opt->values.size(), (unsigned int)filamemts_opt->values.size()));
|
||||||
|
|
||||||
// tell analyzer about the gcode flavor
|
// tell analyzer about the gcode flavor
|
||||||
m_analyzer.set_gcode_flavor(print.config().gcode_flavor);
|
m_analyzer.set_gcode_flavor(print.config().gcode_flavor);
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#include "../Utils.hpp"
|
#include "../Utils.hpp"
|
||||||
#include "Print.hpp"
|
#include "Print.hpp"
|
||||||
|
|
||||||
|
#include <boost/log/trivial.hpp>
|
||||||
|
|
||||||
#include "Analyzer.hpp"
|
#include "Analyzer.hpp"
|
||||||
#include "PreviewData.hpp"
|
#include "PreviewData.hpp"
|
||||||
|
|
||||||
|
@ -107,6 +109,11 @@ void GCodeAnalyzer::set_extruder_offsets(const GCodeAnalyzer::ExtruderOffsetsMap
|
||||||
m_extruder_offsets = extruder_offsets;
|
m_extruder_offsets = extruder_offsets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GCodeAnalyzer::set_extruders_count(unsigned int count)
|
||||||
|
{
|
||||||
|
m_extruders_count = count;
|
||||||
|
}
|
||||||
|
|
||||||
void GCodeAnalyzer::set_gcode_flavor(const GCodeFlavor& flavor)
|
void GCodeAnalyzer::set_gcode_flavor(const GCodeFlavor& flavor)
|
||||||
{
|
{
|
||||||
m_gcode_flavor = flavor;
|
m_gcode_flavor = flavor;
|
||||||
|
@ -131,6 +138,7 @@ void GCodeAnalyzer::reset()
|
||||||
|
|
||||||
m_moves_map.clear();
|
m_moves_map.clear();
|
||||||
m_extruder_offsets.clear();
|
m_extruder_offsets.clear();
|
||||||
|
m_extruders_count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& GCodeAnalyzer::process_gcode(const std::string& gcode)
|
const std::string& GCodeAnalyzer::process_gcode(const std::string& gcode)
|
||||||
|
@ -520,7 +528,10 @@ void GCodeAnalyzer::_processT(const std::string& cmd)
|
||||||
unsigned int id = (unsigned int)::strtol(cmd.substr(1).c_str(), nullptr, 10);
|
unsigned int id = (unsigned int)::strtol(cmd.substr(1).c_str(), nullptr, 10);
|
||||||
if (_get_extruder_id() != id)
|
if (_get_extruder_id() != id)
|
||||||
{
|
{
|
||||||
_set_extruder_id(id);
|
if (id >= m_extruders_count)
|
||||||
|
BOOST_LOG_TRIVIAL(error) << "GCodeAnalyzer encountered an invalid toolchange, maybe from a custom gcode.";
|
||||||
|
else
|
||||||
|
_set_extruder_id(id);
|
||||||
|
|
||||||
// stores tool change move
|
// stores tool change move
|
||||||
_store_move(GCodeMove::Tool_change);
|
_store_move(GCodeMove::Tool_change);
|
||||||
|
|
|
@ -108,6 +108,7 @@ private:
|
||||||
GCodeReader m_parser;
|
GCodeReader m_parser;
|
||||||
TypeToMovesMap m_moves_map;
|
TypeToMovesMap m_moves_map;
|
||||||
ExtruderOffsetsMap m_extruder_offsets;
|
ExtruderOffsetsMap m_extruder_offsets;
|
||||||
|
unsigned int m_extruders_count;
|
||||||
GCodeFlavor m_gcode_flavor;
|
GCodeFlavor m_gcode_flavor;
|
||||||
|
|
||||||
// The output of process_layer()
|
// The output of process_layer()
|
||||||
|
@ -117,6 +118,7 @@ public:
|
||||||
GCodeAnalyzer();
|
GCodeAnalyzer();
|
||||||
|
|
||||||
void set_extruder_offsets(const ExtruderOffsetsMap& extruder_offsets);
|
void set_extruder_offsets(const ExtruderOffsetsMap& extruder_offsets);
|
||||||
|
void set_extruders_count(unsigned int count);
|
||||||
|
|
||||||
void set_gcode_flavor(const GCodeFlavor& flavor);
|
void set_gcode_flavor(const GCodeFlavor& flavor);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "CoolingBuffer.hpp"
|
#include "CoolingBuffer.hpp"
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
|
#include <boost/log/trivial.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
|
@ -415,13 +416,22 @@ std::vector<PerExtruderAdjustments> CoolingBuffer::parse_layer_gcode(const std::
|
||||||
line.type = CoolingLine::TYPE_EXTRUDE_END;
|
line.type = CoolingLine::TYPE_EXTRUDE_END;
|
||||||
active_speed_modifier = size_t(-1);
|
active_speed_modifier = size_t(-1);
|
||||||
} else if (boost::starts_with(sline, toolchange_prefix)) {
|
} else if (boost::starts_with(sline, toolchange_prefix)) {
|
||||||
// Switch the tool.
|
|
||||||
line.type = CoolingLine::TYPE_SET_TOOL;
|
|
||||||
unsigned int new_extruder = (unsigned int)atoi(sline.c_str() + toolchange_prefix.size());
|
unsigned int new_extruder = (unsigned int)atoi(sline.c_str() + toolchange_prefix.size());
|
||||||
if (new_extruder != current_extruder) {
|
// Only change extruder in case the number is meaningful. User could provide an out-of-range index through custom gcodes - those shall be ignored.
|
||||||
current_extruder = new_extruder;
|
if (new_extruder < map_extruder_to_per_extruder_adjustment.size()) {
|
||||||
adjustment = &per_extruder_adjustments[map_extruder_to_per_extruder_adjustment[current_extruder]];
|
if (new_extruder != current_extruder) {
|
||||||
|
// Switch the tool.
|
||||||
|
line.type = CoolingLine::TYPE_SET_TOOL;
|
||||||
|
current_extruder = new_extruder;
|
||||||
|
adjustment = &per_extruder_adjustments[map_extruder_to_per_extruder_adjustment[current_extruder]];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// Only log the error in case of MM printer. Single extruder printers likely ignore any T anyway.
|
||||||
|
if (map_extruder_to_per_extruder_adjustment.size() > 1)
|
||||||
|
BOOST_LOG_TRIVIAL(error) << "CoolingBuffer encountered an invalid toolchange, maybe from a custom gcode: " << sline;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (boost::starts_with(sline, ";_BRIDGE_FAN_START")) {
|
} else if (boost::starts_with(sline, ";_BRIDGE_FAN_START")) {
|
||||||
line.type = CoolingLine::TYPE_BRIDGE_FAN_START;
|
line.type = CoolingLine::TYPE_BRIDGE_FAN_START;
|
||||||
} else if (boost::starts_with(sline, ";_BRIDGE_FAN_END")) {
|
} else if (boost::starts_with(sline, ";_BRIDGE_FAN_END")) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue