4 #include <vtkPolyData.h>
8 #include <vtkCellArray.h>
31 int N = centerline->GetNumberOfPoints();
32 Eigen::MatrixXd CLpoints(3,N);
33 for(vtkIdType i = 0; i < N; i++)
36 centerline->GetPoint(i,p);
37 Eigen::Vector3d position;
38 position(0) = p[0]; position(1) = p[1]; position(2) = p[2];
39 CLpoints.block(0 , i , 3 , 1) = position;
47 mBranchListPtr->deleteAllBranches();
51 mBranchListPtr->findBranchesInCenterline(CLpoints);
52 mBranchListPtr->calculateOrientations();
53 mBranchListPtr->smoothOrientations();
55 std::cout <<
"Number of branches in CT centerline: " << mBranchListPtr->getBranches().size() << std::endl;
62 double minDistance = 100000;
63 int minDistancePositionIndex;
65 std::vector<BranchPtr> branches = mBranchListPtr->getBranches();
66 for (
int i = 0; i < branches.size(); i++)
68 Eigen::MatrixXd positions = branches[i]->getPositions();
69 for (
int j = 0; j < positions.cols(); j++)
71 double D =
findDistance(positions.col(j), targetCoordinate);
75 minDistanceBranch = branches[i];
76 minDistancePositionIndex = j;
81 mProjectedBranchPtr = minDistanceBranch;
82 mProjectedIndex = minDistancePositionIndex;
88 mRoutePositions.clear();
95 Eigen::MatrixXd positions = searchBranchPtr->getPositions();
97 for (
int i = startIndex; i>=0; i--)
98 mRoutePositions.push_back(positions.col(i));
100 BranchPtr parentBranchPtr = searchBranchPtr->getParentBranch();
102 searchBranchUp(parentBranchPtr, parentBranchPtr->getPositions().cols()-1);
122 for (
int j = mRoutePositions.size() - 1; j >= 0; j--)
124 vtkIdType cells[1] = { points->GetNumberOfPoints() };
125 points->InsertNextPoint(mRoutePositions[j](0),mRoutePositions[j](1),mRoutePositions[j](2));
126 lines->InsertNextCell(1, cells);
128 retval->SetPoints(points);
129 retval->SetVerts(lines);
135 double d0 = p1(0) - p2(0);
136 double d1 = p1(1) - p2(1);
137 double d2 = p1(2) - p2(2);
139 double D = sqrt( d0*d0 + d1*d1 + d2*d2 );
void findClosestPointInBranches(Vector3D targetCoordinate)
vtkSmartPointer< class vtkCellArray > vtkCellArrayPtr
void setCenterline(vtkPolyDataPtr centerline)
void processCenterline(vtkPolyDataPtr centerline)
vtkSmartPointer< class vtkPolyData > vtkPolyDataPtr
boost::shared_ptr< class Branch > BranchPtr
double findDistance(Eigen::MatrixXd p1, Eigen::MatrixXd p2)
void searchBranchUp(BranchPtr searchBranchPtr, int startIndex)
vtkPolyDataPtr findRouteToTarget(Vector3D targetCoordinate)
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
vtkPolyDataPtr addVTKPoints()
void findRoutePositions()
vtkSmartPointer< class vtkPoints > vtkPointsPtr
Eigen::MatrixXd getCenterlinePositions(vtkPolyDataPtr centerline)