[Paraview] source with optional input port

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Wed Jan 27 15:17:03 EST 2010


Burlen,

Sorry for the delay in responding. I guess your solution is fine.
Ideally, I'd have liked tuples of group-names and proxy-names, but
that'd break backwards compatibility and really isn't such a common
use-case :), so not worth the to trouble.

Feel free to commit your patch -- just makes sure it works with
existing plugins :).

Utkarsh

On Mon, Jan 4, 2010 at 11:33 AM, burlen <burlen.loring at gmail.com> wrote:
> Happy New Year Utkarsh,
>
>> What is the user wants the panel
>> for (readers, MyReader) and (filters, MyFilter) but not (readers,
>> MyFilter)?
>
> To be honest I hadn't anticipated the situation but, as far as I can tell
> this scenario is OK under the proposed change because the group is tested
> first and if it doesn't match the search is terminated. So bottom line,
> panels for objects with the same name but a different group can be distinct
> and PV won't get confused.
>
> Here is an example of how the proposed changes lets one associate the same
> panel with both a source and a filter that is implemented with a single vtk
> class. For example if the class is vtkSQHemisphereSource and the panel is
> pqSQHemisphereSource, here is what the cmake lists look like:
>
> # beginning of cmake lists
>
> QT4_WRAP_CPP(MOC_SRCS pqSQHemisphereSource.h)
> QT4_WRAP_UI(UI_SRCS pqSQHemisphereSourceForm.ui)
> ADD_PARAVIEW_OBJECT_PANEL(
>  IFACES IFACE_SRCS
>  CLASS_NAME pqSQHemisphereSource
>  XML_NAME vtkSQHemisphereSource
>  XML_GROUP sources filters)   # <----------------------THE PROPOSED CHANGE
> GIVES YOU THIS
>
> # end of cmake lists
>
> Here is what the server manager XML looks like:
>
> <!-- beginning of xml -->
>
> <ServerManagerConfiguration>
>
> <!--
> *******************************************************************************
> *
>   *
> *                                   Sources
>   *
> *
>   *
> *******************************************************************************
> -->
> <ProxyGroup name="sources">
>
>  <!-- ====================================================================
> -->
>  <Proxy name="SQHemisphereUI">
>   <!-- Out -->
>   <OutputPort name="Northern Hemisphere" index="0" />
>   <OutputPort name="Southern Hemisphere" index="1" />
>
>   <DoubleVectorProperty
>     name="GetCenter"
>     command="GetCenter"
>     information_only="1">
>     <SimpleDoubleInformationHelper/>
>   </DoubleVectorProperty>
>   <DoubleVectorProperty
>     name="Center"
>     command="SetCenter"
>     number_of_elements="3"
>     animateable="1"
>     default_values="0.0 0.0 0.0"
>     information_property="GetCenter">
>   <DoubleRangeDomain name="range"/>
>   <Documentation>
>     This property specifies the 3D coordinates for the center of the sphere.
>   </Documentation>
>  </DoubleVectorProperty>
>
>  <DoubleVectorProperty
>   name="GetRadius"
>   command="GetRadius"
>   information_only="1">
>   <SimpleDoubleInformationHelper/>
>  </DoubleVectorProperty>
>  <DoubleVectorProperty
>   name="Radius"
>   command="SetRadius"
>   number_of_elements="1"
>   animateable="1"
>   default_values="0.5"
>   information_property="GetRadius">
>   <DoubleRangeDomain name="range" min="1E-15"/>
>   <Documentation>
>     This property specifies the radius of the sphere.
>   </Documentation>
>  </DoubleVectorProperty>
>
>  <IntVectorProperty
>   name="GetResolution"
>   command="GetResolution"
>   information_only="1">
>   <SimpleIntInformationHelper/>
>  </IntVectorProperty>
>  <IntVectorProperty
>     name="Resolution"
>     command="SetResolution"
>     number_of_elements="1"
>     default_values="8"
>     information_property="GetResolution">
>   <IntRangeDomain name="range" min="3" max="1024" />
>   <Documentation>
>     The value of this property controls the number of lat-lon lines in the
> output.
>   </Documentation>
>  </IntVectorProperty>
>
>  <!-- End Hemisphere UI -->
>  </Proxy>
>
>  <!-- ====================================================================
> -->
>  <SourceProxy
>   name="vtkSQHemisphereSource"
>   class="vtkSQHemisphereSource"
>   label="SQ Hemisphere"
>   base_proxyname="SQHemisphereUI"
>   base_proxygroup="sources">
>   <Documentation
>     long_help="Create a 3D sphere given a center and radius."
>     short_help="Create a 3D sphere">
>     The Hemisphere source can be used to add a polygonal sphere to the 3D
> scene. The output of the Hemisphere source is polygonal data with point
> normals defined.
>   </Documentation>
>  <!-- End Hemisphere Source -->
>  </SourceProxy>
>
> </ProxyGroup>
>
> <!--
> *******************************************************************************
> *
>   *
> *                                   Filters
>   *
> *
>   *
> *******************************************************************************
> -->
> <ProxyGroup name="filters">
>
>  <!-- ====================================================================
> -->
>  <SourceProxy
>   name="vtkSQHemisphereSource"
>   class="vtkSQHemisphereSource"
>   label="SQ Hemisphere"
>   base_proxyname="SQHemisphereUI"
>   base_proxygroup="sources">
>   <Documentation
>      long_help="Create a 3D sphere given a center and radius."
>      short_help="Create a 3D sphere">
>      The Hemisphere source can be used to add a polygonal sphere to the 3D
> scene. The output of the Hemisphere source is polygonal data with point
> normals defined.
>   </Documentation>
>   <InputProperty
>     name="Input"
>     command="SetInputConnection">
>         <ProxyGroupDomain name="groups">
>           <Group name="sources"/>
>           <Group name="filters"/>
>         </ProxyGroupDomain>
>         <DataTypeDomain name="input_type">
>           <DataType value="vtkDataSet"/>
>         </DataTypeDomain>
>   </InputProperty>
>  <!-- End Hemisphere Source -->
>  </SourceProxy>
> </ProxyGroup>
>
> </ServerManagerConfiguration>
>
> <!-- end xml -->
>
>
>> Not sure if it's even worth the trouble -- but just in case
>> you can think of a cleaner solution.
>
> Taking a quick look at how it all works in pqObjectInspectorWidget it
> doesn't look like there is a cleaner solution to be had easily. But you know
> you are the expert here, so if there is a better way you probably spot it
> better than I. I can say this though, this solution may not be elegant but
> in most cases the change adds very little over head because in the nested
> m*n loop, the outer m loop is the number of groups, will almost always be 1
> and when it's not m will most likely be 2, in the worst case (I don't think
> it will ever come up) it could be 3 or 4 (sources,filters,readers, what
> else?). And, n the number of custom panels, currently I will guess is at
> worst on the order of 100. So we're not talking about adding a lot of work
> here.
>
> Let me know if you have something better in mind
> Burlen
>
>
> Utkarsh Ayachit wrote:
>>
>> That sounds reasonable, but specification of multiple group names and
>> xml names and the m*n matching between them seems funny. Any ideas on
>> how we can make that more explicit? What is the user wants the panel
>> for (readers, MyReader) and (filters, MyFilter) but not (readers,
>> MyFilter)? Not sure if it's even worth the trouble -- but just in case
>> you can think of a cleaner solution.
>>
>> Utkarsh
>>
>> On Fri, Dec 18, 2009 at 6:36 PM, burlen <burlen.loring at gmail.com> wrote:
>>>
>>> Hi folks,
>>>
>>> I'd like to have a PV data source that can be used either as a
>>> source(without an input dataset) or as a filter(with an input dataset).
>>> Based on what I have observed, to accomplish it the source has to show up
>>> both in the sources menu and the filters menu, which is easy to do with
>>> the
>>> XML by adding an entry in both the sources and filters groups that points
>>> back to the same class and base proxy. It all works except for sharing a
>>> custom qt panel between them, specifically sharing the panel across proxy
>>> groups isn't currently allowed.
>>>
>>> The attached patch enables a custom panel to be shared across the
>>> sources/filters proxy groups. Assuming that this is the right way to
>>> accomplish this can this patch be committed?
>>>
>>> Why would you want to do this?  For one example:
>>> a source with an optional input used like a filter can then extract
>>> spatial
>>> bounds from the input dataset and then position itself automatically in
>>> the
>>> scene. This makes the source faster/easier to use than if you have to
>>> type
>>> in the coordinates to position it. There are plenty of other examples,
>>> with
>>> one thing in common, the potential to make the source easier/faster to
>>> use.
>>>
>>> Burlen
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the ParaView Wiki at:
>>> http://paraview.org/Wiki/ParaView
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.paraview.org/mailman/listinfo/paraview
>>>
>>>
>
>


More information about the ParaView mailing list