[IGSTK-Developers] Accessing ITK image
Julien Jomier
julien.jomier at kitware.com
Fri May 5 18:56:09 EDT 2006
Hi Patrick,
I see your point now (I blame the end of the week and lack of coffee
;)). The modifications sound good to me.
Maybe static_cast<MasterConstSafety>(Luis) has something to say about this.
Have a good weekend,
Julien
Patrick Cheng wrote:
> I don't think there is a need to modify the ImageSpatialObjectToITKImage
> helper class.
>
> The friend declaration is one way thing. Define the helper class as a
> friend of new class is enough(let the helper class access new class's
> protected member and functions). We don't need to declare the new class
> as a friend of the helper class.
>
>
> Julien Jomier wrote:
>> Patrick,
>>
>> What you are proposing looks fine but the "user" will still have to
>> modify the ImageSpatialObjectToITKImage class file to add a friend
>> macro of his class (which is perfectly fine).
>> I don't think declaring the ImageSpatialObjectToITKImage has a friend
>> only in the new class would work.
>>
>> Also, with the current code, you don't even have to add any friend
>> keyword because the function GetITKImage() is public. I think we want
>> to make it at least protected and force the "user" to add the friend
>> macro at some point.
>>
>> Julien
>>
>> Patrick Cheng wrote:
>>> Thanks Julien and Luis,
>>>
>>> I don't think modifying the base class is a good idea. Different
>>> application developer are developing different class using ITK
>>> images, maybe segmentation, or registration. If they all ended up
>>> adding a line or two in the base class, this will look very messy.
>>>
>>> What we need is helper class, maybe called ImageSpatialObjectToITKImage
>>>
>>> This requires the receptor class has defined a ITKImageType, and a
>>> RequestSetITKImage() fuction.
>>>
>>> I think this is a better way than modifying the base class. You only
>>> need to declare this class as a friend in your new registration
>>> class, and call the GetITKImage(igstkImageSpatialObject,
>>> your_new_class) later in your code.
>>>
>>> Let me know what do you guys think of this solution.
>>>
>>> Patrick
>>>
>>>
>>>
>>> class ImageSpatialObjectToITKImage
>>> {
>>> public:
>>>
>>> template < class TImageSpatialObject, class TITKImageReceptor >
>>> static void
>>> GetITKImage( const TImageSpatialObject * imageSO,
>>> TITKImageReceptor * receptor )
>>> {
>>> //We need to setup the observer to catch the event here
>>> igstkObserverConstObjectMacro( ITKImage,
>>> TImageSpatialObject::ITKImageModifiedEvent,
>>> TITKImageReceptor::ITKImageType)
>>>
>>> ITKImageObserver::Pointer itkImageObserver = TKImageObserver::New();
>>>
>>> imageSO->AddObserver( ImageSOType::ITKImageModifiedEvent(),
>>> itkImageObserver);
>>>
>>> imageSO->RequestGetITKImage(); //this will trigger an event
>>>
>>> if( itkImageObserver->GotITKImage() )
>>> {
>>> receptor->RequestSetITKImage( itkImageObserver->GetITKImage() );
>>> }
>>> // some error handling code
>>>
>>> };
>>>
>>> Julien Jomier wrote:
>>>> I don't think adding a private shared class will improve the current
>>>> design. The current implementation should be ok.
>>>>
>>>> As Luis is saying if a user is implementing new classes in IGSTK
>>>> then he should be considered as a developer and therefore adding one
>>>> (or two) lines in the base classes is fine.
>>>>
>>>> Julien
>>>>
>>>> Luis Ibanez wrote:
>>>>>
>>>>> Hi Patrick,
>>>>>
>>>>> The solution is already illustrated in the interface between the
>>>>> ImageSpatialObjectRepresentationClass and the ImageSpatialObject.
>>>>>
>>>>> A private friend class can act as an intermediary to make possible
>>>>> to pass the itkImage from the ImageSpatialObject to the Registration
>>>>> class, without having to expose the itk Image in the public API
>>>>> of the ImageSpatialObject.
>>>>>
>>>>> Note that when you refer to a "user" that is writing her/his own
>>>>> registration class, this is actually "extending IGSTK" and therefore
>>>>> the new code should be subject to the same software development
>>>>> process
>>>>> as the rest of IGSTK. Exposing ITK or VTK classes in the public API
>>>>> will sacrifice all the safety that has been the concern of IGSTK so
>>>>> far.
>>>>>
>>>>>
>>>>> Please let me know if you find any difficulty in setting this same
>>>>> infrastructure for the registration class, I will be happy to help
>>>>> you with the code.
>>>>>
>>>>>
>>>>> Thanks
>>>>>
>>>>>
>>>>> Luis
>>>>>
>>>>>
>>>>>
>>>>> ======================
>>>>> Patrick Cheng wrote:
>>>>>> Hi everyone,
>>>>>>
>>>>>> For the new demo application, the registration class need to get
>>>>>> access to the ITK image, so that it can segment out the fiducial
>>>>>> points. Other ImageToImage registration also requires access to
>>>>>> the ITK image too.
>>>>>>
>>>>>> This posts a problem to the igstkImageSpatialObject class, if the
>>>>>> user need to use their own registration class, they need to modify
>>>>>> the igstkImageSpatialObject class and declare their registration
>>>>>> class to be a friend class.
>>>>>>
>>>>>> Is there a better solution to this problem?
>>>>>>
>>>>>> Patrick
>>>>>> _______________________________________________
>>>>>> IGSTK-Developers mailing list
>>>>>> IGSTK-Developers at public.kitware.com
>>>>>> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> IGSTK-Developers mailing list
>>>>> IGSTK-Developers at public.kitware.com
>>>>> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>>
>
More information about the IGSTK-Developers
mailing list