[Paraview-developers] Is it possible to animate representation properties?

Cory Quammen cquammen at cs.unc.edu
Mon Oct 15 12:00:07 EDT 2012


Hi John,

I looked into this late last week. I think it will require a fair
amount of work to make it possible.

Currently, "Opacity" and "Visibility" are essentially special
hard-coded properties shared by all the representations. Explicit
references to the RepresentationAnimationHelper proxy, which has
Opacity and Visibility properties, are also scattered about the
ParaView source code.

One way forward may be to enable specification of a custom
RepresentationAnimationHelper proxy where other properties can be
defined. This would require a way to associate the custom
RepresentationAnimationHelper with the representation plugin through
the XML description of the representation. There would also need a way
to go through the properties of the custom animation helper and add
them as internal properties in pqAnimatablePropertiesComboBox. (I
still haven't figured out how to get a list of properties from a proxy
without knowing the names of the properties or having a pointer to the
property object).

Probably a better way would be to do away with
RepresentationAnimationHelper altogether and slurp in the animatable
representation properties directly without having to define another
animation helper class.

Cory

On Thu, Oct 11, 2012 at 9:52 AM, Biddiscombe, John A. <biddisco at cscs.ch> wrote:
> Cory,
>
> Sorry. It was a long train ride. But clearly not long enough.
>
> I discovered some things that didn't work as expected for me, so I'll look more when I have a moment
>
> JB
>
>> -----Original Message-----
>> From: Cory Quammen [mailto:cquammen at cs.unc.edu]
>> Sent: 11 October 2012 15:49
>> To: Biddiscombe, John A.
>> Cc: ParaView Developers
>> Subject: Re: [Paraview-developers] Is it possible to animate representation
>> properties?
>>
>> Hi John,
>>
>> Thanks for digging into this. I tried what you suggested and indeed got the
>> properties of my custom representation to show up in the animation
>> controls! I'm happy to know it is possible.
>>
>> The only hitch is that I would like my representation properties to show up as
>> properties of the object in the pipeline browser, much as the center position
>> of the sphere source, say, is available. With your solution, my representation
>> shows up in the higher-level menu with the objects in the pipeline, as though
>> the representation itself were a pipeline object. It seems that I can animate
>> distinct instances of my representation nonetheless by having the desired
>> object selected in the pipeline browser, but that interaction doesn't fit with
>> how the rest of the animation controls work.
>>
>> I don't have an alternative solution at the moment, but I'll try to dig into this
>> some more.
>>
>> Thanks,
>> Cory
>>
>> On Thu, Oct 4, 2012 at 9:50 AM, Biddiscombe, John A. <biddisco at cscs.ch>
>> wrote:
>> > Cory
>> >
>> >
>> >
>> > I had a long train ride to experiment with this and managed to get the
>> > basics working.
>> >
>> >
>> >
>> > Adding an AddCustomProxy(...) method to pqAnimationViewWidget is all
>> > that is really necessary to allow you to display the new stuff in the
>> > animation view. For a simple representation I found that all I had to
>> > do was in the display panel decorator (in this case for my splotch
>> > renderer) add the following
>> >
>> > //
>> >
>> > QWidget *mainWindow = pqCoreUtilities::mainWidget();
>> >
>> > pqAnimationViewWidget *pqaw =
>> > mainWindow->findChild<pqAnimationViewWidget*>("animationView");
>> >
>> > pqaw->addCustomProxy("Splotch", reprProxy);
>> >
>> >
>> >
>> > and hey presto all the stuff appears. Unfortunately, pretty much
>> > everything appears, but for a quick first go this is enough. What
>> > needs to be done is to modify some of the more in depth code to only
>> > display the properties on the proxy that are actually marked as
>> animateable. I didn't try this yet.
>> >
>> >
>> >
>> > I had a more specific problem when I wanted to animate properties from
>> > a proxy that I had generated 'internally'. We parse XML on the fly and
>> > create dynamic controls based on messages from a simulation, this
>> > meant that when I added the proxy I had strange effects. I mention
>> > this in case you get problems.
>> >
>> > 1)      You need to make sure the proxy has a domain. If it's a double
>> > (say), then it is sufficient to just make sure you have
>> > <DoubleRangeDomain name="range"/> and that will do. Otherwise the
>> > property doesn't get updated properly (or at all).
>> >
>> > 2)      You also need to register your proxy with the proxy manager (and
>> > thereby produce an associated pqProxy). I wasn't doing this and when
>> > the track is created with your own proxy property selected, the track
>> > had no 'title'. It turned out that the string generation of the name
>> > that appears needs to get the pqProxy from the servermangermodel in
>> > order to fetch the string to show (so sphere1 appears as sphere1 etc
>> > etc) and then it adds the property label string to it of the one
>> > you're animating . Custom renderers just appear as DataRepresentation1...,
>> but I didn't look into tweaking it yet.
>> > Anyway, for my custom proxy which is completely fabricated, paraview
>> > wasn't happy. It turns out when you call RegisterProxy - the group
>> > name you use affects how the pqProxy associated with it is generated
>> > and I had to fool paraview into creating a bare pqProxy (as opposed to
>> > a pqTimeKeeper or some other specialized type) by using the group
>> > "layouts" which is of course nonsense, but if you skim through the
>> > code in Qt\Core\pqStandardServerManagerModelInterface.cxx you'll see
>> > why. I think I should fix this to allow a "Custom" group so that I
>> > don't need to lie about the real group. Either that or allow some
>> > other default of pqProxy rather than NULL which is current. If Utkarsh
>> > is reading this he'll no doubt comment or suggest a sensible default.
>> >
>> > pm->RegisterProxy("layouts", "DsmProxyHelper", this->DsmProxyHelper);
>> >
>> > pqServerManagerModel* smmodel =
>> >
>> > pqApplicationCore::instance()->getServerManagerModel();
>> >
>> > this->pqDsmProxyHelper =
>> > this->smmodel->findItem<pqProxy*>(this->DsmProxyHelper);
>> >
>> > and then later ...
>> >
>> > //
>> >
>> > QWidget *mainWindow = pqCoreUtilities::mainWidget();
>> >
>> > pqAnimationViewWidget *pqaw =
>> > mainWindow->findChild<pqAnimationViewWidget*>("animationView");
>> >
>> > pqaw->addCustomProxy("DSM", this->DsmProxyHelper);
>> >
>> >
>> >
>> > To get the pqProxy if you need it in your own code, use the findItem
>> > shown above. Anyway, for what you want, most of this email is
>> > unnecessary and you can just to the top bit.
>> >
>> >
>> >
>> > Hope this helps.
>> >
>> >
>> >
>> > JB
>> >
>> >
>> >
>> > diff --git a/Qt/Components/pqAnimationViewWidget.cxx
>> > b/Qt/Components/pqAnimationViewWidget.cxx
>> >
>> > index 8ee9eef..4cca0a2 100644
>> >
>> > --- a/Qt/Components/pqAnimationViewWidget.cxx
>> >
>> > +++ b/Qt/Components/pqAnimationViewWidget.cxx
>> >
>> > @@ -75,6 +75,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> SUCH
>> > DAMAGE.
>> >
>> > #include "vtkSMPropertyHelper.h"
>> >
>> > #include "vtkSMProxy.h"
>> >
>> > #include "vtkSMRenderViewProxy.h"
>> >
>> > +#include "vtkSMProxyManager.h"
>> >
>> >
>> >
>> > //--------------------------------------------------------------------
>> > ---------
>> >
>> > class pqAnimationViewWidget::pqInternal
>> >
>> > @@ -818,6 +819,16 @@ void
>> pqAnimationViewWidget::setActiveView(pqView*
>> > view)
>> >
>> > }
>> >
>> >
>> >
>> > //--------------------------------------------------------------------
>> > ---------
>> >
>> > +void pqAnimationViewWidget::addCustomProxy(const char *name,
>> > +vtkSMProxy*
>> > pxy)
>> >
>> > +{
>> >
>> > +  this->Internal->CreateSource->removeProxy(name);
>> >
>> > +  if (pxy && this->Internal->CreateSource->findText(name) == -1)
>> >
>> > +    {
>> >
>> > +    this->Internal->CreateSource->addProxy(0, name, pxy);
>> >
>> > +    }
>> >
>> > +}
>> >
>> > +
>> >
>> > +//-------------------------------------------------------------------
>> > +----------
>> >
>> > void pqAnimationViewWidget::setCurrentSelection(pqPipelineSource*
>> pxy)
>> >
>> > {
>> >
>> >    if (pxy)
>> >
>> > diff --git a/Qt/Components/pqAnimationViewWidget.h
>> > b/Qt/Components/pqAnimationViewWidget.h
>> >
>> > index 0b8f38b..ca5270c 100644
>> >
>> > --- a/Qt/Components/pqAnimationViewWidget.h
>> >
>> > +++ b/Qt/Components/pqAnimationViewWidget.h
>> >
>> > @@ -53,6 +53,7 @@ public:
>> >
>> >    pqAnimationViewWidget(QWidget* parent=0);
>> >
>> >    virtual ~pqAnimationViewWidget();
>> >
>> >
>> >
>> > +  void addCustomProxy(const char *name, vtkSMProxy* pxy);
>> >
>> > public slots:
>> >
>> >
>> >
>> >    /// set the scene to view
>> >
>> > diff --git a/Utilities/Xdmf2 b/Utilities/Xdmf2
>> >
>> > index 616fe9f..4cb22f3 160000
>> >
>> > --- a/Utilities/Xdmf2
>> >
>> > +++ b/Utilities/Xdmf2
>> >
>> > @@ -1 +1 @@
>> >
>> > -Subproject commit 616fe9f5525c0a39c215837888ef48269fdb83a6
>> >
>> > +Subproject commit 4cb22f3e1f3bfed6e8382f689999030055ada4b3-dirty
>> >
>> > diff --git a/VTK b/VTK
>> >
>> > index 8b0026d..0429b26 160000
>> >
>> > --- a/VTK
>> >
>> > +++ b/VTK
>> >
>> > @@ -1 +1 @@
>> >
>> > -Subproject commit 8b0026d1764edfb8dcd3dda3222abc79f100f652
>> >
>> > +Subproject commit 0429b26096df318ca1c58cea239d22daa83ed475
>> >
>> >
>>
>>
>>
>> --
>> Cory Quammen
>> Research Associate
>> Department of Computer Science
>> The University of North Carolina at Chapel Hill



-- 
Cory Quammen
Research Associate
Department of Computer Science
The University of North Carolina at Chapel Hill


More information about the Paraview-developers mailing list