[vtkusers] Re: Rendering Problem

Shari Rolnick shari at loralee.net
Mon Apr 24 23:25:48 EDT 2006


Sorry - I should've included the rest of it to start with.  I was kind
of hoping I'd done something obviously wrong.  :-)  I've attached all my
files except for the data file, which was too big.  You can find it at
http://www.csee.umbc.edu/~shari1/ in the file schoolData.vtk.

The code I need help with is in GenerateViz.py.  It generates the
visualization correctly, but not until after I click in the rendering
window.  I can't just capture the image after a keystroke because I need
to be able to generate a bunch of images automatically.

If anyone has any ideas for me, I would really appreciate it!

Thanks again,
Shari

On Sun, 2006-04-23 at 21:00 -0400, Shari Rolnick wrote:
> Hi,
> 
> I'm trying to create a visualization and save it to a file.  The code
> creates the visualization I want, but not until after I click in the
> rendering window.  That means that I don't get anything in the saved
> image but a blank screen.  I've tried moving around the statements, but
> nothing seems to work.  Any ideas what I'm doing wrong?
> 
> Thanks!
> Shari
> 
> Here is my code:
> 
> #!/usr/bin/env python
> 
> import os
> import re
> import vtk
> 
> import PropertySet
> 
> # Set axes
> propSet = PropertySet.PropertySet('viz.properties')
> xAxis = propSet.xAxisVariable
> yAxis = propSet.yAxisVariable
> zAxis = propSet.zAxisVariable
> scalar = propSet.scalarVariable
> 
> # Set color stuff
> minHue = propSet.minHue
> maxHue = propSet.maxHue
> minSaturation = propSet.minSaturation
> maxSaturation = propSet.maxSaturation
> minValue = propSet.minValue
> maxValue = propSet.maxValue
> 
> # Set scale factor
> scaleFactor = propSet.scaleFactor
> scaleFactor = float(scaleFactor)
> 
> # extract data from field as polydata (just points), then extract
> scalars
> dataObjectReader = vtk.vtkDataObjectReader()
> dataObjectReader.SetFileName("schoolData.vtk")
> 
> do2ds = vtk.vtkDataObjectToDataSetFilter()
> do2ds.SetInput(dataObjectReader.GetOutput())
> do2ds.SetPointComponent(0, xAxis, 0)
> do2ds.SetPointComponent(1, yAxis, 0)
> do2ds.SetPointComponent(2, zAxis, 0)
> do2ds.Update()
> 
> dataSet = vtk.vtkPolyData()
> 
> # Get number of points
> dataSet = do2ds.GetOutput()
> numPoints = dataSet.GetNumberOfPoints()
> 
> dataSet.Update()
> 
> fd2adf = vtk.vtkFieldDataToAttributeDataFilter()
> fd2adf.SetInput(do2ds.GetOutput())
> fd2adf.SetInputFieldToDataObjectField()
> fd2adf.SetOutputAttributeDataToPointData()
> fd2adf.SetScalarComponent(0, scalar, 0)
> fd2adf.Update()
> 
> scalarRange = fd2adf.GetOutput().GetScalarRange()
> 
> # create glyph
> cone = vtk.vtkConeSource()
> cone.SetResolution(6)
> 
> # create lookup table
> lut = vtk.vtkLookupTable()
> lut.SetHueRange(float(minHue), float(maxHue))
> lut.SetSaturationRange(float(minSaturation), float(maxSaturation))
> lut.SetValueRange(float(minValue), float(maxValue))
> lut.Build()
> 
> glyph = vtk.vtkGlyph3D()
> glyph.SetInput(fd2adf.GetOutput())
> glyph.SetSource(cone.GetOutput())
> glyph.SetVectorModeToUseVector()
> glyph.SetScaleModeToScaleByScalar()
> glyph.SetScaleFactor(scaleFactor)
> glyph.SetColorModeToColorByScalar()
> glyph.SetIndexModeToScalar()
> 
> glyphMapper = vtk.vtkPolyDataMapper()
> glyphMapper.SetLookupTable(lut)
> glyphMapper.SetScalarRange(scalarRange)
> glyphMapper.SetColorModeToMapScalars()
> glyphMapper.SetInput(glyph.GetOutput())
> glyphActor = vtk.vtkActor()
> glyphActor.SetMapper(glyphMapper)
> 
> # Find maximum value and use it to scale the axes
> bounds = dataSet.GetBounds()
> print("bounds:"), bounds
> listBounds = list(bounds)
> listBounds.sort()
> sortedBounds = tuple(listBounds)
> 
> # create axes
> axes = vtk.vtkAxes()
> axes.SetScaleFactor(sortedBounds[5])
> 
> maxValString = str(sortedBounds[5])
> decimalIndex = maxValString.find('.')
> maxValString = maxValString[0:decimalIndex]
> # We will use this number to decide how many 0's to put in our division
> -
> # used to find the radius of the axes
> orderOfMagnitude = len(maxValString) - 1
> radiusDivisorStr = '1'
> 
> count = 0
> while count < orderOfMagnitude:
>     radiusDivisorStr += '0'
>     count += 1
> 
> radiusDivisorInt = int(radiusDivisorStr)
> 
> axesTubes = vtk.vtkTubeFilter()
> axesTubes.SetInput(axes.GetOutput())
> axesTubes.SetRadius(axes.GetScaleFactor() / radiusDivisorInt)
> axesTubes.SetNumberOfSides(12)
> 
> axesMapper = vtk.vtkPolyDataMapper()
> axesMapper.SetInput(axesTubes.GetOutput())
> axesActor = vtk.vtkActor()
> axesActor.SetMapper(axesMapper)
> 
> # label the axes
> XText = vtk.vtkVectorText()
> XText.SetText(xAxis)
> XTextMapper = vtk.vtkPolyDataMapper()
> 
> XTextMapper.SetInput(XText.GetOutput())
> XActor = vtk.vtkFollower()
> XActor.SetMapper(XTextMapper)
> XActor.SetScale(10.0, 10.0, 10.0)
> XActor.SetPosition(100, -10, -10)
> XActor.GetProperty().SetColor(1.0, 1.0, 1.0)
> 
> YText = vtk.vtkVectorText()
> YText.SetText(yAxis)
> YTextMapper = vtk.vtkPolyDataMapper()
> YTextMapper.SetInput(YText.GetOutput())
> 
> YActor = vtk.vtkFollower()
> YActor.SetMapper(YTextMapper)
> YActor.SetScale(10.0, 10.0, 10.0)
> YActor.SetPosition(-10, 100, -10)
> YActor.GetProperty().SetColor(1.0, 1.0, 1.0)
> 
> ZText = vtk.vtkVectorText()
> ZText.SetText(zAxis)
> ZTextMapper = vtk.vtkPolyDataMapper()
> ZTextMapper.SetInput(ZText.GetOutput())
> 
> ZActor = vtk.vtkFollower()
> ZActor.SetMapper(ZTextMapper)
> ZActor.SetScale(10.0, 10.0, 10.0)
> ZActor.SetPosition(-10, -10, 100)
> ZActor.GetProperty().SetColor(1.0, 1.0, 1.0)
> 
> # Add picking
> # Create a cell picker.
> picker = vtk.vtkCellPicker()
> 
> # Create a text mapper and actor to display the results of picking.
> textMapper = vtk.vtkTextMapper()
> tprop = textMapper.GetTextProperty()
> tprop.SetFontFamilyToArial()
> tprop.SetFontSize(14)
> tprop.BoldOn()
> tprop.ShadowOn()
> tprop.SetColor(1, 0, 0)
> textActor = vtk.vtkActor2D()
> textActor.VisibilityOff()
> textActor.SetMapper(textMapper)
> 
> # Create a Python function to create the text for the text mapper used
> # to display the results of picking.
> def annotatePick(object, event):
>     global picker, textActor, textMapper
>     if picker.GetCellId() < 0:
>         textActor.VisibilityOff()
>     else:
>         selPt = picker.GetSelectionPoint()
>         pickPos = picker.GetPickPosition()
>         pickActor = picker.GetActor()
>         pickMapper = picker.GetMapper()
>         textMapper.SetInput("(%.6f, %.6f, %.6f)"%pickPos)
>         textActor.SetPosition(selPt[:2])
>         textActor.VisibilityOn()
>      
> # Now at the end of the pick event call the above function.
> picker.AddObserver("EndPickEvent", annotatePick)
> 
> 
> # Use bounds of dataset to determine focal point
> bounds = dataSet.GetBounds()
> xFocus = (bounds[0] + bounds[1]) / 2
> yFocus = (bounds[2] + bounds[3]) / 2
> zFocus = (bounds[4] + bounds[5]) / 2
> 
> center = dataSet.GetCenter()
> 
> camera = vtk.vtkCamera()
> camera.SetFocalPoint(center[0], center[1], center[2])
> camera.SetPosition(1000, 1000, 1000)
> camera.SetViewUp(1, 0, 0)
> 
> # render the image
> #Graphics Stuff
> 
> ren1 = vtk.vtkRenderer()
> renWin = vtk.vtkRenderWindow()
> renWin.AddRenderer(ren1)
> renWin.SetWindowName("vtk - Field Data")
> iren = vtk.vtkRenderWindowInteractor()
> iren.SetRenderWindow(renWin)
> 
> # Add the actors to the renderer, set the background and size
> ren1.AddActor(axesActor)
> ren1.AddActor(XActor)
> ren1.AddActor(YActor)
> ren1.AddActor(ZActor)
> ren1.AddActor(glyphActor)
> ren1.AddActor2D(textActor)
> ren1.SetActiveCamera(camera)
> 
> renWin.SetSize(800, 800)
> 
> renWin.Render()
> 
> print("About to write image file")
> 
> windowToImage = vtk.vtkWindowToImageFilter()
> windowToImage.SetInput(renWin)
> 
> bitmapWriter = vtk.vtkBMPWriter()
> bitmapWriter.SetInput(windowToImage.GetOutput())
> bitmapWriter.SetFileName("TestFileName.bmp")
> bitmapWriter.Write()
> print("Image file written")
> 
> iren.SetPicker(picker)
> iren.Initialize()
> iren.Start()
> 
> 
> 
-- 
Shari Rolnick <shari at loralee.net>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: GenerateViz.py
Type: text/x-python
Size: 6330 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20060424/06211cb4/attachment.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PropertyReader.py
Type: text/x-python
Size: 475 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20060424/06211cb4/attachment-0001.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PropertySet.py
Type: text/x-python
Size: 1066 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20060424/06211cb4/attachment-0002.py>
-------------- next part --------------
xAxis=HS_HOME
yAxis=STUDNT_POP
zAxis=MSA_AVG
scalar=HS_HOME
minHue=0.0
maxHue=1.0
minSaturation=1.0
maxSaturation=1.0
minValue=1.0
maxValue=1.0
scaleFactor=5.0


More information about the vtkusers mailing list