diff --git a/module/read/ReadVtk/ReadVtk.cpp b/module/read/ReadVtk/ReadVtk.cpp index cc00687d6..b30b3175c 100644 --- a/module/read/ReadVtk/ReadVtk.cpp +++ b/module/read/ReadVtk/ReadVtk.cpp @@ -67,6 +67,20 @@ bool isCollectionFile(const std::string &fn) return false; } +template +std::vector getFields(VO *dsa) +{ + std::vector fields; + if (!dsa) + return fields; + int na = dsa->GetNumberOfArrays(); + for (int i = 0; i < na; ++i) { + fields.push_back(dsa->GetArrayName(i)); + //cerr << "field " << i << ": " << fields[i] << endl; + } + return fields; +} + template VtkFile readFile(const std::string &filename, int piece = -1, bool ghost = false, bool onlyMeta = false) { @@ -123,7 +137,19 @@ VtkFile readFile(const std::string &filename, int piece = -1, bool ghost = false if (onlyMeta) { if (reader->GetOutput()) { reader->GetOutput()->Register(reader); - result.dataset = reader->GetOutput(); + + if (result.pointfields.empty() && result.cellfields.empty()) { + reader->Update(); + result.dataset = reader->GetOutput(); + if (auto ds = vtkDataSet::SafeDownCast(result.dataset)) { + result.pointfields = getFields(ds->GetPointData()); + if (result.pointfields.empty()) + result.pointfields = getFields(ds->GetFieldData()); + result.cellfields = getFields(ds->GetCellData()); + } + } else { + result.dataset = reader->GetOutput(); + } } return result; } @@ -307,20 +333,6 @@ std::map> ReadVtk::readXmlCollection(const std::str return timesteps; } -template -std::vector getFields(VO *dsa) -{ - std::vector fields; - if (!dsa) - return fields; - int na = dsa->GetNumberOfArrays(); - for (int i = 0; i < na; ++i) { - fields.push_back(dsa->GetArrayName(i)); - //cerr << "field " << i << ": " << fields[i] << endl; - } - return fields; -} - void ReadVtk::setChoices(const VtkFile &fileinfo) { std::vector cellFields({Invalid});