<div dir="ltr">Dear all,<div><br></div><div>Would the following construct be safe in terms of proper data handling inside a filter or would I generate some "unpredictable results", like data being copied over other data that is still being used?</div><div><br></div><div>My purpose is of course to copy data only if it is absolutely required. And I assume that within the different filters, data are again handled correctly.</div><div><br></div><div>...::RequestData(...)</div><div>{</div><div>  // get input and output</div><div>  vtkPolyData* input0 = vtkPolyData::SafeDownCast(info->Get(vtkDataObject::DATA_OBJECT()));</div><div>  vtkPolyData* output = vtkPolyData::SafeDownCast(...);</div><div>  ...</div><div><br></div><div>  // intermediate data storage</div><div>  vtkSmartPointer<vtkPolyData> intermediateData = vtkSmartPointer<vtkPolyData>::New();</div><div><br></div><div>  // first filter</div><div>  vtkSmartPointer<vtkSomeFilter> filt1 = vtkSmartPointer<vtkSomeFilter>::New();</div><div>  filt1->SetInputData(input0);</div><div>  ...</div><div>  filt1->Update();</div><div>  intermediateData->ShallowCopy(filt1->GetOutput());</div><div><br></div><div>  // second filter</div><div>  vtkSmartPointer<vtkSomeOtherFilter> filt2 = vtkSmartPointer<vtkSomeOtherFilter>::New();</div><div>  filt2->SetInputData(intermediateData);</div><div>  ...</div><div>  filt2->Update();</div><div>  intermediateData->ShallowCopy(filt2->GetOutput()); // !!! actually replacing the input data...</div><div><br></div><div>  // some more filters in the same way as filt2 - with always reusing intermediateData...</div><div>  ...</div><div><br></div><div>  // return the results</div><div>  output->ShallowCopy(intermediateData);<br></div><div>}</div><div><div><br></div><div>Any comments?</div><div><br></div><div>Of course I could play safe and</div><div><br></div><div>1) replace all "ShallowCopy" with "DeepCopy", and</div><div>2) generate an intermediate data object for each and every filter that I am applying</div><div><br></div><div>but this for sure would blow up my memory enormously!</div><div><br></div><div>Maybe there is also some document that clearly states what is the proper "behaviour" inside filters like that, some kind of "code of conduct" regarding memory management in VTK?</div><div><br></div><div>Thanks for any helpful hints!</div><div><br></div><div>Regards,</div><div>Cornelis</div><div><br></div>-- <br><div class="gmail_signature">Cornelis Bockemühl<br>Basel, Schweiz<br></div>
</div></div>