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

David Doria daviddoria+vtk at gmail.com
Tue Dec 15 11:07:56 EST 2009


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.



More information about the vtkusers mailing list