MCPcopy Create free account
hub / github.com/MITK/MITK / DoRead

Method DoRead

Modules/Core/src/IO/mitkGeometryDataReaderService.cpp:34–103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32}
33
34std::vector<itk::SmartPointer<mitk::BaseData>> mitk::GeometryDataReaderService::DoRead()
35{
36 // Switch the current locale to "C"
37 LocaleSwitch localeSwitch("C");
38
39 std::vector<itk::SmartPointer<BaseData>> result;
40
41 InputStream stream(this);
42
43 std::string s(std::istreambuf_iterator<char>{stream.rdbuf()}, std::istreambuf_iterator<char>());
44 tinyxml2::XMLDocument doc;
45 doc.Parse(s.c_str(), s.size());
46 if (!doc.Error())
47 {
48 tinyxml2::XMLHandle docHandle(&doc);
49
50 for (auto *geomDataElement = docHandle.FirstChildElement("GeometryData").ToElement();
51 geomDataElement != nullptr;
52 geomDataElement = geomDataElement->NextSiblingElement())
53 {
54 for (auto *currentElement = geomDataElement->FirstChildElement(); currentElement != nullptr;
55 currentElement = currentElement->NextSiblingElement())
56 {
57 // different geometries could have been serialized from a GeometryData
58 // object:
59 std::string tagName = currentElement->Value();
60 if (tagName == "Geometry3D")
61 {
62 Geometry3D::Pointer restoredGeometry = Geometry3DToXML::FromXML(currentElement);
63 if (restoredGeometry.IsNotNull())
64 {
65 GeometryData::Pointer newGeometryData = GeometryData::New();
66 newGeometryData->SetGeometry(restoredGeometry);
67 result.push_back(newGeometryData.GetPointer());
68 }
69 else
70 {
71 MITK_ERROR << "Invalid <Geometry3D> tag encountered. Skipping.";
72 }
73 }
74 else if (tagName == "ProportionalTimeGeometry")
75 {
76 ProportionalTimeGeometry::Pointer restoredTimeGeometry =
77 ProportionalTimeGeometryToXML::FromXML(currentElement);
78 if (restoredTimeGeometry.IsNotNull())
79 {
80 GeometryData::Pointer newGeometryData = GeometryData::New();
81 newGeometryData->SetTimeGeometry(restoredTimeGeometry);
82 result.push_back(newGeometryData.GetPointer());
83 }
84 else
85 {
86 MITK_ERROR << "Invalid <ProportionalTimeGeometry> tag encountered. Skipping.";
87 }
88 }
89 } // for child of <GeometryData>
90 } // for <GeometryData>
91 }

Callers

nothing calls this directly

Calls 10

ValueMethod · 0.80
IsNotNullMethod · 0.80
GetPointerMethod · 0.80
SetTimeGeometryMethod · 0.80
NewFunction · 0.50
ParseMethod · 0.45
sizeMethod · 0.45
ErrorMethod · 0.45
SetGeometryMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected