58 if ( ! targetSurfaceVtk ) {
return; }
60 vtkIdType numberOfPoints = targetSurfaceVtk->GetNumberOfPoints();
65 colors->SetNumberOfComponents(1);
66 colors->SetName(
"USNavigation::Occlusion");
73 float intersection = -1;
74 for ( vtkIdType n = 0; n < numberOfPoints; n++ )
76 colors->InsertNextTuple1(intersection);
79 if ( numberOfPoints > 0 )
81 targetSurfaceVtk->GetPointData()->AddArray(colors);
82 targetSurfaceVtk->GetPointData()->Update();
90 else if ( m_ObstacleStructures.IsNull() )
92 float intersection = 0;
93 for ( vtkIdType n = 0; n < numberOfPoints; n++ )
95 colors->InsertNextTuple1(intersection);
98 if ( numberOfPoints > 0 )
100 targetSurfaceVtk->GetPointData()->AddArray(colors);
101 targetSurfaceVtk->GetPointData()->Update();
108 mitk::Point3D position = nd->GetPosition();
110 point1[0] = position[0]; point1[1] = position[1]; point1[2] = position[2];
115 transformFilter->SetInputData(0, targetSurfaceVtk);
116 transformFilter->SetTransform(m_TargetStructure->GetData()->GetGeometry()->GetVtkTransform());
117 transformFilter->Update();
120 std::vector<bool> occlusion(numberOfPoints,
false);
123 for (mitk::DataStorage::SetOfObjects::ConstIterator it = m_ObstacleStructures->Begin();
124 it != m_ObstacleStructures->End(); ++it)
131 transformFilter->SetInputData(0, polyData);
132 transformFilter->SetTransform(it->Value()->GetData()->GetGeometry()->GetVtkTransform());
133 transformFilter->Update();
134 polyData = transformFilter->GetOutput();
138 cellLocator->SetDataSet(polyData);
139 cellLocator->BuildLocator();
142 for ( vtkIdType n = 0; n < numberOfPoints; n++ )
145 if ( cellLocator->IntersectWithLine(point1, targetSurfaceVtkTransformed->GetPoint(n), points,
nullptr) != 0 )
147 occlusion.at(n) =
true;
152 if ( numberOfPoints > 0 )
155 float one = 1.0f;
float zero = 0.0f;
156 for ( std::vector<bool>::iterator it = occlusion.begin(); it != occlusion.end(); ++it )
158 colors->InsertNextTuple1(*it ? one : zero);
161 targetSurfaceVtk->GetPointData()->AddArray(colors);
162 targetSurfaceVtk->GetPointData()->Update();