37 MITK_ERROR <<
"mitk::TubeGraphPicker: No tube graph available. Please set an input!" << std::endl;
39 return std::pair<mitk::TubeGraph::TubeDescriptorType, mitk::TubeElement *>(
TubeGraph::ErrorId, nullPointer);
46 float currentRadius = 0;
53 std::vector<mitk::TubeGraphEdge> allEdges =
m_TubeGraph->GetVectorOfAllEdges();
54 for (
auto edge = allEdges.begin(); edge != allEdges.end(); ++edge)
56 std::pair<mitk::TubeGraphVertex, mitk::TubeGraphVertex> soureTargetPair =
60 m_TubeGraph->GetVertexDescriptor(soureTargetPair.second));
64 std::vector<mitk::TubeElement *> allElements = edge->GetElementVector();
65 for (
unsigned int index = 0; index < edge->GetNumberOfElements(); index++)
67 currentPosition = allElements[index]->GetCoordinates();
68 if (dynamic_cast<mitk::CircularProfileTubeElement *>(allElements[index]))
75 m_TubeGraph->GetGeometry()->WorldToIndex(pickedPosition, worldIndex);
77 m_WorldPosition[0] = worldIndex[0];
78 m_WorldPosition[1] = worldIndex[1];
79 m_WorldPosition[2] = worldIndex[2];
81 currentDistance = m_WorldPosition.EuclideanDistanceTo(currentPosition);
82 if (currentDistance < closestDistance && (currentDistance - currentRadius) < 1.0)
84 closestDistance = currentDistance;
85 tubeId = currentTubeId;
86 tubeElement = allElements[index];
92 return std::make_pair(tubeId, tubeElement);
void SetTubeGraph(const TubeGraph *tubeGraph)
static const TubeDescriptorType ErrorId
Base Class for Tube Graphs.
TubeGraph::ConstPointer m_TubeGraph
virtual ~TubeGraphPicker()
Abstract class for elements which describes tubular structur.
std::pair< mitk::TubeGraph::TubeDescriptorType, mitk::TubeElement * > GetPickedTube(const Point3D pickedPosition)
TubeGraphProperty::Pointer m_TubeGraphProperty
std::pair< VertexDescriptorType, VertexDescriptorType > TubeDescriptorType
Property for tube graphs.
Class for elements which describes tubular structur with a circular cross section.