ENH: get most used extruder id
Jira: none Signed-off-by: qing.zhang <qing.zhang@bambulab.com> Change-Id: I9c498cefb07b3bdf89a17bfd75a3075c2294c934
This commit is contained in:
parent
c44cc2db1a
commit
e0508a9e51
|
@ -1859,6 +1859,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
|
||||
std::vector<const PrintInstance*> print_object_instances_ordering;
|
||||
std::vector<const PrintInstance*>::const_iterator print_object_instance_sequential_active;
|
||||
std::vector<int> extruder_count;
|
||||
if (print.config().print_sequence == PrintSequence::ByObject) {
|
||||
// Order object instances for sequential print.
|
||||
print_object_instances_ordering = sort_object_instances_by_model_order(print);
|
||||
|
@ -1867,6 +1868,14 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
print_object_instance_sequential_active = print_object_instances_ordering.begin();
|
||||
for (; print_object_instance_sequential_active != print_object_instances_ordering.end(); ++ print_object_instance_sequential_active) {
|
||||
tool_ordering = ToolOrdering(*(*print_object_instance_sequential_active)->print_object, initial_extruder_id);
|
||||
//get extruder count
|
||||
std::vector<int> object_extruder_count = tool_ordering.cal_most_used_extruder(print.config());
|
||||
if (extruder_count.empty())
|
||||
extruder_count = object_extruder_count;
|
||||
else
|
||||
for (size_t extruder_id = 0; extruder_id < object_extruder_count.size(); extruder_id++)
|
||||
extruder_count[extruder_id] += object_extruder_count[extruder_id];
|
||||
|
||||
tool_ordering.sort_and_build_data(*(*print_object_instance_sequential_active)->print_object,initial_extruder_id);
|
||||
if ((initial_extruder_id = tool_ordering.first_extruder()) != static_cast<unsigned int>(-1)) {
|
||||
//BBS: try to find the non-support filament extruder if is multi color and initial_extruder is support filament
|
||||
|
@ -1914,6 +1923,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
// Find tool ordering for all the objects at once, and the initial extruder ID.
|
||||
// If the tool ordering has been pre-calculated by Print class for wipe tower already, reuse it.
|
||||
tool_ordering = print.tool_ordering();
|
||||
extruder_count = tool_ordering.cal_most_used_extruder(print.config());
|
||||
tool_ordering.assign_custom_gcodes(print);
|
||||
if (tool_ordering.all_extruders().empty())
|
||||
// No object to print was found, cancel the G-code export.
|
||||
|
@ -1989,6 +1999,15 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
|
|||
file.write(m_writer.set_additional_fan(0));
|
||||
}
|
||||
|
||||
//set key for most used extruder
|
||||
//count most used extruder
|
||||
int max_count_extruder = 0;
|
||||
for (int extruder_id = 1; extruder_id < extruder_count.size(); extruder_id++) {
|
||||
if (extruder_count[extruder_id] >= extruder_count[max_count_extruder])
|
||||
max_count_extruder = extruder_id;
|
||||
}
|
||||
|
||||
m_placeholder_parser.set("most_used_physical_extruder_id", print.config().physical_extruder_map.values[max_count_extruder]);
|
||||
// Let the start-up script prime the 1st printing tool.
|
||||
m_placeholder_parser.set("initial_tool", initial_extruder_id);
|
||||
m_placeholder_parser.set("initial_extruder", initial_extruder_id);
|
||||
|
|
|
@ -876,6 +876,27 @@ void ToolOrdering::collect_extruder_statistics(bool prime_multi_material)
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<int> ToolOrdering::cal_most_used_extruder(const PrintConfig &config)
|
||||
{
|
||||
// record
|
||||
std::vector<int> extruder_count;
|
||||
extruder_count.resize(config.nozzle_diameter.size(), 0);
|
||||
for (LayerTools &layer_tools : m_layer_tools) {
|
||||
std::vector<unsigned int> filaments = layer_tools.extruders;
|
||||
std::set<int> layer_extruder_count;
|
||||
//count once only
|
||||
for (unsigned int &filament : filaments) {
|
||||
layer_extruder_count.insert(config.filament_map.values[filament] - 1);
|
||||
}
|
||||
|
||||
//record
|
||||
for (int extruder_id : layer_extruder_count) {
|
||||
extruder_count[extruder_id]++;
|
||||
}
|
||||
}
|
||||
return extruder_count;
|
||||
}
|
||||
|
||||
std::set<std::pair<std::vector<unsigned int>, std::vector<unsigned int>>> generate_combinations(const std::vector<unsigned int> &extruders)
|
||||
{
|
||||
int n = extruders.size();
|
||||
|
|
|
@ -248,6 +248,7 @@ public:
|
|||
|
||||
// should be called after doing reorder
|
||||
FilamentChangeStats get_filament_change_stats(FilamentChangeMode mode);
|
||||
std::vector<int> cal_most_used_extruder(const PrintConfig &config);
|
||||
|
||||
private:
|
||||
void initialize_layers(std::vector<coordf_t> &zs);
|
||||
|
|
Loading…
Reference in New Issue