def KeyPressCallback(self, obj, event): ch = self.window_interactor.GetKeySym() if ch == 'Return': trans = loadTransform() num = 0 for transform in trans: self.point_data_result = applyTransform( self.tmp_data_move, transform) self.point_data_result[:, :3] /= self.tmp_space for cnt in range(3, 6): point_result = self.point_data_result[npy.where( npy.round(self.point_data_result[:, -1]) == cnt - 3)] point_move = self.point_data_move[npy.where( npy.round(self.point_data_move[:, -1]) == cnt - 3)] if not point_result.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_result[npy.where( npy.round(point_move[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetXSpline(vtk.vtkKochanekSpline()) para_spline.SetYSpline(vtk.vtkKochanekSpline()) para_spline.SetZSpline(vtk.vtkKochanekSpline()) para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.contours[cnt].Update() self.render_window.Render() saveGif(self.render_window, num) num += 1
def KeyPressCallback(self, obj, event): ch = self.window_interactor.GetKeySym() if ch == 'Return': trans = loadTransform() num = 0 for transform in trans: self.point_data_result = applyTransform(self.tmp_data_move, transform) self.point_data_result[:, :3] /= self.tmp_space for cnt in range(3, 6): point_result = self.point_data_result[npy.where(npy.round(self.point_data_result[:, -1]) == cnt - 3)] point_move = self.point_data_move[npy.where(npy.round(self.point_data_move[:, -1]) == cnt - 3)] if not point_result.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_result[npy.where(npy.round(point_move[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetXSpline(vtk.vtkKochanekSpline()) para_spline.SetYSpline(vtk.vtkKochanekSpline()) para_spline.SetZSpline(vtk.vtkKochanekSpline()) para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.contours[cnt].Update() self.render_window.Render() saveGif(self.render_window, num) num += 1
def _create_geometry(self): self._spline_source = vtk.vtkParametricFunctionSource() s = vtk.vtkParametricSpline() if False: # these are quite ugly... # later: factor this out into method, so that we can # experiment live with different spline params. For now # the vtkCardinal spline that is used is muuuch prettier. ksplines = [] for i in range(3): ksplines.append(vtk.vtkKochanekSpline()) ksplines[-1].SetDefaultTension(0) ksplines[-1].SetDefaultContinuity(0) ksplines[-1].SetDefaultBias(0) s.SetXSpline(ksplines[0]) s.SetYSpline(ksplines[1]) s.SetZSpline(ksplines[2]) pts = vtk.vtkPoints() s.SetPoints(pts) self._spline_source.SetParametricFunction(s) m = vtk.vtkPolyDataMapper() m.SetInputConnection(self._spline_source.GetOutputPort()) a = vtk.vtkActor() a.SetMapper(m) a.GetProperty().SetColor(self.line_colour) a.GetProperty().SetLineWidth(self._normal_width) self.props = [a]
def _create_geometry(self): self._spline_source = vtk.vtkParametricFunctionSource() s = vtk.vtkParametricSpline() if False: # these are quite ugly... # later: factor this out into method, so that we can # experiment live with different spline params. For now # the vtkCardinal spline that is used is muuuch prettier. ksplines = [] for i in range(3): ksplines.append(vtk.vtkKochanekSpline()) ksplines[-1].SetDefaultTension(0) ksplines[-1].SetDefaultContinuity(0) ksplines[-1].SetDefaultBias(0) s.SetXSpline(ksplines[0]) s.SetYSpline(ksplines[1]) s.SetZSpline(ksplines[2]) pts = vtk.vtkPoints() s.SetPoints(pts) self._spline_source.SetParametricFunction(s) m = vtk.vtkPolyDataMapper() m.SetInput(self._spline_source.GetOutput()) a = vtk.vtkActor() a.SetMapper(m) a.GetProperty().SetColor(self.line_colour) a.GetProperty().SetLineWidth(self._normal_width) self.props = [a]
def __init__(self, parent=None): super(VTKFrame, self).__init__(parent) self.vtkWidget = QVTKRenderWindowInteractor(self) vl = QtGui.QVBoxLayout(self) vl.addWidget(self.vtkWidget) vl.setContentsMargins(0, 0, 0, 0) self.ren = vtk.vtkRenderer() self.ren.SetBackground(0.1, 0.2, 0.4) self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() # Create source pointSource = vtk.vtkPointSource() pointSource.SetNumberOfPoints(5) pointSource.Update() points = pointSource.GetOutput().GetPoints() xSpline = vtk.vtkKochanekSpline() ySpline = vtk.vtkKochanekSpline() zSpline = vtk.vtkKochanekSpline() spline = vtk.vtkParametricSpline() spline.SetXSpline(xSpline) spline.SetYSpline(ySpline) spline.SetZSpline(zSpline) spline.SetPoints(points) functionSource = vtk.vtkParametricFunctionSource() functionSource.SetParametricFunction(spline) functionSource.Update() # Create a mapper mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(functionSource.GetOutputPort()) # Create an actor actor = vtk.vtkActor() actor.SetMapper(mapper) self.ren.AddActor(actor) self.ren.ResetCamera() self._initialized = False
def __init__(self, parent = None): super(VTKFrame, self).__init__(parent) self.vtkWidget = QVTKRenderWindowInteractor(self) vl = QtGui.QVBoxLayout(self) vl.addWidget(self.vtkWidget) vl.setContentsMargins(0, 0, 0, 0) self.ren = vtk.vtkRenderer() self.ren.SetBackground(0.1, 0.2, 0.4) self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() # Create source pointSource = vtk.vtkPointSource() pointSource.SetNumberOfPoints(5) pointSource.Update() points = pointSource.GetOutput().GetPoints() xSpline = vtk.vtkKochanekSpline() ySpline = vtk.vtkKochanekSpline() zSpline = vtk.vtkKochanekSpline() spline = vtk.vtkParametricSpline() spline.SetXSpline(xSpline) spline.SetYSpline(ySpline) spline.SetZSpline(zSpline) spline.SetPoints(points) functionSource = vtk.vtkParametricFunctionSource() functionSource.SetParametricFunction(spline) functionSource.Update() # Create a mapper mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(functionSource.GetOutputPort()) # Create an actor actor = vtk.vtkActor() actor.SetMapper(mapper) self.ren.AddActor(actor) self.ren.ResetCamera() self._initialized = False
def drawKochanekSpline(self, IDList): points = vtk.vtkPoints() for i in IDList: p = self.pointCloud.vtkPoints.GetPoint(i) points.InsertNextPoint(p) xSpline = vtk.vtkKochanekSpline() ySpline = vtk.vtkKochanekSpline() zSpline = vtk.vtkKochanekSpline() spline = vtk.vtkParametricSpline() spline.SetXSpline(xSpline) spline.SetYSpline(ySpline) spline.SetZSpline(zSpline) spline.SetPoints(points) functionSource = vtk.vtkParametricFunctionSource() functionSource.SetParametricFunction(spline) functionSource.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(functionSource.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) self.renderer.AddActor(actor) self.refresh_renderer()
from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Now create the RenderWindow, Renderer and Interactor # ren1 = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) math = vtk.vtkMath() numberOfInputPoints = 30 aSplineX = vtk.vtkKochanekSpline() aSplineY = vtk.vtkKochanekSpline() aSplineZ = vtk.vtkKochanekSpline() # generate random points inputPoints = vtk.vtkPoints() i = 0 while i < numberOfInputPoints: x = math.Random(0, 1) y = math.Random(0, 1) z = math.Random(0, 1) aSplineX.AddPoint(i, x) aSplineY.AddPoint(i, y) aSplineZ.AddPoint(i, z) inputPoints.InsertPoint(i, x, y, z) i += 1
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() # Now create the RenderWindow, Renderer and Interactor # ren1 = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) math = vtk.vtkMath() numberOfInputPoints = 30 aSplineX = vtk.vtkKochanekSpline() aSplineY = vtk.vtkKochanekSpline() aSplineZ = vtk.vtkKochanekSpline() # generate random points inputPoints = vtk.vtkPoints() i = 0 while i < numberOfInputPoints: x = math.Random(0,1) y = math.Random(0,1) z = math.Random(0,1) aSplineX.AddPoint(i,x) aSplineY.AddPoint(i,y) aSplineZ.AddPoint(i,z) inputPoints.InsertPoint(i,x,y,z) i = i + 1
def setWidgetView(self, widget): super(SurfaceGifView, self).setWidgetView(widget) self.point_array_move = self.parent.getData('move').pointSet self.point_data_move = npy.array(self.point_array_move.getData('Contour')) self.point_array_fix = self.parent.getData('fix').pointSet self.point_data_fix = npy.array(self.point_array_fix.getData('Contour')) if self.point_data_move is None or not self.point_data_move.shape[0]: return if self.point_data_fix is None or not self.point_data_fix.shape[0]: return #self.spacing = [1, 1, 1] self.spacing = self.parent.getData().getResolution().tolist() self.spacing_move = self.parent.getData('move').getResolution().tolist() self.tmp_space = self.spacing[-1] self.spacing = [float(x) / self.tmp_space for x in self.spacing] #point_data_move[:, :2] *= self.spacing_move[:2] self.point_data_fix[:, :2] *= self.spacing[:2] self.zmin = int(npy.min(self.point_data_fix[:, 2]) + 0.5) self.zmax = int(npy.max(self.point_data_fix[:, 2]) + 0.5) self.renderer = vtk.vtkRenderer() self.render_window = widget.GetRenderWindow() self.render_window.AddRenderer(self.renderer) self.window_interactor = vtk.vtkRenderWindowInteractor() self.render_window.SetInteractor(self.window_interactor) self.contours = [] self.delaunay3D = [] self.delaunayMapper = [] self.surface_actor = [] for cnt in range(3): self.contours.append(vtk.vtkPolyData()) self.delaunay3D.append(vtk.vtkDelaunay3D()) self.delaunayMapper.append(vtk.vtkDataSetMapper()) self.surface_actor.append(vtk.vtkActor()) point_fix = self.point_data_fix[npy.where(npy.round(self.point_data_fix[:, -1]) == cnt)] if not point_fix.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_fix[npy.where(npy.round(point_fix[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.delaunay3D[cnt].SetInput(self.contours[cnt]) self.delaunay3D[cnt].SetAlpha(2) self.delaunayMapper[cnt].SetInput(self.delaunay3D[cnt].GetOutput()) self.surface_actor[cnt].SetMapper(self.delaunayMapper[cnt]) self.surface_actor[cnt].GetProperty().SetDiffuseColor(0, 0, 1) self.surface_actor[cnt].GetProperty().SetSpecularColor(1, 1, 1) self.surface_actor[cnt].GetProperty().SetSpecular(0.4) self.surface_actor[cnt].GetProperty().SetSpecularPower(50) self.renderer.AddViewProp(self.surface_actor[cnt]) self.renderer.ResetCamera() point = self.renderer.GetActiveCamera().GetFocalPoint() dis = self.renderer.GetActiveCamera().GetDistance() self.renderer.GetActiveCamera().SetViewUp(0, 0, 1) self.renderer.GetActiveCamera().SetPosition(point[0], point[1] - dis, point[2]) self.renderer.ResetCameraClippingRange() self.render_window.Render() # Manually set to trackball style self.window_interactor.SetKeyCode('t') self.window_interactor.CharEvent() self.window_interactor.GetInteractorStyle().AddObserver("KeyPressEvent", self.KeyPressCallback) self.window_interactor.GetInteractorStyle().AddObserver("CharEvent", self.KeyPressCallback) self.tmp_data_move = npy.array(self.point_data_move) self.tmp_data_move[:, :3] *= self.spacing_move[:3] self.spacing_move = [float(x) / self.spacing_move[-1] for x in self.spacing_move] self.point_data_move[:, :2] *= self.spacing_move[:2] self.zmin = int(npy.min(self.point_data_move[:, 2]) + 0.5) self.zmax = int(npy.max(self.point_data_move[:, 2]) + 0.5) self.point_data_result = self.point_data_move for cnt in range(3, 6): self.contours.append(vtk.vtkPolyData()) self.delaunay3D.append(vtk.vtkDelaunay3D()) self.delaunayMapper.append(vtk.vtkDataSetMapper()) self.surface_actor.append(vtk.vtkActor()) point_result = self.point_data_result[npy.where(npy.round(self.point_data_result[:, -1]) == cnt - 3)] point_move = self.point_data_move[npy.where(npy.round(self.point_data_move[:, -1]) == cnt - 3)] if not point_result.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_result[npy.where(npy.round(point_move[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetXSpline(vtk.vtkKochanekSpline()) para_spline.SetYSpline(vtk.vtkKochanekSpline()) para_spline.SetZSpline(vtk.vtkKochanekSpline()) para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.delaunay3D[cnt].SetInput(self.contours[cnt]) self.delaunay3D[cnt].SetAlpha(2) self.delaunayMapper[cnt].SetInput(self.delaunay3D[cnt].GetOutput()) self.surface_actor[cnt].SetMapper(self.delaunayMapper[cnt]) self.surface_actor[cnt].GetProperty().SetDiffuseColor(1, 0, 0) self.surface_actor[cnt].GetProperty().SetSpecularColor(1, 1, 1) self.surface_actor[cnt].GetProperty().SetSpecular(0.4) self.surface_actor[cnt].GetProperty().SetSpecularPower(50) self.renderer.AddViewProp(self.surface_actor[cnt]) self.render_window.Render()
def setWidgetView(self, widget): super(ComparingSurfaceView, self).setWidgetView(widget, [[1, 0, 0], [1, 0, 0], [1, 0, 0]]) point_array_fix = self.parent.getData('fix').pointSet point_data_fix = npy.array(point_array_fix.getData('Contour')) if point_data_fix is None or not point_data_fix.shape[0]: return zmin = int(npy.min(point_data_fix[:, 2]) + 0.5) zmax = int(npy.max(point_data_fix[:, 2]) + 0.5) point_data_fix[:, :2] *= self.spacing[:2] for cnt in range(3, 6): self.contours.append(vtk.vtkPolyData()) self.delaunay3D.append(vtk.vtkDelaunay3D()) self.delaunayMapper.append(vtk.vtkDataSetMapper()) self.surface_actor.append(vtk.vtkActor()) point_fix = point_data_fix[npy.where(npy.round(point_data_fix[:, -1]) == cnt - 3)] if not point_fix.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(zmin, zmax + 1): data = point_fix[npy.where(npy.round(point_fix[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetXSpline(vtk.vtkKochanekSpline()) para_spline.SetYSpline(vtk.vtkKochanekSpline()) para_spline.SetZSpline(vtk.vtkKochanekSpline()) para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.delaunay3D[cnt].SetInput(self.contours[cnt]) self.delaunay3D[cnt].SetAlpha(2) self.delaunayMapper[cnt].SetInput(self.delaunay3D[cnt].GetOutput()) self.surface_actor[cnt].SetMapper(self.delaunayMapper[cnt]) self.surface_actor[cnt].GetProperty().SetDiffuseColor(0, 0, 1) self.surface_actor[cnt].GetProperty().SetSpecularColor(1, 1, 1) self.surface_actor[cnt].GetProperty().SetSpecular(0.4) self.surface_actor[cnt].GetProperty().SetSpecularPower(50) self.renderer.AddViewProp(self.surface_actor[cnt]) self.render_window.Render()
def setWidgetView(self, widget): super(SurfaceGifView, self).setWidgetView(widget) self.point_array_move = self.parent.getData('move').pointSet self.point_data_move = npy.array( self.point_array_move.getData('Contour')) self.point_array_fix = self.parent.getData('fix').pointSet self.point_data_fix = npy.array( self.point_array_fix.getData('Contour')) if self.point_data_move is None or not self.point_data_move.shape[0]: return if self.point_data_fix is None or not self.point_data_fix.shape[0]: return #self.spacing = [1, 1, 1] self.spacing = self.parent.getData().getResolution().tolist() self.spacing_move = self.parent.getData( 'move').getResolution().tolist() self.tmp_space = self.spacing[-1] self.spacing = [float(x) / self.tmp_space for x in self.spacing] #point_data_move[:, :2] *= self.spacing_move[:2] self.point_data_fix[:, :2] *= self.spacing[:2] self.zmin = int(npy.min(self.point_data_fix[:, 2]) + 0.5) self.zmax = int(npy.max(self.point_data_fix[:, 2]) + 0.5) self.renderer = vtk.vtkRenderer() self.render_window = widget.GetRenderWindow() self.render_window.AddRenderer(self.renderer) self.window_interactor = vtk.vtkRenderWindowInteractor() self.render_window.SetInteractor(self.window_interactor) self.contours = [] self.delaunay3D = [] self.delaunayMapper = [] self.surface_actor = [] for cnt in range(3): self.contours.append(vtk.vtkPolyData()) self.delaunay3D.append(vtk.vtkDelaunay3D()) self.delaunayMapper.append(vtk.vtkDataSetMapper()) self.surface_actor.append(vtk.vtkActor()) point_fix = self.point_data_fix[npy.where( npy.round(self.point_data_fix[:, -1]) == cnt)] if not point_fix.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_fix[npy.where(npy.round(point_fix[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.delaunay3D[cnt].SetInput(self.contours[cnt]) self.delaunay3D[cnt].SetAlpha(2) self.delaunayMapper[cnt].SetInput(self.delaunay3D[cnt].GetOutput()) self.surface_actor[cnt].SetMapper(self.delaunayMapper[cnt]) self.surface_actor[cnt].GetProperty().SetDiffuseColor(0, 0, 1) self.surface_actor[cnt].GetProperty().SetSpecularColor(1, 1, 1) self.surface_actor[cnt].GetProperty().SetSpecular(0.4) self.surface_actor[cnt].GetProperty().SetSpecularPower(50) self.renderer.AddViewProp(self.surface_actor[cnt]) self.renderer.ResetCamera() point = self.renderer.GetActiveCamera().GetFocalPoint() dis = self.renderer.GetActiveCamera().GetDistance() self.renderer.GetActiveCamera().SetViewUp(0, 0, 1) self.renderer.GetActiveCamera().SetPosition(point[0], point[1] - dis, point[2]) self.renderer.ResetCameraClippingRange() self.render_window.Render() # Manually set to trackball style self.window_interactor.SetKeyCode('t') self.window_interactor.CharEvent() self.window_interactor.GetInteractorStyle().AddObserver( "KeyPressEvent", self.KeyPressCallback) self.window_interactor.GetInteractorStyle().AddObserver( "CharEvent", self.KeyPressCallback) self.tmp_data_move = npy.array(self.point_data_move) self.tmp_data_move[:, :3] *= self.spacing_move[:3] self.spacing_move = [ float(x) / self.spacing_move[-1] for x in self.spacing_move ] self.point_data_move[:, :2] *= self.spacing_move[:2] self.zmin = int(npy.min(self.point_data_move[:, 2]) + 0.5) self.zmax = int(npy.max(self.point_data_move[:, 2]) + 0.5) self.point_data_result = self.point_data_move for cnt in range(3, 6): self.contours.append(vtk.vtkPolyData()) self.delaunay3D.append(vtk.vtkDelaunay3D()) self.delaunayMapper.append(vtk.vtkDataSetMapper()) self.surface_actor.append(vtk.vtkActor()) point_result = self.point_data_result[npy.where( npy.round(self.point_data_result[:, -1]) == cnt - 3)] point_move = self.point_data_move[npy.where( npy.round(self.point_data_move[:, -1]) == cnt - 3)] if not point_result.shape[0]: continue self.cells = vtk.vtkCellArray() self.points = vtk.vtkPoints() l = 0 for i in range(self.zmin, self.zmax + 1): data = point_result[npy.where( npy.round(point_move[:, 2]) == i)] if data is not None: if data.shape[0] == 0: continue count = data.shape[0] points = vtk.vtkPoints() for j in range(count): points.InsertPoint(j, data[j, 0], data[j, 1], data[j, 2]) para_spline = vtk.vtkParametricSpline() para_spline.SetXSpline(vtk.vtkKochanekSpline()) para_spline.SetYSpline(vtk.vtkKochanekSpline()) para_spline.SetZSpline(vtk.vtkKochanekSpline()) para_spline.SetPoints(points) para_spline.ClosedOn() # The number of output points set to 10 times of input points numberOfOutputPoints = count * 10 self.cells.InsertNextCell(numberOfOutputPoints) for k in range(0, numberOfOutputPoints): t = k * 1.0 / numberOfOutputPoints pt = [0.0, 0.0, 0.0] para_spline.Evaluate([t, t, t], pt, [0] * 9) if pt[0] != pt[0]: print pt continue self.points.InsertPoint(l, pt[0], pt[1], pt[2]) self.cells.InsertCellPoint(l) l += 1 self.contours[cnt].SetPoints(self.points) self.contours[cnt].SetPolys(self.cells) self.delaunay3D[cnt].SetInput(self.contours[cnt]) self.delaunay3D[cnt].SetAlpha(2) self.delaunayMapper[cnt].SetInput(self.delaunay3D[cnt].GetOutput()) self.surface_actor[cnt].SetMapper(self.delaunayMapper[cnt]) self.surface_actor[cnt].GetProperty().SetDiffuseColor(1, 0, 0) self.surface_actor[cnt].GetProperty().SetSpecularColor(1, 1, 1) self.surface_actor[cnt].GetProperty().SetSpecular(0.4) self.surface_actor[cnt].GetProperty().SetSpecularPower(50) self.renderer.AddViewProp(self.surface_actor[cnt]) self.render_window.Render()