| 101 | } |
| 102 | |
| 103 | std::map<mitk::MultiLabelSurfaceNetsExtractor::LabelValueType, vtkSmartPointer<vtkPolyData>> |
| 104 | mitk::MultiLabelSurfaceNetsExtractor::ExtractPerLabel( |
| 105 | vtkImageData* groupImage, |
| 106 | const std::vector<LabelValueType>& labelValues) |
| 107 | { |
| 108 | std::map<LabelValueType, vtkSmartPointer<vtkPolyData>> results; |
| 109 | if (groupImage == nullptr || labelValues.empty()) |
| 110 | { |
| 111 | return results; |
| 112 | } |
| 113 | |
| 114 | PrepareInput(groupImage); |
| 115 | |
| 116 | m_SurfaceNets->SetInputData(groupImage); |
| 117 | this->ConfigureLabels(labelValues); |
| 118 | m_SurfaceNets->SetOutputStyleToSelected(); |
| 119 | |
| 120 | for (auto label : labelValues) |
| 121 | { |
| 122 | m_SurfaceNets->InitializeSelectedLabelsList(); |
| 123 | m_SurfaceNets->AddSelectedLabel(static_cast<double>(label)); |
| 124 | m_SurfaceNets->Modified(); // VTK 9.5.2 cache bust, see Extract(). |
| 125 | |
| 126 | auto polydata = vtkSmartPointer<vtkPolyData>::New(); |
| 127 | m_NormalsFilter->Update(); |
| 128 | polydata->DeepCopy(m_NormalsFilter->GetOutput()); |
| 129 | |
| 130 | if (polydata->GetNumberOfCells() > 0) |
| 131 | results[label] = polydata; |
| 132 | } |
| 133 | |
| 134 | return results; |
| 135 | } |
| 136 | |
| 137 | vtkSmartPointer<vtkMatrix4x4> mitk::MultiLabelSurfaceNetsExtractor::GetImageToWorldMatrix(const BaseGeometry* geometry) |
| 138 | { |