def splitModels(self, Surface): dataArray = Surface.GetPointData().GetScalars("GroupIds") scalarRange = dataArray.GetRange() newPdList = [] newCaList = [] self._parentClass._helper.debug("started splitter") # generate containers CellArray & PolyData + copy points for i in range(1, int(scalarRange[1]) + 2): newCellArray = slicer.vtkCellArray() newPolyData = slicer.vtkPolyData() points = slicer.vtkPoints() points.DeepCopy(Surface.GetPoints()) newPolyData.SetPoints(points) newPolyData.SetPolys(newCellArray) newPolyData.Update() newPdList.append(newPolyData) newCaList.append(newCellArray) #Fill containers with Polys for i in range(0, Surface.GetPolys().GetNumberOfCells()): poi = Surface.GetCell(i).GetPointIds() if (poi.GetNumberOfIds() == 0): continue scalarsOfPoints = [] for pid in range(0, poi.GetNumberOfIds()): p = poi.GetId(pid) scalarsOfPoints.append(dataArray.GetValue(p)) max = 0 largestIndex = 0 for j in range(1, int(scalarRange[1]) + 2): c = scalarsOfPoints.count(j) if c >= max: max = c largestIndex = j newCaList[largestIndex].InsertNextCell(Surface.GetCell(i)) # clean PolyData for pd in newPdList: cleanPolyData = slicer.vtkCleanPolyData() cleanPolyData.SetInput(pd) cleanPolyData.Update() pd.DeepCopy(cleanPolyData.GetOutput()) self._parentClass._helper.debug("finished splitter") return newPdList
def splitModels(self,Surface): dataArray=Surface.GetPointData().GetScalars("GroupIds") scalarRange=dataArray.GetRange() newPdList=[] newCaList=[] self._parentClass._helper.debug("started splitter") # generate containers CellArray & PolyData + copy points for i in range(1,int(scalarRange[1])+2): newCellArray=slicer.vtkCellArray() newPolyData=slicer.vtkPolyData() points=slicer.vtkPoints() points.DeepCopy(Surface.GetPoints()) newPolyData.SetPoints(points) newPolyData.SetPolys(newCellArray) newPolyData.Update() newPdList.append(newPolyData) newCaList.append(newCellArray) #Fill containers with Polys for i in range (0,Surface.GetPolys().GetNumberOfCells()): poi=Surface.GetCell(i).GetPointIds() if(poi.GetNumberOfIds()==0): continue scalarsOfPoints =[] for pid in range(0,poi.GetNumberOfIds()): p=poi.GetId(pid) scalarsOfPoints.append(dataArray.GetValue(p)) max=0 largestIndex=0 for j in range(1,int(scalarRange[1])+2): c=scalarsOfPoints.count(j) if c >= max: max=c largestIndex=j newCaList[largestIndex].InsertNextCell(Surface.GetCell(i)) # clean PolyData for pd in newPdList: cleanPolyData = slicer.vtkCleanPolyData(); cleanPolyData.SetInput(pd); cleanPolyData.Update(); pd.DeepCopy(cleanPolyData.GetOutput()) self._parentClass._helper.debug("finished splitter") return newPdList
def prepareModel(self,polydata): if polydata == None: return -1 # skip nonmanifold surfaceCleaner = slicer.vtkCleanPolyData() surfaceCleaner.SetInput(polydata) surfaceCleaner.Update() surfaceTriangulator = slicer.vtkTriangleFilter() surfaceTriangulator.SetInput(surfaceCleaner.GetOutput()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() # new steps for preparation to avoid problems because of slim models (f.e. at stenosis) subdiv = slicer.vtkLinearSubdivisionFilter() subdiv.SetInput(surfaceTriangulator.GetOutput()) subdiv.SetNumberOfSubdivisions(1) subdiv.Update() smooth = slicer.vtkWindowedSincPolyDataFilter() smooth.SetInput(subdiv.GetOutput()) smooth.SetNumberOfIterations(20) smooth.SetPassBand(0.1) smooth.SetBoundarySmoothing(1) smooth.NormalizeCoordinatesOn() smooth.Update() normals = slicer.vtkPolyDataNormals() normals.SetInput(smooth.GetOutput()) normals.SetAutoOrientNormals(1) normals.SetFlipNormals(0) normals.SetConsistency(1) normals.SplittingOff() normals.Update() surfaceCapper = slicer.vtkvmtkCapPolyData() surfaceCapper.SetInput(normals.GetOutput()) surfaceCapper.SetDisplacement(self._capDisplacement) surfaceCapper.SetInPlaneDisplacement(self._capDisplacement) surfaceCapper.Update() polyDataNew = slicer.vtkPolyData() polyDataNew.DeepCopy(surfaceCapper.GetOutput()) polyDataNew.Update() return polyDataNew
def prepareModel(self, polydata): if polydata == None: return -1 # skip nonmanifold surfaceCleaner = slicer.vtkCleanPolyData() surfaceCleaner.SetInput(polydata) surfaceCleaner.Update() surfaceTriangulator = slicer.vtkTriangleFilter() surfaceTriangulator.SetInput(surfaceCleaner.GetOutput()) surfaceTriangulator.PassLinesOff() surfaceTriangulator.PassVertsOff() surfaceTriangulator.Update() # new steps for preparation to avoid problems because of slim models (f.e. at stenosis) subdiv = slicer.vtkLinearSubdivisionFilter() subdiv.SetInput(surfaceTriangulator.GetOutput()) subdiv.SetNumberOfSubdivisions(1) subdiv.Update() smooth = slicer.vtkWindowedSincPolyDataFilter() smooth.SetInput(subdiv.GetOutput()) smooth.SetNumberOfIterations(20) smooth.SetPassBand(0.1) smooth.SetBoundarySmoothing(1) smooth.NormalizeCoordinatesOn() smooth.Update() normals = slicer.vtkPolyDataNormals() normals.SetInput(smooth.GetOutput()) normals.SetAutoOrientNormals(1) normals.SetFlipNormals(0) normals.SetConsistency(1) normals.SplittingOff() normals.Update() surfaceCapper = slicer.vtkvmtkCapPolyData() surfaceCapper.SetInput(normals.GetOutput()) surfaceCapper.SetDisplacement(self._capDisplacement) surfaceCapper.SetInPlaneDisplacement(self._capDisplacement) surfaceCapper.Update() polyDataNew = slicer.vtkPolyData() polyDataNew.DeepCopy(surfaceCapper.GetOutput()) polyDataNew.Update() return polyDataNew