[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