How about using a Transform Filter, possibly using scripting? Not sure if that 
works with timesteps, but I suppose it can be done.

I made the following example for someone on the list recently, that shows 
animation of a transformfilter:

http://markmail.org/download.xqy?id=wjep757breylvtao&number=1 (downloads a 
state file)



[cid:[email protected]][cid:[email protected]]

dr. ir. Menno A. Deij


Software Engineer


Maritime Simulation Group




MARIN




        2, Haagsteeg

E [email protected]<mailto:[email protected]>       P.O. Box 28     T +31 317 49 39 
11
        6700 AA Wageningen
T  +31 317 49 35 06     The Netherlands I  www.marin.nl<http://www.marin.nl>



MARIN news: Exploratory study on the working principles of Energy Saving 
Devices<http://www.marin.nl/web/News/News-items/Exploratory-study-on-the-working-principles-of-Energy-Saving-Devices.htm>

This e-mail may be confidential, privileged and/or protected by copyright. If 
you are not the intended recipient, you should return it to the sender 
immediately and delete your copy from your system.


From: [email protected] [mailto:[email protected]] On 
Behalf Of [email protected]
Sent: Thursday, March 22, 2012 5:13 PM
To: [email protected]
Subject: [Paraview] Assistance/Suggestion With Animating Relatively Small 
Datasets Over Many Timesteps


     This is my first experience posting to the ParaView Mailing List; as well 
as my first project I am exploring with ParaView.  I hope I am posting this 
question to the correct audience.

     I am attempting to create an animation of our Solar System - at an 
extremely high update interval - perhaps plotting the position and velocity of 
significant solar system bodies over 165 Earth years at
a one day interval.  Initially I thought I would be able to work with CSV files 
to define a dataset which includes time, positional coordinates, and velocity 
vectors.  While testing this approach I managed to use the TableToPoints filter 
to create a visualization of a sample dataset; but I was not able to sequence 
over the individual timesteps.  So in effect you see all the positions a 
particular planet was at for the entire duration of the dataset.

I created a video of this test and made it available online:
     http://www.youtube.com/watch?v=XLPxx-2Zc9Q

     Next I thought perhaps the CSV format was a little too general for what I 
needed, so I read the VTK file format document and migrated over to the XML VTK 
format.  It seems like there is no way to define time sequenced data natively 
within the file format itself?  ParaView expects the user to break the 
timesteps into individual files - with a numeric indicator in the filename to 
define the sequence.  If I were to take this approach, I could be looking at 
creating nearly 500,000 individual files to represent the entire duration of 
time I'm interested in plotting.  I feel like there must be a better way to do 
this.

     As a small improvement I thought I could at least combine all of the 
unique solar system bodies (Earth, Sun, etc.), into a single timestep file such 
as this:
          (filename: timeseries_2455562.vtu)

<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian" 
compressor="vtkZLibDataCompressor">
  <UnstructuredGrid>
    <Piece NumberOfPoints="2" NumberOfCells="2">
      <PointData Vectors="Velocity" Scalars="Radius">
        <DataArray Name="Time" type="Float32" format="ascii">2455562 
2455562</DataArray>
        <DataArray Name="Radius" type="Float32" format="ascii">6371 
696000</DataArray>
        <DataArray Name="Velocity" type="Float32" NumberOfComponents="3" 
format="ascii">
          -2.982651603443954E+01 -5.304542013817379E+00 -7.226846229160870E-04
          0 0 0
        </DataArray>
      </PointData>
      <Points>
        <DataArray type="Float32" NumberOfComponents="3" format="ascii">
          -2.567030301930377E+07 1.448508985971261E+08 -3.607762965630511E+03
          0 0 0
        </DataArray>
      </Points>
      <Cells>
        <DataArray Name="connectivity" type="Int32" format="ascii">0 
1</DataArray>
        <DataArray Name="offsets" type="Int32" format="ascii">1 2</DataArray>
        <DataArray Name="types" type="UInt8" format="ascii">1 1</DataArray>
      </Cells>
    </Piece>
  </UnstructuredGrid>
</VTKFile>

The idea of this approach was to list all of the scalars and vectors for each 
corresponding body in a single file.  In this example the first listed scalar, 
vector, or coordinate point, is the Earth while the second set of values 
indicates the Sun's data.  By combining the bodies into a single file I could 
reduce the 500,000 files required down to some 60,000 files....still 
undesirable but better.

However I would also like to segment the Points once inside the ParaView 
environment; so I can create a distinct pipeline for each body in the dataset.  
One application for this would be to allow different Glyph rendering rules for 
the Sun and the Earth so I can make the Sun...have a Sun texture - and the 
Earth an Earth texture.

After experimenting with this for awhile I found myself trying to implement a 
Programmable Filter.  The filter would take the Unstructured Grid for the given 
timestep, and given an index, extract the Point, Scalar, and Vector data from 
its input - then set only those values to the Output Unstructured Grid.  I 
currently have a script that looks something like this:

# CELLID 0 = EARTH
cellId = 0

# Obtain References To Input/Output Data
gridI = self.GetUnstructuredGridInput()
gridO = self.GetUnstructuredGridOutput()
dataI = self.GetInput()
dataO = self.GetOutput()
scalarI = dataI.GetPointData().GetScalars()
vectorI = dataI.GetPointData().GetVectors()

# Initialize Local Storage Arrays
newVector = vtk.vtkFloatArray()
newVector.SetName(vectorI.GetName())
newVector.SetNumberOfComponents(3)
newScalar = vtk.vtkFloatArray()
newScalar.SetName(scalarI.GetName())
newPoint = vtk.vtkPoints()
newPoint.SetNumberOfPoints(1)
newCell = vtk.vtkCellArray()

# Lookup CellId References
idCell = gridI.GetCell(cellId)
idCellType = gridI.GetCellType(cellId)
idPoint = gridI.GetPoints().GetPoint(cellId)
idScalar = scalarI.GetTuple(cellId)
idVector = vectorI.GetTuple(cellId)

# Populate New Local Cell Array with CellId Cell
newCell.InsertNextCell(idCell)

# Populate New Local Point Array With CellId Point
newPoint.SetPoint(0, idPoint)

# Populate New Local Scalars with CellId Scalar Tuples
newScalar.InsertNextTuple(idScalar)

# Populate New Local Vectors with CellID Vector Tuples
newVector.InsertNextTuple(idVector)

# Copy Local Cells, Scalars, Vectors, and Points Into Output Pipeline Data
gridO.SetPoints(newPoint)
gridO.SetCells(idCellType, newCell)
dataO.GetPointData().SetScalars(newScalar)
dataO.GetPointData().SetVectors(newVector)

The filter does achieve the desired effect for the cellID 0 - but when I switch 
the value of cellID to 1 (which should refer to the Sun's index) ParaView 
crashes hard - where I assume I am missing something, possibly requesting 
something out of bounds in memory.

I've been struggling with this problem for a little while now and thought to 
share my progress here; hopefully there is somebody out there with a little 
more insight that could help guide me towards either a conclusion with this 
implementation or a suggestion for a better approach.

Essentially - How can one give ParaView Point and Velocity vectors over a vast 
sequence of time without creating potentially hundreds of thousands of files on 
disc?  Does this Programmable Filter seem like a reasonable approach?  Is there 
a native feature I am missing that does this already?  Is there some other file 
format other than VTK I could use to have ParaView understand this format of 
data?

Any thoughts, comments, or questions will be greatly appreciated.  :)

Thanks,
     John


<<inline: imageb5e239.JPG>>

<<inline: imageab677b.JPG>>

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to