Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import print_function
- import vtk
- from math import sin
- from threading import Thread
- class vtkTimerCallback():
- def __init__(self):
- self.timer_count = 0
- def execute(self,obj,event):
- #print(self.timer_count)
- self.actor.SetPosition(0, self.timer_count, 0);
- iren = obj
- iren.GetRenderWindow().Render()
- self.timer_count += 1
- def threadFunction(actor2, interator):
- cb = vtkTimerCallback()
- cb.actor = actor2
- interactor.AddObserver('TimerEvent', cb.execute)
- timerId = interactor.CreateRepeatingTimer(100);
- def main():
- colors = vtk.vtkNamedColors()
- sphereSource = vtk.vtkSphereSource()
- sphereSource.SetCenter(0.5, 0.5, 0.5)
- sphereSource.SetRadius(0.5)
- sphereSource.SetPhiResolution(40)
- sphereSource.SetThetaResolution(40)
- # create a box
- box = vtk.vtkBox()
- box.SetBounds(-1, 1, -1, 1, -1, 1)
- # combine the two implicit functions
- boolean = vtk.vtkImplicitBoolean()
- boolean.SetOperationTypeToDifference()
- boolean.AddFunction(box)
- # The sample function generates a distance function from the implicit
- # function. This is then contoured to get a polygonal surface.
- sample = vtk.vtkSampleFunction()
- sample.SetImplicitFunction(boolean)
- sample.SetModelBounds(-1, 2, -1, 1, -1, 1)
- sample.SetSampleDimensions(80, 80, 80)
- sample.ComputeNormalsOff()
- # contour
- surface = vtk.vtkContourFilter()
- surface.SetInputConnection(sample.GetOutputPort())
- # surface.SetValue(0, 0.0)
- mapper2 = vtk.vtkPolyDataMapper()
- mapper2.SetInputConnection(sphereSource.GetOutputPort())
- actor2 = vtk.vtkActor()
- actor2.GetProperty().SetColor(colors.GetColor3d("Red"))
- actor2.GetProperty().SetSpecular(0.6)
- actor2.GetProperty().SetSpecularPower(30)
- actor2.SetMapper(mapper2)
- # mapper
- mapper = vtk.vtkPolyDataMapper()
- mapper.SetInputConnection(surface.GetOutputPort())
- mapper.ScalarVisibilityOff()
- actor = vtk.vtkActor()
- actor.GetProperty().SetOpacity(0.3)
- actor.SetMapper(mapper)
- #actor.GetProperty().EdgeVisibilityOn()
- actor.GetProperty().SetColor(colors.GetColor3d('LimeGreen'))
- actor.GetProperty().SetEdgeColor(colors.GetColor3d('PaleGreen'))
- # A renderer and render window
- renderer = vtk.vtkRenderer()
- renderer.SetBackground(colors.GetColor3d('Peru'))
- # add the actor
- renderer.AddActor(actor)
- renderer.AddActor(actor2)
- # render window
- renwin = vtk.vtkRenderWindow()
- renwin.AddRenderer(renderer)
- # An interactor
- interactor = vtk.vtkRenderWindowInteractor()
- interactor.SetRenderWindow(renwin)
- # Start
- interactor.Initialize()
- # cb = vtkTimerCallback()
- # cb.actor = actor2
- # interactor.AddObserver('TimerEvent', cb.execute)
- # timerId = interactor.CreateRepeatingTimer(100);
- #renwin.Render()
- # renderer.GetActiveCamera().AddObserver('ModifiedEvent', CameraModifiedCallback)
- renderer.GetActiveCamera().SetPosition(5.0, -4.0, 1.6)
- renderer.GetActiveCamera().SetViewUp(0.1, 0.5, 0.9)
- renderer.GetActiveCamera().SetDistance(7.5)
- renwin.Render()
- thread = Thread(target = threadFunction, args = (actor2, interactor, ))
- thread.start()
- #thread.join()
- interactor.Start()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement