43 m_TargetStructure = targetStructure;
47 int numberOfPoints = targetSurfaceVtk->GetNumberOfPoints();
49 if ( numberOfPoints > 0 )
53 colors->SetNumberOfComponents(1);
54 colors->SetName(m_ScalarArrayIdentifier.c_str());
58 for (
int n = 0; n < numberOfPoints ; ++n)
60 colors->InsertNextTuple1(color);
64 targetSurfaceVtk->GetPointData()->AddArray(colors);
65 targetSurfaceVtk->GetPointData()->Update();
142 mitk::BaseGeometry::Pointer targetStructureGeometry = this->GetGeometryOfTarget();
143 mitk::Point3D targetStructureOrigin = targetStructureGeometry->GetOrigin();
147 int numberOfPoints = targetSurfaceVtk->GetNumberOfPoints();
152 transformFilter->SetInputData(0, targetSurfaceVtk);
153 transformFilter->SetTransform(targetStructureGeometry->GetVtkTransform());
154 transformFilter->Update();
157 if ( numberOfPoints > 0 )
161 colors->SetNumberOfComponents(1);
162 colors->SetName(m_ScalarArrayIdentifier.c_str());
164 for (
int n = 0; n < numberOfPoints ; ++n)
166 float score = m_UseMaximumScore ? 0.0 : 1.0;
168 if ( m_ControlNodesVector.empty() )
173 else if ( m_ControlNodesVector.size() == m_NumberOfTargets )
181 double coordinates[3];
182 mitk::Point3D coordinatesMitk;
183 targetSurfaceVtkTransformed->GetPoint(n, coordinates);
184 coordinatesMitk[0] = coordinates[0];
185 coordinatesMitk[1] = coordinates[1];
186 coordinatesMitk[2] = coordinates[2];
190 itk::Vector<float, 3u> vector = targetStructureOrigin - coordinatesMitk;
193 for (std::vector<mitk::DataNode::Pointer>::iterator it = m_ControlNodesVector.begin();
194 it != m_ControlNodesVector.end(); ++it)
196 if ( (*it)->GetData() ==
nullptr || (*it)->GetData()->GetGeometry() ==
nullptr )
198 mitkThrow() <<
"Control data node and geometry of the node must not be null.";
201 itk::Vector<float, 3u> controlPointToOriginVector = targetStructureOrigin - (*it)->GetData()->GetGeometry()->GetOrigin();
202 controlPointToOriginVector.Normalize();
204 float angle = acos( vector * controlPointToOriginVector );
205 float angleDifference = angle - m_OptimalAngle;
206 float tmpScore = 1 - (angleDifference >= 0 ? angleDifference : -angleDifference);
210 if ( (m_UseMaximumScore && tmpScore > score) || (!m_UseMaximumScore && tmpScore < score) )
216 colors->InsertNextTuple1(score);
219 targetSurfaceVtk->GetPointData()->AddArray(colors);
220 targetSurfaceVtk->GetPointData()->Update();
248 if ( m_TargetStructure.IsNull() )
250 mitkThrow() <<
"Target structure must be set before position of target is set.";
253 mitk::BaseData* targetStructureData = m_TargetStructure->GetData();
254 if ( ! targetStructureData )
256 mitkThrow() <<
"Data of target structure must not be null.";
259 mitk::BaseGeometry::Pointer targetStructureGeometry = targetStructureData->GetGeometry();
260 if ( targetStructureGeometry.IsNull() )
262 mitkThrow() <<
"Geometry of target structure must not be null.";
265 return targetStructureGeometry;