从 VTK 对象中删除球体

Deleting Spheres from VTK Object

我们已经编写了一个程序,如图所示:program_image。我们在对象上添加了球体以获取有关该地点的信息。现在的问题是,虽然我们可以毫无问题地放置它们,但我们无法移除它们。我们想删除它们。我们尝试了很多方法,例如 vtkObjectBase.Delete() 等。None 有效。为它们添加了这个功能:

def cagir(*vecto):

     global oldvecto,distance,etiket

     #print('cagir geldi')

     source = vtk.vtkSphereSource()

     source.SetCenter(vecto[0][i][0],vecto[0][i][1],vecto[0][i][2])

     source.SetRadius(0.01)

     mapper = vtk.vtkPolyDataMapper()

     mapper.SetInputConnection(source.GetOutputPort())

     actor = vtk.vtkActor()

     actor.SetMapper(mapper)

     self.ren.AddActor(actor)

     etiket.append(i)

     self.renWin.Render()

重点是将它们从地图上移除(我不懂行话),尤其是在视觉上。谢谢。 编辑1: 关于我在 def cagir() 函数上方添加此函数的建议,缩进相同,

def dene(*vecto):
    #print("dene e girildi")
    actor = vtk.vtkActor()

    self.ren.RemoveActor(actor)
    self.renWin.Render()

我得到了这些,

2021-10-04 14:50:05.754 (5750.642s) [                ]vtkWin32OpenGLRenderWin:217    ERR| vtkWin32OpenGLRenderWindow (00000216F5B1C430): wglMakeCurrent failed in MakeCurrent(), error: The requested resource is in use.
2021-10-04 14:50:05.767 (5750.655s) [                ]vtkOpenGLVertexBufferOb:280    ERR| vtkOpenGLVertexBufferObjectGroup (00000216FF4586E0): Error setting 'normalMC' in shader VAO.
2021-10-04 14:50:05.767 (5750.655s) [                ]vtkOpenGLVertexArrayObj:296    ERR| vtkOpenGLVertexArrayObject (00000216FF3C6C40): attempt to add attribute when not ready for attribute vertexMC

我是 VTK 的初学者,所以如果我犯了一些有趣的错误,我很抱歉。但是很长一段时间,我都在为这段代码苦苦挣扎。

编辑2:

def dene(*vecto):
    source = vtk.vtkSphereSource()
    self.ren.RemoveActor(actor)
    self.renWin.Render()
    mapper = vtk.vtkPolyDataMapper()
    actor.SetMapper(mapper)
    mapper.SetInputConnection(source.GetOutputPort())

def cagir(*vecto):

    global oldvecto, distance, etiket,actor

    # print('cagir geldi')

    source = vtk.vtkSphereSource()

    source.SetCenter(vecto[0][i][0], vecto[0][i][1], vecto[0][i][2])

    source.SetRadius(0.01)

    mapper = vtk.vtkPolyDataMapper()

    mapper.SetInputConnection(source.GetOutputPort())

    actor = vtk.vtkActor()

    actor.SetMapper(mapper)

    self.ren.AddActor(actor)

    etiket.append(i)

    self.renWin.Render()

仍然有类似的错误,当我使用 dene() 虽然我们把这些小球体放在上面的所有对象都消失了,但球体仍然留在它们的位置:image2。关于 cagir() 函数,你能为我写出 dene() 函数吗?谢谢。

已编辑

您应该将其从 mapper Renderer

中移除
renderer.RemoveActor(actor)

编辑2

你应该保留一个引用/变量指向你想要删除的演员。在我的代码中,actor 指的是在您的 cagir() 方法中创建的角色,而不是新的 vtkActor.