mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-07-30 07:51:59 +08:00
Simplify binary metadata generation
This commit is contained in:
parent
834f6ef37c
commit
1ee6e42642
@ -897,67 +897,18 @@ void GCodeGenerator::_do_export(Print& print, GCodeOutputStream &file, Thumbnail
|
||||
// config data
|
||||
encode_full_config(print, binary_data.slicer_metadata.raw_data);
|
||||
|
||||
// printer data
|
||||
binary_data.printer_metadata.raw_data.emplace_back("printer_model", print.config().printer_model.value); // duplicated into config data
|
||||
std::string filament_types_str;
|
||||
for (size_t i = 0; i < print.config().filament_type.values.size(); ++i) {
|
||||
filament_types_str += print.config().filament_type.values[i];
|
||||
if (i < print.config().filament_type.values.size() - 1)
|
||||
filament_types_str += ";";
|
||||
}
|
||||
binary_data.printer_metadata.raw_data.emplace_back("filament_type", filament_types_str); // duplicated into config data
|
||||
char buf[1024];
|
||||
std::string nozzle_diameters_str;
|
||||
for (size_t i = 0; i < print.config().nozzle_diameter.values.size(); ++i) {
|
||||
sprintf(buf, i < print.config().nozzle_diameter.values.size() - 1 ? "%.2g," : "%.2g", print.config().nozzle_diameter.values[i]);
|
||||
nozzle_diameters_str += buf;
|
||||
}
|
||||
binary_data.printer_metadata.raw_data.emplace_back("nozzle_diameter", nozzle_diameters_str); // duplicated into config data
|
||||
std::string bed_temperatures_str;
|
||||
for (size_t i = 0; i < print.config().bed_temperature.values.size(); ++i) {
|
||||
sprintf(buf, i < print.config().bed_temperature.values.size() - 1 ? "%d," : "%d", print.config().bed_temperature.values[i]);
|
||||
bed_temperatures_str += buf;
|
||||
}
|
||||
binary_data.printer_metadata.raw_data.emplace_back("bed_temperature", bed_temperatures_str); // duplicated into config data
|
||||
|
||||
const DynamicPrintConfig& cfg = print.full_print_config();
|
||||
if (auto opt = cfg.option("brim_width"); opt != nullptr) {
|
||||
sprintf(buf, "%.2g", dynamic_cast<const ConfigOptionFloat*>(opt)->value);
|
||||
binary_data.printer_metadata.raw_data.emplace_back("brim_width", buf); // duplicated into config data
|
||||
}
|
||||
if (auto opt = cfg.option("fill_density"); opt != nullptr) {
|
||||
sprintf(buf, "%.2g%%", dynamic_cast<const ConfigOptionPercent*>(opt)->value);
|
||||
binary_data.printer_metadata.raw_data.emplace_back("fill_density", buf); // duplicated into config data
|
||||
}
|
||||
if (auto opt = cfg.option("layer_height"); opt != nullptr) {
|
||||
sprintf(buf, "%.2g", dynamic_cast<const ConfigOptionFloat*>(opt)->value);
|
||||
binary_data.printer_metadata.raw_data.emplace_back("layer_height", buf); // duplicated into config data
|
||||
}
|
||||
if (auto opt = cfg.option("temperature"); opt != nullptr) {
|
||||
auto values = dynamic_cast<const ConfigOptionInts*>(opt)->values;
|
||||
std::string temperatures_str;
|
||||
for (size_t i = 0; i < values.size(); ++i) {
|
||||
sprintf(buf, i < values.size() - 1 ? "%d," : "%d", values[i]);
|
||||
temperatures_str += buf;
|
||||
}
|
||||
binary_data.printer_metadata.raw_data.emplace_back("temperature", temperatures_str); // duplicated into config data
|
||||
}
|
||||
if (auto opt = cfg.option("ironing"); opt != nullptr)
|
||||
binary_data.printer_metadata.raw_data.emplace_back("ironing", dynamic_cast<const ConfigOptionBool*>(opt)->value ? "1" : "0"); // duplicated into config data
|
||||
if (auto opt = cfg.option("support_material"); opt != nullptr)
|
||||
binary_data.printer_metadata.raw_data.emplace_back("support_material", dynamic_cast<const ConfigOptionBool*>(opt)->value ? "1" : "0"); // duplicated into config data
|
||||
if (auto opt = cfg.option("extruder_colour"); opt != nullptr) {
|
||||
auto values = dynamic_cast<const ConfigOptionStrings*>(opt)->values;
|
||||
std::string extruder_colours_str;
|
||||
if (values.size() == 1 && values.front().empty())
|
||||
extruder_colours_str = "\"\"";
|
||||
else {
|
||||
for (size_t i = 0; i < values.size(); ++i) {
|
||||
sprintf(buf, i < values.size() - 1 ? "%s;" : "%s", values[i].c_str());
|
||||
extruder_colours_str += buf;
|
||||
}
|
||||
}
|
||||
binary_data.printer_metadata.raw_data.emplace_back("extruder_colour", extruder_colours_str); // duplicated into config data
|
||||
// printer data - this section contains duplicates from the slicer metadata
|
||||
// that we just created. Find and copy the entries that we want to duplicate.
|
||||
const auto& slicer_metadata = binary_data.slicer_metadata.raw_data;
|
||||
const std::vector<std::string> keys_to_duplicate = { "printer_model", "filament_type", "nozzle_diameter", "bed_temperature",
|
||||
"brim_width", "fill_density", "layer_height", "temperature", "ironing", "support_material", "extruder_colour" };
|
||||
assert(std::is_sorted(slicer_metadata.begin(), slicer_metadata.end(),
|
||||
[](const auto& a, const auto& b) { return a.first < b.first; }));
|
||||
for (const std::string& key : keys_to_duplicate) {
|
||||
auto it = std::lower_bound(slicer_metadata.begin(), slicer_metadata.end(), std::make_pair(key, 0),
|
||||
[](const auto& a, const auto& b) { return a.first < b.first; });
|
||||
if (it != slicer_metadata.end() && it->first == key)
|
||||
binary_data.printer_metadata.raw_data.emplace_back(*it);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user