[Paraview] Accessing GetAnimationScene() from the ProgrammableSource

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Thu Apr 25 10:57:40 EDT 2013


Don't do this in ProgrammableFIlter, do it in the "Python" animation script.

On Thu, Apr 25, 2013 at 10:55 AM, Bill Sherman <shermanw at indiana.edu> wrote:
> 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