[vtkusers] Add ID to vtkImageActor
Mathieu Coursolle
mcoursolle at rogue-research.com
Fri Mar 6 14:24:47 EST 2009
If you have a fixed number of actors, I guess you could declare an
array:
vtkSmartPointer<vtkActor> myArray[20];
You could then create your actors:
vtkSmartPointer<vtkActor> newActor = vtkSmartPointer<vtkActor>::New();
myArray[idx] = newActor;
There is no need to delete it, it is released when its out of scope.
Therefore, you should have a reference in your array.
To avoid memory leaks, just remove it from your array.
myArray[idx] = NULL;
Mathieu
On 6-Mar-09, at 2:07 PM, John Eke wrote:
> I think i spoke too soon, I thought vtkSmartPointer was some sort of
> map. Could you please give me a brief explanation if what I am
> supposed to do.
>
> Are you saying I should store the IDs and the smart pointers in the
> map, then I can delete the Image Actors?
>
> - John
>
> John Eke wrote:
>>
>> Thanks! I'll try that
>>
>> Mathieu Coursolle wrote:
>>>
>>> Have you tried using vtkSmartPointer ? The map will keep a reference
>>> to it. You just need to remove it from the map to release the
>>> reference.
>>>
>>> Mathieu
>>>
>>> On 6-Mar-09, at 1:42 PM, John Eke wrote:
>>>
>>>> Hi,
>>>>
>>>> Another problem comes up. Here's a code snippet:
>>>>
>>>> char images[20];
>>>> //initialize array
>>>> for (int i = 0; i < 20; i++)
>>>> {
>>>> if (image exists)
>>>> {
>>>> vtkPNGReader *pngReader = vtkPNGReader::New();
>>>> vtkImageShiftScale *pShiftScaleFilter =
>>>> vtkImageShiftScale::New();
>>>> pngReader->SetFileName(images[i]);
>>>> pngReader->Update();
>>>>
>>>> //Image actor will only display 24bit RGBs
>>>> //image shift scale filter will convert any image to
>>>> this version
>>>> pShiftScaleFilter->SetInputConnection(pngReader-
>>>> >GetOutputPort());
>>>> pShiftScaleFilter->Update();
>>>> pShiftScaleFilter->SetOutputScalarTypeToUnsignedChar();
>>>>
>>>> vtkImageActor *pImageActor = vtkImageActor::New();
>>>> m_KeyMap.insert (images[i], pImageActor);//insert
>>>> image file name as its ID in a map, along with a pointer to the
>>>> image actor
>>>> pImageActor->SetInput(pShiftScaleFilter->GetOutput());
>>>>
>>>> m_pRenderer->AddActor(pImageActor);
>>>>
>>>> //pImageActor->Delete(); //cannot delete since I am
>>>> keeping a reference to it using an external map
>>>> pShiftScaleFilter->Delete();
>>>> pngReader->Delete();
>>>> }
>>>> }
>>>>
>>>> The problem is all 20 pShiftScaleFilter, and pngReader objects
>>>> that are created inside the loop probably do not get deleted
>>>> since pImageActor never gets deleted. So I get memory leaks
>>>>
>>>> Is there a better solution? Am I doing something wrong?
>>>>
>>>> - John
>>>>
>>>> John Eke wrote:
>>>>>
>>>>> Thanks a lot, I will try that
>>>>>
>>>>> Mathieu Coursolle wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> If I understand correctly, you are trying to easily retrieve a
>>>>>> vtkActor instance based on some key.
>>>>>> I usually use a map where the key is a unique ID, and the value
>>>>>> the actual vtkActor.
>>>>>> That way I can retrieve quickly the actor associated with a
>>>>>> key. However, this has the inconvenient
>>>>>> of maintaining that map to make sure you remove actors which
>>>>>> are deleted, and add newly created
>>>>>> actors.
>>>>>>
>>>>>> Hope this helps,
>>>>>>
>>>>>> Mathieu
>>>>>>
>>>>>> ____________________
>>>>>> Mathieu Coursolle, M.Ing.
>>>>>> Rogue Research Inc.
>>>>>> www.rogue-research.com
>>>>>>
>>>>>> On 6-Mar-09, at 11:02 AM, John Eke wrote:
>>>>>>
>>>>>>> What I am trying to do is add a string Id as a private member
>>>>>>> to a vtkImageActor. I have a scenario where I am inserting
>>>>>>> multiple vtkImageActors into a renderer... and I want to
>>>>>>> selectively enable and disable them. The only way I can forsee
>>>>>>> doing that is if each image actor had an ID. That way I can
>>>>>>> iterate through the actors, find the one with the ID I am
>>>>>>> looking for, then enable it.
>>>>>>>
>>>>>>> Is there a better way to do this? If not how can I add the ID
>>>>>>> field to an image actor?
>>>>>>>
>>>>>>> I hope this clears things up
>>>>>>>
>>>>>>> - John
>>>>>>>
>>>>>>> Mathieu Malaterre wrote:
>>>>>>>>
>>>>>>>> On Fri, Mar 6, 2009 at 4:39 PM, John Eke <johne at annidis.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi Guys,
>>>>>>>>>
>>>>>>>>> Whats the easiest way to get a vtkImageActor with an ID
>>>>>>>>> field? I tried
>>>>>>>>> inheritance, didn't work (maybe I didn't do it right). I
>>>>>>>>> tried creating a
>>>>>>>>> replica of vtkImageActor, and renaming it to something else.
>>>>>>>>> But with this,
>>>>>>>>> the New() method returns NULL
>>>>>>>>>
>>>>>>>> I did not quite followed what you are trying to do, but you
>>>>>>>> understand
>>>>>>>> that vtkImageActor::New() returns a vtkOpenGLImageActor ?
>>>>>>>>
>>>>>>>> 2cts
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> INFORMAL COMMUNICATION - The statements within this email and
>>>>>>> attachments if any, may be founded on partial knowledge,
>>>>>>> incorrect information, or incomplete understanding of the
>>>>>>> issues and should not be accorded the probity or status of a
>>>>>>> formal evidentiary deposition.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> CONFIDENTIALITY STATEMENT - This e-mail and attachments if
>>>>>>> any, may contain confidential or privileged information. If
>>>>>>> you are not the intended recipient, please delete it, notify
>>>>>>> me immediately by reply e-mail, and be advised that you are
>>>>>>> not permitted to read, use, disclose, copy, or distribute it
>>>>>>> or its contents.
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> INFORMAL COMMUNICATION - The statements within this email and
>>>>> attachments if any, may be founded on partial knowledge,
>>>>> incorrect information, or incomplete understanding of the issues
>>>>> and should not be accorded the probity or status of a formal
>>>>> evidentiary deposition.
>>>>>
>>>>>
>>>>>
>>>>> CONFIDENTIALITY STATEMENT - This e-mail and attachments if any,
>>>>> may contain confidential or privileged information. If you are
>>>>> not the intended recipient, please delete it, notify me
>>>>> immediately by reply e-mail, and be advised that you are not
>>>>> permitted to read, use, disclose, copy, or distribute it or its
>>>>> contents.
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>>
>>>>
>>>> --
>>>> INFORMAL COMMUNICATION - The statements within this email and
>>>> attachments if any, may be founded on partial knowledge,
>>>> incorrect information, or incomplete understanding of the issues
>>>> and should not be accorded the probity or status of a formal
>>>> evidentiary deposition.
>>>>
>>>>
>>>>
>>>> CONFIDENTIALITY STATEMENT - This e-mail and attachments if any,
>>>> may contain confidential or privileged information. If you are
>>>> not the intended recipient, please delete it, notify me
>>>> immediately by reply e-mail, and be advised that you are not
>>>> permitted to read, use, disclose, copy, or distribute it or its
>>>> contents.
>>>>
>>>
>>> ____________________
>>> Mathieu Coursolle, M.Ing.
>>> Rogue Research Inc.
>>> www.rogue-research.com
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>> --
>> INFORMAL COMMUNICATION - The statements within this email and
>> attachments if any, may be founded on partial knowledge, incorrect
>> information, or incomplete understanding of the issues and should
>> not be accorded the probity or status of a formal evidentiary
>> deposition.
>>
>>
>>
>> CONFIDENTIALITY STATEMENT - This e-mail and attachments if any,
>> may contain confidential or privileged information. If you are not
>> the intended recipient, please delete it, notify me immediately by
>> reply e-mail, and be advised that you are not permitted to read,
>> use, disclose, copy, or distribute it or its contents.
>>
>>
>> _______________________________________________
>> 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
>>
>
> --
> INFORMAL COMMUNICATION - The statements within this email and
> attachments if any, may be founded on partial knowledge, incorrect
> information, or incomplete understanding of the issues and should
> not be accorded the probity or status of a formal evidentiary
> deposition.
>
>
>
> CONFIDENTIALITY STATEMENT - This e-mail and attachments if any, may
> contain confidential or privileged information. If you are not the
> intended recipient, please delete it, notify me immediately by reply
> e-mail, and be advised that you are not permitted to read, use,
> disclose, copy, or distribute it or its contents.
____________________
Mathieu Coursolle, M.Ing.
Rogue Research Inc.
www.rogue-research.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090306/0a2cd8b5/attachment.htm>
More information about the vtkusers
mailing list