Remove depricated variable

+ read old staff in separate 3mf function
This commit is contained in:
Filip Sykala - NTB T15p 2023-09-13 11:56:37 +02:00
parent b3d94bab8f
commit 3421a9298a
7 changed files with 36 additions and 72 deletions

View File

@ -1352,10 +1352,6 @@ unsigned Emboss::get_count_lines(const ExPolygonsWithIds &shapes) {
return result; return result;
} }
void Emboss::apply_transformation(const FontProp &font_prop, Transform3d &transformation){
apply_transformation(font_prop.angle, font_prop.distance, transformation);
}
void Emboss::apply_transformation(const std::optional<float>& angle, const std::optional<float>& distance, Transform3d &transformation) { void Emboss::apply_transformation(const std::optional<float>& angle, const std::optional<float>& distance, Transform3d &transformation) {
if (angle.has_value()) { if (angle.has_value()) {
double angle_z = *angle; double angle_z = *angle;

View File

@ -198,10 +198,9 @@ namespace Emboss
/// <summary> /// <summary>
/// Use data from font property to modify transformation /// Use data from font property to modify transformation
/// </summary> /// </summary>
/// <param name="font_prop">Z-move as surface distance(FontProp::distance) /// <param name="angle">Z-rotation as angle to Y axis</param>
/// Z-rotation as angle to Y axis(FontProp::angle)</param> /// <param name="distance">Z-move as surface distance</param>
/// <param name="transformation">In / Out transformation to modify by property</param> /// <param name="transformation">In / Out transformation to modify by property</param>
void apply_transformation(const FontProp &font_prop, Transform3d &transformation);
void apply_transformation(const std::optional<float> &angle, const std::optional<float> &distance, Transform3d &transformation); void apply_transformation(const std::optional<float> &angle, const std::optional<float> &distance, Transform3d &transformation);
/// <summary> /// <summary>

View File

@ -1982,6 +1982,7 @@ namespace Slic3r {
static void to_xml(std::stringstream &stream, const TextConfiguration &tc); static void to_xml(std::stringstream &stream, const TextConfiguration &tc);
static std::optional<TextConfiguration> read(const char **attributes, unsigned int num_attributes); static std::optional<TextConfiguration> read(const char **attributes, unsigned int num_attributes);
static EmbossShape read_old(const char **attributes, unsigned int num_attributes);
}; };
bool _3MF_Importer::_handle_start_text_configuration(const char **attributes, unsigned int num_attributes) bool _3MF_Importer::_handle_start_text_configuration(const char **attributes, unsigned int num_attributes)
@ -2005,14 +2006,7 @@ namespace Slic3r {
return true; return true;
// Back compatibility for 3mf version without shapes // Back compatibility for 3mf version without shapes
const TextConfiguration &tc = *volume.text_configuration; volume.shape_configuration = TextConfigurationSerialization::read_old(attributes, num_attributes);
EmbossShape es;
es.fix_3mf_tr = tc.fix_3mf_tr;
const FontProp &fp = tc.style.prop;
EmbossProjection& ep = es.projection;
ep.depth = fp.emboss;
ep.use_surface = fp.use_surface;
volume.shape_configuration = es;
return true; return true;
} }
@ -3655,8 +3649,6 @@ std::optional<TextConfiguration> TextConfigurationSerialization::read(const char
float skew = get_attribute_value_float(attributes, num_attributes, SKEW_ATTR); float skew = get_attribute_value_float(attributes, num_attributes, SKEW_ATTR);
if (std::fabs(skew) > std::numeric_limits<float>::epsilon()) if (std::fabs(skew) > std::numeric_limits<float>::epsilon())
fp.skew = skew; fp.skew = skew;
int use_surface = get_attribute_value_int(attributes, num_attributes, USE_SURFACE_ATTR);
if (use_surface == 1) fp.use_surface = true;
int per_glyph = get_attribute_value_int(attributes, num_attributes, PER_GLYPH_ATTR); int per_glyph = get_attribute_value_int(attributes, num_attributes, PER_GLYPH_ATTR);
if (per_glyph == 1) fp.per_glyph = true; if (per_glyph == 1) fp.per_glyph = true;
@ -3686,18 +3678,28 @@ std::optional<TextConfiguration> TextConfigurationSerialization::read(const char
EmbossStyle::Type type = TextConfigurationSerialization::get_type(type_str); EmbossStyle::Type type = TextConfigurationSerialization::get_type(type_str);
std::string text = get_attribute_value_string(attributes, num_attributes, TEXT_DATA_ATTR); std::string text = get_attribute_value_string(attributes, num_attributes, TEXT_DATA_ATTR);
EmbossStyle es{style_name, std::move(font_descriptor), type, std::move(fp)};
return TextConfiguration{std::move(es), std::move(text)};
}
// Read of old fashion save style for Back compatibility EmbossShape TextConfigurationSerialization::read_old(const char **attributes, unsigned int num_attributes)
std::optional<Transform3d> fix_tr_mat; {
EmbossShape es;
std::string fix_tr_mat_str = get_attribute_value_string(attributes, num_attributes, TRANSFORM_ATTR); std::string fix_tr_mat_str = get_attribute_value_string(attributes, num_attributes, TRANSFORM_ATTR);
if (!fix_tr_mat_str.empty()) if (!fix_tr_mat_str.empty())
fix_tr_mat = get_transform_from_3mf_specs_string(fix_tr_mat_str); es.fix_3mf_tr = get_transform_from_3mf_specs_string(fix_tr_mat_str);
if (get_attribute_value_int(attributes, num_attributes, USE_SURFACE_ATTR) == 1)
fp.use_surface = true;
fp.emboss = get_attribute_value_float(attributes, num_attributes, DEPTH_ATTR);
EmbossStyle fi{style_name, std::move(font_descriptor), type, std::move(fp)};
return TextConfiguration{std::move(fi), std::move(text), std::move(fix_tr_mat)}; if (get_attribute_value_int(attributes, num_attributes, USE_SURFACE_ATTR) == 1)
es.projection.use_surface = true;
es.projection.depth = get_attribute_value_float(attributes, num_attributes, DEPTH_ATTR);
int use_surface = get_attribute_value_int(attributes, num_attributes, USE_SURFACE_ATTR);
if (use_surface == 1)
es.projection.use_surface = true;
return es;
} }
namespace { namespace {

View File

@ -54,18 +54,6 @@ struct FontProp
// change pivot of text // change pivot of text
// When not set, center is used and is not stored // When not set, center is used and is not stored
Align align = Align(HorizontalAlign::center, VerticalAlign::center); Align align = Align(HorizontalAlign::center, VerticalAlign::center);
[[deprecated("Back compatibility only, now it is stored EmbossProjection like depth")]]
float emboss;
[[deprecated("Back compatibility only, now it is stored EmbossProjection")]]
bool use_surface;
[[deprecated("it is calculated on the fly")]]
std::optional<float> distance;
[[deprecated("it is calculated on the fly")]]
std::optional<float> angle;
////// //////
// Duplicit data to wxFontDescriptor // Duplicit data to wxFontDescriptor
@ -88,7 +76,7 @@ struct FontProp
/// </summary> /// </summary>
/// <param name="line_height">Y size of text [in mm]</param> /// <param name="line_height">Y size of text [in mm]</param>
/// <param name="depth">Z size of text [in mm]</param> /// <param name="depth">Z size of text [in mm]</param>
FontProp(float line_height = 10.f, float depth = 2.f) : emboss(depth), size_in_mm(line_height), use_surface(false), per_glyph(false) FontProp(float line_height = 10.f) : size_in_mm(line_height), per_glyph(false)
{} {}
bool operator==(const FontProp& other) const { bool operator==(const FontProp& other) const {
@ -194,9 +182,6 @@ struct TextConfiguration
// Embossed text value // Embossed text value
std::string text = "None"; std::string text = "None";
[[deprecated("only for back compatibility, now it is stored in EmbossShape")]]
std::optional<Transform3d> fix_3mf_tr;
// undo / redo stack recovery // undo / redo stack recovery
template<class Archive> void serialize(Archive &ar) { ar(style, text); } template<class Archive> void serialize(Archive &ar) { ar(style, text); }
}; };

View File

@ -413,12 +413,14 @@ bool GLGizmoEmboss::do_mirror(size_t axis)
return false; return false;
const TextConfiguration &tc= *m_volume->text_configuration; const TextConfiguration &tc= *m_volume->text_configuration;
if(tc.style.prop.per_glyph){ if(tc.style.prop.per_glyph){
// init textlines before mirroring on mirrored text volume transformation // init textlines before mirroring on mirrored text volume transformation
Transform3d tr = m_volume->get_matrix(); Transform3d tr = m_volume->get_matrix();
const std::optional<Transform3d> &fix_tr = tc.fix_3mf_tr; if (m_volume->emboss_shape.has_value()) {
if (fix_tr.has_value()) const std::optional<Transform3d> &fix_tr = m_volume->emboss_shape->fix_3mf_tr;
tr = tr * (fix_tr->inverse()); if (fix_tr.has_value())
tr = tr * (fix_tr->inverse());
}
// mirror // mirror
Vec3d scale = Vec3d::Ones(); Vec3d scale = Vec3d::Ones();
@ -563,8 +565,7 @@ bool GLGizmoEmboss::on_mouse_for_translate(const wxMouseEvent &mouse_event)
assert(m_style_manager.is_active_font()); assert(m_style_manager.is_active_font());
if (gl_volume == nullptr || !m_style_manager.is_active_font()) if (gl_volume == nullptr || !m_style_manager.is_active_font())
return res; return res;
m_style_manager.get_style().angle = calc_up(gl_volume->world_matrix(), Slic3r::GUI::up_limit);
m_style_manager.get_font_prop().angle = calc_up(gl_volume->world_matrix(), Slic3r::GUI::up_limit);
} }
volume_transformation_changing(); volume_transformation_changing();
@ -1272,7 +1273,7 @@ void GLGizmoEmboss::set_volume_by_selection()
// Calculate current angle of up vector // Calculate current angle of up vector
assert(m_style_manager.is_active_font()); assert(m_style_manager.is_active_font());
if (m_style_manager.is_active_font()) if (m_style_manager.is_active_font())
m_style_manager.get_font_prop().angle = calc_up(gl_volume->world_matrix(), up_limit); m_style_manager.get_style().angle = calc_up(gl_volume->world_matrix(), up_limit);
// calculate scale for height and depth inside of scaled object instance // calculate scale for height and depth inside of scaled object instance
calculate_scale(); calculate_scale();
@ -3261,26 +3262,7 @@ void TextDataBase::write(ModelVolume &volume) const
{ {
DataBase::write(volume); DataBase::write(volume);
volume.text_configuration = m_text_configuration; // copy volume.text_configuration = m_text_configuration; // copy
// TEMPORARY check until depricated variable will be deleted
FontProp &fp = volume.text_configuration->style.prop;
// Distance and angle are calculated on the fly it should not be stored in volume
assert(!fp.angle.has_value());
if (fp.angle.has_value())
fp.angle.reset();
assert(!fp.distance.has_value());
if (fp.distance.has_value())
fp.distance.reset();
// use_surface and emboss are stored in projection
assert(volume.emboss_shape.has_value()); assert(volume.emboss_shape.has_value());
if (!volume.emboss_shape.has_value())
return;
const EmbossProjection &ep = volume.emboss_shape->projection;
if (fp.use_surface != ep.use_surface)
fp.use_surface = ep.use_surface;
if (!is_approx(fp.emboss, static_cast<float>(ep.depth)))
fp.emboss = static_cast<float>(ep.depth);
} }
std::unique_ptr<DataBase> create_emboss_data_base(const std::string &text, std::unique_ptr<DataBase> create_emboss_data_base(const std::string &text,

View File

@ -129,7 +129,7 @@ EmbossStyle WxFontUtils::create_emboss_style(const wxFont &font, const std::stri
{ {
std::string name_item = name.empty()? get_human_readable_name(font) : name; std::string name_item = name.empty()? get_human_readable_name(font) : name;
std::string fontDesc = store_wxFont(font); std::string fontDesc = store_wxFont(font);
EmbossStyle::Type type = get_current_type(); EmbossStyle::Type type = get_current_type();
// synchronize font property with actual font // synchronize font property with actual font
FontProp font_prop; FontProp font_prop;
@ -138,7 +138,6 @@ EmbossStyle WxFontUtils::create_emboss_style(const wxFont &font, const std::stri
// is approximately 0.0139 inch or 352.8 um. But it is too small, so I // is approximately 0.0139 inch or 352.8 um. But it is too small, so I
// decide use point size as mm for emboss // decide use point size as mm for emboss
font_prop.size_in_mm = font.GetPointSize(); // *0.3528f; font_prop.size_in_mm = font.GetPointSize(); // *0.3528f;
font_prop.emboss = font_prop.size_in_mm / 2.f;
WxFontUtils::update_property(font_prop, font); WxFontUtils::update_property(font_prop, font);
return { name_item, fontDesc, type, font_prop }; return { name_item, fontDesc, type, font_prop };

View File

@ -313,18 +313,19 @@ The other kids at school nicknamed him Ix,\n\
which in the language of Betelgeuse Five translates as\t\n\ which in the language of Betelgeuse Five translates as\t\n\
\"boy who is not able satisfactorily to explain what a Hrung is,\n\ \"boy who is not able satisfactorily to explain what a Hrung is,\n\
nor why it should choose to collapse on Betelgeuse Seven\"."; nor why it should choose to collapse on Betelgeuse Seven\".";
float line_height = 10.f, depth = 2.f; float line_height = 10.f;
auto font = Emboss::create_font_file(font_path.c_str()); auto font = Emboss::create_font_file(font_path.c_str());
REQUIRE(font != nullptr); REQUIRE(font != nullptr);
Emboss::FontFileWithCache ffwc(std::move(font)); Emboss::FontFileWithCache ffwc(std::move(font));
FontProp fp{line_height, depth}; FontProp fp{line_height};
auto was_canceled = []() { return false; }; auto was_canceled = []() { return false; };
ExPolygons shapes = Emboss::text2shapes(ffwc, text.c_str(), fp, was_canceled); ExPolygons shapes = Emboss::text2shapes(ffwc, text.c_str(), fp, was_canceled);
REQUIRE(!shapes.empty()); REQUIRE(!shapes.empty());
float depth = 2.f;
Emboss::ProjectZ projection(depth); Emboss::ProjectZ projection(depth);
indexed_triangle_set its = Emboss::polygons2model(shapes, projection); indexed_triangle_set its = Emboss::polygons2model(shapes, projection);
CHECK(!its.indices.empty()); CHECK(!its.indices.empty());