<div dir="ltr">Sounds good.<div><br></div><div><span style="font-size:12.8000001907349px">>> Finally, store the results in the output vtkDataObject</span><br></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">This should be done by copying the output of the inner filter to the output of the outer filter. I would advise against directly setting the internal output as the DATA_OBJECT() in the output information of the outer filter. It will probably work but you may run into weird issues downstream depending on what you do.</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">Best,</span></div><div><span style="font-size:12.8000001907349px">-berk</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 30, 2015 at 1:13 AM, Schlottke, Michael <span dir="ltr"><<a href="mailto:M.Schlottke@aia.rwth-aachen.de" target="_blank">M.Schlottke@aia.rwth-aachen.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word">
Hi Berk,
<div><br>
</div>
<div>Ah, that is good to know. So my typical setup in RequestData for a custom filter should be something like the following:</div>
<div><br>
</div>
<div>- connect the first internal filter to the input vtkDataObject using SetInputData()</div>
<div>- use SetInputConnection() to chain up any internal filters I use (if possible)</div>
<div>- finally, store the results in the output vtkDataObject</div>
<div><br>
</div>
<div>Is this a good approach to follow under normal circumstances or am I missing something here?</div><span class="HOEnZb"><font color="#888888">
<div><br>
</div>
<div>Michael</div></font></span><div><div class="h5">
<div><br>
</div>
<div>
<div>
<blockquote type="cite">
<div>On 28 Apr 2015, at 15:50 , Berk Geveci <<a href="mailto:berk.geveci@kitware.com" target="_blank">berk.geveci@kitware.com</a>> wrote:</div>
<br>
<div>
<div dir="ltr">Replace that Update() with cp->Update().
<div><br>
</div>
<div>The rule for internal filters is that you should never use SetInputConnection() to connect anything to an external filter from within RequestData(). You don't want internal pipeline executions to propagate to external filters as it may cause all
 kinds of problems. SetInputData() does not create a pipeline connection so it is safe to use in such circumstances. SetInputConnection() is safe to connect internal filters to each other.</div>
<div><br>
</div>
<div>Best,</div>
<div>-berk</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Apr 28, 2015 at 2:54 AM, Schlottke, Michael <span dir="ltr">
<<a href="mailto:M.Schlottke@aia.rwth-aachen.de" target="_blank">M.Schlottke@aia.rwth-aachen.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Utkarsh,<br>
<br>
Thank you very much for this answer, it clears things up a lot. Am I right to sum this up as a rule of thumb to<br>
<br>
“use SetInputConnection whenever possible, resort to SetInputData where it isn’t”<br>
<br>
for most use cases?<br>
<br>
On a related note, I’ve encountered a few filters with code like this:<br>
<br>
//////////////////////////////////////////////////////////////<br>
vtkMyFilter::RequestData(….)<br>
{<br>
  …<br>
  vtkCellDataToPointData* cp = vtkCellDataToPointData::New();<br>
  ...<br>
  vtkUnstructuredGrid* pdata = cp->GetUnstructuredGridOutput();<br>
  pdata->GetPointData()->RemoveArray(“arrayname");<br>
  pdata->GetPointData()->Update();<br>
  pdata->Update(); // will not compile with VTK6 (******)<br>
<br>
  vtkInformation *outInfo = outputVector->GetInformationObject(0);<br>
  vtkUnstructuredGrid *output = vtkUnstructuredGrid::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));<br>
  output->SetPoints(pdata->GetPoints());<br>
  output->CopyStructure(pdata);<br>
  output->GetCellData()->PassData(pdata->GetCellData());<br>
<br>
  return 1;<br>
}<br>
//////////////////////////////////////////////////////////////<br>
<br>
I am wondering about the line marked with (******). Is it obsolete with VTK6 (as there is no Update() method for non-vtkAlgorithm objects), should I call cp->Update() instead, or is there something entirely different to do to make this code work properly?<br>
<br>
Regards,<br>
<br>
Michael<br>
<div>
<div><br>
> On 27 Apr 2015, at 19:53 , Utkarsh Ayachit <<a href="mailto:utkarsh.ayachit@kitware.com" target="_blank">utkarsh.ayachit@kitware.com</a>> wrote:<br>
><br>
>> Now I am wondering: ifinside the RequestData method of a filter, do I *ever*<br>
>> need  to use SetInputConnection, and if yes, how?<br>
><br>
><br>
> Here's an example:<br>
><br>
> vtkMyFilter::RequestData(....)<br>
> {<br>
>   vtkDataSet* myinput = vtkDataSet::GetData(inputInformation[0], 0);<br>
><br>
>   vtkNew<vtkSomeFilter> filter1;<br>
>   filter1->SetInputData(myinput);<br>
><br>
>   vtkNew<vtkSomeFilter> filter2;<br>
>   filter2->SetInputConnection(filter1->GetOutputPort());<br>
>   ...<br>
><br>
>   filter2->Update()<br>
> }<br>
><br>
> Thus, for internal pipelines, it makes sense to use SetInputConnection.<br>
><br>
>> It seems like all filters<br>
>> I’ve had a look at always access the input data object (which I can only<br>
>> pass on using SetInputData, not SetInputConnection), not the input port.<br>
>> However, as a user with little VTK experience it seems like this might<br>
>> “break” the aforementioned pipeline?<br>
><br>
> It the example I gave, for example, if you use SetInputData() to pass<br>
> the output of filter1 to filter2, you'll need to call<br>
> filter1->Update() before doing that. Otherwise, filter1 has not<br>
> execute and hence doesn't have valid data to pass to filter2. Unlike<br>
> the old SetInput(), setting the dataset using SetInputData() doesn't<br>
> preserve the pipeline information i.e. filter2 will not update filter1<br>
> just because you called filter2->Update() if SetInputData() is used to<br>
> pass the data.<br>
><br>
> Hope that clarifies it a little.<br>
<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com/" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">
http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=Paraview-developers" target="_blank">
http://markmail.org/search/?q=Paraview-developers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div></div></div>

</blockquote></div><br></div>