[Paraview-developers] Is it possible to animate representation properties?
Cory Quammen
cquammen at cs.unc.edu
Thu Oct 11 09:49:10 EDT 2012
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 = 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
More information about the Paraview-developers
mailing list