| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // SPDX-FileCopyrightText: 2022-2023 Dennis Gläser <dennis.glaeser@iws.uni-stuttgart.de> | ||
| 2 | // SPDX-License-Identifier: MIT | ||
| 3 | /*! | ||
| 4 | * \file | ||
| 5 | * \ingroup VTK | ||
| 6 | * \copydoc GridFormat::VTSReader | ||
| 7 | */ | ||
| 8 | #ifndef GRIDFORMAT_VTK_VTS_READER_HPP_ | ||
| 9 | #define GRIDFORMAT_VTK_VTS_READER_HPP_ | ||
| 10 | |||
| 11 | #include <string> | ||
| 12 | #include <optional> | ||
| 13 | #include <array> | ||
| 14 | |||
| 15 | #include <gridformat/common/ranges.hpp> | ||
| 16 | #include <gridformat/common/field.hpp> | ||
| 17 | |||
| 18 | #include <gridformat/grid/reader.hpp> | ||
| 19 | #include <gridformat/vtk/common.hpp> | ||
| 20 | #include <gridformat/vtk/xml.hpp> | ||
| 21 | |||
| 22 | namespace GridFormat { | ||
| 23 | |||
| 24 | /*! | ||
| 25 | * \ingroup VTK | ||
| 26 | * \brief Reader for .vts file format | ||
| 27 | */ | ||
| 28 | class VTSReader : public GridReader { | ||
| 29 | private: | ||
| 30 | 228 | void _open(const std::string& filename, typename GridReader::FieldNames& fields) override { | |
| 31 |
1/2✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
|
228 | auto helper = VTK::XMLReaderHelper::make_from(filename, "StructuredGrid"); |
| 32 |
3/6✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 228 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 228 times.
✗ Branch 10 not taken.
|
228 | _extents = Ranges::array_from_string<std::size_t, 6>(helper.get("StructuredGrid/Piece").get_attribute("Extent")); |
| 33 |
2/4✓ Branch 2 taken 228 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 228 times.
✗ Branch 6 not taken.
|
228 | VTK::XMLDetail::copy_field_names_from(helper.get("StructuredGrid"), fields); |
| 34 | 228 | _helper.emplace(std::move(helper)); | |
| 35 | 228 | } | |
| 36 | |||
| 37 | 42 | void _close() override { | |
| 38 | 42 | _helper.reset(); | |
| 39 | 42 | _extents.reset(); | |
| 40 | 42 | } | |
| 41 | |||
| 42 | 1 | std::string _name() const override { | |
| 43 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "VTSReader"; |
| 44 | } | ||
| 45 | |||
| 46 | 857 | std::size_t _number_of_cells() const override { | |
| 47 | 857 | return VTK::CommonDetail::number_of_entities(_extents.value()); | |
| 48 | } | ||
| 49 | |||
| 50 | 1127 | std::size_t _number_of_points() const override { | |
| 51 |
1/2✓ Branch 1 taken 1127 times.
✗ Branch 2 not taken.
|
1127 | auto pextents = _extents.value(); |
| 52 | 1127 | pextents[1] += 1; | |
| 53 | 1127 | pextents[3] += 1; | |
| 54 | 1127 | pextents[5] += 1; | |
| 55 |
1/2✓ Branch 1 taken 1127 times.
✗ Branch 2 not taken.
|
2254 | return VTK::CommonDetail::number_of_entities(pextents); |
| 56 | } | ||
| 57 | |||
| 58 | 7 | std::size_t _number_of_pieces() const override { | |
| 59 | 7 | return 1; | |
| 60 | } | ||
| 61 | |||
| 62 | 296 | typename GridReader::PieceLocation _location() const override { | |
| 63 | 296 | const auto& ex = _extents.value(); | |
| 64 | typename GridReader::PieceLocation result; | ||
| 65 | 296 | result.lower_left = {ex[0], ex[2], ex[4]}; | |
| 66 | 296 | result.upper_right = {ex[1], ex[3], ex[5]}; | |
| 67 | 296 | return result; | |
| 68 | } | ||
| 69 | |||
| 70 | 84 | bool _is_sequence() const override { | |
| 71 | 84 | return false; | |
| 72 | } | ||
| 73 | |||
| 74 | 158 | FieldPtr _points() const override { | |
| 75 |
1/2✓ Branch 4 taken 158 times.
✗ Branch 5 not taken.
|
158 | return _helper.value().make_points_field("StructuredGrid/Piece/Points", _number_of_points()); |
| 76 | } | ||
| 77 | |||
| 78 | 262 | void _visit_cells(const typename GridReader::CellVisitor& visitor) const override { | |
| 79 | 262 | VTK::CommonDetail::visit_structured_cells(visitor, _extents.value(), false); | |
| 80 | 262 | } | |
| 81 | |||
| 82 | 631 | FieldPtr _cell_field(std::string_view name) const override { | |
| 83 |
2/4✓ Branch 2 taken 631 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 631 times.
✗ Branch 8 not taken.
|
631 | return _helper.value().make_data_array_field(name, "StructuredGrid/Piece/CellData", _number_of_cells()); |
| 84 | } | ||
| 85 | |||
| 86 | 631 | FieldPtr _point_field(std::string_view name) const override { | |
| 87 |
2/4✓ Branch 2 taken 631 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 631 times.
✗ Branch 8 not taken.
|
631 | return _helper.value().make_data_array_field(name, "StructuredGrid/Piece/PointData", _number_of_points()); |
| 88 | } | ||
| 89 | |||
| 90 | 54 | FieldPtr _meta_data_field(std::string_view name) const override { | |
| 91 |
1/2✓ Branch 4 taken 54 times.
✗ Branch 5 not taken.
|
54 | return _helper.value().make_data_array_field(name, "StructuredGrid/FieldData"); |
| 92 | } | ||
| 93 | |||
| 94 | std::optional<VTK::XMLReaderHelper> _helper; | ||
| 95 | std::optional<std::array<std::size_t, 6>> _extents; | ||
| 96 | }; | ||
| 97 | |||
| 98 | } // namespace GridFormat | ||
| 99 | |||
| 100 | #endif // GRIDFORMAT_VTK_VTS_READER_HPP_ | ||
| 101 |