визуализация vtk с помощью distancewidget внутри приложения PyQT - PullRequest
0 голосов
/ 17 марта 2020

следующий простой код не работает, и я просто хочу использовать QVTKRenderWindowInteractor с vtkDistanceWidget для измерения длины сферы с помощью мыши. но vtkDistanceWidget не работает

import sys
import vtk
from PyQt5 import QtCore, QtWidgets
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, parent = None):
        QtWidgets.QMainWindow.__init__(self, parent)

        self.frame = QtWidgets.QFrame()

        self.vl = QtWidgets.QVBoxLayout()
        self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
        self.vl.addWidget(self.vtkWidget)

        self.ren = vtk.vtkRenderer()
        self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
        self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()

        widget = vtk.vtkDistanceWidget()
        widget.SetInteractor(self.iren)
        widget.CreateDefaultRepresentation()
        widget.On()

        # Create source
        source = vtk.vtkSphereSource()
        source.SetCenter(0, 0, 0)
        source.SetRadius(5.0)

        # Create a mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(source.GetOutputPort())

        # Create an actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)

        self.ren.AddActor(actor)

        self.ren.ResetCamera()

        self.frame.setLayout(self.vl)
        self.setCentralWidget(self.frame)

        self.show()
        self.iren.Initialize()


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)

    window = MainWindow()

    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 27 апреля 2020

Как обсуждалось выше, я получил ответ, инициализировав Interactor внутри main и переместив self.show () после инициализации.

...