[Insight-users] Smart pointers as function argument

Luis Ibanez luis.ibanez at kitware.com
Sun Nov 22 15:47:39 EST 2009


Hi David

Instead of doing:

> FilterApi f = new FilterApi();
> InputType::Pointer filtered = InputType::New();
> f->filtering(reader->getOutput(), filtered, arg1, arg2);


You could do:

 FilterApi f = new FilterApi();
 InputType::Pointer filtered = f->filtering(reader->getOutput(), arg1, arg2);


Where the "filtering" method could be something like:

InputType::Pointer   filtering( const InputType * input,   Arg1Type, Arg2Type )
{
....

     filter->SetInput( input );
     filter->Update();
     InputType::Pointer output = filter->GetOutput();
     output->DisconnectPipeline();
     return output;
}


also, as you pointed out, you could pass the SmartPointer to the output by
reference, and to be safe, disconnect the output image from the filter pipeline.
Something like:

void filtering( const InputType * input,  InputType::Pointer & output,
 Arg1Type, Arg2Type )
{
....

     filter->SetInput( input );
     filter->Update();
     output = filter->GetOutput();
     output->DisconnectPipeline();
...
}


   Regards,


         Luis


-----------------------------------------------------------------------------
On Tue, Nov 17, 2009 at 6:55 AM, David Pastor <david.pastor at die.upm.es> wrote:
> Hi,
>
> It worked passing the argument by reference of course...
>
> int function(int, &out){
>
> }
>
> Anyway, as there is no a block in the pipeline image representing the image
> itself, it could exist some sort of a checkpoint or node where you can grab
> the image from not bound to any filter in particular. I don't know it this
> is already possible or it clashes with ITK design.
>
> Cheers
> D. Pastor
>
>
>
>
>
>
> ----- Original Message ----- From: "Richard Beare" <richard.beare at gmail.com>
> To: "David Pastor" <david.pastor at die.upm.es>
> Sent: Tuesday, November 17, 2009 12:30 AM
> Subject: Re: [Insight-users] Smart pointers as function argument
>
>
>> Hi,
>>
>> I find the same issue - the pipeline model just doesn't scale.
>>
>> You need the following code at the end of each function that returns
>> an image pointer - see my readIm function below. The critical part is
>> the Update() call followed by the DisconnectPipeline() call. You can
>> ignore the exception handling for non io functions in most cases.
>>
>> typename TImage::Pointer readIm(std::string filename)
>> {
>>  typedef typename itk::ImageFileReader<TImage> ReaderType;
>>  typename ReaderType::Pointer reader = ReaderType::New();
>>  reader->SetFileName(filename.c_str());
>>  typename TImage::Pointer result = reader->GetOutput();
>>  try
>>   {
>>   result->Update();
>>   }
>>  catch(itk::ExceptionObject &ex)
>>   {
>>   std::cout << ex << std::endl;
>>   std::cout << filename << std::endl;
>>   return 0;
>>   }
>>   result->DisconnectPipeline();
>>   return(result);
>> }
>>
>>
>> On Tue, Nov 17, 2009 at 4:12 AM, David Pastor <david.pastor at die.upm.es>
>> wrote:
>>>
>>> HI,
>>>
>>> I'm trying to have a library with some functions I use to process Images
>>> with ITK.
>>>
>>> What I do is:
>>>
>>> FilterApi f = new FilterApi();
>>> InputType::Pointer filtered = InputType::New();
>>> f->filtering(reader->getOutput(), filtered, arg1, arg2);
>>>
>>> inside of filtering I have some filter and filtered =
>>> filter->GetOutput();
>>>
>>> The function workst, and the filtered image is ok inside the function
>>> range.
>>> But in my main framework, the filtered image is null. In other words, the
>>> data is lost when you get out from the function and it is not persistent
>>> even though i created the pointer in my main.
>>>
>>> I imagine this is something related to SmartPointers. Is there any way to
>>> do
>>> this? it's a bit tiring to write the same blocks of code in each main.
>>>
>>> cheers
>>> david
>>>
>>>
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.html
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list