diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index b43302316..b0fd3d98f 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -39,6 +39,7 @@ static const size_t MIN_EXTRUDERS_COUNT = 5; static const float DEFAULT_FILAMENT_DIAMETER = 1.75f; static const int DEFAULT_FILAMENT_HRC = 0; static const float DEFAULT_FILAMENT_DENSITY = 1.245f; +static const float DEFAULT_FILAMENT_COST = 29.99f; static const int DEFAULT_FILAMENT_VITRIFICATION_TEMPERATURE = 0; static const Slic3r::Vec3f DEFAULT_EXTRUDER_OFFSET = Slic3r::Vec3f::Zero(); @@ -840,6 +841,7 @@ void GCodeProcessorResult::reset() { filament_diameters = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DIAMETER); required_nozzle_HRC = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_HRC); filament_densities = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DENSITY); + filament_costs = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_COST); custom_gcode_per_print_z = std::vector(); spiral_vase_layers = std::vector>>(); warnings.clear(); @@ -946,6 +948,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.required_nozzle_HRC.resize(extruders_count); m_result.filament_densities.resize(extruders_count); m_result.filament_vitrification_temperature.resize(extruders_count); + m_result.filament_costs.resize(extruders_count); m_extruder_temps.resize(extruders_count); m_result.nozzle_type = config.nozzle_type; for (size_t i = 0; i < extruders_count; ++ i) { @@ -955,6 +958,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.required_nozzle_HRC[i] = static_cast(config.required_nozzle_HRC.get_at(i)); m_result.filament_densities[i] = static_cast(config.filament_density.get_at(i)); m_result.filament_vitrification_temperature[i] = static_cast(config.temperature_vitrification.get_at(i)); + m_result.filament_costs[i] = static_cast(config.filament_cost.get_at(i)); } if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { @@ -1078,6 +1082,19 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) m_result.filament_densities.emplace_back(DEFAULT_FILAMENT_DENSITY); } } + + //BBS + const ConfigOptionFloats* filament_costs = config.option("filament_cost"); + if (filament_costs != nullptr) { + m_result.filament_costs.clear(); + m_result.filament_costs.resize(filament_costs->values.size()); + for (size_t i = 0; i < filament_costs->values.size(); ++i) + m_result.filament_costs[i]=static_cast(filament_costs->values[i]); + } + for (size_t i = m_result.filament_costs.size(); i < m_result.extruders_count; ++i) { + m_result.filament_costs.emplace_back(DEFAULT_FILAMENT_COST); + } + //BBS const ConfigOptionInts* filament_vitrification_temperature = config.option("temperature_vitrification"); if (filament_vitrification_temperature != nullptr) { diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 1f0080983..56b539ea8 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -190,6 +190,7 @@ namespace Slic3r { std::vector filament_diameters; std::vector required_nozzle_HRC; std::vector filament_densities; + std::vector filament_costs; std::vector filament_vitrification_temperature; PrintEstimatedStatistics print_statistics; std::vector custom_gcode_per_print_z; @@ -222,6 +223,7 @@ namespace Slic3r { extruder_colors = other.extruder_colors; filament_diameters = other.filament_diameters; filament_densities = other.filament_densities; + filament_costs = other.filament_costs; print_statistics = other.print_statistics; custom_gcode_per_print_z = other.custom_gcode_per_print_z; spiral_vase_layers = other.spiral_vase_layers; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 453438057..ece8fc0c4 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9027,6 +9027,20 @@ void Plater::load_gcode(const wxString& filename) current_print.apply(this->model(), wxGetApp().preset_bundle->full_config()); + //BBS: add cost info when drag in gcode + auto& ps = current_result->print_statistics; + double total_cost = 0.0; + for (auto& volumes_map : { ps.volumes_per_extruder,ps.flush_per_filament ,ps.wipe_tower_volumes_per_extruder }) { + for (auto volume : volumes_map) { + size_t extruder_id = volume.first; + double density = current_result->filament_densities.at(extruder_id); + double cost = current_result->filament_costs.at(extruder_id); + double weight = volume.second * density * 0.001; + total_cost += weight * cost * 0.001; + } + } + current_print.print_statistics().total_cost = total_cost; + current_print.set_gcode_file_ready(); // show results