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 <[email protected]> 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



_______________________________________________
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

Reply via email to