[Paraview] Question on Multiple Ports in Custom Reader (repost from developer list)

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Fri Jul 6 16:06:07 EDT 2012


Joshua,

Can you attach a data file to test the reader out as well? In the mean
time here are few things I see:

1. RequestInformation() should produce meta-data about both output
ports, not just the one requested for. (I will have to dig in the code
to confirm).
2. You should not be saving the information objects passed into
RequestInformation(..) i.e. there should be no place for
this->DataOutInfo, this->MetaDataOutInfo!
3. In RequestData, you can get access to the output data object by
vtkDataObject::GetData(outputVector, 0) or
vtkDataObject::GetData(outputVector, 1) and NOT
this->GetExecutive()->GetOutputInformation(). You can also use
vtkTable::GetData(outputVector, 1).

Try fixing these issues, I am guessing that should solve the problems
you are experiencing too.

Utkarsh

On Fri, Jul 6, 2012 at 12:53 PM, Joshua Murphy
<Joshua.Murphy at lasp.colorado.edu> wrote:
> Hi Utkarsh,
>
> Here is the generic reader I am experimenting withŠ I haven't ported
> anything into my actual reader yet, as I am just trying to get the second
> port to work before messing with my actual reader.
>
> Thanks for helping!
>
> -Josh
>
>
> On 7/6/12 10:46 AM, "Utkarsh Ayachit" <utkarsh.ayachit at kitware.com> wrote:
>
>>Can you post you reader's code? It might make things easier.
>>
>>Utkarsh
>>
>>On Fri, Jul 6, 2012 at 12:15 PM, Joshua Murphy
>><Joshua.Murphy at lasp.colorado.edu> wrote:
>>> Hello all,
>>>
>>> I am still struggling with this problem, so I figured I would re-post
>>>the
>>> question to the general list in hopes of getting a wider audience!
>>>
>>> Thanks in advance for any help you may provide!
>>>
>>> For Completeness, I have verified that I am setting the number of output
>>> ports in my constructor.
>>>
>>> Thanks again for any help!
>>>
>>> -Joshua Murphy
>>>
>>> Laboratory for Atmospheric and Space Physics
>>>
>>> University of Colorado, Boulder
>>>
>>>
>>>
>>>
>>> Hello,
>>>
>>>
>>>
>>> I am attempting to write a reader that handles both structured grids and
>>> meta-data.  It was recommended to me that I use multiple ports, and
>>>populate
>>> a vtkTable with the meta-data.
>>>
>>>
>>>
>>> I think I am having some conceptual problems with how this is supposed
>>>to
>>> work.
>>>
>>>
>>>
>>> I have written a dummy reader in an attempt to get the meta-data working
>>> prior to porting it to my real reader, but I am having troubleŠ
>>>
>>>
>>>
>>> My understanding is that I need to
>>>
>>>
>>>
>>> specify the number of output ports with this->SetNumberOfOutputPorts(2)
>>> Populate the output port information
>>>
>>> int vtkGenericReader::FillOutputPortInformation(int port,
>>>vtkInformation*
>>> info)
>>>
>>> {
>>>
>>>   switch(port)
>>>
>>>     {
>>>
>>>     case 0:
>>>
>>>       info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkStructuredGrid");
>>>
>>>       break;
>>>
>>>     case 1:
>>>
>>>       info->Set(vtkDataObject::DATA_TYPE_NAME(), "vtkTable");
>>>
>>>       break;
>>>
>>>     }
>>>
>>>   return 1;
>>>
>>> }
>>>
>>>
>>>
>>> 3. Get the informationObject from the outputVector
>>>
>>>    outputvector->GetInformationObject(1);
>>>
>>>
>>>
>>> 4. Get the table data
>>>
>>>      this->MetaData = dynamic_cast<vtkTable*>
>>>
>>>       (this->MetaDataOutInfo->Get(vtkDataObject::DATA_OBJECT()));
>>>
>>>
>>>
>>> 5. Add string to the table
>>>
>>>
>>>
>>>   vtkStringArray *MetaString = vtkStringArray::New();
>>>
>>>   MetaString->SetName("Meta Data");
>>>
>>>   MetaString->SetNumberOfComponents(1);
>>>
>>>   MetaString->InsertNextValue("This is a Test");
>>>
>>>   MetaString->InsertNextValue("Test 2");
>>>
>>>   MetaString->InsertNextValue("Test 3");
>>>
>>>   this->MetaData->AddColumn(MetaString);
>>>
>>>
>>>
>>>
>>>
>>> It is my understanding that this information should then be available
>>>in the
>>> ParaView GUI.
>>>
>>>
>>>
>>>
>>>
>>> The problems I am having are this:
>>>
>>>
>>>
>>> 1.  When attempting to get both port information objects on the first
>>>call
>>> to RequestInformation(), port 1 returns a NULL object.  On the SECOND
>>>call
>>> to GetInformation(), both ports are available.
>>>
>>>
>>>
>>> 2.  All calls to RequestData() only provide access to port 0 in the
>>>Output
>>> information Vector.  I can access port 1 if I utilize
>>> this->getExecutive()->getOutputInformation(1)
>>>
>>>
>>>
>>> 3.  When using #2 to get the information, I populate, but I am unsure
>>> where/how things are supposed to be accessible in the GUI.
>>>
>>>
>>>
>>>
>>>
>>> What I am trying to do is be able to access the meta-data values from
>>>within
>>> ParaView so that I can utilize data values, units, model run data, etc.
>>>
>>>
>>>
>>> If anyone can help me understand what is supposed to be going on, or if
>>>I am
>>> completely doing something wrong, I would be grateful!  Am I missing
>>>some
>>> steps? Do I need to have XML code to access the vtkTable?
>>>
>>>
>>>
>>>
>>>
>>> Thanks,
>>>
>>>
>>>
>>> Joshua Murphy
>>>
>>> Laboratory for Atmospheric and Space Physics
>>>
>>> University of Colorado, Boulder
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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