<div dir="ltr"><span style="font-size:12.8px">> The SetInputData() method on vtkAlgorithm is mostly provided for backward compatibility. > Internally, it is going to find the producer of the data set and then call SetInputConnection > for the output port producing the data set. But SetInputConnection is preferred because it > makes the pipeline connections more explicit.</span><br style="font-size:12.8px"><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Actually, SetInputData() does not set a pipeline connection. The reason behind the API change was that data objects no longer store any information about their produces and hence it is not possible to create a pipeline connection when the only information provided is the data object itself.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">So SetInputData() should be used when:</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">* assigning a stand-along data object as input to a filter,</span></div><div><span style="font-size:12.8px">* wanting to process a data object but not connect the filter to its producer.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">The second use case comes handy when filters pass their input to internal filter chains. In the past, one would have to create a shallow copy to avoid pipeline connections. Now, SetInputData() can be used directly.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Best,</span></div><div><span style="font-size:12.8px">-berk</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 12, 2017 at 11:41 AM, Moreland, Kenneth <span dir="ltr"><<a href="mailto:kmorel@sandia.gov" target="_blank">kmorel@sandia.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">(Forwarding to vtk-users mailing list as this question is more appropriate there.)<br>
<br>
With VTK >= 6, you should always prefer B->SetInputConnection(A-><wbr>GetOutputPort()).<br>
<br>
The SetInputData() method on vtkAlgorithm is mostly provided for backward compatibility. Internally, it is going to find the producer of the data set and then call SetInputConnection for the output port producing the data set. But SetInputConnection is preferred because it makes the pipeline connections more explicit.<br>
<br>
The only reason to use SetInputData now is when you have a data set that you have created outside the pipeline. This is the case in the code you presented below with the spGrid object. Internally VTK will create a trivial producer object to be the connection in the pipeline, but doing that yourself is cumbersome.<br>
<br>
The reason why the second example is giving a compile error is that spGrid (a vtkUnstructuredGrid) does not have a GetOutputPort() method because it is a data set, not a pipeline object.<br>
<br>
-Ken<br>
<div><div class="h5"><br>
-----Original Message-----<br>
From: vtk-developers [mailto:<a href="mailto:vtk-developers-bounces@vtk.org">vtk-developers-<wbr>bounces@vtk.org</a>] On Behalf Of houssen<br>
Sent: Wednesday, April 12, 2017 9:09 AM<br>
To: <a href="mailto:vtk-developers@vtk.org">vtk-developers@vtk.org</a><br>
Subject: [EXTERNAL] [vtk-developers] With VTK >= 6, how to "choose" between SetInputData() or SetInputConnection() ?<br>
<br>
With VTK >= 6, how to "choose" between SetInputData() or<br>
SetInputConnection() ? How to know which one SHOULD be used ?<br>
<br>
I read carefully this<br>
<a href="http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Replacement_of_SetInput" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK/<wbr>VTK_6_Migration/Replacement_<wbr>of_SetInput</a>,<br>
and, I digged several VTK examples<br>
<a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx." rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK/<wbr>Examples/Cxx.</a>.. Lot of things clarified but I'am still confused in exercising this: I feel like I missed some major stuffs...<br>
<br>
To make it quick, my understanding is that :<br>
1. If I need B to be modified if A is changed, I NEED to do "B->SetInputConnection(A-><wbr>GetOutputPort())".<br>
2. Otherwise, "B->SetInputData(A)" is enough (A will be an input of B BUT no link will be set between A and B : changing A does not trigger update of B).<br>
<br>
Up to here I guess (?) I'am right (at least for the big headlines)...<br>
Stop me here if not !<br>
<br>
Now, I want to have a source (grid) and I need to apply a filter on it.<br>
Say that in a call back I modify the source: I want BOTH source and filter to be updated when call backs are modifying the source. Here is what I have:<br>
vtkSmartPointer<<wbr>vtkUnstructuredGrid> spGrid = vtkSmartPointer<<wbr>vtkUnstructuredGrid>::New(); // Source // Fill the source with points and cells...<br>
vtkSmartPointer<<wbr>vtkVertexGlyphFilter> spVertexGlyphs = vtkSmartPointer<<wbr>vtkVertexGlyphFilter>::New();<br>
spVertexGlyphs->SetInputData(<wbr>spGrid); // Case 2<br>
vtkSmartPointer<<wbr>vtkPolyDataMapper> spVertexGlyphMap = vtkSmartPointer<<wbr>vtkPolyDataMapper>::New();<br>
spVertexGlyphMap-><wbr>SetInputConnection(<wbr>spVertexGlyphs->GetOutputPort(<wbr>));<br>
// Case 1 : the filter is updated if the source is modified.<br>
<br>
This seems to works: the filter is updated if the source is modified.<br>
<br>
But, this does NOT work: the source is NOT modified (= updated in the<br>
VTK window) when the callback modify it (so the filter may OR NOT be<br>
updated accordingly ?!).<br>
<br>
I expected to be compelled to do:<br>
vtkSmartPointer<<wbr>vtkDataSetMapper> spGridMap =<br>
vtkSmartPointer<<wbr>vtkDataSetMapper>::New();<br>
spGridMap->SetInputConnection(<wbr>spGrid->GetOutputPort()); // Compilation<br>
KO because there is not SetInputConnection or GetOutputPort ???<br>
So I'am compelled to do (found lots of examples that do that):<br>
spGridMap->SetInputData(<wbr>spGrid);<br>
... And I end up with a grid that does NOT update in the VTK window<br>
when call back modify the source.<br>
I found a way to update it: the callback modify the grid and, at the<br>
end of the callback, I added "spGrid->Modified()", this triggers the<br>
update of the source.<br>
<br>
So basically, I did what I need ... But:<br>
1. Is the "spGrid->Modified()" a hack ? Or is it the "right" way to do<br>
? If yes, why (as it seems to bypass the update process) ?<br>
2. Why is there no SetInputConnection on spGridMap ? Why is there no<br>
GetOutputPort on vtkUnstructuredGrid ?<br>
<br>
I just would like to understand the logic behind....<br>
<br>
Franck<br>
______________________________<wbr>_________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtk-developers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtk-developers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtk-developers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtk-<wbr>developers</a><br>
<br>
______________________________<wbr>_________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
</div></div>Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
<span class=""><br>
Follow this link to subscribe/unsubscribe:<br>
</span><a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div>