[vtkusers] Does vtkInformation::Set(DATA_OBJECT, ...) perform a deep copy?

Berk Geveci berk.geveci at kitware.com
Wed May 1 10:50:27 EDT 2013


If you want the output of an algorithm to stick around after deleting it,
you need to call Register() on the data object. Something like:

    vtkSmartPointer<vtkReader1> Reader1 = vtkSmartPointer<vtkReader1>::New()
    // set filename and update reader1
    vtkDataSet * MyDataSet = Reader1->GetOutput();
    MyDataSet->Register(0);


On Tue, Apr 30, 2013 at 5:14 PM, Sunrise <helios.corona at gmail.com> wrote:

>  Thanks for the answer, Berk.
>
> I have a follow up question, which I guess I can solve it with strong
> pointers. Assume the following
>
> vtkDataSet * MyFilter::GetMyDataSet(...)
> {
>
> if(SomeConditions)
> {
>     vtkSmartPointer<vtkReader1> Reader1 =
> vtkSmartPointer<vtkReader1>::New()
>     // set filename and update reader1
>     vtkDataSet * MyDataSet = Reader1->GetOutput();
> }
> else
> {
>     vtkSmartPointer<vtkReader2> Reader2 =
> vtkSmartPointer<vtkReader1>::New()
>      // set filename and update reader2
>      vtkDataSet * MyDataSet = Reader2->GetOutput();
> }
>
> // MyDataSet is out of scope here!
> // Even if I remove if condition, they will be out of scope outside of
> this function.
>
> return MyDataSet;
>
> }
>
> I want to make both reader1 and reader2 become SmartPointers. Otherwise I
> have leak. At compile time I do not know how the code will end, only at the
> run time it make the decision. So I do not know when to delete reader1and
> reader2.
>
> I do not want to use descrutor too. there are more readers than the sample
> code that I put here, so at compile time the destructor do not know how
> many reader1 and/or reader2 has been declared in order to delete them
> manually. So, I prefer to declare all of them with Smart Pointers.
>
> But here is the problem: reader1 and reade2 are in clauses of If
> condition, and they are in a function outside of RequestData. So they will
> go out of scope.
>
> If using a strong pointer fix this problem, how can I apply a strong
> pointer on MyDataSet in VTK?
>
> Again, thank you very much.
>
> -Sia
>
>
>
> On 04/29/2013 08:20 AM, Berk Geveci wrote:
>
> It does a shallow copy. The information object holds a strong reference to
> the data object so
>
>  outputInfo->Set(vtkDataObject::DATA_OBJECT(),MyDataSet);
>
>  so it will increment the reference count of MyDataSet preventing it from
> going out of scope.
>
>  -berk
>
>
> On Sun, Apr 28, 2013 at 11:41 AM, Sunrise <helios.corona at gmail.com> wrote:
>
>>  I am wondering if the "Set" method in vtkInformation class performs a
>> deep-copy or shallow-copy when I set a DATA_OBJECT into it?
>>
>> Suppose I have some vtkDataSet and I want to append them into outputInfoof a filter inside its
>> RequestData method.
>>
>> int Filter1::RequestData(...)
>> {
>>     vtkSmartPointer<vtkSomeReader> myreader =
>> vtkSmartPointer<vtkSomeReader>::New();
>>     ...
>>     vtkDataSet *MyDataSet = Reader->GetOutput();
>>     outputInfo->Set(vtkDataObject::DATA_OBJECT(),MyDataSet);
>>     ...
>> }
>>
>> at the end of RequestData, both the pointer myreader and its data on the
>> heap would be out of scope. Since I made them smart pointers, both pointer
>> "myreader" and the data on the heap will be deleted (right?).
>>
>> But in the next filter of the pipeline (say Filter2 is connected to
>> Filter1), I can receive the data in inputInfo
>>
>> int Filter2::RequestData(...)
>> {
>>     ...
>>     ... inputInfo->Get(vtkDataObject::DATA_OBJECT());
>> }
>>
>> I am wondering why still I can get the data, since data deferenced by
>> MyDataSet in previous filter no longer exists?
>>
>> Does vtkInformation::Set perform a deep copy?
>>
>> Thank you.
>>
>> _______________________________________________
>> 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
>>
>>
>
>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130501/453a1890/attachment.htm>


More information about the vtkusers mailing list