[vtkusers] Problem with vtkTkRenderWidget and CrystalEyes stereo

Michael Scarpa m.scarpa at uva.nl
Mon Jul 3 05:26:15 EDT 2006


On Fri, Jun 30, 2006 at 12:13:30PM +0100, Jens Thomas wrote:
> I'm trying to get vtk to use CrystalEyes stereo with a 
> vtkTkRenderWidget, but am hitting a problem in that the render window I 
> create is not stereo capapble, and I therefore get the error message:
> 
> vtkXOpenGLRenderWindow (0x8351740): Adjusting stereo mode on a window 
> that does not support stereo type CrystalEyes is not possible.
> 
> I call vtkTkRenderWidget with the "stereo=1" flag to generate a widget 
> with a renderwindow that is stereo capable, and then call the 
> GetRenderWindow method on the widget to get the RenderWindow. However, 
> the RenderWindow I get back is not stereo capable, as illustrated by the 
> error message above. This is despite the fact that the window that is 
> initially created within vtkTkRenderWidget is stereo capable.
> 
> I checked this with a print statement in the file:
> 
> VTK/Wrapping/Python/vtk/tk/vtkTkRenderWidget.py
> 
> at line 89, where it checks the keyword dictionary as shown below:
> 
> try:  # was a stereo rendering context requested?
>            if kw['stereo']:
>               print "Setting stereo"
>               renderWindow.StereoCapableWindowOn()
>               print renderWindow
>               del kw['stereo']
>        except KeyError:
>            pass
> 
> At the point of the print statement, the window is stereo capapble.
> 
> It therefore seems that the window returned by the GetRenderWindow is 
> not the same one as was first created.
> 
> If I create the render window directly, and avoid the vtkTkRenderWidget 
> side of things, it appears to work o.k.
> 
> I've pasted in an example below that demonstrates the problem - setting 
> the tk variable to 0 or 1 turns off the Tk code and shows that it 
> appears to work if you don't use the  vtkTkRenderWidget code.
> 
> Any suggestions/help would be greatly appreciated.
> 
> Best wishes,
> 
> Jens
> 
> 
> from Tkinter import *
> from vtk import *
> from vtk.tk.vtkTkRenderWidget import *
> 
> # Set the tk variable to 0 to eschew the Tk code
> tk=1
> if tk:
>    # Make a root window
>    root = Tk()
>    # Add a vtkTkRenderWidget
>    renderWidget = vtkTkRenderWidget(root,stereo=1)
>    renderWidget.pack()
>    # Get the render window from the widget
>    renWin = renderWidget.GetRenderWindow()
>    print "renWin is"
>    print renWin
> else:
>    renWin = vtk.vtkRenderWindow()
>    renWin.StereoCapableWindowOn()
>    print "renWin is"
>    print renWin
>    iren = vtk.vtkRenderWindowInteractor()
>    iren.SetRenderWindow(renWin)   
> 
> renWin.SetStereoTypeToCrystalEyes()
> #renWin.SetStereoTypeToRedBlue()
> renWin.StereoRenderOn()
> 
> # Next, do the VTK stuff
> ren = vtkRenderer()
> renWin.AddRenderer(ren)
> cone = vtkConeSource()
> cone.SetResolution(16)
> coneMapper = vtkPolyDataMapper()
> coneMapper.SetInput(cone.GetOutput())
> coneActor = vtkActor()
> coneActor.SetMapper(coneMapper)
> ren.AddActor(coneActor)
> 
> 
> # start up the event loop
> if tk:
>    root.mainloop()
> else:
>    iren.Initialize()
>    renWin.Render()
>    iren.Start()

Have you tried the same things with vtkTkRenderWindowInteractor instead
of vtkTkRenderWidget? With the former, you can create your own
vtkRenderWindow instance and provide it for the widget to use.  It
would be interesting to see if you encounter the same problem in this
case, since you can create your own render window and set its
capabilities yourself before handing it over to Tk.

Kind regards,

Michael




More information about the vtkusers mailing list