Linked Questions

Popular Questions

How does vtk implement actor refresh in the scene

Asked by At

In one of my recent projects that required the use of VTK, I wanted to implement a feature where I could move two balls around in a vtk scene while using the mouse to move the view. I generated a code using chatgpt, but this code has a problem.

When it runs, it starts with a black screen, and when you click on it, you get a screen, but the ball in the scene doesn't move. I looked up some vtk related knowledge and found that the code was correct on the major issues, but I still couldn't correct the modification.

there is the code,How do I modify the code?

import vtk

sphere1_source = vtk.vtkSphereSource()
sphere1_source.SetRadius(1.0)
sphere1_mapper = vtk.vtkPolyDataMapper()
sphere1_mapper.SetInputConnection(sphere1_source.GetOutputPort())
sphere1_actor = vtk.vtkActor()
sphere1_actor.SetMapper(sphere1_mapper)

sphere2_source = vtk.vtkSphereSource()
sphere2_source.SetRadius(1.0)
sphere2_mapper = vtk.vtkPolyDataMapper()
sphere2_mapper.SetInputConnection(sphere2_source.GetOutputPort())
sphere2_actor = vtk.vtkActor()
sphere2_actor.SetMapper(sphere2_mapper)


renderer = vtk.vtkRenderer()
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(render_window)

renderer.AddActor(sphere1_actor)
renderer.AddActor(sphere2_actor)


camera = vtk.vtkCamera()
camera.SetPosition(0, 0, 10)
renderer.SetActiveCamera(camera)


def animate():

    pos1 = sphere1_actor.GetPosition()
    pos2 = sphere2_actor.GetPosition()

    sphere1_actor.SetPosition(pos1[0] + 0.1, pos1[1], pos1[2])
    sphere2_actor.SetPosition(pos2[0] - 0.1, pos2[1], pos2[2])


    render_window.Render()


def timer_callback(obj, event):
    animate()

timer_id = interactor.CreateRepeatingTimer(10)  
interactor.AddObserver("TimerEvent", timer_callback)

interactor.Initialize()
interactor.Start()

Related Questions