[Paraview-developers] Servermanager XML: Displaying a list of strings along with selection

Girish Ramesh rgirish28 at gmail.com
Mon Aug 18 09:42:27 EDT 2014


Sorry but I'm still getting a seg fault and I'm not sure why. This is the
relevant code within the plugin. Thanks.

XML:

 <StringVectorProperty
       name="CPOList"
       label="CPOList"
       command="SetCPOList"
       number_of_elements_per_command="1"
       information_property="CPOListInfo"
       panel_visibility="default">
       <StringListDomain name="array_list">
        <RequiredProperties>
        <Property function="ArrayList"
                name="CPOListInfo"/>
        </RequiredProperties>
        </StringListDomain>

        <Documentation>
          This property helps select the CPO.
        </Documentation>
     </StringVectorProperty>

     <StringVectorProperty
       name="CPOListInfo"
       label="CPOListInfo"
       command="GetCPOList"
       information_only="1" >
     <StringArrayHelper />
     </StringVectorProperty>

C++:

vtkStringArray* ReadUALGrid::GetCPOList(){


  vtkNew<vtkStringArray> labels;


  labels->InsertNextValue("hello");
  labels->InsertNextValue("world");


  return labels.GetPointer();

}

void ReadUALGrid::SetCPOList(int index)

{

}


I'm just using a random vtkStringArray for testing, but it still segfaults.
Thank you for the help.

Regards,
Girish




On 18 August 2014 15:31, Girish Ramesh <rgirish28 at gmail.com> wrote:

