[vtkusers] Mac OS X GtkGLExtVTKRenderWindowInteractor bug
Jed Haile
jed at philtered.net
Fri Oct 10 10:42:34 EDT 2003
Hi,
I have been using GtkGLExtVTKRenderWindowInteractor to embed a vtk
window into a pygtk application. I am using a recent build of VTK built
for X11 (apple's X11) on Mac OS X 10.2.6 with python 2.2 and pygtk 2.0.
When I render a nondirected graph using an ordinary vtkRenderWindow
(not embedded in gtk) the graph renders fine. When I switch to
GtkGLExtVTKRenderWindowInteractor, all the nodes of the graph appear to
be rendered inside out. Also there is a perspective problem as you
rotate the graph the nodes that were in back continue to be rendered
behind the nodes that were in the front, and the nodes never appear to
resize correctly for perspective, but always remain the same size, the
vertices are also rendered behind or in front of nodes incorrectly.
The python code below replicates this behavior, and oddly enough works
fine on linux and windows.
Any ideas of what might be going wrong here?
Thanks in advance,
Jed
#!/usr/bin/python
from random import Random
import sys
import vtk
from vtk.util.colors import *
from GtkGLExtVTKRenderWindowInteractor import
GtkGLExtVTKRenderWindowInteractor
import gtk
def makegraph() :
r = Random()
space = 8
max = 0
lines = vtk.vtkCellArray()
for n1,n2 in [(0,1), (0,2), (1,2), (2,3), (3,4), (3,5)] :
lines.InsertNextCell(2)
lines.InsertCellPoint(n1)
lines.InsertCellPoint(n2)
if n1 > max : max = n1
if n2 > max : max = n2
pts = vtk.vtkPoints()
pts.SetNumberOfPoints(max + 1)
for idx in range(max + 1) :
x = r.uniform(-space,space)
y = r.uniform(-space,space)
z = r.uniform(-space,space)
pts.SetPoint(idx, x, y, z)
pd = vtk.vtkPolyData()
pd.SetPoints(pts)
pd.SetLines(lines)
return pd
def setprops(prop, color) :
prop.SetColor(color)
prop.SetSpecularColor(1,1,1)
prop.SetSpecular(0.3)
prop.SetSpecularPower(20)
prop.SetAmbient(0.2)
prop.SetDiffuse(0.8)
def mapactor(pd, color) :
map = vtk.vtkPolyDataMapper()
act = vtk.vtkActor()
map.SetInput(pd.GetOutput())
act.SetMapper(map)
setprops(act.GetProperty(), color)
return act
def main() :
pd = makegraph()
lay3d = vtk.vtkGraphLayoutFilter()
lay3d.SetInput(pd)
lay3d.SetMaxNumberOfIterations(100)
lay3d.ThreeDimensionalLayoutOn()
lay3d.AutomaticBoundsComputationOn()
edges = vtk.vtkTubeFilter()
edges.SetInput(lay3d.GetOutput())
edges.SetRadius(.2)
edges.SetNumberOfSides(6)
edgeActor = mapactor(edges, hot_pink)
node = vtk.vtkCubeSource()
node.SetXLength(1)
node.SetYLength(1)
node.SetZLength(1)
nodes = vtk.vtkGlyph3D()
nodes.SetInput(lay3d.GetOutput())
nodes.SetSource(node.GetOutput())
nodeActor = mapactor(nodes, peacock)
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("Test")
window.connect("destroy", gtk.mainquit)
window.connect("delete_event", gtk.mainquit)
window.set_border_width(10)
vbox = gtk.VBox(spacing=3)
window.add(vbox)
vbox.show()
gvtk = GtkGLExtVTKRenderWindowInteractor()
gvtk.set_size_request(400, 400)
vbox.pack_start(gvtk)
gvtk.show()
gvtk.Initialize()
gvtk.Start()
renderer = vtk.vtkRenderer()
renWin = gvtk.GetRenderWindow()
renWin.AddRenderer(renderer)
renderer.AddActor(edgeActor)
renderer.AddActor(nodeActor)
window.show()
gtk.mainloop()
if __name__ == "__main__" :
main()
More information about the vtkusers
mailing list