CustusX  2023.01.05-dev+develop.0da12
An IGT application
cxBranchList.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 #ifndef BRANCHLIST_H_
12 #define BRANCHLIST_H_
13 
14 #include "cxBranch.h"
15 #include "cxForwardDeclarations.h"
16 #include "cxMesh.h"
17 #include "cxVector3D.h"
18 #include "org_custusx_registration_method_bronchoscopy_Export.h"
19 
20 
21 namespace cx
22 {
23 
24 typedef std::vector< Eigen::Matrix4d > M4Vector;
25 
26 #define MAX_ROTATION_TO_TILT_DOWN_DEGREES 30 //Threshold between rotation direction of scope to tilt up or down in a bifurcation.
27 
28 class org_custusx_registration_method_bronchoscopy_EXPORT BranchList
29 {
30  std::vector<BranchPtr> mBranches;
31 public:
32  BranchList();
33  virtual ~BranchList();
34  void addBranch(BranchPtr b);
35  void deleteBranch(BranchPtr b);
36  void deleteAllBranches();
37  std::vector<BranchPtr> getBranches();
38  void findBranchesInCenterline(Eigen::MatrixXd positions_r, bool sortByZindex = true);
39  void selectGenerations(int maxGeneration);
40  void findBronchoscopeRotation();
41  void calculateBronchoscopeRotation(BranchPtr branch);
42  void smoothOrientations();
43  void smoothRadius();
44  BranchPtr findBranchWithLargestRadius();
45  void interpolateBranchPositions(double resolution);
46  void smoothBranchPositions(int controlPointDistance);
47  void excludeClosePositionsInCTCenterline(double minPointDistance);
48  void markLungLap(QString name, Vector3D position);
49  void setLapName(BranchPtr branch, QString name);
50  QString findClosestLungLap(Vector3D position);
51  double findDistance(Vector3D p1, Vector3D p2);
52  BranchPtr findClosestBranch(Vector3D targetCoordinate_r);
53  BranchListPtr removePositionsForLocalRegistration(Eigen::MatrixXd trackingPositions, double maxDistance);
54  vtkPolyDataPtr createVtkPolyDataFromBranches(bool fullyConnected = false, bool straightBranches = false) const;
55 };
56 
57 std::pair<Eigen::MatrixXd,Eigen::MatrixXd > org_custusx_registration_method_bronchoscopy_EXPORT findConnectedPointsInCT(int startIndex , Eigen::MatrixXd positionsNotUsed);
58 Eigen::MatrixXd sortMatrix(int rowNumber, Eigen::MatrixXd matrix);
59 Eigen::MatrixXd org_custusx_registration_method_bronchoscopy_EXPORT eraseCol(int removeIndex, Eigen::MatrixXd positions);
60 std::pair<Eigen::MatrixXd::Index, double> org_custusx_registration_method_bronchoscopy_EXPORT dsearch(Eigen::Vector3d p, Eigen::MatrixXd positions);
61 std::pair<std::vector<Eigen::MatrixXd::Index>, Eigen::VectorXd > org_custusx_registration_method_bronchoscopy_EXPORT dsearchn(Eigen::MatrixXd p1, Eigen::MatrixXd p2);
62 std::vector<Eigen::Vector3d> org_custusx_registration_method_bronchoscopy_EXPORT smoothBranch(BranchPtr branchPtr, int startIndex, Eigen::MatrixXd startPosition);
63 double bendingDirectionToBronchoscopeRotation(Vector3D bendingDirection, Vector3D parentBranchOrientation, double parentRotation);
64 
65 org_custusx_registration_method_bronchoscopy_EXPORT Vector3D calculateBronchoscopeBendingDirection(Vector3D A, Vector3D B);
66 
67 }//namespace cx
68 
69 #endif /* BRANCHLIST_H_ */
std::vector< Eigen::Vector3d > smoothBranch(BranchPtr branchPtr, int startIndex, Eigen::MatrixXd startPosition)
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > findConnectedPointsInCT(int startIndex, Eigen::MatrixXd positionsNotUsed)
double findDistance(Eigen::MatrixXd p1, Eigen::MatrixXd p2)
Eigen::MatrixXd eraseCol(int removeIndex, Eigen::MatrixXd positions)
boost::shared_ptr< class BranchList > BranchListPtr
double bendingDirectionToBronchoscopeRotation(Vector3D bendingDirection, Vector3D parentBranchOrientation, double parentRotation)
Vector3D calculateBronchoscopeBendingDirection(Vector3D A, Vector3D B)
boost::shared_ptr< class Branch > BranchPtr
vtkSmartPointer< vtkPolyData > vtkPolyDataPtr
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
Definition: cxVector3D.h:42
Eigen::MatrixXd sortMatrix(int rowNumber, Eigen::MatrixXd matrix)
std::pair< std::vector< Eigen::MatrixXd::Index >, Eigen::VectorXd > dsearchn(Eigen::MatrixXd p1, Eigen::MatrixXd p2)
std::vector< Eigen::Matrix4d > M4Vector
std::pair< Eigen::MatrixXd::Index, double > dsearch(Eigen::Vector3d p, Eigen::MatrixXd positions)
Namespace for all CustusX production code.