[vtkusers] How to get the input to a filter as algorithm output?

David E DeMarle dave.demarle at kitware.com
Tue Dec 15 11:19:11 EST 2009


Ports are for objects that are fundamentally different (usually different type)
  Example vtkProbeFilter takes a field to sample within, and a set of
locations in space to sample on.
  Algorithms may allow multiple connections on each port.

Connections are for objects that are fundamentally similar.
  Example vtkAppendPolyData takes lots of polydatas and produces one
big polydata.


David E DeMarle
Kitware, Inc.
R&D Engineer
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-371-3971 x109



On Tue, Dec 15, 2009 at 11:07 AM, David Doria <daviddoria+vtk at gmail.com> wrote:
> On Tue, Dec 15, 2009 at 9:41 AM, David Gobbi <david.gobbi at gmail.com> wrote:
>> Where to start... there are a couple important items here.
>>
>> First, there's nothing wrong with directly accessing data objects when
>> you are writing a VTK filter.  Obviously the filter must access the
>> data.  That's completely different from accessing the data objects
>> outside of the filters, and whenever I said "don't mess with the data
>> objects", I really meant "if you want to mess with the data, then
>> write a filter".
>>
>> Second item: In VTK it isn't safe to write a VTK filter that executes
>> other VTK filters inside of it.  Which is really unfortunate, because
>> it sure is a useful thing to be able to do.  But if you look through
>> all the filters in VTK (i.e. vtkAlgorithm derived objects), you will
>> not find a single one that does this.
>>
>> Each vtkAlgorithm has an executive that deals with the vtkInformation
>> and sends Requests to the vtkAlgorithm.  If, internally, you grab the
>> algorithm's input and feed it into your little "internal pipeline",
>> then that internal pipeline will propagate its own requests to the
>> input's producer.  As a result a RequestData in the main (external)
>> pipeline can cause the internal pipeline to update, which causes all
>> sorts of requests to be sent up both the internal and external
>> pipeline before the RequestData completes.  This is a violation of the
>> usual, careful way that the pipeline is supposed to step its way
>> through the various requests.  It may result in undefined behavior of
>> the pipeline.
>>
>> It would be nice if someone devised a recipe for how to safely use a
>> mini-pipeline inside a VTK filter, by using deep copies of the data
>> objects or whatnot, but so far I haven't seen one.  About the closest
>> thing that I've done is use ITK from inside a VTK filter.
>>
>>   David
>
> David G.,
>
> Congratulations! You have just been appointed the resident pipeline
> expert by Jerome and me. Your first function in this new role is to
> explain the difference between ports and connections (i.e. when you
> should use both? what is the difference? how to setup both, etc).
> Unfortunately this new position does not come with a pay increase ! :(
>
> I have started two shell examples:
> http://www.cmake.org/Wiki/VTK/Examples/Developers/Multiple_Input_Ports
> http://www.cmake.org/Wiki/VTK/Examples/Developers/Multiple_Connections
>
> Could you fill in a few lines to demonstrate the differences?
>
> SetInputConnection(vtkPolyData*) does not work because it is expecting
> an AlgorithmOutput. This is the same thing you told me not to do with
> vtkImageData. Do we need to make a "vtkGenerateEmptyPolyData" filter
> or something for this type of thing to fit into the pipeline model?
>
> Thanks,
>
> David D.
> _______________________________________________
> 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 VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



More information about the vtkusers mailing list