[Paraview] Accessing GetAnimationScene() from the ProgrammableSource

Bill Sherman shermanw at indiana.edu
Wed Apr 24 17:54:13 EDT 2013


Hello again Utkarsh, ParaView list people,

> You cannot access animation scene from ProgrammableSource. Anything
> from simple.py/servermanager.py cannot be accessed in
> ProgrammableSource/Filter. You can add Python scripts as an animation
> track, however. In the animation view, choose "Python" in the first
> combo-box next to the "+" button.

Thanks again for this, this is a great tool to know about -- I was
doing animations stuff all day yesterday and didn't notice it.

I have a couple of updates:

First, with the Animation Python script, I'm not sure how the
geometry I generate can be placed into the scene.

Second, I managed to figure out a way to use a Programmable Filter
fed by an "AnnotateTime" source to make a geometry that is based on
time!  So that's the good news -- example Python script below.

The bad news is that I didn't quite think this through.  What I want
is basically a time/progress bar at the top, and I can do that now,
but what I forgot is that the camera moves in the animation, and I
don't want my progress bar to move!  I should have thought of that
from the outset!

I've been doing some research and experimenting with vanilla VTK, and
it doesn't seem to be the case that I can have a 2D geometric object
that is immune to the camera's movements.  (And if anyone knows anything
different than that, I'd love to hear about it.)

So, I decided to just try something simple for now, but of course nothing
is simple.  I was thinking that I'd just create a text representation of
time -- ie a bunch of ohs in a string ("oooooo..."), but now I don't
know if I can produce a Text object other than from a source -- ie. can
I programatically create a text object that will be immune to camera
moves (ie. using a vtkActor2D underneath the hood).

Thoughts? ...  Hang on, I just discovered that links can do more than
link cameras!  So any thoughts on how I might take advantage of a link
to create a text string in a programmable filter and pipe that into a
Text object?


As always when working with ParaView, even after I feel like I've learned
a lot, the amount of knowledge of what I don't know about it seems
to have expanded even more!

For example: the programmable filter has three places for scripts:
	- Script
	- RequestInformation Script
	- RequestUpdateExtent Script
Each have popups, but the message is self referential -- I have to
know what the RequestInformation pass or the RequestUpdateExtent pipeline
pass means to know how these work.


Okay, as promised, thanks to some code from Utkarsh, and a lot of
trial an error, I present a programmable filter script that modifies
the shape of this triangle based on animation time:

-----------------------------------------------------------
time = self.GetInput().GetValue(0,0).ToFloat();
#print time;

# Create a poly-data instance
#pd = vtk.vtkPolyData()

# Instead link to the poly-data created for the output
pd = self.GetPolyDataOutput();

# Set up the containter to save the
# point locations (geometry)
points = vtk.vtkPoints()
pd.SetPoints(points)

# Add the point coordinates
points.SetNumberOfPoints(3)
points.SetPoint(0, 0, 0, 0)
points.SetPoint(1, 2, time, 0)
points.SetPoint(2, 3, 0, 0)

# We are adding a single triangle with
# 3 points. Create a id-list to refer to
# the point ids that form the triangle.
ids = vtk.vtkIdList()
ids.SetNumberOfIds(3)
ids.SetId(0, 0)
ids.SetId(1, 1)
ids.SetId(2, 2)

# Since this polydata has only 1 cell,
# allocate it.
pd.Allocate(1, 1)

# Insert the cell giving its type and
# the point ids that form the cell.
pd.InsertNextCell(vtk.VTK_POLYGON, ids)
-----------------------------------------------------------

So, in order to get time, the Programmable Filter must have as its
input an "AnnotateTime" module that just outputs a numeric value for
time.  And then the output type for the filter must be set to "vtkPolyData".

> Utkarsh

	more to learn, more to learn ... thanks!
	Bill

>
> On Wed, Apr 24, 2013 at 10:02 AM, Bill Sherman<shermanw at indiana.edu>  wrote:
>> Hello,
>>
>> I have a question about how to access internal ParaView data from the
>> Programmable Source source.
>>
>> Specifically, I want to have a source that changes based on the animation
>> time, and so I would like to know how to get the current data-time
>> from within the python code of a Programmable Source.
>>
>> So, using the Python_Scripting wiki entry on paraview.org, I have
>> found that from the Python Shell I can get information about the
>> current time of the animation using the GetAnimationScene() method,
>> so I'm hoping that there is a quick trick to accessing this data
>> from the ProgrammableSource python code.
>>
>> Eg.
>>          >>>  scene=GetAnimationScene()
>>          >>>  print scene.AnimationTime
>>          30.0466
>>
>> I think from there I can do some interesting stuff.
>>
>>          Thanks in advance,
>>          Bill
>>
>> --
>> Bill Sherman
>> Sr. Technology Advisor
>> Advanced Visualization Lab
>> Pervasive Technology Inst
>> Indiana University
>> shermanw at indiana.edu



More information about the ParaView mailing list