[Paraview] Example of displaying information

Michael Jackson mike.jackson at bluequartz.net
Tue Nov 25 09:20:32 EST 2008


The code can be viewed from the following web address:

http://www.bluequartz.net/viewvc/CTMD/PVRoboMet

(It is a slow CVS server so give it some time..)

I'll try to summarize what you will need to do.

SERVER SIDE:
    Within your filter/reader that you want to get information about  
you will need to implement all the Get* methods of the values that you  
want information about. For example in the file src/Readers/ 
vtkH5RoboMetReader.h you will see methods such as

vtkTypeInt32 GetCurrentMosaicWidth();
vtkTypeInt32 GetCurrentMosaicHeight();

Once you have those implemented you will next need to add some XML to  
the Server Manager XML file (pv3_xml/PVRoboMet_PVSM.xml in my code base)

To expose those 2 properties from above we need to add the following  
xml (Assuming you already have a complete Server Manager XML file  
working..)

<IntVectorProperty name="CurrentMosaicWidth"
                    command="GetCurrentMosaicWidth"
		   number_of_elements="1"
                    default_values="0"
                    information_only="1"  >
                 <SimpleIntInformationHelper />
</IntVectorProperty>

<IntVectorProperty name="CurrentMosaicHeight"
                    command="GetCurrentMosaicHeight"
                    number_of_elements="1"
                    default_values="0"
                    information_only="1"  >
                 <SimpleIntInformationHelper />
</IntVectorProperty>

That is all for the SERVER SIDE of things. Now for the Client Side of  
things.

Take a look in the src/PV3ClientPlugin folder for the source.

In the pqH5RoboMetReaderPanel class you will see that I inherit from  
pqLoadedFormObjectPanel. There may be other ways to do this but I used  
this class. I then created my GUI QtPanel inside of QtDesigner placing  
my QLabels into my design. Name all the QLabels appropriately for your  
case.
   Some of the details of the class can be seen in the .cpp file. In  
the constructor of the class I get pointers to all the QLabels that I  
want to set the value for.
MosaicWidth = qFindChild<QLabel*>(this, "MosaicWidth");
MosaicHeight = qFindChild<QLabel*>(this, "MosaicHeight");

Note the value in the double quotes in the arguments is the "Object  
Name" that you gave to your label in QtDesigner.

You need to implement the updateInformationAndDomains() methods from  
the super class to actually get the information from the server side:

void pqH5RoboMetReaderPanel::updateInformationAndDomains()
{
   pqLoadedFormObjectPanel::updateInformationAndDomains();
   updateIntValue(this->MosaicWidth, "CurrentMosaicWidth", 0);
   updateIntValue(this->MosaicHeight, "CurrentMosaicHeight", 0);
}

and I implemented this method:

void pqH5RoboMetReaderPanel::updateIntValue(QLabel* qLabel,
					    QString property,
                                             qint32 index)
{
   vtkSMProperty* smProperty = this->proxy()- 
 >GetProperty(property.toAscii());
   if (NULL == smProperty)
   {
     std::string msg = "SMProperty [int] was NULL for ";
     msg.append(property.toAscii() );
     DebugTrace(<< msg.c_str() );
   }
   vtkSMIntVectorProperty* dvp =  
vtkSMIntVectorProperty::SafeDownCast(smProperty);
   int value = dvp->GetElement(index);
   qLabel->setText(QString::number(value));
}

That should get you going enough. Let me know if you have any  
questions. I guess this might be a good one to put on the Wiki as a  
tutorial.

_________________________________________________________
Mike Jackson                  mike.jackson at bluequartz.net
             www.bluequartz.net


On Nov 25, 2008, at 2:44 AM, Bryn Lloyd wrote:

> Hi Micheal,
>
> Yes, I would be interested. Thanks!
>
> -Bryn
>
>
>
> Michael Jackson wrote:
>> I have some example code that might help if you are interested..
>> On Nov 24, 2008, at 5:43 PM, Moreland, Kenneth wrote:
>>> A straightforward way of implementing this would be to add a  
>>> custom view via a plugin.  The Plugin HowTo Wiki page describes  
>>> how to make a plugin with a custom view in it.  The implementation  
>>> to get the data you need to display in the view is up to you.
>>>
>>>  http://www.paraview.org/Wiki/Plugin_HowTo
>>>
>>> -Ken
>>>
>>>
>>> On 11/24/08 10:24 AM, "Bryn Lloyd" <blloyd at vision.ee.ethz.ch> wrote:
>>>
>>> Hi
>>>
>>> I have been looking for an example, which would help me understand  
>>> how
>>> I can get some information about a dataset and display it in a GUI
>>> element (e.g. in a QLabel).
>>>
>>> E.g. as an example, I would like to have a panel or some other gui
>>> element, which displays certain values which it gets from a data set
>>> (e.g. number of lines in a polydata, or total volume of a  
>>> unstructured
>>> grid, or ...)
>>>
>>> Can you please suggest how I could achieve this?
>>>
>>> Thanks,
>>> Bryn
>>>
>>>   ****      Kenneth Moreland
>>>    ***      Sandia National Laboratories
>>> ***********
>>> *** *** ***  email: kmorel at sandia.gov
>>> **  ***  **  phone: (505) 844-8919
>>>    ***      web:   http://www.cs.unm.edu/~kmorel
>>>
>> _________________________________________________________
>> Mike Jackson                  mike.jackson at bluequartz.net
>> BlueQuartz Software                    www.bluequartz.net
>> Principal Software Engineer                  Dayton, Ohio
>
>
> -- 
> -------------------------------------------------
> Bryn Lloyd
> Computer Vision Laboratory
> ETH Zürich, Sternwartstrasse 7
> CH - 8092 Zürich, Switzerland
> Tel: +41 44 63 27690
> Fax: +41 44 63 21199
> -------------------------------------------------




More information about the ParaView mailing list