From 53e68c18a1a89089368809b21f6903c4fde44548 Mon Sep 17 00:00:00 2001 From: Alexandra Heuschling Date: Tue, 10 Nov 2020 16:43:34 +0100 Subject: [PATCH] add function to OMReader, to be consistent with OMWriter --- src/OpenMesh/Core/IO/reader/OMReader.cc | 2 ++ src/OpenMesh/Core/IO/writer/OMWriter.cc | 47 +++++++++++++------------ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/OpenMesh/Core/IO/reader/OMReader.cc b/src/OpenMesh/Core/IO/reader/OMReader.cc index 66d4e819..c3fa8d8c 100644 --- a/src/OpenMesh/Core/IO/reader/OMReader.cc +++ b/src/OpenMesh/Core/IO/reader/OMReader.cc @@ -731,7 +731,9 @@ size_t _OMReader_::restore_binary_custom_data(std::istream& _is, BaseProperty* _ size_t bytes = 0; Chunk::esize_t block_size; Chunk::PropertyName custom_prop; + Chunk::PropertyType property_type; + bytes += restore(_is, property_type, _swap); bytes += restore(_is, block_size, OMFormat::Chunk::Integer_32, _swap); if (_bp) { diff --git a/src/OpenMesh/Core/IO/writer/OMWriter.cc b/src/OpenMesh/Core/IO/writer/OMWriter.cc index 528b2cfa..c013746e 100644 --- a/src/OpenMesh/Core/IO/writer/OMWriter.cc +++ b/src/OpenMesh/Core/IO/writer/OMWriter.cc @@ -623,39 +623,42 @@ size_t _OMWriter_::store_binary_custom_chunk(std::ostream& _os, // 3. data 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()) + 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); + + + //choose one of both tests + if(_bp.internal_type_name() == get_type_name() || bp_bool != nullptr) type = OMFormat::Chunk::PropertyType::BoolType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_char != nullptr) type = OMFormat::Chunk::PropertyType::CharType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_double != nullptr) type = OMFormat::Chunk::PropertyType::DoubleType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_float != nullptr) type = OMFormat::Chunk::PropertyType::FloatType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_int != nullptr) type = OMFormat::Chunk::PropertyType::IntType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_long != nullptr) type = OMFormat::Chunk::PropertyType::LongType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_short != nullptr) type = OMFormat::Chunk::PropertyType::ShortType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_uchar != nullptr) type = OMFormat::Chunk::PropertyType::UCharType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_uint != nullptr) type = OMFormat::Chunk::PropertyType::UIntType; - else if(_bp.internal_type_name() == get_type_name()) + else if(_bp.internal_type_name() == get_type_name() || bp_ulong != nullptr) type = OMFormat::Chunk::PropertyType::ULongType; - else if(_bp.internal_type_name() == get_type_name>()) + else if(_bp.internal_type_name() == get_type_name>() || bp_vecdouble != nullptr) type = OMFormat::Chunk::PropertyType::VecDoubleType; bytes += store(_os, type, _swap);