[Paraview] Filter Plugin w/ multiple connections

Moreland, Kenneth kmorel at sandia.gov
Wed May 6 11:42:33 EDT 2009


There are two parts to making this work.  The first part is supporting multiple ports and/or connections in the filter itself.  To set the number of input ports, you call this->SetNumberOfInputPorts() in the filter's constructor.  To set the number of connections allowed on each port, you override the FillInputPortInformation method and add the appropriate flags to the information object.  The specifics are documented at the beginning of Chapter 13 (How to Write an Algorithm for VTK) in the latest VTK User's Guide book.

The second part is to announce the input ports and/or connections in the server manager XML.  To set multiple ports, provide multiple InputProperty elements, one for each input.  These are easiest to set up if you provide convenience methods for each port in your filter that call SetInputConnection with the appropriate port number.  The arguments for the InputProperty tag provide information about ports that support multiple connections and optional ports.  The ParaView Guide book provides some documentation on the XML structure and the ParaView3/Servers/ServerManager/Resources/filters.xml source file provides plenty of examples.  The ArbitrarySourceStreamTracer, labeled "Stream Tracer (Custom Source)", provides good examples of both multiple ports and ports that support multiple connections.

-Ken


On 5/5/09 5:08 PM, "David Fuentes" <fuentesdt at gmail.com> wrote:

Hello,


What is the proper way to write a filter plugin for paraview w/ multiple
connections and access the data from each connection?


I have been trying to use the vtkProgrammableFilter,
vtkPythonProgrammableFilter, vtkMultiBlockDataGroupFilter, and
vtkTemporalStaticsFilter as examples.


int vtkMyFilterPlugin::RequestData(
   vtkInformation *vtkNotUsed(request),
   vtkInformationVector **inputVector,
   vtkInformationVector *outputVector)
{

   int numInputs = inputVector[0]->GetNumberOfInformationObjects();
   for (int idx = 0; idx < numInputs; ++idx)
     {
      vtkInformation *inInfo = inputVector[0]->GetInformationObject(idx);

      vtkDataObject *input = vtkDataObject::GetData(inInfo);

      vtkDataSet *inputDataSet  = vtkDataSet::SafeDownCast( input) ;

      .
      .
      .
}

where numInputs = the number of connections to my Filter.
vtkDataSet::SafeDownCast(input) returns a NULL pointer when I have
multiple connections to the filter but works for ONE connection.
How do I get the pointer(s) that will let me access the vtkDataArray
for each connection to my filter? ie

      vtkPointData *pd=inputDataSet->GetPointData();
      int numArrays = pd->GetNumberOfArrays();
      for (int i = 0; i < numArrays; i++)
        {
          vtkDataArray *array = pd->GetArray(i);
        }


thanks,
df
_______________________________________________
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




   ****      Kenneth Moreland
    ***      Sandia National Laboratories
***********
*** *** ***  email: kmorel at sandia.gov
**  ***  **  phone: (505) 844-8919
    ***      web:   http://www.cs.unm.edu/~kmorel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20090506/62d1e47d/attachment.htm>


More information about the ParaView mailing list