如何创建多个 vtkContourWidget 实例
How to create many instances of vtkContourWidget
我希望能够创建许多 vtkContourWidget 实例,让用户绘制线条并操纵节点,但我似乎做得不对。
代码如下:
import vtk
def main():
# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
Interactor = vtk.vtkRenderWindowInteractor()
Interactor.SetRenderWindow(renderWindow)
style = vtk.vtkInteractorStyleTerrain()
Interactor.SetInteractorStyle(style)
Interactor.AddObserver("KeyPressEvent", keyPressEvent)
# Render and interact
renderWindow.Render()
Interactor.Start()
def keyPressEvent(obj, event):
key = obj.GetKeySym()
if key == 'n':
contourRep = vtk.vtkOrientedGlyphContourRepresentation()
contourWidget = vtk.vtkContourWidget()
contourWidget.SetInteractor(obj)
contourWidget.SetRepresentation(contourRep)
contourWidget.On()
#contourWidget.SetEnabled()
obj.Start()
return
main()
这样几乎可以正常工作,问题是,当我想关闭应用程序 window 时,我必须多次单击按钮才能关闭 window。我必须为每个创建的 vtkContourWidget 单击一次。
似乎每次我调用函数 keyPressEvent
并创建一个 vtkContourWidget 时,obj.Start()
(与 Interactor.Start()
相同)行实例化了另一个实例申请?
我也尝试过 contourWidget.SetEnabled()
(obj.Start()
被注释掉),它可以创建 vtkContourWidget 的新实例,但是当我尝试关闭应用程序时 window,应用程序冻结。
在代码上同时使用obj.Start()
和contourWidget.SetEnabled()
,我可以创建很多实例,但每次创建新实例时,之前的实例都会消失。
我认为this topic可能有解决方案,但我不知道如何实施。
只需复制粘贴您的代码,然后 运行 使用 VTK 6.3 在 Ubuntu 16.04 上似乎可以正常工作。 window 使用关闭按钮或 "q".
按预期关闭
所以这似乎是一个与您在系统上使用的 VTK 版本相关的错误。
亲切的问候。
我希望能够创建许多 vtkContourWidget 实例,让用户绘制线条并操纵节点,但我似乎做得不对。
代码如下:
import vtk
def main():
# Create a renderer, render window, and interactor
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
Interactor = vtk.vtkRenderWindowInteractor()
Interactor.SetRenderWindow(renderWindow)
style = vtk.vtkInteractorStyleTerrain()
Interactor.SetInteractorStyle(style)
Interactor.AddObserver("KeyPressEvent", keyPressEvent)
# Render and interact
renderWindow.Render()
Interactor.Start()
def keyPressEvent(obj, event):
key = obj.GetKeySym()
if key == 'n':
contourRep = vtk.vtkOrientedGlyphContourRepresentation()
contourWidget = vtk.vtkContourWidget()
contourWidget.SetInteractor(obj)
contourWidget.SetRepresentation(contourRep)
contourWidget.On()
#contourWidget.SetEnabled()
obj.Start()
return
main()
这样几乎可以正常工作,问题是,当我想关闭应用程序 window 时,我必须多次单击按钮才能关闭 window。我必须为每个创建的 vtkContourWidget 单击一次。
似乎每次我调用函数 keyPressEvent
并创建一个 vtkContourWidget 时,obj.Start()
(与 Interactor.Start()
相同)行实例化了另一个实例申请?
我也尝试过 contourWidget.SetEnabled()
(obj.Start()
被注释掉),它可以创建 vtkContourWidget 的新实例,但是当我尝试关闭应用程序时 window,应用程序冻结。
在代码上同时使用obj.Start()
和contourWidget.SetEnabled()
,我可以创建很多实例,但每次创建新实例时,之前的实例都会消失。
我认为this topic可能有解决方案,但我不知道如何实施。
只需复制粘贴您的代码,然后 运行 使用 VTK 6.3 在 Ubuntu 16.04 上似乎可以正常工作。 window 使用关闭按钮或 "q".
按预期关闭所以这似乎是一个与您在系统上使用的 VTK 版本相关的错误。
亲切的问候。