Exemple #1
0
    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
Exemple #2
0
 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]
Exemple #4
0
    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]
Exemple #5
0
    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()
Exemple #8
0
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
Exemple #9
0
#!/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
Exemple #10
0
    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()
Exemple #12
0
    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()