From b849a82725560f4606395830bc99b0189f9c69d6 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Tue, 23 May 2023 10:29:32 +0800 Subject: [PATCH] FIX:Remove all spaces and special symbols in the plate name Remove all spaces and special symbols like \ / : * ? " < > | in the plate name,allow xml special symbols such as & ' Change-Id: I2b391d13be709af0e47f1573c0e225e63591fd23 (cherry picked from commit 135c97e9916c852a8625d9d9bf0a4dda051b6e2b) --- src/libslic3r/Format/bbs_3mf.cpp | 4 ++-- src/slic3r/GUI/PartPlate.cpp | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index cc9dcb511..c3168e896 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -3838,7 +3838,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_plater->plate_index = atoi(value.c_str()); } else if (key == PLATER_NAME_ATTR) { - m_curr_plater->plate_name = encode_path(value.c_str()); + m_curr_plater->plate_name = xml_unescape(encode_path(value.c_str())); } else if (key == LOCK_ATTR) { @@ -6996,7 +6996,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << PLATE_TAG << ">\n"; //plate index stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATERID_ATTR << "\" " << VALUE_ATTR << "=\"" << plate_data->plate_index + 1 << "\"/>\n"; - stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATER_NAME_ATTR << "\" " << VALUE_ATTR << "=\"" << decode_path(plate_data->plate_name.c_str()) << "\"/>\n"; + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PLATER_NAME_ATTR << "\" " << VALUE_ATTR << "=\"" << xml_escape(decode_path(plate_data->plate_name.c_str())) << "\"/>\n"; stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << LOCK_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha<< plate_data->locked<< "\"/>\n"; ConfigOption* bed_type_opt = plate_data->config.option("curr_bed_type"); t_config_enum_names bed_type_names = ConfigOptionEnum::get_enum_names(); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 2f9014ed9..c8d8c3f9e 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -1600,18 +1601,20 @@ void PartPlate::set_plate_name(const std::string &name) { // compare if name equal to m_name, case sensitive if (boost::equals(m_name, name)) return; - + m_name = name; + m_name.erase(remove_if(m_name.begin(), m_name.end(), ::isspace), m_name.end()); + std::regex reg("[\\\\/:*?\"<>|]"); + m_name= regex_replace(m_name, reg, ""); + m_name_change = true; if (m_plater) { ObjectList *obj_list = wxGetApp().obj_list(); if (obj_list) { - obj_list->GetModel()->SetCurSelectedPlateFullNmae(m_plate_index, name); + obj_list->GetModel()->SetCurSelectedPlateFullNmae(m_plate_index, m_name); } } - m_name = name; - m_name_change = true; - if (m_print != nullptr) - m_print->set_plate_name(name); + if (m_print != nullptr) + m_print->set_plate_name(m_name); } //get the print's object, result and index