I find vtkInteractorStyleImage
do not work in QVTKWidget
.
For example, the following code:
import vtk
from vtk.util.numpy_support import vtk_to_numpy, numpy_to_vtk
import numpy as np
def numpyToVTK(data):
if len(data.shape) == 2:
data = data[:, :, np.newaxis]
flat_data_array = data.transpose(2,1,0).flatten()
vtk_data = numpy_to_vtk(num_array=flat_data_array, deep=True, array_type=vtk.VTK_FLOAT)
shape = data.shape
img = vtk.vtkImageData()
img.GetPointData().SetScalars(vtk_data)
img.SetDimensions(shape[0], shape[1], shape[2])
return img
img = np.zeros(shape=[512, 512])
img[0:256, 0:256] = 0
img[0:256, 256:] = 64
img[256:, 0:256] = 128
img[256:, 256:] = 256
img = numpyToVTK(img)
imgActor = vtk.vtkImageActor()
imgActor.SetInputData(img)
renderer = vtk.vtkRenderer()
renderer.AddActor(imgActor)
renderer.SetBackground(0.4, 0.5, 0.6)
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.Render()
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
style = vtk.vtkInteractorStyleImage()
renderWindowInteractor.SetInteractorStyle(style)
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()
I can’t rotate the image, because the vtkInteractorStyleImage
is used.
But, if I want to use vtkInteractorStyleImage
in QVTKWidget
, for example:
import vtk
from vtk.util.numpy_support import vtk_to_numpy, numpy_to_vtk
import numpy as np
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
def numpyToVTK(data):
if len(data.shape) == 2:
data = data[:, :, np.newaxis]
flat_data_array = data.transpose(2,1,0).flatten()
vtk_data = numpy_to_vtk(num_array=flat_data_array, deep=True, array_type=vtk.VTK_FLOAT)
shape = data.shape
img = vtk.vtkImageData()
img.GetPointData().SetScalars(vtk_data)
img.SetDimensions(shape[0], shape[1], shape[2])
return img
img = np.zeros(shape=[512, 512])
img[0:256, 0:256] = 0
img[0:256, 256:] = 64
img[256:, 0:256] = 128
img[256:, 256:] = 256
img = numpyToVTK(img)
class Widget(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.setLayout(layout)
self.vtkWidget = QVTKRenderWindowInteractor()
layout.addWidget(self.vtkWidget)
imgActor = vtk.vtkImageActor()
imgActor.SetInputData(img)
renderer = vtk.vtkRenderer()
renderer.AddActor(imgActor)
renderer.SetBackground(0.4, 0.5, 0.6)
renderWindow = self.vtkWidget.GetRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.Render()
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
style = vtk.vtkInteractorStyleImage()
renderWindowInteractor.SetInteractorStyle(style)
renderWindowInteractor.SetRenderWindow(renderWindow)
renderWindowInteractor.Initialize()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Widget()
win.show()
app.exec_()
I find I can rotate the image in the QVTKWidget
even the vtkInteractorStyleImage
is used.
My environment is:
python 3.7
vtk 9.0.3
win 10
How can I apply vtkInteractorStyleImage
in QVTKWidget
?