> Thank you very much Cory for your help. I guess the forum shall be
> peppered with any more problems I have!
>
> Regards,
> Girish
>
>
> On 18 August 2014 15:29, Cory Quammen <cory.quammen at kitware.com> wrote:
>
>> Girish,
>>
>> Unfortunately, there isn't much documentation about the server manager
>> XMLs. Finding something that looks like what you are trying to do in
>> the UI and then tracking it down in the XML is currently the best way.
>>
>> Thanks,
>> Cory
>>
>> On Mon, Aug 18, 2014 at 9:25 AM, Girish Ramesh <rgirish28 at gmail.com>
>> wrote:
>> > Dear Cory,
>> >
>> > Thank you very much. Your hints were very helpful. Option 2 was what I
>> was
>> > looking for, but I didn't use the StringListDomain in the second
>> property to
>> > connect the information. So my plugin was seg faulting repeatedly even
>> > though I thought my logic was correct. Also, is there any resource to
>> find
>> > more about servermanager xmls and how to connect the different classes
>> > together or is the only option to look at examples. Sorry for the
>> trouble
>> > :)Thanks again!
>> >
>> > Regards,
>> > Girish
>> >
>> >
>> >
>> >
>> > On 18 August 2014 15:16, Cory Quammen <cory.quammen at kitware.com> wrote:
>> >>
>> >> Girish,
>> >>
>> >> Is the list of strings fixed, or can it vary depending on the file?
>> >> There are three things you can do depending on what you need:
>> >>
>> >> 1). If you have a fixed set of strings, you can use an
>> >> IntVectorProperty, and set its domain as a list of strings with an
>> >> associated integer, i.e., an enumeration.
>> >>
>> >> <IntVectorProperty command="SetVariableType"
>> >>                    default_values="0"
>> >>                    name="VariableType"
>> >>                    number_of_elements="1">
>> >>   <EnumerationDomain name="enum">
>> >>     <Entry text="Variable 1"
>> >>            value="0" />
>> >>     <Entry text="Variable 2"
>> >>            value="1" />
>> >>     <Entry text="Variable 3"
>> >>            value="2" />
>> >>   </EnumerationDomain>
>> >> </IntVectorProperty>
>> >>
>> >> This generates a combo box in the UI, and only one element can be
>> >> selected at a time. It will expect your reader to have methods with
>> >> the signature
>> >>
>> >> virtual void SetVariableType(int i);
>> >> virtual int GetVariableType();
>> >>
>> >> Within your reader, you can use this enumeration value to do whatever
>> >> you'd like.
>> >>
>> >> 2). If you just have a list of strings generated in your reader and
>> >> want to enable the selection of one, you can use a
>> >> StringVectorProperty with a StringListDomain, e.g.
>> >>
>> >> <StringVectorProperty command="GetAllDimensions"
>> >>                       information_only="1"
>> >>                       name="DimensionInfo">
>> >>   <StringArrayHelper />
>> >> </StringVectorProperty>
>> >> <StringVectorProperty animatelable="0"
>> >>                       command="SetDimensions"
>> >>                       name="Dimensions"
>> >>                       number_of_elements="1"
>> >>                       panel_visibility="default">
>> >>   <StringListDomain name="array_list">
>> >>     <RequiredProperties>
>> >>       <Property function="ArrayList"
>> >>                 name="DimensionInfo" />
>> >>     </RequiredProperties>
>> >>   </StringListDomain>
>> >> </StringVectorProperty>
>> >>
>> >> The first property here is an "information-only" property. ParaView
>> >> will invoke the method "GetAllDimensions" in your reader which should
>> >> return a vtkStringArray. The second property is responsible for
>> >> displaying the string array as a combobox, and invokes the method
>> >> "SetDimensions" with the value selected in the combobox. You need the
>> >> StringListDomain in the second property to connect the
>> >> information-only property to the second property.
>> >>
>> >> 3). If you need to populate the list depending on what is in the file
>> >> and be able to select/deselect list entries (e.g., to pick which
>> >> variables are loaded from the file), then see the XML file
>> >>
>> >> ParaView/ParaViewCore/ServerManager/SMApplication/Resources/readers.xml
>> >>
>> >> and search for the SourceProxy named "FlashReaderCore". You'll find
>> >> this XML property definition:
>> >>
>> >>       <!--  Array Selection GUI Component -->
>> >>       <StringVectorProperty information_only="1"
>> >>                             name="CellArrayInfo">
>> >>         <ArraySelectionInformationHelper attribute_name="Cell" />
>> >>       </StringVectorProperty>
>> >>       <StringVectorProperty command="SetCellArrayStatus"
>> >>                             element_types="2 0"
>> >>                             information_property="CellArrayInfo"
>> >>                             label="Cell Arrays"
>> >>                             name="CellArrayStatus"
>> >>                             number_of_elements="0"
>> >>                             number_of_elements_per_command="2"
>> >>                             repeat_command="1">
>> >>         <ArraySelectionDomain name="array_list">
>> >>           <RequiredProperties>
>> >>             <Property function="ArrayList"
>> >>                       name="CellArrayInfo" />
>> >>           </RequiredProperties>
>> >>         </ArraySelectionDomain>
>> >>         <Documentation>This property lists which cell-centered arrays
>> to
>> >>         read.</Documentation>
>> >>       </StringVectorProperty>
>> >>       <StringVectorProperty information_only="1"
>> >>                             name="PointArrayInfo">
>> >>         <ArraySelectionInformationHelper attribute_name="Point" />
>> >>       </StringVectorProperty>
>> >>
>> >> This XML is responsible for showing in the GUI the list of
>> >> cell-associated arrays. In the vtkAMRFlashReader, there are a number
>> >> of
>> >> methods that are defined to make this work. (These are actually
>> >> defined in vtkAMRFlashReader's parent class, vtkAMRBaseReader.h)
>> >>
>> >>   // Description:
>> >>   // Get the data array selection tables used to configure which data
>> >>   // arrays are loaded by the reader.
>> >>   vtkGetObjectMacro(CellDataArraySelection, vtkDataArraySelection);
>> >>
>> >>   // Description:
>> >>   // Get the number of point or cell arrays available in the input.
>> >>   int GetNumberOfCellArrays();
>> >>
>> >>   // Description:
>> >>   // Get the name of the point or cell array with the given index in
>> >>   // the input.
>> >>   const char* GetCellArrayName(int index);
>> >>
>> >>   // Description:
>> >>   // Get/Set whether the point or cell array with the given name is to
>> >>   // be read.
>> >>   int GetCellArrayStatus(const char* name);
>> >>   void SetCellArrayStatus(const char* name, int status);
>> >>
>> >> The first method listed above might not be necessary in your reader;
>> >> I'm not sure. The rest are necessary.
>> >>
>> >> Note in this XML and method definitions that "Cell" is the name of the
>> >> given to the association of array the reader can load. You can replace
>> >> all occurrences of "Cell" with whatever name is more appropriate for
>> >> your needs.
>> >>
>> >> I hope that helps,
>> >> Cory
>> >>
>> >> On Mon, Aug 18, 2014 at 5:46 AM, Girish Ramesh <rgirish28 at gmail.com>
>> >> wrote:
>> >> > Hi,
>> >> >
>> >> > I have been breaking my head over this problem for a while now as
>> there
>> >> > are
>> >> > no servermanager xml explanations anywhere. So, what I want to
>> >> > accomplish is
>> >> > populate a GUI list with a vtkStringArray and be able to select
>> strings
>> >> > within the list in order to fill a variable . Can someone please
>> help me
>> >> > or
>> >> > point me in the right direction in this task? I am writing my own
>> plugin
>> >> > reader as you may have understood, but I'm stuck at this point for a
>> >> > while.
>> >> > Thanks.
>> >> >
>> >> > Regards,
>> >> > Girish
>> >> >
>> >> > _______________________________________________
>> >> > Paraview-developers mailing list
>> >> > Paraview-developers at paraview.org
>> >> > http://public.kitware.com/mailman/listinfo/paraview-developers
>> >> >
>> >
>> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/paraview-developers/attachments/20140818/319b9969/attachment.html>


More information about the Paraview-developers mailing list