[vtkusers] Mac/Cocoa/Qt "invalid drawable"
Chris Kees
Christopher.E.Kees at usace.army.mil
Tue May 5 16:03:11 EDT 2009
I commented out Render() and the warning went away in all the simple
cases:
RCS file: /cvsroot/VTK/VTK/Rendering/vtkRenderWindowInteractor.cxx,v
retrieving revision 1.121
diff -r1.121 vtkRenderWindowInteractor.cxx
629c629
< this->Render();
---
> //this->Render();
For future reference, in one case where I keep pushing frames into a
tab widget I found that I still got the warning unless I raise the
tabs as I add them:
g.tabWidget.addTab(self.frameWidget,title)
g.tabWidget.setCurrentWidget(self.frameWidget)#added to
get rid of warning
Maybe in that case what is happening is that only the first tab gets
drawn unless you select the tab. As the code was building the frames
it was calling Render() on things that must be in much the same state
as a newly initialized iren.
Chris
On May 5, 2009, at 1:53 PM, Clinton Stimpson wrote:
>
> I saw the same thing when doing it in C++ with Qt 4.5 and Cocoa.
> The fix there was to overload vtkRenderWindowInteractor::Initialize()
> and skip the Render() and let the GUI say when to do the first render.
>
> Can you do that in QVTKRenderWindowInteractor.py? Or try commenting
> out the Render() call in vtkRenderWindowInteractor::Initialize() to
> see if that fixes your problem.
>
> I don't know why it even has the Render() in there. It seems if the
> window is coming up for the first time and an event loop is being
> used, one would get an event to do a first Render() anyways. If one
> isn't using an event loop (and probably not using the interactor),
> they are calling Render() themselves.
>
> Clint
>
>
> Chris Kees wrote:
>> Hi,
>>
>> I've installed vtk from cvs on a Mac with OS X 10.5.6 using the 64
>> bit Qt 4.5 libraries and the patched VTK source. The code runs fine
>> except I get a warning:
>>
>> 2009-05-05 12:17:16.313 python[75352:807] invalid drawable
>>
>> when calling Initialize on the QVTKRenderWindowInteractor. If I
>> just remove the Initialize call then the code runs fine without
>> warnings. I saw a post from 2005 that mentioned the warning and a
>> work around that I don't quite understand. Anybody know if this is
>> still something that needs a work around, or am I just doing
>> something wrong?
>>
>> Chris
>>
>> Here's an example that generates the warning (needs PyQt installed
>> as well):
>>
>> #!/usr/bin/env python
>> from vtk import *
>> from vtk.qt4.QVTKRenderWindowInteractor import *
>> import sys
>> from PyQt4 import QtGui
>> import copy
>>
>> app = QtGui.QApplication(sys.argv)
>>
>> import numpy
>> from math import cos,sin
>>
>> nPoints=10
>> x = numpy.zeros((3,),'d')
>> d=2.0
>> pointData=vtkPoints()
>> pointData.SetNumberOfPoints(2*nPoints)
>> for ix in range(2):
>> for iTheta in range(nPoints):
>> x[0] = ix*d
>> x[1] = cos(float(iTheta)*(2.0*3.14)/float(nPoints))
>> x[2] = sin(float(iTheta)*(2.0*3.14)/float(nPoints))
>> pointData.SetPoint(ix*nPoints+iTheta,x)
>> polygons=vtkCellArray()
>> scalars=vtkDoubleArray()
>>
>> for ix in range(2):
>> polygons.InsertNextCell(nPoints)
>> scalars.InsertNextValue(float(ix))
>> for iTheta in range(nPoints):
>> polygons.InsertCellPoint(ix*nPoints+iTheta)
>>
>> ix=0
>> for iTheta in range(nPoints):
>> polygons.InsertNextCell(4)
>> scalars.InsertNextValue(0.5)
>> polygons.InsertCellPoint(ix*nPoints+iTheta)
>> polygons.InsertCellPoint(ix*nPoints+(iTheta+1)%nPoints)
>> polygons.InsertCellPoint((ix+1)*nPoints+(iTheta+1)%nPoints)
>> polygons.InsertCellPoint((ix+1)*nPoints+iTheta)
>>
>> cylinder = vtkPolyData()
>> cylinder.SetPoints(pointData)
>> cylinder.SetPolys(polygons)
>> cylinder.GetCellData().SetScalars(scalars)
>>
>> #
>> #visualize
>> #
>> tabs = True#False
>> mainWindow = QtGui.QMainWindow()
>>
>> if tabs:
>> tabWidget = QtGui.QTabWidget(mainWindow)
>> mainWindow.setCentralWidget(tabWidget)
>> frameWidget = QtGui.QFrame(mainWindow)
>> hbox = QtGui.QHBoxLayout()
>> frameWidget2 = QtGui.QFrame(mainWindow)
>> hbox2 = QtGui.QHBoxLayout()
>> iren = QVTKRenderWindowInteractor(frameWidget)
>> iren2 = QVTKRenderWindowInteractor(frameWidget2)
>> else:
>> frameWidget = QtGui.QFrame(mainWindow)
>> hbox = QtGui.QHBoxLayout()
>> mainWindow.setCentralWidget(frameWidget)
>> iren = QVTKRenderWindowInteractor(frameWidget)
>> iren2 = QVTKRenderWindowInteractor(frameWidget)
>>
>> iren.Initialize()
>> iren2.Initialize()
>>
>> cylinderMapper = vtkPolyDataMapper()
>> cylinderMapper.SetInput(cylinder)
>> cylinderMapper.SetScalarRange(0,1)
>>
>> cylinderActor = vtkActor()
>> cylinderActor.SetMapper(cylinderMapper)
>>
>> renderer = vtkRenderer()
>> renderer.AddActor(cylinderActor)
>>
>> renderer2 = vtkRenderer()
>> renderer2.AddActor(cylinderActor)
>>
>> renWin = iren.GetRenderWindow()
>> renWin.AddRenderer(renderer)
>>
>> renWin2 = iren2.GetRenderWindow()
>> renWin2.AddRenderer(renderer2)
>>
>> if tabs:
>> hbox.addWidget(iren)
>> frameWidget.setLayout(hbox)
>> hbox2.addWidget(iren2)
>> frameWidget2.setLayout(hbox2)
>> tabWidget.addTab(frameWidget,"Cylinder 1")
>> tabWidget.addTab(frameWidget2,"Cylinder 2")
>> else:
>> hbox.addWidget(iren)
>> hbox.addWidget(iren2)
>> frameWidget.setLayout(hbox)
>>
>> mainWindow.show()
>>
>> #iren.show()
>> #iren2.show()
>> #app.exec_()
>> #iren.show()
>> #iren2.show()
>> #app.exec_()
>> sys.exit(app.exec_())
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>
More information about the vtkusers
mailing list