diff --git a/xs/src/libslic3r/Format/3mf.cpp b/xs/src/libslic3r/Format/3mf.cpp index 9be8cba7eb..b92d969dfa 100644 --- a/xs/src/libslic3r/Format/3mf.cpp +++ b/xs/src/libslic3r/Format/3mf.cpp @@ -62,6 +62,9 @@ const char* LAST_TRIANGLE_ID_ATTR = "lastid"; const char* OBJECT_TYPE = "object"; const char* VOLUME_TYPE = "volume"; +const char* NAME_KEY = "name"; +const char* MODIFIER_KEY = "modifier"; + const unsigned int VALID_OBJECT_TYPES_COUNT = 1; const char* VALID_OBJECT_TYPES[] = { @@ -1350,8 +1353,10 @@ namespace Slic3r { // apply volume's name and config data for (const Metadata& metadata : volume_data.metadata) { - if (metadata.key == "name") + if (metadata.key == NAME_KEY) volume->name = metadata.value; + else if ((metadata.key == MODIFIER_KEY) && (metadata.value == "1")) + volume->modifier = true; else volume->config.set_deserialize(metadata.key, metadata.value); } @@ -1807,7 +1812,11 @@ namespace Slic3r { // stores volume's name if (!volume->name.empty()) - stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"name\" " << VALUE_ATTR << "=\"" << volume->name << "\"/>\n"; + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << NAME_KEY << "\" " << VALUE_ATTR << "=\"" << volume->name << "\"/>\n"; + + // stores volume's modifier field + if (volume->modifier) + stream << " <" << METADATA_TAG << " " << TYPE_ATTR << "=\"" << VOLUME_TYPE << "\" " << KEY_ATTR << "=\"" << MODIFIER_KEY << "\" " << VALUE_ATTR << "=\"1\"/>\n"; // stores volume's config data for (const std::string& key : volume->config.keys())