diff --git a/src/OpenMesh/Core/IO/writer/OMWriter.cc b/src/OpenMesh/Core/IO/writer/OMWriter.cc index 91b7a408..528b2cfa 100644 --- a/src/OpenMesh/Core/IO/writer/OMWriter.cc +++ b/src/OpenMesh/Core/IO/writer/OMWriter.cc @@ -581,7 +581,7 @@ bool _OMWriter_::write_binary(std::ostream& _os, BaseExporter& _be, // ---------------------------------------------------------------------------- size_t _OMWriter_::store_binary_custom_chunk(std::ostream& _os, - const BaseProperty& _bp, + BaseProperty& _bp, OMFormat::Chunk::Entity _entity, bool _swap) const { @@ -621,9 +621,42 @@ size_t _OMWriter_::store_binary_custom_chunk(std::ostream& _os, bytes += store( _os, OMFormat::Chunk::PropertyName(_bp.name()), _swap ); // 3. data type - OMFormat::Chunk::PropertyType type; + OMFormat::Chunk::PropertyType type = OMFormat::Chunk::PropertyType::UnknownType; + OpenMesh::PropertyT& bp_bool = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_char = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_double = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_float = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_int = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_long = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_short = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_uchar = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_uint = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_ulong = dynamic_cast&>(_bp); + OpenMesh::PropertyT& bp_vecdouble = dynamic_cast&>(_bp); + if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::BoolType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::CharType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::DoubleType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::FloatType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::IntType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::LongType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::ShortType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::UCharType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::UIntType; + else if(_bp.internal_type_name() == get_type_name()) + type = OMFormat::Chunk::PropertyType::ULongType; + else if(_bp.internal_type_name() == get_type_name>()) + type = OMFormat::Chunk::PropertyType::VecDoubleType; bytes += store(_os, type, _swap); diff --git a/src/OpenMesh/Core/IO/writer/OMWriter.hh b/src/OpenMesh/Core/IO/writer/OMWriter.hh index 9693951d..110285ed 100644 --- a/src/OpenMesh/Core/IO/writer/OMWriter.hh +++ b/src/OpenMesh/Core/IO/writer/OMWriter.hh @@ -121,8 +121,8 @@ protected: bool write_binary(std::ostream&, BaseExporter&, Options) const; - size_t store_binary_custom_chunk( std::ostream&, const BaseProperty&, - OMFormat::Chunk::Entity, bool) const; + size_t store_binary_custom_chunk(std::ostream&, BaseProperty&, + OMFormat::Chunk::Entity, bool) const; };