[vtkusers] Re: get data values at line

Fabian Braennstroem f.braennstroem at gmx.de
Wed Oct 19 14:38:54 EDT 2005


Hi,

* On 19 Oct 2005 * Fabian Braennstroem wrote:

> Hi,
> 
> I read my EnSight Case with the 'vtkGenericEnSightReader'
> and I am able to find the max velocity with:
> 
>   maxVelocity=reader.GetOutput().GetPointData().GetVectors().GetMaxNorm();
> 
> Now, I would like to read the actual velocity at certain
> points and/or lines and write them to an external file. Can
> I do this using the probe filter or is there anything
> similar to 'GetActualValue(x1,y1,z1,x2,y2,z2)', where I
> define the point/line and get the values!? Afterwards I would
> use a simple 'print' in Cxx/Python/Tcl.

I found something, which could work... I am actually trying
to implement a probe filter into the python-officeTube
example. I got the probe filter from the xyPlot.py example:




   #!/usr/bin/env python
   
   # This example demonstrates the use of a single streamline and the
   # tube filter to create a streamtube.
   
   import vtk
   from vtk.util.misc import vtkGetDataRoot
   from vtk.util.colors import *
   VTK_DATA_ROOT = vtkGetDataRoot()
   
   # We read a data file the is a CFD analysis of airflow in an office
   # (with ventilation and a burning cigarette). We force an update so
   # that we can query the output for its length, i.e., the length of the
   # diagonal of the bounding box. This is useful for normalizing the
   # data.
   reader = vtk.vtkStructuredGridReader()
   reader.SetFileName(VTK_DATA_ROOT + "/Data/office.binary.vtk")
   reader.Update()
   
   length = reader.GetOutput().GetLength()
   
   maxVelocity =reader.GetOutput().GetPointData().GetVectors().GetMaxNorm()
   maxTime = 35.0*length/maxVelocity
   
   
   # Create three the line source to use for the probe lines.
   line = vtk.vtkLineSource()
   line.SetResolution(1)
   
   # Move the line into place and create the probe filter.  For
   # vtkProbeFilter, the probe line is the input, and the underlying data
   # set is the source.
   transL1 = vtk.vtkTransform()
   transL1.Translate(0.0, 0.0, 0.37)
   transL1.Scale(1, 1, 1)
   #transL1.RotateY(90)
   tf = vtk.vtkTransformPolyDataFilter()
   tf.SetInput(line.GetOutput())
   tf.SetTransform(transL1)
   probe = vtk.vtkProbeFilter()
   probe.SetInput(tf.GetOutput())
   probe.SetSource(reader.GetOutput())
   
   wertreader = reader.GetOutput().GetPointData().GetScalars().GetTuple1(1)
   
   print 'line', line
   print 'transL1', transL1
   print 'tf', tf
   print 'probe', probe

   print 'wertreader', wertreader

   wert = probe.GetOutput().GetPointData().GetScalars().GetTuple1(1)
   print 'wert', wert


The variable wertreader prints the scalar value at (1) by
using 'reader' as input. Afterwards I tried to use the
defined 'probe' as input, but that does not work. I get:
 
   Traceback (most recent call last):
     File "Tube.py", line 51, in ?
       wert =
   probe.GetOutput().GetPointData().GetScalars().GetTuple1(1)
   AttributeError: 'NoneType' object has no attribute
   'GetTuple1'

Does anybody have an idea what I am doing wrong?

I would use the 'reader' as input when I would know, how I
can easyly get the values at a line in the domain...

Best Greetings!
Fabian






More information about the vtkusers mailing list