Reputation: 91
I'm trying to Draw VTK ChartXY
using QVTKRenderWindowInteractor
because my program is designed to use PyQt
.
Problem is, showing chart is good but, i can't interact
with the chart for example, zoom, pan, hovering.
When i tested identical chart show task without QVTKRenderWindowInteractor, then interact event was perfect.
Here is my reference Code.
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QApplication, QPushButton
import matplotlib.pyplot as plt
import numpy as np
import vtk
import math
import sys
import os
app = QApplication(sys.argv)
widget = QVTKRenderWindowInteractor()
widget.Initialize()
widget.Start()
view = vtk.vtkContextView()
view.GetRenderer().SetBackground(1.0, 1.0, 1.0)
view.GetRenderWindow().SetSize(400, 300)
chart = vtk.vtkChartXY()
view.GetScene().AddItem(chart)
chart.SetShowLegend(True)
table = vtk.vtkTable()
arrX = vtk.vtkFloatArray()
arrX.SetName('X Axis')
arrC = vtk.vtkFloatArray()
arrC.SetName('Cosine')
arrS = vtk.vtkFloatArray()
arrS.SetName('Sine')
arrT = vtk.vtkFloatArray()
arrT.SetName('Sine-Cosine')
table.AddColumn(arrC)
table.AddColumn(arrS)
table.AddColumn(arrX)
table.AddColumn(arrT)
numPoints = 40
inc = 7.5 / (numPoints - 1)
table.SetNumberOfRows(numPoints)
for i in range(numPoints):
table.SetValue(i, 0, i * inc)
table.SetValue(i, 1, math.cos(i * inc))
table.SetValue(i, 2, math.sin(i * inc))
table.SetValue(i, 3, math.sin(i * inc) - math.cos(i * inc))
points = chart.AddPlot(vtk.vtkChart.POINTS)
points.SetInputData(table, 0, 1)
points.SetColor(0, 0, 0, 255)
points.SetWidth(1.0)
points.SetMarkerStyle(vtk.vtkPlotPoints.CROSS)
view.GetRenderWindow().SetMultiSamples(0)
view.GetInteractor().Initialize()
view.GetInteractor().Start()
widget.GetRenderWindow().AddRenderer(view.GetRenderer())
widget.setWindowTitle('Qt Widget')
widget.show()
exit(app.exec_())
This example show Pure VTK window
and after closing VTK window show QtWidget window
.
The Pure VTK window interact perfectly with my commant, QtWidget interact not at all.
Is anybody know how to make VTK chart interact well with PyQt system?? Thanks.
Upvotes: 1
Views: 310
Reputation: 91
Here is my own answer.
VTKRenderWindowInteractor should get parameter manually iren
, rw
.
view = vtk.vtkContextView()
widget = VTKRenderWindowInteractor(iren=view.GetInteractor(), rw=view.GetRenderWindow())
then i could interact with my chart with Qt system well.
here is better and precise solution from VTK community.
You need just simply set RenderWindow.
https://discourse.vtk.org/t/problem-with-vtk-chart-interaction-with-pyqt/6561?u=hhebb
Upvotes: 1