[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