[vtkusers] Modifying sphere radius from actor
Andrea Gavana
andrea.gavana at gmail.com
Tue May 13 09:57:05 EDT 2008
Hi All,
I am visualizing a bunch of spheres, and depending on some user's
choices, I need to change the radius and the colour of these spheres.
So, instead of removing and re-creating the sphere actor every time I
need to change some sphere property, I thought to use a suggestion
from Amy I found in the archives:
http://www.vtk.org/pipermail/vtkusers/2001-August/057091.html
What I do, is something like this:
sphereMapper = sphereActor.GetMapper()
print "SOURCE:", sphereMapper.GetInput().GetSource()
But this always prints "None" if I execute the attached code (in
Python, using wxVTKRenderWindow). If you run the code, simply press
any key: this activates the OnKeyDown method which tries to extract
the vtkSphereSource from its mapper. Am I missing something? Is it
possible to do what I am asking or I need to re-create every time the
sphere, mapper and actor?
Thank you for your suggestions.
Andrea.
# Begin Code
import wx
import vtk
from vtk.wx.wxVTKRenderWindow import wxVTKRenderWindow
from vtk.util.colors import red, green, blue
class wxVTKRW(wxVTKRenderWindow):
def __init__(self, parent):
wxVTKRenderWindow.__init__(self, parent, -1)
self.ren = vtk.vtkRenderer()
self.GetRenderWindow().AddRenderer(self.ren)
centers = [(0, 0, 0), (2, 2, 2), (-3, -3, -3)]
colours = (red, green, blue)
for center, colour in zip(centers, colours):
sphere = vtk.vtkSphereSource()
sphere.SetCenter(*center)
sphereMapper = vtk.vtkPolyDataMapper()
sphereMapper.SetInput(sphere.GetOutput())
sphereActor = vtk.vtkActor()
sphereActor.SetMapper(sphereMapper)
sphereActor.GetProperty().SetColor(colour)
self.ren.AddActor(sphereActor)
self.ren.ResetCamera()
# Store the last actor
self.lastActor = sphereActor
def OnKeyDown(self, event):
# Try to retrieve the sphere source
# Here is where the problem lies: GetSource() returns None!
sphereMapper = self.lastActor.GetMapper()
print "SOURCE:", sphereMapper.GetInput().GetSource()
#--------------------------------------------------------------------
def wxVTKRWExample():
"""Like it says, just a simple example
"""
# every wx app needs an app
app = wx.PySimpleApp()
# create the top-level frame, sizer and wxVTKRWI
frame = wx.Frame(None, -1, "wxVTKRWI", size=(600, 500))
frame.CenterOnScreen()
widget = wxVTKRW(frame)
# show the window
frame.Show()
app.MainLoop()
if __name__ == "__main__":
wxVTKRWExample()
# End code
"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/
More information about the vtkusers
mailing list