[vtkusers] does returning "vtkPolyData" work?

Aashish Chaudhary aashish.chaudhary at kitware.com
Mon Jan 4 12:06:01 EST 2010


To be 100% sure I have to look inside the vtkSmartPointer code. But if you
use smart pointers for a locally created object then you need to return a
smart pointer so that ref count is not zero at end of the function
execution.

Some other open source libraries like OpenSG used something like transient
pointers to facilitate something like this.

The other option is you don't use the smart pointer inside the function.

my 2 cents.

~Regards,



On Sun, Jan 3, 2010 at 5:48 PM, David Doria
<daviddoria+vtk at gmail.com<daviddoria%2Bvtk at gmail.com>
> wrote:

> On Sun, Jan 3, 2010 at 5:11 PM, Aashish Chaudhary
> <aashish.chaudhary at kitware.com> wrote:
> > Zein,
> >
> > Use the smart pointers all the way (for return value and for the lvalue)
> if
> > you want to use smart pointers like this.
> >
> > For some more information on smart pointers .. look here.
> >
> > http://www.vtk.org/Wiki/Smart_Pointers
> >
> > Hope I helped.
> >
> > ~Regards
> >
> >
> > On Sun, Jan 3, 2010 at 11:40 AM, Zein Salah <zeinsalah at gmail.com> wrote:
> >>
> >> Hallo ,
> >> In my class, I have a function that SHOULD return a vtkPolyData, which
> is
> >> the result of a vtkCutter, as shown below:
> >>
> >>
> >> vtkPolyData* MyClass::GenerateCont(double cntr[], double nrml[])
> >> {
> >>
> >>    vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
> >>    plane->SetOrigin(cntr[0], cntr[1], cntr[2]);
> >>    plane->SetNormal(nrml[0], nrml[1], nrml[2]);
> >>
> >>    vtkSmartPointer<vtkCutter> cutter =
> vtkSmartPointer<vtkCutter>::New();
> >>    cutter->SetInput(....); // some input vtkpolydata
> >>    cutter->SetCutFunction(plane);
> >>    cutter->Update();
> >>
> >>
> >>    vtkSmartPointer<vtkPolyData> polyData = cutter->GetOutput();
> >>    return polyData;
> >> }
> >>
> >>
> >> Now I have an array of struct, cArray, where one field of the struct is
> of
> >> type vtkPolyData*. When I call the GenerateCont function on the elements
> >> of the array, as follows
> >>
> >>
> >> for (int i= 0; i<num; i++) {
> >>     double       cntr[3];      cntr[0] = ...;     cntr[1] = ...;
> >>      cntr[2] = ...;
> >>     double       zdir[3];      zdir[0] = ...;            zdir[1] =
> >> ...;             zdir[2] = ...;
> >>
> >>     cArray[i].polyData = GenerateCont(cntr, zdir);
> >> }
> >>
> >> I noticed that the cArray is not updated. I.e. calling function
> >> GenerateCont
> >> does not return the supposed vtkPolyData. By testing whether the
> function
> >> GenerateCont works itself, I found that is the vtkCutter generates the
> >> output as required, only the output value is not returned.
> >>
> >> What is wrong I am doing? Is returning a vtkPolyData semantically wrong?
> >>
> >>
> >> Much thanks,
> >> Zein
> >> _______________________________________________
> >> 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
> >
> >
> >
> > --
> > | Aashish Chaudhary
> > | R&D Engineer
> > | Kitware Inc.
> > | www.kitware.com
>
> This little section is actually quite confusing:
>
> http://www.vtk.org/Wiki/Smart_Pointers#Returning_a_Smart_Pointer
>
> If the following is correct, I will update the page to only show this
> and simply say "just do it this way":
>
> ----------
> vtkSmartPointer<vtkPolyData> MyFunction()
> {
>  vtkSmartPointer<vtkPolyData> myObject =
> vtkSmartPointer<vtkPolyData>::New();
>  return myObject;
> }
>
> And call the function using:
> vtkSmartPointer<vtkPolyData> MyPolydata = MyFunction();
> ---------
>
> Can someone verify this is how it should be done?
>
> Thanks,
>
> David
> _______________________________________________
> 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
>



-- 
| Aashish Chaudhary
| R&D Engineer
| Kitware Inc.
| www.kitware.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100104/2242cdb0/attachment.htm>


More information about the vtkusers mailing list