[Paraview] useful plugin: how to do it, really?

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Wed Sep 24 14:59:43 EDT 2014


That's pretty much what you have to do, I'm afraid.

On Wed, Sep 24, 2014 at 1:56 PM, B.W.H. van Beest <bwvb at xs4all.nl> wrote:
> Utkarth,
>
> I followed-up on your advice, and it works. Thanks very much!
>
> I have still one question:  When iterating over the proxy objects, I
> need to find out what kind of object the proxy is referring to (Sphere,
> box, etc.)
> In my trial code, I do that via the "XMLName" followed by a string
> comparison, like this:
>
>          // prx is proxy, obtained as you describe via iter->GetProxy()
>
>          std::string srctype = prx->GetXMLName();
>
>          if ( srctype == "SphereSource" )
>          {
>             // Code for sphere
>         }
>          else if ( srctype == "CylinderSource" )
>          {
>             // Code for Cyliner
>          }
>          else // etc
>          {
>             ...;
>          }
>
> Is this indeed the way to do it, or are there (more efficient)
> alternatives?
>
> Kind Regards,
> Bertwim
>
>
> On 09/23/2014 03:01 PM, Utkarsh Ayachit wrote:
>> Bertwim,
>>
>> I agree the developer docs are little scattered right now. My plan is
>> to start writing blog posts that make this easier to digest. One of
>> these, hopefully, I get around to it :). In the mean time, my replies
>> are inline.
>>
>>
>>> 1. Suppose I have created, interactively, a box, a sphere and a cone,
>>> using the corresponding entries in the "Sources" menu.
>>>
>>> 2. Now I would like to *programmatically* (i.e. in  a c++ plugin) loop
>>> over the sources (here: the box, sphere and cone) and for each of the
>>> elements
>>> get hold of the parameters that were used to define these sources (i.e.
>>> the box dimensions, center, radii etc.). With these parameters I can
>>> then do other things to build my own extension, but those details do not
>>> matter here.
>>
>> Several ways for getting to the "proxies" for the sphere, box, etc.
>> created. One way it using the vtkSMSessionProxyManager.
>>
>> a. Using vtkSMSessionProxyManager:
>> a.1 Get access to the active session's proxy manager using
>> pqActiveObjects::instance().proxyManager() [1]
>> a.2 Use vtkSMProxyIterator[2] to iterate over the "sources" group.
>>     vtkNew<vtkSMProxyIterator> iter;
>>     iter->SetSessionProxyManager(pqActiveObjects::instance().proxyManager());
>>     iter->SetModeToOneGroup();
>>     for (iter->Begin("sources"); ! iter->IsAtEndt(); iter->Next())
>>       {
>>       iter->GetKey() ---> is the "label" for the proxy you see in the
>> pipeline browser
>>       iter->GetProxy() -- > will be the actual proxy object,
>>       }
>>
>> To access parameters defined on them, you can access the "properties"
>> on these proxies. If you know which property you're looking for using
>> vtkSMPropertyHelper[3] to get the values e.g.
>>
>>    sphereProxy = ..
>>    vtkSMPropertyHelper(sphereProxy, "Radius").GetAsDouble() --> the radius
>>
>> To iterate over all properties on the proxy, you can use
>> vtkSMProxy::NewPropertyIterator [4] which will give you a new iterator
>> (don't forget to call iter->Delete() once you're done with the
>> iterator). You can use that to iterate over all properties on the
>> proxy,
>>
>> Hope that helps,
>> Utkarsh
>>
>> [1] http://www.paraview.org/ParaView3/Doc/Nightly/www/cxx-doc/classpqActiveObjects.html#a547a93dececb0d5ac7a35f373e5c68ab
>> [2] http://www.paraview.org/ParaView3/Doc/Nightly/www/cxx-doc/classvtkSMProxyIterator.html
>> [3] http://www.paraview.org/ParaView3/Doc/Nightly/www/cxx-doc/classvtkSMPropertyHelper.html
>> [4] http://www.paraview.org/ParaView3/Doc/Nightly/www/cxx-doc/classvtkSMProxy.html#ab0eee37fc2a021334964e9ffcd682a4c
>>
>>
>


More information about the ParaView mailing list