diff --git a/ApplicationLibCode/FileInterface/RifVtkImportUtil.cpp b/ApplicationLibCode/FileInterface/RifVtkImportUtil.cpp index 0afc6070b2..4cdc9d60de 100644 --- a/ApplicationLibCode/FileInterface/RifVtkImportUtil.cpp +++ b/ApplicationLibCode/FileInterface/RifVtkImportUtil.cpp @@ -119,7 +119,7 @@ std::vector RifVtkImportUtil::readConnectivity( const pugi::xml_node& //-------------------------------------------------------------------------------------------------- std::map> RifVtkImportUtil::readProperties( const pugi::xml_node& piece ) { - return readDataArrays( piece.child( "CellData" ) ); + return readDataArrays( piece.child( "CellData" ), false ); } //-------------------------------------------------------------------------------------------------- @@ -127,13 +127,14 @@ std::map> RifVtkImportUtil::readProperties( cons //-------------------------------------------------------------------------------------------------- std::map> RifVtkImportUtil::readPointProperties( const pugi::xml_node& piece ) { - return readDataArrays( piece.child( "PointData" ) ); + // Vector arrays such as "disp" are read by readDisplacements + return readDataArrays( piece.child( "PointData" ), true ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::map> RifVtkImportUtil::readDataArrays( const pugi::xml_node& data ) +std::map> RifVtkImportUtil::readDataArrays( const pugi::xml_node& data, bool scalarsOnly ) { if ( !data ) return {}; @@ -141,6 +142,8 @@ std::map> RifVtkImportUtil::readDataArrays( cons for ( const auto& dataArray : data.children( "DataArray" ) ) { + if ( scalarsOnly && dataArray.attribute( "NumberOfComponents" ).as_int( 1 ) != 1 ) continue; + const char* name = dataArray.attribute( "Name" ).value(); if ( name && *name ) { diff --git a/ApplicationLibCode/FileInterface/RifVtkImportUtil.h b/ApplicationLibCode/FileInterface/RifVtkImportUtil.h index 46204729a0..66a3e1e2d7 100644 --- a/ApplicationLibCode/FileInterface/RifVtkImportUtil.h +++ b/ApplicationLibCode/FileInterface/RifVtkImportUtil.h @@ -48,7 +48,7 @@ public: static std::map> readPointProperties( const pugi::xml_node& piece ); private: - static std::map> readDataArrays( const pugi::xml_node& data ); + static std::map> readDataArrays( const pugi::xml_node& data, bool scalarsOnly ); static std::vector parseVec3ds( std::string_view text ); static std::vector parseVec3fs( std::string_view text ); }; diff --git a/ApplicationLibCode/UnitTests/RifVtkImportUtil-Test.cpp b/ApplicationLibCode/UnitTests/RifVtkImportUtil-Test.cpp index 0f22f834ac..2e677572e5 100644 --- a/ApplicationLibCode/UnitTests/RifVtkImportUtil-Test.cpp +++ b/ApplicationLibCode/UnitTests/RifVtkImportUtil-Test.cpp @@ -280,3 +280,27 @@ TEST( RifVtkImportUtilTest, ReadProperties_MissingCellDataSection ) auto properties = RifVtkImportUtil::readProperties( piece ); EXPECT_TRUE( properties.empty() ); } + +//-------------------------------------------------------------------------------------------------- +// readPointProperties +//-------------------------------------------------------------------------------------------------- + +TEST( RifVtkImportUtilTest, ReadPointProperties_SkipsVectorArrays ) +{ + pugi::xml_document doc; + auto piece = parsePiece( doc, R"( + + + + 1.0 2.0 + 0 0 0 0 0 0 + + + )" ); + + auto properties = RifVtkImportUtil::readPointProperties( piece ); + + ASSERT_EQ( properties.size(), 1u ); + ASSERT_TRUE( properties.count( "pressure" ) > 0 ); + EXPECT_FLOAT_EQ( properties["pressure"][1], 2.0f ); +}