Source code for svcco.branch_addition.geodesic

import vtk
from vtk.util import numpy_support

[docs]def extract_surface(msh): msh_vtk = numpy_support.numpy_to_vtk(msh) pts = vtk.vtkPoints() pts.SetData(msh_vtk) poly = vtk.vtkPolyData() poly.SetPoints(pts) bounds = poly.GetBounds() x_range = bounds[1]-bounds[0] y_range = bounds[3]-bounds[2] z_range = bounds[5]-bounds[4] PCA = vtk.vtkPCANormalEstimation() PCA.SetInputData(poly) PCA.SetSampleSize(10) PCA.SetNormalOrientationToGraphTraversal() PCA.FlipNormalsOn() distance = vtk.vtkSignedDistance() distance.SetInputConnection(PCA.GetOutputPort()) distance.SetRadius(1) #distance.SetDimensions(256,256,256) distance.SetBounds(bounds[0] - x_range * .1, bounds[1] + x_range * .1, bounds[2] - y_range * .1, bounds[3] + y_range * .1, bounds[4] - z_range * .1, bounds[5] + z_range * .1) surf_extract = vtk.vtkExtractSurface() surf_extract.SetInputConnection(distance.GetOutputPort()) surf_extract.SetRadius(1) surf_extract.Update() clean = vtk.vtkCleanPolyData() clean.SetInputConnection(surf_extract.GetOutputPort()) clean.Update() tri = vtk.vtkTriangleFilter() tri.SetInputConnection(clean.GetOutputPort()) tri.Update() return tri.GetOutput()
[docs]def geodesic(polydata,proximal,distal,terminal,bifurcation): proximal_idx = polydata.FindPoint(proximal) distal_idx = polydata.FindPoint(distal) terminal_idx = polydata.FindPoint(terminal) bifurcation_idx = polydata.FindPoint(bifurcation) DIJ_1 = vtk.vtkDijkstraGraphGeodesicPath() DIJ_1.SetInputData(polydata) DIJ_1.SetStartVertex(proximal_idx) DIJ_1.SetEndVertex(bifurcation_idx) DIJ_1.Update() DIJ_2 = vtk.vtkDijkstraGraphGeodesicPath() DIJ_2.SetInputData(polydata) DIJ_2.SetStartVertex(bifurcation_idx) DIJ_2.SetEndVertex(distal_idx) DIJ_2.Update() DIJ_3 = vtk.vtkDijkstraGraphGeodesicPath() DIJ_3.SetInputData(polydata) DIJ_3.SetStartVertex(bifurcation_idx) DIJ_3.SetEndVertex(terminal_idx) DIJ_3.Update() poly_path_1 = DIJ_1.GetOutput() poly_path_2 = DIJ_2.GetOutput() poly_path_3 = DIJ_3.GetOutput() proximal_geodesic = numpy_support.vtk_to_numpy(poly_path_1.GetPoints().GetData()) distal_geodesic = numpy_support.vtk_to_numpy(poly_path_2.GetPoints().GetData()) terminal_geodesic = numpy_support.vtk_to_numpy(poly_path_3.GetPoints().GetData()) proximal_length = poly_path_1.GetLength() distal_length = poly_path_2.GetLength() terminal_length = poly_path_3.GetLength() proximal_data = {'path' :proximal_geodesic, 'length':proximal_length} distal_data = {'path' :distal_geodesic, 'length':distal_length} terminal_data = {'path' :terminal_geodesic, 'length':terminal_length} return proximal_data,distal_data,terminal_data