Serialization of text configuration for UndoRedo stack
This commit is contained in:
parent
13056973ec
commit
dbae2f6305
2 changed files with 79 additions and 17 deletions
|
@ -864,6 +864,7 @@ private:
|
|||
cereal::load_by_value(ar, seam_facets);
|
||||
cereal::load_by_value(ar, mmu_segmentation_facets);
|
||||
cereal::load_by_value(ar, config);
|
||||
cereal::load(ar, text_configuration);
|
||||
assert(m_mesh);
|
||||
if (has_convex_hull) {
|
||||
cereal::load_optional(ar, m_convex_hull);
|
||||
|
@ -872,11 +873,6 @@ private:
|
|||
this->calculate_convex_hull();
|
||||
} else
|
||||
m_convex_hull.reset();
|
||||
//TextConfiguration tc;
|
||||
//cereal::load_by_value(ar, tc);
|
||||
//if (tc.font_item.type != FontItem::Type::undefined) {
|
||||
// text_configuration = tc;
|
||||
//}
|
||||
}
|
||||
template<class Archive> void save(Archive &ar) const {
|
||||
bool has_convex_hull = m_convex_hull.get() != nullptr;
|
||||
|
@ -885,10 +881,9 @@ private:
|
|||
cereal::save_by_value(ar, seam_facets);
|
||||
cereal::save_by_value(ar, mmu_segmentation_facets);
|
||||
cereal::save_by_value(ar, config);
|
||||
cereal::save(ar, text_configuration);
|
||||
if (has_convex_hull)
|
||||
cereal::save_optional(ar, m_convex_hull);
|
||||
//if (text_configuration.has_value())
|
||||
// cereal::save_by_value(ar, *text_configuration);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -4,8 +4,43 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <cereal/cereal.hpp>
|
||||
#include <cereal/types/optional.hpp>
|
||||
#include <cereal/types/string.hpp>
|
||||
#include <cereal/archives/binary.hpp>
|
||||
#include "Point.hpp" // Transform3d
|
||||
|
||||
// Serialization through the Cereal library
|
||||
namespace cereal {
|
||||
// Eigen Matrix 4x4 serialization
|
||||
template <class Archive> void serialize(Archive &ar, ::Slic3r::Matrix4d &m){
|
||||
ar(binary_data(m.data(), 4*4*sizeof(double)));
|
||||
}
|
||||
|
||||
// !!! create duplicit implementation
|
||||
// General solution for Eigen matrix serialization
|
||||
//template <class Archive, class Derived> inline typename std::enable_if<traits::is_output_serializable<BinaryData<typename Derived::Scalar>, Archive>::value, void>::type
|
||||
//save(Archive & ar, Eigen::PlainObjectBase<Derived> const & m){
|
||||
// typedef Eigen::PlainObjectBase<Derived> ArrT;
|
||||
// if(ArrT::RowsAtCompileTime==Eigen::Dynamic) ar(m.rows());
|
||||
// if(ArrT::ColsAtCompileTime==Eigen::Dynamic) ar(m.cols());
|
||||
// ar(binary_data(m.data(),m.size()*sizeof(typename Derived::Scalar)));
|
||||
//}
|
||||
//template <class Archive, class Derived> inline typename std::enable_if<traits::is_input_serializable<BinaryData<typename Derived::Scalar>, Archive>::value, void>::type
|
||||
//load(Archive & ar, Eigen::PlainObjectBase<Derived> & m){
|
||||
// typedef Eigen::PlainObjectBase<Derived> ArrT;
|
||||
// Eigen::Index rows=ArrT::RowsAtCompileTime, cols=ArrT::ColsAtCompileTime;
|
||||
// if(rows==Eigen::Dynamic) ar(rows);
|
||||
// if(cols==Eigen::Dynamic) ar(cols);
|
||||
// m.resize(rows,cols);
|
||||
// ar(binary_data(m.data(),static_cast<std::size_t>(rows*cols*sizeof(typename Derived::Scalar))));
|
||||
//}
|
||||
|
||||
// Eigen Transformation serialization
|
||||
template<class Archive, class T, int N> inline void
|
||||
serialize(Archive & ar, Eigen::Transform<T, N, Eigen::Affine, Eigen::DontAlign>& t){ ar(t.matrix()); }
|
||||
}
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
/// <summary>
|
||||
|
@ -108,10 +143,36 @@ struct FontProp
|
|||
}
|
||||
|
||||
// undo / redo stack recovery
|
||||
//template<class Archive> void serialize(Archive &ar)
|
||||
//{
|
||||
// ar(char_gap, line_gap, emboss, boldness, skew, size_in_mm, family, face_name, style, weight);
|
||||
//}
|
||||
template<class Archive> void save(Archive &ar) const
|
||||
{
|
||||
ar(emboss, use_surface, size_in_mm);
|
||||
cereal::save(ar, char_gap);
|
||||
cereal::save(ar, line_gap);
|
||||
cereal::save(ar, boldness);
|
||||
cereal::save(ar, skew);
|
||||
cereal::save(ar, distance);
|
||||
cereal::save(ar, angle);
|
||||
cereal::save(ar, collection_number);
|
||||
cereal::save(ar, family);
|
||||
cereal::save(ar, face_name);
|
||||
cereal::save(ar, style);
|
||||
cereal::save(ar, weight);
|
||||
}
|
||||
template<class Archive> void load(Archive &ar)
|
||||
{
|
||||
ar(emboss, use_surface, size_in_mm);
|
||||
cereal::load(ar, char_gap);
|
||||
cereal::load(ar, line_gap);
|
||||
cereal::load(ar, boldness);
|
||||
cereal::load(ar, skew);
|
||||
cereal::load(ar, distance);
|
||||
cereal::load(ar, angle);
|
||||
cereal::load(ar, collection_number);
|
||||
cereal::load(ar, family);
|
||||
cereal::load(ar, face_name);
|
||||
cereal::load(ar, style);
|
||||
cereal::load(ar, weight);
|
||||
}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
@ -162,11 +223,10 @@ struct FontItem
|
|||
;
|
||||
}
|
||||
|
||||
//// undo / redo stack recovery
|
||||
//template<class Archive> void serialize(Archive &ar)
|
||||
//{
|
||||
// ar(name, path, (int) type, prop);
|
||||
//}
|
||||
// undo / redo stack recovery
|
||||
template<class Archive> void serialize(Archive &ar){
|
||||
ar(name, path, (int) type, prop);
|
||||
}
|
||||
};
|
||||
|
||||
// Font item name inside list is unique
|
||||
|
@ -194,7 +254,14 @@ struct TextConfiguration
|
|||
std::optional<Transform3d> fix_3mf_tr;
|
||||
|
||||
// undo / redo stack recovery
|
||||
//template<class Archive> void serialize(Archive &ar){ ar(text, font_item); }
|
||||
template<class Archive> void save(Archive &ar) const{
|
||||
ar(text, font_item);
|
||||
cereal::save(ar, fix_3mf_tr);
|
||||
}
|
||||
template<class Archive> void load(Archive &ar){
|
||||
ar(text, font_item);
|
||||
cereal::load(ar, fix_3mf_tr);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace Slic3r
|
||||
|
|
Loading…
Reference in a new issue