[Insight-developers] Code to dis-allow instantiation of itk::Image
Stephen Aylward
Stephen.Aylward at Kitware.com
Fri Sep 5 12:04:05 EDT 2008
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
More information about the Insight-developers
mailing list