mirror of
https://git.mirrors.martin98.com/https://github.com/bambulab/BambuStudio.git
synced 2025-09-21 03:03:13 +08:00
ENH: seperate wipe tower weight from model
jira:STUDIO-4353 Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: Ia8a030314ab995c57a0990d08a966382f6f0eecc
This commit is contained in:
parent
394a602e8f
commit
81bab138b5
@ -1002,6 +1002,21 @@ namespace DoExport {
|
||||
total_cost += weight * extruder->filament_cost() * 0.001;
|
||||
}
|
||||
|
||||
for (auto volume : result.print_statistics.wipe_tower_volumes_per_extruder) {
|
||||
total_extruded_volume += volume.second;
|
||||
|
||||
size_t extruder_id = volume.first;
|
||||
auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) {return extr.id() == extruder_id; });
|
||||
if (extruder == extruders.end())
|
||||
continue;
|
||||
|
||||
double s = PI * sqr(0.5* extruder->filament_diameter());
|
||||
double weight = volume.second * extruder->filament_density() * 0.001;
|
||||
total_used_filament += volume.second/s;
|
||||
total_weight += weight;
|
||||
total_cost += weight * extruder->filament_cost() * 0.001;
|
||||
}
|
||||
|
||||
print_statistics.total_extruded_volume = total_extruded_volume;
|
||||
print_statistics.total_used_filament = total_used_filament;
|
||||
print_statistics.total_weight = total_weight;
|
||||
|
@ -58,7 +58,8 @@ const std::vector<std::string> GCodeProcessor::Reserved_Tags = {
|
||||
"_GP_LAST_LINE_M73_PLACEHOLDER",
|
||||
"_GP_ESTIMATED_PRINTING_TIME_PLACEHOLDER",
|
||||
"_GP_TOTAL_LAYER_NUMBER_PLACEHOLDER",
|
||||
"_DURING_PRINT_EXHAUST_FAN"
|
||||
" WIPE_TOWER_START",
|
||||
" WIPE_TOWER_END"
|
||||
};
|
||||
|
||||
const std::string GCodeProcessor::Flush_Start_Tag = " FLUSH_START";
|
||||
@ -698,22 +699,30 @@ void GCodeProcessor::UsedFilaments::reset()
|
||||
color_change_cache = 0.0f;
|
||||
volumes_per_color_change = std::vector<double>();
|
||||
|
||||
tool_change_cache = 0.0f;
|
||||
model_extrude_cache = 0.0f;
|
||||
volumes_per_extruder.clear();
|
||||
|
||||
flush_per_filament.clear();
|
||||
|
||||
role_cache = 0.0f;
|
||||
filaments_per_role.clear();
|
||||
|
||||
wipe_tower_cache = 0.0f;
|
||||
wipe_tower_volume_per_extruder.clear();
|
||||
}
|
||||
|
||||
void GCodeProcessor::UsedFilaments::increase_caches(double extruded_volume)
|
||||
void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume)
|
||||
{
|
||||
color_change_cache += extruded_volume;
|
||||
tool_change_cache += extruded_volume;
|
||||
model_extrude_cache += extruded_volume;
|
||||
role_cache += extruded_volume;
|
||||
}
|
||||
|
||||
void GCodeProcessor::UsedFilaments::increase_wipe_tower_caches(double extruded_volume)
|
||||
{
|
||||
wipe_tower_cache += extruded_volume;
|
||||
}
|
||||
|
||||
void GCodeProcessor::UsedFilaments::process_color_change_cache()
|
||||
{
|
||||
if (color_change_cache != 0.0f) {
|
||||
@ -722,15 +731,27 @@ void GCodeProcessor::UsedFilaments::process_color_change_cache()
|
||||
}
|
||||
}
|
||||
|
||||
void GCodeProcessor::UsedFilaments::process_extruder_cache(GCodeProcessor* processor)
|
||||
void GCodeProcessor::UsedFilaments::process_model_cache(GCodeProcessor* processor)
|
||||
{
|
||||
size_t active_extruder_id = processor->m_extruder_id;
|
||||
if (tool_change_cache != 0.0f) {
|
||||
if (model_extrude_cache != 0.0f) {
|
||||
if (volumes_per_extruder.find(active_extruder_id) != volumes_per_extruder.end())
|
||||
volumes_per_extruder[active_extruder_id] += tool_change_cache;
|
||||
volumes_per_extruder[active_extruder_id] += model_extrude_cache;
|
||||
else
|
||||
volumes_per_extruder[active_extruder_id] = tool_change_cache;
|
||||
tool_change_cache = 0.0f;
|
||||
volumes_per_extruder[active_extruder_id] = model_extrude_cache;
|
||||
model_extrude_cache = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void GCodeProcessor::UsedFilaments::process_wipe_tower_cache(GCodeProcessor* processor)
|
||||
{
|
||||
size_t active_extruder_id = processor->m_extruder_id;
|
||||
if (wipe_tower_cache != 0.0f) {
|
||||
if (wipe_tower_volume_per_extruder.find(active_extruder_id) != wipe_tower_volume_per_extruder.end())
|
||||
wipe_tower_volume_per_extruder[active_extruder_id] += wipe_tower_cache;
|
||||
else
|
||||
wipe_tower_volume_per_extruder[active_extruder_id] = wipe_tower_cache;
|
||||
wipe_tower_cache = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -765,8 +786,9 @@ void GCodeProcessor::UsedFilaments::process_role_cache(GCodeProcessor* processor
|
||||
void GCodeProcessor::UsedFilaments::process_caches(GCodeProcessor* processor)
|
||||
{
|
||||
process_color_change_cache();
|
||||
process_extruder_cache(processor);
|
||||
process_model_cache(processor);
|
||||
process_role_cache(processor);
|
||||
process_wipe_tower_cache(processor);
|
||||
}
|
||||
|
||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||
@ -1266,6 +1288,7 @@ void GCodeProcessor::reset()
|
||||
m_cached_position.reset();
|
||||
m_wiping = false;
|
||||
m_flushing = false;
|
||||
m_wipe_tower = false;
|
||||
m_remaining_volume = 0.f;
|
||||
// BBS: arc move related data
|
||||
m_move_path_type = EMovePathType::Noop_move;
|
||||
@ -2042,6 +2065,17 @@ void GCodeProcessor::process_tags(const std::string_view comment, bool producers
|
||||
return;
|
||||
}
|
||||
|
||||
if (boost::starts_with(comment, reserved_tag(ETags::Wipe_Tower_Start))) {
|
||||
m_wipe_tower = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (boost::starts_with(comment, reserved_tag(ETags::Wipe_Tower_End))) {
|
||||
m_wipe_tower = false;
|
||||
m_used_filaments.process_wipe_tower_cache(this);
|
||||
return;
|
||||
}
|
||||
|
||||
//BBS: flush start tag
|
||||
if (boost::starts_with(comment, GCodeProcessor::Flush_Start_Tag)) {
|
||||
m_flushing = true;
|
||||
@ -2731,10 +2765,13 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
||||
float delta_xyz = std::sqrt(sqr(delta_pos[X]) + sqr(delta_pos[Y]) + sqr(delta_pos[Z]));
|
||||
float volume_extruded_filament = area_filament_cross_section * delta_pos[E];
|
||||
float area_toolpath_cross_section = volume_extruded_filament / delta_xyz;
|
||||
|
||||
// save extruded volume to the cache
|
||||
m_used_filaments.increase_caches(volume_extruded_filament);
|
||||
|
||||
if (m_wipe_tower) {
|
||||
m_used_filaments.increase_wipe_tower_caches(volume_extruded_filament);
|
||||
}
|
||||
else {
|
||||
// save extruded volume to the cache
|
||||
m_used_filaments.increase_model_caches(volume_extruded_filament);
|
||||
}
|
||||
// volume extruded filament / tool displacement = area toolpath cross section
|
||||
m_mm3_per_mm = area_toolpath_cross_section;
|
||||
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||
@ -3188,10 +3225,14 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line)
|
||||
if (type == EMoveType::Extrude) {
|
||||
float volume_extruded_filament = area_filament_cross_section * delta_pos[E];
|
||||
float area_toolpath_cross_section = volume_extruded_filament / delta_xyz;
|
||||
|
||||
//BBS: save extruded volume to the cache
|
||||
m_used_filaments.increase_caches(volume_extruded_filament);
|
||||
|
||||
if (m_wipe_tower) {
|
||||
//BBS: save wipe tower volume to the cache
|
||||
m_used_filaments.increase_wipe_tower_caches(volume_extruded_filament);
|
||||
}
|
||||
else {
|
||||
//BBS: save extruded volume to the cache
|
||||
m_used_filaments.increase_model_caches(volume_extruded_filament);
|
||||
}
|
||||
//BBS: volume extruded filament / tool displacement = area toolpath cross section
|
||||
m_mm3_per_mm = area_toolpath_cross_section;
|
||||
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||
@ -4236,7 +4277,7 @@ void GCodeProcessor::process_filaments(CustomGCode::Type code)
|
||||
m_used_filaments.process_color_change_cache();
|
||||
|
||||
if (code == CustomGCode::ToolChange) {
|
||||
m_used_filaments.process_extruder_cache(this);
|
||||
m_used_filaments.process_model_cache(this);
|
||||
//BBS: reset remaining filament
|
||||
m_remaining_volume = m_nozzle_volume;
|
||||
}
|
||||
@ -4269,6 +4310,7 @@ void GCodeProcessor::update_estimated_times_stats()
|
||||
|
||||
m_result.print_statistics.volumes_per_color_change = m_used_filaments.volumes_per_color_change;
|
||||
m_result.print_statistics.volumes_per_extruder = m_used_filaments.volumes_per_extruder;
|
||||
m_result.print_statistics.wipe_tower_volumes_per_extruder = m_used_filaments.wipe_tower_volume_per_extruder;
|
||||
m_result.print_statistics.flush_per_filament = m_used_filaments.flush_per_filament;
|
||||
m_result.print_statistics.used_filaments_per_role = m_used_filaments.filaments_per_role;
|
||||
}
|
||||
|
@ -72,6 +72,7 @@ namespace Slic3r {
|
||||
|
||||
std::vector<double> volumes_per_color_change;
|
||||
std::map<size_t, double> volumes_per_extruder;
|
||||
std::map<size_t, double> wipe_tower_volumes_per_extruder;
|
||||
//BBS: the flush amount of every filament
|
||||
std::map<size_t, double> flush_per_filament;
|
||||
std::map<ExtrusionRole, std::pair<double, double>> used_filaments_per_role;
|
||||
@ -87,6 +88,7 @@ namespace Slic3r {
|
||||
}
|
||||
volumes_per_color_change.clear();
|
||||
volumes_per_color_change.shrink_to_fit();
|
||||
wipe_tower_volumes_per_extruder.clear();
|
||||
volumes_per_extruder.clear();
|
||||
flush_per_filament.clear();
|
||||
used_filaments_per_role.clear();
|
||||
@ -256,7 +258,8 @@ namespace Slic3r {
|
||||
Last_Line_M73_Placeholder,
|
||||
Estimated_Printing_Time_Placeholder,
|
||||
Total_Layer_Number_Placeholder,
|
||||
During_Print_Exhaust_Fan
|
||||
Wipe_Tower_Start,
|
||||
Wipe_Tower_End,
|
||||
};
|
||||
|
||||
static const std::string& reserved_tag(ETags tag) { return Reserved_Tags[static_cast<unsigned char>(tag)]; }
|
||||
@ -467,9 +470,12 @@ namespace Slic3r {
|
||||
double color_change_cache;
|
||||
std::vector<double> volumes_per_color_change;
|
||||
|
||||
double tool_change_cache;
|
||||
double model_extrude_cache;
|
||||
std::map<size_t, double> volumes_per_extruder;
|
||||
|
||||
double wipe_tower_cache;
|
||||
std::map<size_t, double>wipe_tower_volume_per_extruder;
|
||||
|
||||
//BBS: the flush amount of every filament
|
||||
std::map<size_t, double> flush_per_filament;
|
||||
|
||||
@ -478,10 +484,12 @@ namespace Slic3r {
|
||||
|
||||
void reset();
|
||||
|
||||
void increase_caches(double extruded_volume);
|
||||
void increase_model_caches(double extruded_volume);
|
||||
void increase_wipe_tower_caches(double extruded_volume);
|
||||
|
||||
void process_color_change_cache();
|
||||
void process_extruder_cache(GCodeProcessor* processor);
|
||||
void process_model_cache(GCodeProcessor* processor);
|
||||
void process_wipe_tower_cache(GCodeProcessor* processor);
|
||||
void update_flush_per_filament(size_t extrude_id, float flush_length);
|
||||
void process_role_cache(GCodeProcessor* processor);
|
||||
void process_caches(GCodeProcessor* processor);
|
||||
@ -630,6 +638,7 @@ namespace Slic3r {
|
||||
CachedPosition m_cached_position;
|
||||
bool m_wiping;
|
||||
bool m_flushing;
|
||||
bool m_wipe_tower;
|
||||
float m_remaining_volume;
|
||||
|
||||
//BBS: x, y offset for gcode generated
|
||||
|
@ -770,6 +770,7 @@ WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool extrude_per
|
||||
"; CP TOOLCHANGE START\n")
|
||||
.comment_with_value(" toolchange #", m_num_tool_changes + 1); // the number is zero-based
|
||||
|
||||
|
||||
if (tool != (unsigned)(-1))
|
||||
writer.append(std::string("; material : " + (m_current_tool < m_filpar.size() ? m_filpar[m_current_tool].material : "(NONE)") + " -> " + m_filpar[tool].material + "\n").c_str())
|
||||
.append(";--------------------\n");
|
||||
@ -787,6 +788,7 @@ WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool extrude_per
|
||||
|
||||
// Ram the hot material out of the melt zone, retract the filament into the cooling tubes and let it cool.
|
||||
if (tool != (unsigned int)-1){ // This is not the last change.
|
||||
writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_Start) + "\n");
|
||||
toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material,
|
||||
is_first_layer() ? m_filpar[tool].nozzle_temperature_initial_layer : m_filpar[tool].nozzle_temperature);
|
||||
toolchange_Change(writer, tool, m_filpar[tool].material); // Change the tool, set a speed override for soluble and flex materials.
|
||||
@ -806,8 +808,8 @@ WipeTower::ToolChangeResult WipeTower::tool_change(size_t tool, bool extrude_per
|
||||
writer.travel(Vec2f(0, 0));
|
||||
writer.travel(initial_position);
|
||||
}
|
||||
|
||||
toolchange_Wipe(writer, cleaning_box, wipe_length); // Wipe the newly loaded filament until the end of the assigned wipe area.
|
||||
writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_End) + "\n");
|
||||
++ m_num_tool_changes;
|
||||
} else
|
||||
toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, m_filpar[m_current_tool].nozzle_temperature);
|
||||
|
@ -936,9 +936,9 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode)
|
||||
view_type_items.push_back(EViewType::LayerTime);
|
||||
view_type_items.push_back(EViewType::FanSpeed);
|
||||
view_type_items.push_back(EViewType::Temperature);
|
||||
if (mode == ConfigOptionMode::comDevelop) {
|
||||
view_type_items.push_back(EViewType::Tool);
|
||||
}
|
||||
//if (mode == ConfigOptionMode::comDevelop) {
|
||||
// view_type_items.push_back(EViewType::Tool);
|
||||
//}
|
||||
|
||||
for (int i = 0; i < view_type_items.size(); i++) {
|
||||
view_type_items_str.push_back(get_view_type_string(view_type_items[i]));
|
||||
@ -951,9 +951,9 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode)
|
||||
options_items.push_back(EMoveType::Retract);
|
||||
options_items.push_back(EMoveType::Unretract);
|
||||
options_items.push_back(EMoveType::Wipe);
|
||||
if (mode == ConfigOptionMode::comDevelop) {
|
||||
options_items.push_back(EMoveType::Tool_change);
|
||||
}
|
||||
//if (mode == ConfigOptionMode::comDevelop) {
|
||||
// options_items.push_back(EMoveType::Tool_change);
|
||||
//}
|
||||
//BBS: seam is not real move and extrusion, put at last line
|
||||
options_items.push_back(EMoveType::Seam);
|
||||
}
|
||||
@ -4692,8 +4692,17 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
std::vector<double> flushed_filaments_m;
|
||||
std::vector<double> flushed_filaments_g;
|
||||
double total_flushed_filament_m = 0, total_flushed_filament_g = 0;
|
||||
bool show_model_used_filaments = true;
|
||||
bool show_flushed_filaments = true;
|
||||
std::vector<double> wipe_tower_used_filaments_m;
|
||||
std::vector<double> wipe_tower_used_filaments_g;
|
||||
double total_wipe_tower_used_filament_m = 0, total_wipe_tower_used_filament_g = 0;
|
||||
struct ColumnData {
|
||||
enum {
|
||||
Model = 1,
|
||||
Flushed = 2,
|
||||
WipeTower = 4,
|
||||
};
|
||||
};
|
||||
int displayed_columns = ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower;
|
||||
const PrintStatistics& ps = wxGetApp().plater()->get_partplate_list().get_current_fff_print().print_statistics();
|
||||
double koef = imperial_units ? GizmoObjectManipulation::in_to_mm : 1000.0;
|
||||
double unit_conver = imperial_units ? GizmoObjectManipulation::oz_to_g : 1;
|
||||
@ -4782,7 +4791,19 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
total_model_used_filament_g += model_used_filament_g;
|
||||
}
|
||||
if (model_used_filaments_m.size() == 0 || model_used_filaments_g.size() == 0)
|
||||
show_model_used_filaments = false;
|
||||
displayed_columns &= ~ColumnData::Model;
|
||||
|
||||
for (size_t extruder_id : m_extruder_ids) {
|
||||
if (m_print_statistics.wipe_tower_volumes_per_extruder.find(extruder_id) == m_print_statistics.wipe_tower_volumes_per_extruder.end()) continue;
|
||||
double volume = m_print_statistics.wipe_tower_volumes_per_extruder.at(extruder_id);
|
||||
auto [wipe_tower_used_filament_m, wipe_tower_used_filament_g] = get_used_filament_from_volume(volume, extruder_id);
|
||||
wipe_tower_used_filaments_m.push_back(wipe_tower_used_filament_m);
|
||||
wipe_tower_used_filaments_g.push_back(wipe_tower_used_filament_g);
|
||||
total_wipe_tower_used_filament_m += wipe_tower_used_filament_m;
|
||||
total_wipe_tower_used_filament_g += wipe_tower_used_filament_g;
|
||||
}
|
||||
if (wipe_tower_used_filaments_m.size() == 0 || wipe_tower_used_filaments_g.size() == 0)
|
||||
displayed_columns &= ~ColumnData::WipeTower;
|
||||
|
||||
for (size_t extruder_id : m_extruder_ids) {
|
||||
if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) continue;
|
||||
@ -4794,18 +4815,27 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
total_flushed_filament_g += flushed_filament_g;
|
||||
}
|
||||
if (flushed_filaments_m.size() == 0 || flushed_filaments_g.size() == 0)
|
||||
show_flushed_filaments = false;
|
||||
displayed_columns &= ~ColumnData::Flushed;
|
||||
|
||||
std::vector<std::string> total_filaments;
|
||||
char buffer[64];
|
||||
::sprintf(buffer, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", ps.total_used_filament / /*1000*/koef, ps.total_weight / unit_conver);
|
||||
total_filaments.push_back(buffer);
|
||||
|
||||
offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, /*{_u8L("Tower"), total_filaments},*/ {_u8L("Total"), total_filaments} }, icon_size);
|
||||
if (m_extruder_ids.size() <= 1 || !show_flushed_filaments)
|
||||
|
||||
if (displayed_columns == ColumnData::Model) {
|
||||
offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size);
|
||||
append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[2]}});
|
||||
else
|
||||
append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, /*{_u8L("Tower"), offsets[3]},*/ {_u8L("Total"), offsets[3]}});// to add Tower
|
||||
}
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) {
|
||||
offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size);
|
||||
append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Total"), offsets[3]} });
|
||||
}
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) {
|
||||
offsets = calculate_offsets({ {_u8L("Filament"), {""}}, {_u8L("Model"), total_filaments}, {_u8L("Flushed"), total_filaments}, {_u8L("Tower"), total_filaments}, {_u8L("Total"), total_filaments} }, icon_size);
|
||||
append_headers({ {_u8L("Filament"), offsets[0]}, {_u8L("Model"), offsets[1]}, {_u8L("Flushed"), offsets[2]}, {_u8L("Tower"), offsets[3]}, {_u8L("Total"), offsets[4]} });
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default: { break; }
|
||||
@ -4976,7 +5006,12 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
columns_offsets.push_back({ std::to_string(extruder_idx + 1), offsets[0] });
|
||||
|
||||
char buf[64];
|
||||
if (show_flushed_filaments) {
|
||||
if (displayed_columns == ColumnData::Model) {
|
||||
char buf[64];
|
||||
::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
}
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) {
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[1] });
|
||||
|
||||
@ -4984,15 +5019,25 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m[i] + flushed_filaments_m[i]),
|
||||
(model_used_filaments_g[i] + flushed_filaments_g[i]) / unit_conver);
|
||||
(model_used_filaments_g[i] + flushed_filaments_g[i]) / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[3] });
|
||||
}
|
||||
else {
|
||||
char buf[64];
|
||||
::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({buf, offsets[2]});
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) {
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", model_used_filaments_m[i], model_used_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[1] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", flushed_filaments_m[i], flushed_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", wipe_tower_used_filaments_m[i], wipe_tower_used_filaments_g[i] / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[3] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", (model_used_filaments_m[i] + flushed_filaments_m[i] + wipe_tower_used_filaments_m[i]),
|
||||
(model_used_filaments_g[i] + flushed_filaments_g[i] + wipe_tower_used_filaments_g[i]) / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[4] });
|
||||
}
|
||||
|
||||
|
||||
append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_idx], columns_offsets, false, filament_visible, [this, extruder_idx]() {
|
||||
m_tools.m_tool_visibles[extruder_idx] = !m_tools.m_tool_visibles[extruder_idx];
|
||||
// update buffers' render paths
|
||||
@ -5038,13 +5083,13 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
|
||||
std::vector<std::pair<std::string, float>> columns_offsets;
|
||||
columns_offsets.push_back({ _u8L("Total"), offsets[0] });
|
||||
if (!show_flushed_filaments) {
|
||||
if (displayed_columns == ColumnData::Model) {
|
||||
::sprintf(buf, imperial_units ? "%.2f in %.2f oz" : "%.2f m %.2f g", total_model_used_filament_m, total_model_used_filament_g / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
|
||||
append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets);
|
||||
}
|
||||
else {
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed)) {
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m, total_model_used_filament_g / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[1] });
|
||||
|
||||
@ -5052,9 +5097,25 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
|
||||
bool imperial_units = wxGetApp().app_config->get("use_inches") == "1";
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m + total_flushed_filament_m, (total_model_used_filament_g + total_flushed_filament_g) / unit_conver);
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m + total_flushed_filament_m , (total_model_used_filament_g + total_flushed_filament_g) / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[3] });
|
||||
|
||||
append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets);
|
||||
}
|
||||
if (displayed_columns == (ColumnData::Model | ColumnData::Flushed | ColumnData::WipeTower)) {
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m, total_model_used_filament_g / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[1] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_flushed_filament_m, total_flushed_filament_g / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[2] });
|
||||
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_wipe_tower_used_filament_m, total_wipe_tower_used_filament_g / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[3] });
|
||||
|
||||
bool imperial_units = wxGetApp().app_config->get("use_inches") == "1";
|
||||
::sprintf(buf, imperial_units ? "%.2f in\n%.2f oz" : "%.2f m\n%.2f g", total_model_used_filament_m + total_flushed_filament_m + total_wipe_tower_used_filament_m, (total_model_used_filament_g + total_flushed_filament_g + total_wipe_tower_used_filament_g) / unit_conver);
|
||||
columns_offsets.push_back({ buf, offsets[4] });
|
||||
|
||||
append_item(EItemType::None, m_tools.m_tool_colors[0], columns_offsets);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user