From bbeff0f2e6b235fa9e9312eee67fcf7e59e2660e Mon Sep 17 00:00:00 2001 From: Filip Sykala Date: Fri, 29 Oct 2021 13:32:54 +0200 Subject: [PATCH] store to .3mf --- src/libslic3r/Format/3mf.cpp | 19 ++++++++++++++++++- src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp | 6 ++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 626c88496b..02edb32fbc 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -157,6 +157,10 @@ static constexpr const char *LINE_GAP_ATTR = "line_gap"; static constexpr const char *LINE_HEIGHT_ATTR = "line_height"; static constexpr const char *DEPTH_ATTR = "depth"; +static constexpr const char *FONT_FACE_NAME_ATTR = "face_name"; +static constexpr const char *FONT_STYLE_ATTR = "style"; +static constexpr const char *FONT_WEIGHT_ATTR = "weight"; + const unsigned int VALID_OBJECT_TYPES_COUNT = 1; const char* VALID_OBJECT_TYPES[] = { @@ -3259,7 +3263,13 @@ void TextConfigurationSerialization::to_xml(std::stringstream &stream, const Tex stream << LINE_GAP_ATTR << "=\"" << fp.line_gap << "\" "; stream << LINE_HEIGHT_ATTR << "=\"" << fp.size_in_mm << "\" "; stream << DEPTH_ATTR << "=\"" << fp.emboss << "\" "; - + // font descriptor + if (fp.face_name.has_value()) + stream << FONT_FACE_NAME_ATTR << "=\"" << *fp.face_name << "\" "; + if (fp.style.has_value()) + stream << FONT_STYLE_ATTR << "=\"" << *fp.style << "\" "; + if (fp.weight.has_value()) + stream << FONT_WEIGHT_ATTR << "=\"" << *fp.weight << "\" "; stream << "/>\n"; // end TEXT_TAG } @@ -3278,6 +3288,13 @@ std::optional TextConfigurationSerialization::read(const char fp.size_in_mm = get_attribute_value_float(attributes, num_attributes, LINE_HEIGHT_ATTR); fp.emboss = get_attribute_value_float(attributes, num_attributes, DEPTH_ATTR); + std::string face_name = get_attribute_value_string(attributes, num_attributes, FONT_FACE_NAME_ATTR); + if (!face_name.empty()) fp.face_name = face_name; + std::string style = get_attribute_value_string(attributes, num_attributes, FONT_STYLE_ATTR); + if (!style.empty()) fp.style = style; + std::string weight = get_attribute_value_string(attributes, num_attributes, FONT_WEIGHT_ATTR); + if (!weight.empty()) fp.weight = weight; + return TextConfiguration(fi, fp, text); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index 755220d7a1..53a58ff92f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -241,6 +241,7 @@ void GLGizmoEmboss::on_set_state() return; } m_volume = nullptr; + remove_notification_not_valid_font(); } else if (GLGizmoBase::m_state == GLGizmoBase::On) { if (!m_is_initialized) initialize(); @@ -852,9 +853,10 @@ bool GLGizmoEmboss::choose_font_by_wxdialog() FontProp old_font_prop = m_font_prop; // copy // Check that deserialization NOT influence font - // false - use direct selected font in dialog + // false - use direct selected wxFont in dialog // true - use font item (serialize and deserialize wxFont) bool use_deserialized_font = false; + if (!use_deserialized_font) m_font_selected = font_index; // Try load and use new added font if ((!use_deserialized_font && !load_font(font)) || (use_deserialized_font && !load_font(font_index)) || @@ -997,7 +999,7 @@ void GLGizmoEmboss::create_notification_not_valid_font( const auto& origin_family = tc.font_prop.face_name; const auto& actual_family = m_font_prop.face_name; - const auto &fi = m_font_list[m_font_selected]; + const auto& fi = m_font_list[m_font_selected]; const std::string& origin_font_name = origin_family.has_value()? *origin_family : tc.font_item.path; const std::string &actual_font_name = actual_family.has_value()? *actual_family : fi.name;