From 2d1ebf5a8c3992b349eefd5e75311822b84f97ab Mon Sep 17 00:00:00 2001 From: Alexandra Heuschling Date: Thu, 5 Nov 2020 21:27:02 +0100 Subject: [PATCH] implement two ways of finding out the type of property --- src/OpenMesh/Core/IO/writer/OMWriter.cc | 37 +++++++++++++++++++++++-- src/OpenMesh/Core/IO/writer/OMWriter.hh | 4 +-- 2 files changed, 37 insertions(+), 4 deletions(-) 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; };