Как создать много экземпляров vtkContourWidget - PullRequest
0 голосов
/ 27 августа 2018

Я хочу иметь возможность создавать много экземпляров 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()

Это почти нормально работает, проблема в том, что, когда я хочу закрыть окно приложения, я должен нажать кнопку, чтобы закрыть окно много раз.И мне нужно щелкнуть один раз для каждого созданного vtkContourWidget.

Кажется, что каждый раз, когда я вызываю функцию keyPressEvent и создаю vtkContourWidget, строку obj.Start() (то же самое, что Interactor.Start())создает экземпляр другого экземпляра приложения?

Я также пытался contourWidget.SetEnabled()obj.Start() закомментированным), и он работает для создания новых экземпляров vtkContourWidget, но когда я пытаюсь закрыть приложениеокно, приложение зависает.

С кодом obj.Start() и contourWidget.SetEnabled() я могу создать много экземпляров, но каждый раз, когда я создаю новый экземпляр, предыдущий исчезает.

Я думаю эта тема может иметь решение, но я не знаю, как это реализовать.

1 Ответ

0 голосов
/ 03 сентября 2018

Просто скопируйте ваш код и запустите его с VTK 6.3 в Ubuntu 16.04, похоже, работает правильно.Окно закрывается, как и ожидалось, с помощью кнопки закрытия или «q».

Так что, похоже, это ошибка, связанная с версией VTK, которую вы используете в своей системе.

С уважением.

...