[Insight-developers] Code to dis-allow instantiation of itk::Image
Bill Lorensen
bill.lorensen at gmail.com
Fri Sep 5 13:37:58 EDT 2008
I suggest we wait until everyone is back from their trips.
On Fri, Sep 5, 2008 at 12:04 PM, Stephen Aylward
<Stephen.Aylward at kitware.com> wrote:
> Great idea!!!
>
> s
>
> On Fri, Sep 5, 2008 at 11:58 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>>
>> Hi Hans,
>>
>> Thanks a lot for looking at this problem and taking the initiative in
>> a way forward.
>>
>>
>>
>> I have no objection to committing the changes.
>>
>>
>> However, you may want to warn the lists regarding the fact that the
>> Dashboard will be red for the following days.
>>
>> I'll be out at MICCAI tomorrow, but will be able to help clean up the
>> Dashboard starting on Monday. If we all chip in a bit, it shouldn't
>> take too long to take the Dashboard back to green.
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>>
>> -------------------
>> Hans Johnson wrote:
>>>
>>> Luis,
>>>
>>> As discussed on the TCON over the past few weeks, there is a need to be
>>> able to disallow instantiation of itk::Image in order to identify places in
>>> the code that will implicitly downcast the itkOrientedImage to an itkImage.
>>> This will be particularly important for three cases:
>>>
>>> 1. Identify places in the current library where filters are creating
>>> internal temporary images that downcast itk::OrientedImage image
>>> to itk::Image
>>> 2. Identify problems that will occur when itk::Image takes on the
>>> behavior that is currently relegated to itk::OrientedImage (i.e.
>>> In ITK 4.0) and itkOriented image becomes an empty shell
>>> 3. Allow a safe path for application developers transition to
>>> itk::OrientedImage by allowing the compiler to verify that all
>>> instances of itk::Image have been properly converted to
>>> itk::OrientedImage
>>>
>>>
>>> Please review the patch at the bottom of this file. I will commit this
>>> patch this afternoon if I do not receive any objections.
>>> =============================================
>>> NOTE: If ITK_DISABLE_UNORIENTED_IMAGE=ON, then the first compiler error
>>> that occurs is:
>>>
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkImage.h:
>>> In static member function 'static itk::SmartPointer<itk::Image<TPixel,
>>> VImageDimension> > itk::Image<TPixel, VImageDimension>::New() [with TPixel =
>>> double, unsigned int VImageDimension = 2u]':
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkBSplineDeformableTransform.txx:64:
>>> instantiated from 'itk::BSplineDeformableTransform<TScalarType,
>>> NDimensions, VSplineOrder>::BSplineDeformableTransform() [with TScalarType =
>>> double, unsigned int NDimensions = 2u, unsigned int VSplineOrder = 2u]'
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkBSplineDeformableTransform.h:122:
>>> instantiated from 'static
>>> itk::SmartPointer<itk::BSplineDeformableTransform<TScalarType, NDimensions,
>>> VSplineOrder> > itk::BSplineDeformableTransform<TScalarType, NDimensions,
>>> VSplineOrder>::New() [with TScalarType = double, unsigned int NDimensions =
>>> 2u, unsigned int VSplineOrder = 2u]'
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkTransformFactory.h:37:
>>> instantiated from 'static void
>>> itk::TransformFactory<T>::RegisterTransform() [with T =
>>> itk::BSplineDeformableTransform<double, 2u, 2u>]'
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkTransformFactoryBase.cxx:67:
>>> instantiated from here
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkImage.h:93:
>>> error: cannot allocate an object of abstract type 'itk::Image<double, 2u>'
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkImage.h:83:
>>> note: because the following virtual functions are pure within
>>> 'itk::Image<double, 2u>':
>>>
>>> /Users/hjohnson/src/brains2/iplFreeware/unpackdir/Insight/Code/Common/itkImage.h:290:
>>> note: void itk::Image<TPixel,
>>> VImageDimension>::RespectsImageOrientationImplicitly() const [with TPixel =
>>> double, unsigned int VImageDimension = 2u]
>>>
>>> =============
>>>
>>> 61 // Initialize coeffient images
>>> 62 for ( unsigned int j = 0; j < SpaceDimension; j++ )
>>> 63 {
>>> ** 64 m_WrappedImage[j] = ImageType::New();
>>> 65 m_WrappedImage[j]->SetRegions( m_GridRegion );
>>>
>>> =============
>>> This does add a new CMAKE variable option, but that option should be
>>> temporary until itk::Image behaves like itk::OrientedImage in ITK v4.0.
>>>
>>> Thanks,
>>> Hans
>>>
>>> --
>>> Hans J. Johnson, Ph.D.
>>> Hans-johnson at uiowa.edu
>>>
>>> 278 GH
>>> The University of Iowa
>>> Iowa City, IA 52241
>>> (319) 353 8587
>>>
>>>
>>>
>>> Index: CMakeLists.txt
>>> ===================================================================
>>> RCS file: /cvsroot/Insight/Insight/CMakeLists.txt,v
>>> retrieving revision 1.311
>>> diff -r1.311 CMakeLists.txt
>>> 215a216,221
>>>>
>>>> # TURN OFF itk::Image as a valid type to ensure that itkOrientedImages
>>>
>>> can be used everywhere
>>>>
>>>> MARK_AS_ADVANCED(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> OPTION(ITK_DISABLE_UNORIENTED_IMAGE "Disallow instantiation of
>>>
>>> itk::Image to determine where itk::OrientedImage is not properly
>>> implemented" OFF)
>>>>
>>>> IF( ITK_DISABLE_UNORIENTED_IMAGE )
>>>> ADD_DEFINITIONS( -DITK_DISABLE_UNORIENTED_IMAGE )
>>>> ENDIF( ITK_DISABLE_UNORIENTED_IMAGE )
>>>
>>> Index: Code/Common/itkImage.h
>>> ===================================================================
>>> RCS file: /cvsroot/Insight/Insight/Code/Common/itkImage.h,v
>>> retrieving revision 1.143
>>> diff -r1.143 itkImage.h
>>> 6c6
>>> < Date: $Date: 2008-02-04 12:34:11 $
>>> ---
>>>>
>>>> Date: $Date: 2008/02/04 12:34:11 $
>>>
>>> 284a285,291
>>>>
>>>> //The following template functions are invalid if ImageOrientation is
>>>
>>> forced to be
>>>>
>>>> //respected and defined as in the OrientedImage case.
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> //This is a pure abstract member function that is only defined in
>>>
>>> itkOrientedImage.
>>>>
>>>> // It is here to force a compiler error when trying to instantiate
>>>
>>> an itkImage.
>>>>
>>>> virtual void RespectsImageOrientationImplicitly(void) const =0;
>>>> #endif
>>>
>>> 293a301,303
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> this->RespectsImageOrientationImplicitly(); //This does nothing,
>>>
>>> and will hopefully be compiled away.
>>>>
>>>> #endif
>>>
>>> 315a326,328
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> this->RespectsImageOrientationImplicitly(); //This does nothing,
>>>
>>> and will hopefully be compiled away.
>>>>
>>>> #endif
>>>
>>> 337a351,353
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> this->RespectsImageOrientationImplicitly(); //This does nothing,
>>>
>>> and will hopefully be compiled away.
>>>>
>>>> #endif
>>>
>>> 353a370,372
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> this->RespectsImageOrientationImplicitly(); //This does nothing,
>>>
>>> and will hopefully be compiled away.
>>>>
>>>> #endif
>>>
>>> 377a397,399
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> this->RespectsImageOrientationImplicitly(); //This does nothing,
>>>
>>> and will hopefully be compiled away.
>>>>
>>>> #endif
>>>
>>> Index: Code/Common/itkOrientedImage.h
>>> ===================================================================
>>> RCS file: /cvsroot/Insight/Insight/Code/Common/itkOrientedImage.h,v
>>> retrieving revision 1.22
>>> diff -r1.22 itkOrientedImage.h
>>> 135a136,140
>>>>
>>>> #if defined(ITK_DISABLE_UNORIENTED_IMAGE)
>>>> //This is a pure abstract member function that is only defined in
>>>
>>> itkOrientedImage.
>>>>
>>>> // It is here to force a compiler error when trying to instantiate
>>>
>>> an itkImage.
>>>>
>>>> virtual void RespectsImageOrientationImplicitly(void) const { return; }
>>>> #endif
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org
>> http://www.itk.org/mailman/listinfo/insight-developers
>>
>
>
>
> --
> Stephen R. Aylward, Ph.D.
> Chief Medical Scientist
> Kitware, Inc. - North Carolina Office
> http://www.kitware.com
> (518) 371-3971 x300
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
>
More information about the Insight-developers
mailing list