[Paraview] Accessing GetAnimationScene() from the ProgrammableSource

Bill Sherman shermanw at indiana.edu
Thu Apr 25 10:55:24 EDT 2013


Hey Utkarsh,

> Following may help:
>
> - Create a mapper for your polydata.
> - Set that mapper to a vtkFollower.
> - Pass camera to vtkFollower (view.GetActiveCamera())
> - Add vtkFolllower to view (view.GetRenderer2D().AddActor(follower)
>
> You'll have to figure out what Python modules to import to get the
> vtkFollower/vtkPolyDataMapper, if needed. If all goes well, that may
> work.

Right, first thing I'm having difficulty figuring how is how to get
the view from within the Programmable Filter.  I'm sure it's because
it's a serverside object, right, but I found what I thought would
help -- I can get the Proxy for the view and the camera -- but I can't
figure out how to actually get the view object, or remotely access
the view via the Proxy.

E.g.:
	view = servermanager.vtkSMViewProxy()
	print dir(view)

	camera = servermanager.vtkSMCameraProxy()
	print dir(camera)

I can't find any methods from those method listings that tie me to
actually using the camera or the view.

It seems like if I can get over this hump I could be in good shape.

	Thanks,
	Bill

>
> Utkarsh
>
>
> On Thu, Apr 25, 2013 at 12:16 AM, William Sherman<shermanw at indiana.edu>  wrote:
>> On 4/24/13 11:09 PM, Utkarsh Ayachit wrote:
>>> I'm am little confused, what is that you exactly want to see? I can
>>> figure out how to show that.
>>
>> Nothing visually complicated.  In my animation sequence I have data
>> time repeat over and over again as I represent it using different
>> methods.  I currently show that time value using the "AnnotateTime"
>> source, but I feel that that number gets lost in the shuffle, so I
>> want to have something that looks like a progress bar that is tied
>> to data-time and grows as we progress in the simulation.  And when
>> the simulation time resets to 0, the bar goes back to the beginning.
>>
>> Like I said, very simple, yet very difficult.
>>
>> I did more exploration with creating a string that I might use
>> instead of a polygonal object, but then I was foiled when I
>> realized that even though I can put a string into a Table output,
>> the "Manage Links" tool doesn't have an option to link data output
>> to a source/filter parameter.  Only parameter to parameter!
>>
>> So I'm back to the polygonal object.
>>
>>> Utkarsh
>>
>>          Thanks,
>>
>>          Bill
>>
>>> On Wed, Apr 24, 2013 at 5:54 PM, Bill Sherman<shermanw at indiana.edu>
>>> wrote:
>>>> 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